1

我希望在 Cocoa 上制作一个自定义的 NSOpenGL 视图。但是,我在使用 VAO 时遇到了麻烦。特别是,在运行时,这个虚拟测试视图:

/// OpenGLTestView.h:
@interface OpenGLTestView : NSOpenGLView

- (void)prepareOpenGL;

@end

/// OpenGLTestView.m:
#import <OpenGL/gl3.h>

@implementation OpenGLTestView

- (void)prepareOpenGL {
    GLenum error;
    GLuint vertex_array;
    glGenVertexArrays(1, &vertex_array);
    error = glGetError();
    switch (error) {
        case GL_NO_ERROR:
            printf("GL_NO_ERROR\n");
            break;
        case GL_INVALID_ENUM:
            printf("GL_INVALID_ENUM\n");
            break;
        case GL_INVALID_VALUE:
            printf("GL_INVALID_VALUE\n");
            break;
        case GL_INVALID_OPERATION:
            printf("GL_INVALID_OPERATION\n");
            break;
        case GL_INVALID_FRAMEBUFFER_OPERATION:
            printf("GL_INVALID_FRAMEBUFFER_OPERATION\n");
            break;
        case GL_OUT_OF_MEMORY:
            printf("GL_OUT_OF_MEMORY\n");
            break;
        default:
            printf("Unknown error\n");
            break;
    }
}

@end

在输出上打印:

GL_INVALID_OPERATION

Apple 对可可的 VAO 有什么特别之处吗?还是我缺少一些初始化步骤?

4

1 回答 1

2

问题是我没有创建 OpenGL 3.2 上下文(而是在其上调用 3.2 函数)。使用设置为 NSOpenGLProfileVersion3_2Core 的 NSOpenGLPFAOpenGLProfile 属性来创建新的上下文,然后使用新的上下文在 NSOpenGLView 上调用 - (void)setOpenGLContext:(NSOpenGLContext *)context 即可解决问题。

于 2014-01-04T16:36:03.540 回答