在HLSL中初始化具有未知大小的数组

时间:2011-01-23 23:00:01

标签: c arrays memory initialization hlsl

我有一个小片段着色器,可以对数组中的多个值进行操作,但是数组的大小存储在一个常量中。

数组声明如下:

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中完全初始化一个我不知道的大小的数组?

1 个答案:

答案 0 :(得分:1)

我似乎今天有点白痴。只要您的步幅正确,上面列出的方法就可以正常工作。

原来:

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

不解决整个数组,所以当我还没有分配值时,其中一些后来被访问。