所以,有我的顶点和片段着色器:
#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'
那么我怎样才能每次更改此变量?
答案 0 :(得分:1)
在每次调用glDrawArrays()之前,必须调用glUniform()来更新“time”。如果导致空指针异常,则可能需要先调用glUseProgram()。
如果要通过“顶点”着色器计算“时间”,则应将其更改为变化而不是均匀。