0

我在 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 驱动程序老兄的评论会很高兴。

4

0 回答 0