【发布时间】:2025-11-22 19:10:02
【问题描述】:
我正在尝试编写像素着色器 - 我想使用 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
}
【问题讨论】: