【问题标题】:OpenGL ES: updating uniformOpenGL ES:更新统一
【发布时间】:2013-06-20 18:25:15
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多