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 に答える