3

我将 THREE.js 与 WebGL 着色器一起使用。我想在片段着色器中声明一个浮点数数组。GLSL 常量浮点数组的定义如下:

#define KERNEL_LENGTH 9
const float kernel[KERNEL_LENGTH] = {
    1.0/16.0, 2.0/16.0, 1.0/16.0,
    2.0/16.0, 4.0/16.0, 2.0/16.0,
    1.0/16.0, 2.0/16.0, 1.0/16.0
};

我也尝试过:

#define KERNEL_LENGTH 9
const float kernel[KERNEL_LENGTH] = float[KERNEL_LENGTH](
    1.0/16.0, 2.0/16.0, 1.0/16.0,
    2.0/16.0, 4.0/16.0, 2.0/16.0,
    1.0/16.0, 2.0/16.0, 1.0/16.0
);

但是对于 WebGL,它们都不起作用。错误信息:

错误:0:44:“内核”:数组可能无法声明为常量,因为它们无法初始化错误:0:44:“=”:语法错误

那么我应该如何定义一个 const float 数组呢?

4

2 回答 2

1

将值作为制服传递,而不是尝试做它告诉你不能做的事情:将数组初始化为常量。

于 2013-03-07T05:09:13.420 回答
1

随便逛逛:

float kernel[KERNEL_LENGTH];
kernel[0] = kernel[4] = kernel[20] = kernel[24] = 1.0/273.0;
kernel[1] = kernel[3] = kernel[5] = kernel[9] = kernel[15] = kernel[19] 
    = kernel[21] = kernel[23] = 4.0/273.0;
kernel[2] = kernel[10] = kernel[14] = kernel[22] = 7.0/273.0;
kernel[6] = kernel[8] = kernel[16] = kernel[18] = 16.0/273.0;
kernel[7] = kernel[11] = kernel[13] = kernel[17] = 26.0/273.0;
kernel[12] = 41.0/273.0;
于 2013-03-12T06:31:17.427 回答