Skip to content

DualTextureEffect

Chuck Walbourn edited this page Aug 15, 2022 · 19 revisions
DirectXTK Effects

This is a native Direct3D 11 implementation of the built-in DualTextureEffect from XNA Game Studio 4 (Microsoft.Xna.Framework.Graphics.DualTextureEffect) which supports two layer multi-texturing (for light maps or detail textures), vertex color, and fogging.

Dual texture map

classDiagram
class IEffect{
    <<Interface>>
    +Apply()
    +GetVertexShaderBytecode()
}
class IEffectMatrices{
    <<Interface>>
    +SetWorld()
    +SetView()
    +SetProjection()
    +SetMatrices()
}
class IEffectFog{
    <<Interface>>
    +SetFogEnabled()
    +SetFogStart()
    +SetFogEnd()
    +SetFogColor()
}
class DualTextureEffect{
    +SetDiffuseColor()
    +SetAlpha()
    +SetColorAndAlpha()
    +SetTexture()
    +SetTexture2()
    +SetVertexColorEnabled()
}
DualTextureEffect --|> IEffect
DualTextureEffect --|> IEffectMatrices
DualTextureEffect --|> IEffectFog
Loading

Header

#include <Effects.h>

Initialization

Construction requires a Direct3D 11 device.

std::unique_ptr<DualTextureEffect> effect;
effect = std::make_unique<DualTextureEffect>(device);

For exception safety, it is recommended you make use of the C++ RAII pattern and use a std::unique_ptr or std::shared_ptr

Interfaces

DualTextureEffect supports IEffect, IEffectMatrices, and IEffectFog

Does not support lighting as it is assumed to be 'baked' into one of the two textures.

Input layout

This effect requires SV_Position, TEXCOORD0, and TEXCOORD1. It requires COLOR if per-vertex colors are enabled.

Properties

  • SetDiffuseColor: Sets the diffuse color of the effect. Defaults to white (1,1,1). Alpha channel (.w component) is ignored.

  • SetAlpha: Sets the alpha (transparency) of the effect. Defaults to 1 (fully opaque). This value is also used for binning opaque vs. transparent geometry.

  • SetColorAndAlpha: Sets the diffuse color of the effect and the alpha (transparency).

  • SetVertexColorEnabled: Enables per-vertex color. Defaults to false. Modifying this setting requires recreating associated input layouts, and enabling it requires COLOR.

  • SetTexture: Associates a texture shader resource view with the effect. Can be set to nullptr to remove a reference. This uses the sampler in slot 0. Can optionally include an alpha channel as well.

  • SetTexture2: Associates a texture shader resource view with the effect. Can be set to nullptr to remove a reference. This uses the sampler in slot 1.

Remarks

This effect requires a texture sampler in both slots 0 and 1. GeometricPrimitive and SpriteBatch only set a texture sampler in slot 0 by default, Model sets a sampler in slots 0 and 1.

GeometricPrimitive, Model loaded from VBO or CMO, and SpriteBatch only define a single set of texture coordinates in their vertex buffers so they can't be used with DualTextureEffect.

Diffuse map Light map

Further reading

DualTextureEffect

For Use

  • Universal Windows Platform apps
  • Windows desktop apps
  • Windows 11
  • Windows 10
  • Windows 8.1
  • Xbox One

Architecture

  • x86
  • x64
  • ARM64

For Development

  • Visual Studio 2022
  • Visual Studio 2019 (16.11)
  • clang/LLVM v12 - v18
  • MinGW 12.2, 13.2
  • CMake 3.20

Related Projects

DirectX Tool Kit for DirectX 12

DirectXMesh

DirectXTex

DirectXMath

Win2D

Tools

Test Suite

Model Viewer

Content Exporter

DxCapsViewer

Clone this wiki locally