【发布时间】:2014-10-01 18:29:46
【问题描述】:
我从着色器获取制服时遇到问题。行:
int u = GL20.glGetUniformLocation(program, uniform);
用于检查由字符串uniform定义的uniform是否在shader中。
这是一个示例检查代码:
System.out.println(GL20.glGetUniformLocation(1, "transformationMatrix")==0);
System.out.println(GL20.glGetUniformLocation(1, "projectionMatrix")==0);
结果:
false
true
奇怪的事情来了:顶点着色器代码如下:
#version 330
layout (location = 0) in vec3 pos;
layout (location = 1) in vec3 tex;
layout (location = 2) in vec3 nor;
layout (location = 3) in vec3 col;
uniform mat4 projectionMatrix;
uniform mat4 transformationMatrix;
out vec3 normal;
void main(){
normal = nor;
gl_Position = projectionMatrix * vec4(pos, 1);
}
我已经测试了重命名统一,删除另一个统一,但唯一的统一 OpenGL 似乎识别的是“projectionMatrix”。
环境: Java 与 lwjgl 带有 mesa 10.4.0 的 linux 中的 OpenGl(也不适用于 Windows)
【问题讨论】: