16 AlphaTestEffect
Chuck Walbourn редактировал(а) эту страницу 2022-08-14 18:22:36 -07:00
DirectXTK Effects

This is a native Direct3D 12 implementation of the built-in AlphaTestEffect from XNA Game Studio 4 (Microsoft.Xna.Framework.Graphics.AlphaTestEffect) which supports per-pixel alpha testing, vertex color, and fogging.

See also Effects

classDiagram
class EffectFlags{
    <<enumeration>>
    Fog
    VertexColor
}
class IEffect{
    <<Interface>>
    +Apply()
}
class IEffectMatrices{
    <<Interface>>
    +SetWorld()
    +SetView()
    +SetProjection()
    +SetMatrices()
}
class IEffectFog{
    <<Interface>>
    +SetFogStart()
    +SetFogEnd()
    +SetFogColor()
}
class AlphaTestEffect{
    +SetDiffuseColor()
    +SetAlpha()
    +SetColorAndAlpha()
    +SetTexture()
    +SetReferenceAlpha()
}
AlphaTestEffect .. EffectFlags
AlphaTestEffect --|> IEffect
AlphaTestEffect --|> IEffectMatrices
AlphaTestEffect --|> IEffectFog

Header

#include <Effects.h>

Initialization

Construction requires a Direct3D 12 device, optional effect flags, and state description:

std::unique_ptr<AlphaTestEffect> effect;

RenderTargetState rtState(m_deviceResources->GetBackBufferFormat(),
    m_deviceResources->GetDepthBufferFormat());

EffectPipelineStateDescription pd(
    &InputLayout,
    CommonStates::Opaque,
    CommonStates::DepthDefault,
    CommonStates::CullCounterClockwise,
    rtState);

effect = std::make_unique<AlphaTestEffect>(device, EffectFlags::None, pd);

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

The constructor takes one additional optional parameter that controls the test function (see D3D12_COMPARISON_FUNC)

AlphaTestEffect(ID3D12Device* device, int effectFlags,
    const EffectPipelineStateDescription& pipelineDescription,
    D3D12_COMPARISON_FUNC alphaFunction = D3D12_COMPARISON_FUNC_GREATER);

Interfaces

AlphaTestEffect supports IEffect, IEffectMatrices, and IEffectFog. EffectFlags::Fog is required to enable fogging.

Input layout

This effect requires SV_Position and TEXCOORD0. It requires COLOR if per-vertex colors are enabled (EffectFlags::VertexColor).

Properties

  • SetTexture: Associates a texture and sampler descriptor with the effect.

  • SetReferenceAlpha: Sets the alpha reference value for the test.

Remarks

Does not support lighting (EffectFlags::Lighting or EffectsFlags::PerPixelLighting). The EffectFlags::BiasedVertexNormals flag is ignored by this effect.

The EffectFlags::Texture flag is always enabled for this effect, so use or absence of this flag is ignored for this effect.

This effect is primarily used to implement techniques that relied on legacy Direct3D 9 alpha testing render state. This effect is independent of the depth/stencil tests set in D3D12_DEPTH_STENCIL_DESC.DepthFunc and StencilFunc.