我遇到了非常奇怪的错误。我正在将一些 OpenGL 代码库移植到 MacOS X 10.7.5 OpenGL 代码适用于 GL3.2 版本。原始版本(在 Windows/Linux 上)工作正常。GLSL 或 OpenGL 端没有错误。但是在 Mac 上,当尝试访问制服时,所有位置都是“-1”。将整个代码放在这里是有问题的,因为它被包装到框架中(我也确信 100% 它在测试时是正确编写的很大程度上在其他平台上),但这里是一些 GLSL 代码:
#version 150 core
uniform sampler2D tex;
uniform vec2 dir;
uniform float cont;
noperspective in vec2 uv;
out vec4 colorOut;
void main(){
...
着色器正在使用所有制服,因此 GLSLcompiler 不太可能优化它们。
更新:
好的,我在确定问题方面取得了一些进展。不知何故,我传递给检索统一位置的方法的字符串似乎被截断了。这是测试:
明确调用:
GLuint loc1 = glGetUniformLocation(shaderEmboss->getHandle(), "dir");
返回位置好吗。
但是,如果我将位置名称作为参数 "const GLchar* name" 传递,我在 XCode 调试器中只能看到字符串的第一个字符。