我在 Mac OS X 10.7.5 上使用 OpenGL 3.2 我正在编写使用 OpenGL 的 AfterEffects(AE) SDK 插件。我创建自己的渲染上下文,将其设置为当前然后执行 OpenGL API 调用。重要的是要注意有还有其他由 AE 随意创建的 GL 上下文,但我不使用它们,因为它们是 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 驱动程序老兄的评论会很高兴。