我正在尝试编写一个像素着色器 - 我想使用 Texture.SampleCmpLevelZero 因为这可用于没有 Texture.Sample 的循环构造。
我已经构建了一个纹理,并且可以使用 Texture.Sample 对其进行精细采样,但是切换到 SampleCmpLevelZero 在前几帧有效,然后变为空白,然后很少但间歇性地正确渲染。
我的场景是静态的(还有纹理数据)——我正在渲染一个四边形并且没有任何类型的相机移动——我可以通过更改 PS 着色器功能中的单行来可靠地重现这一点。
有人见过这个吗?
谢谢
SamplerState sampPointClamp
{
Filter = MIN_MAG_MIP_POINT;
AddressU = Clamp;
AddressV = Clamp;
};
SamplerComparisonState ShadowSampler
{
// sampler state
Filter = MIN_MAG_MIP_POINT;
AddressU = Clamp;
AddressV = Clamp;
// sampler comparison state
ComparisonFunc = LESS;
//ComparisonFilter = COMPARISON_MIN_MAG_MIP_POINT;
};
texture2D tex;
//on the fly full screen quad
PS_IN VS(uint id : SV_VertexID)
{
PS_IN ret;
ret.uv = float2( id & 1, (id & 2) >> 1 );
ret.pos = float4( ret.uv * float2( 2.0f, -2.0f ) + float2( -1.0f, 1.0f), 0.0f, 1.0f );
return ret;
}
float4 PS( PS_IN input ) : SV_Target
{
//return float4(tex.SampleCmpLevelZero(ShadowSampler, input.uv, 0), 0, 0, 1); // Does not work properly
return float4(tex.Sample(sampPointClamp, input.uv).x, 0, 0, 1); // Works fine
}