OpenGL ES:更新统一

时间:2013-06-20 18:25:16

标签: java attributes opengl-es-2.0 shader uniform

所以,有我的顶点和片段着色器:

#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.NullPointerException'

那么我怎样才能每次更改此变量?

1 个答案:

答案 0 :(得分:1)

在每次调用glDrawArrays()之前,必须调用glUniform()来更新“time”。如果导致空指针异常,则可能需要先调用glUseProgram()。

如果要通过“顶点”着色器计算“时间”,则应将其更改为变化而不是均匀。