2012-07-10 20 views
1

我希望可可做一個自定義的NSOpenGL視圖。但是,我無法使用VAO。特別是,在運行時,這種僞測試觀點:可可OpenGLView與VAOs

/// 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 

難道蘋果做VAOs一些特殊的可可?還是有一些我錯過的初始化步驟?

+0

你試過'glGenVertexArraysAPPLE'(和相關的'glBindVertexArraysAPPLE')嗎?否則,如果你安裝了GLEW或其他東西,我只希望它能起作用。 – beaker 2012-07-12 16:02:56

+0

根據http://stackoverflow.com/questions/8302625/segmentation-fault-at-glgenvertexarrays-1-vao我只需要初始化GLEW。我以爲我不需要,因爲glGenVertexArrays是常規OpenGL規範的一部分。我想我會研究GLEW和glGenVertexArrays之間的關係究竟是什麼。如果你將你所說的話作爲答案發布,我會接受這個答案。謝謝。 – Litherum 2012-07-13 18:26:03

回答

2

問題是我沒有創建一個OpenGL 3.2上下文(但調用了3.2的函數)。使用設置爲NSOpenGLProfileVersion3_2Core的NSOpenGLPFAOpenGLProfile屬性創建新的上下文,然後使用新的上下文在NSOpenGLView上調用 - (void)setOpenGLContext:(NSOpenGLContext *)上下文來解決該問題。