我在Mac OS X 10.7.5上使用OpenGL 3.2我正在编写使用OpenGL的AfterEffects(AE)SDK插件。我创建自己的渲染上下文,将其设置为当前然后执行OpenGL API调用。重要的是要注意还有其他GL上下文由AE随意创建,但我不使用那些因为它们是GL2.1。现在我的所有插件都运行正常,但新的插件失败了:
glDrawArrays();
在此行上使用EXC_BAD_ACCESS:
movq 432(%rcx), %rdi
我不知道,因为这个非常相同的参数的glDrawArrays()在其他插件上运行正常。我检查了我的上下文在此方法调用之前被设置为当前但是没有帮助。其他GL调用来了之前的glDrawArrays()(如制服,FBO和纹理边界)执行时没有错误。我知道我的问题有太多未知数,但是这个错误的可能原因是什么?
更新
我去了着色器代码,在片段着色器中,我发现注释掉“switch”语句解决了崩溃问题:
switch (typeCom) {
case COMP_S:
///some code
break;
case COMP_L:
///some code
break;
case COMP_D:
///some code
break;
case COMP_N:
default:
return ///some code;
};
案例类型被定义为全局常量整数.typeCom是统一的。这个非常着色的代码在Windows和Linux上运行良好.GLSL 150不支持切换吗?
更新2:
我仍然没有找到为什么会发生这种崩溃,但至少现在我知道它何时发生。当案例值是变量时就会发生。如果这些是明确的数字,则没有问题。所以这样做:
switch (typeCom) {
case 0:
///some code
break;
case 1:
///some code
break;
case 2:
///some code
break;
case 3:
default:
return ///some code;
};
虽然这不是:
switch (typeCom) {
case COMP_S:
///some code
break;
case COMP_L:
///some code
break;
case COMP_D:
///some code
break;
case COMP_N:
default:
return ///some code;
};
不知道它是什么。编译器错误?很高兴收到APPLE GPU驱动程序的评论。