我有一个小片段着色器,它对数组中的许多值进行操作,但是数组的大小存储在一个常量中。
数组声明如下:

float4 colors[(blurRadius*2+1)*(blurRadius*2+1)];

然后我继续使用for循环给它们赋值
for(int i = -blurRadius; i<= blurRadius; i++)
{
    for(int j = -blurRadius; j<=blurRadius;j++)
    {
        colors[j + blurRadius + ((i+blurRadius)*blurRadius)]=float4(0,0,0,0);
    }
}

但是,运行时,代码返回时出现以下编译器错误:
error X4000: variable 'colors' used without having been completely initialized

如何完全初始化在HLSL中不知道大小的数组?

最佳答案

今天我好像有点傻。只要你的步幅正确,上面列出的方法就可以很好地工作。
结果是:

j + blurRadius + ((i+blurRadius)*blurRadius)

不处理整个数组,因此稍后在我尚未分配值时访问了其中一些数组。

关于c - 在HLSL中初始化大小未知的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4777143/

10-10 18:21