我有以下代码:
void error_callback(int error, const char* description)
{
fputs(description, stderr);
}
int main( void )
{
// Initialise GLFW
if( !glfwInit() )
{
fprintf( stderr, "Failed to initialize GLFW\n" );
return -1;
}
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// Open a window and create its OpenGL context
glfwSetErrorCallback(error_callback);
window = glfwCreateWindow( 1024, 768, "Tutorial 16 - Shadows", NULL, NULL);
if( window == NULL ){
//fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n" );
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// Initialize GLEW
GLenum err;
glewExperimental = GL_TRUE; // Needed for core profile
if ((err = glewInit()) != GLEW_OK) {
std::cout << glewGetErrorString(err) << std::endl;
return -1;
}
...
}
问题是我收到以下消息:https://github.com/glfw/glfw/blob/master/src/nsgl_context.m#L101
事实上,如果没有设置前向兼容性标志(在Mac OS X中),GLFW将不会给我一个OpenGL 3+上下文。
为什么?有没有办法在没有前向兼容性的情况下在Mac OS X 10.9中获得OpenGL 3+上下文?它是OS X的OpenGL实现的限制还是GLFW的问题?
答案 0 :(得分:3)
这实际上是正确的行为,如OpenGL Programming Guide for Mac中所定义。
Mac OS X根本不支持OpenGL 3.x / 4.x的兼容性配置文件,因此您必须请求核心(或向前兼容)上下文。这意味着在Mac上对OpenGL 3.x / 4.x进行编程时,您将无法使用任何已弃用的函数。
在Mac OS X上请求3.x / 4.x上下文时,GLFW issue tracker中的功能请求可能需要隐式设置核心配置文件标记。