2013-03-07 108 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