2011-08-16 59 views
1

我目前正在玩glsl。爲此,我需要將一個數組從opengl代碼傳遞給gsls,然後返回從數組中計算出一種新的顏色。但不知何故,這對我不起作用。而不是獲得整個數組,我總是堅持只有第一個條目。 你能幫我說我做錯了什麼嗎?glsl pyOpenGL數組傳遞

import numpy as np 
\\... 
array = np.array([1.2,2.5,3.8,4.3,5.6, #....]) 
location = glGetUniformLocation(program,"arrayInShader") 
glUniform1fv(location,1,array) 

,並在着色器:

uniform float arrayInShader[5]; 
varying vec3 color; 
void main() 
{ 
    color.r=arrayInShader[0]+arrayInShader[1]; 
    color.g=arrayInShader[2]; 
    color.b=arrayInShader[3]+arrayInShader[4]; 
} 

非常感謝你們!

回答

4

glUniform*v的第二個參數是計數。要上傳的元素數量。你說你只加載1個float到數組中,所以OpenGL只加載一個float到數組中。

+0

據我瞭解count,它指定了多少個數組/矢量同時傳遞給着色器,不是嗎? – Donny

+0

我試過了,實際上它的工作原理。 那麼我對那個愚蠢的問題感到抱歉,但我確信我讀到這是許多人所犯的一個重大錯誤。所以我從字面上從來沒有試圖改變這一點! – Donny

+1

@Donny你對伯爵有一定的把握。它說明你上傳了多少基本元素。在這種情況下,這些元素是單浮體,你想要5個。如果你會使用glUniform4fv和vec4制服,那麼你會上傳20個浮點數,計數參數爲5。 –