MacOS X上的所有统一位置均为“-1”

时间:2013-09-08 09:09:32

标签: macos opengl glsl after-effects

我遇到了非常奇怪的错误。我正在将一些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调试器中看到该字符串的第一个字符。

1 个答案:

答案 0 :(得分:0)

首先感谢@umlum的调试帮助。我设法解决了这个问题。它与多个OpenGL上下文有关。我的程序是Adobe AfterEffect(AE)插件。在运行时运行自己的上下文。在我的代码中每次渲染OpenGL时我都会启用我的上下文(MaxOS X):

   _context = CGLGetCurrentContext() ;
    CGLSetCurrentContext(_context);

调用第一行似乎是一个严重的错误!当我尝试访问(据称是我的)当前上下文时,会发生什么事情,它已经不是我的上下文了,而是程序中的AE上下文之一独立管理。 _context = CGLGetCurrentContext() - 我评论了这一行,它现在似乎正在起作用。 我通过使用

来解决这个问题
glGetActiveUniform()

运行它我发现我的着色器程序包含它实际上没有的统一名称。所以很明显我的程序的句柄可能引用了来自不同上下文的程序。