2013-06-03 15 views
1

我需要發送一組數據給像着色器。如何在GLSL中使用指針

//Application OpenGL 

uniform vec3 *variable; 
variable = (uniform vec3 *)malloc(80 * sizeof(uniform vec3)); 

//or  
uniform vec3 variable[80]; 

我需要發送數據,如索引和許多其他數據。

+1

首先,您使用的是什麼GL/GLSL版本?也許你正在尋找Uniform Buffer Objects?你能用這個紋理嗎?也許還包括一個更具體的例子,說明你想在這裏實現什麼? – Grimmy

+0

我的gl/glsl版本是2.0。我嘗試發送皮膚動畫索引。謝謝 –

+1

更新實際問題幷包含您當前使用的GLSL #version指令。 – Grimmy

回答

3

後一種情況是正確的。 GLSL建立在儘可能簡單直接的執行之上。你不能在着色器中分配內存,迭代代價昂貴。寫得很好的GLSL或HLSL着色器會接收一組固定的數據,並輸出一組固定的數據。這使得並行執行速度非常快。這是我的骨骼頂點着色器。

#version 110 

uniform mat4 transform[ 32 ]; 

in int boneID; 

void main() 
{ 

    gl_FrontColor = gl_Color; 
    gl_Position = transform[ boneID ] * gl_Vertex; 

} 

在C/++側,呼籲glUniformMatrix4fv時,它指向幾個矩陣陣列,並告訴它有多少,它會帶給他們通過到GLSL作爲單獨的值。

請注意我的代碼是建立在舊版本的GLSL上的,並且使用了許多現在不推薦使用的元素,例如gl_Vertex。

+0

感謝您糾正格式,@Hasturkun,仍然越來越與此握手! – jameswilddev

+0

樂意幫忙。 btw,您可以在編輯器中選擇文本,然後按CTRL + K(或編輯器工具欄中的大括號按鈕)以便於格式化。 – Hasturkun

+0

很高興知道,謝謝! – jameswilddev