2013-03-07 109 views
3

我使用THREE.js和WebGL着色器。我想在片段着色器中声明浮点数的数组。该GLSL常数int数组的定义如下:WebGL着色器中的const float数组

#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的,他们都没有工作。错误信息:

ERROR: 0:44: 'kernel' : arrays may not be declared constant since they cannot be initialized ERROR: 0:44: '=' : syntax error

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

回答

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; 
1

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

+0

我不想将它们传递到着色器,因为该值始终不变。 – Ovilia 2013-03-07 05:10:32

+0

一个小秘密:“常量”值始终作为制服传递给GPU – bjorke 2013-03-07 05:12:19

+0

您确定WebGL中没有常量变量吗? – Ovilia 2013-03-07 05:17:22