我有一个程序曾经在MAC OS X Lion上工作正常。它使用的是OpenGL 3.2核心配置文件。现在我升级到Maverick后,在上下文设置后立即失败glGenVertexArrays()。正在创建上下文。关于OpenGL 3.2设置,Maverick有什么变化?
我初始化这样的上下文:
static CGLPixelFormatAttribute attributes[4]={
kCGLPFAAccelerated,
kCGLPFAOpenGLProfile,
(CGLPixelFormatAttribute)kCGLOGLPVersion_3_2_Core,
(CGLPixelFormatAttribute)0
};
_errorCode = CGLChoosePixelFormat(attributes,&_pix,&_num);
if(_errorCode > 0){
throw ;
}
_errorCode = CGLCreateContext(_pix, NULL, &_context);
if(_errorCode > 0){
throw;
}
CGLDestroyPixelFormat(_pix);
_errorCode = CGLSetCurrentContext(_context);
if(_errorCode > 0){
throw ;
}
在我进入VAO句柄生成之前,这些都不会引发错误。同时glGetError返回一些垃圾。
更新:
我发现错误是GL_INVALID_FRAMEBUFFER_OPERATION,0x0506。现在它发生在我执行时
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
当没有绑定自定义帧缓冲区时。如果我使用自定义FBO调用draw命令它确实有效。我的上下文创建没有显示。它在屏幕外。可能是因为较新的实现Apple强制显示存在以便访问默认FBO?在Lion上我做了同样的工作。但是,GL版本是4.1。