2013-06-20 39 views
0

因此,有我的頂點和片段着色器:的OpenGL ES:更新統一

#version 120 

attribute vec4 a_position; 
varying vec4 pos; 
uniform float time; 

void main() { 
    float t = time; 
    gl_Position = a_position; 
    pos = gl_Position; 
} 

&

#version 120 

#ifdef GL_ES 
    precision mediump float; 
#endif 
varying vec4 pos; 
uniform float time; 

void main() { 
    gl_FragColor = vec4(pos.y/2.0 + 1, time/10.0, 1.0, 1.0); 
}; 

如果我嘗試只編譯後更改統一 '時間',它的工作原理:

shaderDown.setUniformf("time", World.ticks); 

但是,如果我嘗試在'Update()'方法中調用相同的函數,它會給出一個'java.lang.NullPoint erException'

那麼我怎麼能每次都改變這個變量呢?

回答

1

您必須在每次調用glDrawArrays()之前調用glUniform()以更新「time」。如果導致空指針異常,您可能需要先調用glUseProgram()。

如果「時間」是由頂點着色器計算的,則應該將其更改爲變化而不是統一。