从着色器返回时使用常量缓冲区数据作为索引

时间:2015-03-27 21:10:20

标签: c++ directx hlsl pixel-shader

所以我有一个像素混合使用混合贴图混合不同的纹理,但我试图让混合成为一个选项。所以我的解决方案是我计算3个不同的float3,它们在一个数组中(0是没有混合,1是两个纹理之间的混合,2是三个纹理之间的混合),然后我想我可以使用来自常量缓冲区的值确定应该大致使用哪一个。

cbuffer VSConstants : register(b13)
{
    float4 i;
}


int index = i[0];
return float4(finalized[index], 1.0f);

但结果是D3DCompileFromFile返回E_FAIL,然后CreatePixelShader因访问冲突而崩溃。

我猜测编译器不喜欢我使用索引作为“索引”casuse如果我将它设置为像1这样的手动值它完全正常。我能想到绕过它的另一种方法是使用if if来检查我[0]是什么,但是从我们学到的东西,如果在优化视图中的着色器中不是一件好事(看看我会怎样)如果情况变得更糟,需要多个)。那么有谁知道如何解决问题,或者另外有另一种解决方案呢?

0 个答案:

没有答案