我有一段HLSL代码看起来是这样的:

float4 GetIndirection(float2 TexCoord)
{
    float4 indirection = tex2D(IndirectionSampler, TexCoord);

    for (half mip = indirection.b * 255; mip > 1 && indirection.a < 128; mip--)
    {
        indirection = tex2Dlod(IndirectionSampler, float4(TexCoord, 0, mip));
    }
    return indirection;
}

我得到的结果与仅环执行一次是一致的。我查了着色器在PIX和事情变得更怪异,黄色箭头指示的代码位置到达环路,经过这一次,跳回到起点,在这一点上的黄色箭头不会再移动,但光标移动通过代码并返回结果(在PIX中的错误,或我只是用它错误?)

我怀疑这可能是做纹理的问题得到读取移动由编译器外循环,但是我想,既然我是手动设置LOD未与tex2Dlod发生:/

所以:

1)什么问题?

2)任何建议的解决方案?

有帮助吗?

解决方案

问题得到解决,这是一个简单的编码错误,我需要增加mip级别在每次迭代,不减少它。

float4 GetIndirection(float2 TexCoord)
{
    float4 indirection = tex2D(IndirectionSampler, TexCoord);

    for (half mip = indirection.b * 255; mip > 1 && indirection.a < 128; mip++)
    {
        indirection = tex2Dlod(IndirectionSampler, float4(TexCoord, 0, mip));
    }
    return indirection;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top