我有以下代码:
glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// Open window and create OpenGL context
GLFWwindow * window;
window = glfwCreateWindow(1024, 768, "OpenGL Testing", NULL, NULL);
if(window == NULL)
{
fprintf(stderr, "Failed to open GLFW Window.\n");
glfwTerminate();
return -1;
}
它在我的桌面上在Ubuntu和Windows上运行良好,但在运行OSX的笔记本电脑上失败了。我认为笔记本电脑不支持这个版本的OpenGL是一个问题,但它支持最高4.1的视频卡。
我认为可能是使用集成的intel GPU而不是nVidia,但正如我所看到的那样,GLFW会强制使用正确的GPU进行渲染。
如果我将上下文更改为2.1,一切似乎都有效,但是着色器不兼容。
有什么想法吗?
更新:如果删除了所有glfwWindowHint()
次调用,则会创建窗口,但着色器不兼容。我假设如果这些被删除,GLFW会自动选择一个上下文,它恰好与version 330 core
的着色器不兼容。
答案 0 :(得分:11)
问题在于在GLFW中设置向前兼容性标志。 This answer导致了以下呼叫的答案:
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
这也显示在GLFW FAQ。
中