调用glDrawArrays时EXC_BAD_ACCESS

时间:2013-09-10 12:28:39

标签: c++ macos opengl

我在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驱动程序的评论。

0 个答案:

没有答案