0

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

#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”

那么我怎样才能每次都改变这个变量呢?

4

1 回答 1

1

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

如果“时间”要由顶点着色器计算,您应该将其更改为可变而不是统一。

于 2013-06-20T20:05:11.427 回答