我有以下代码:

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上的 table 面上都可以正常运行,但在运行OSX的笔记本电脑上却无法运行。我认为这是笔记本电脑不支持此版本OpenGL的问题,但它最多支持视频卡4.1。

我以为它可能使用的是集成的英特尔GPU,而不是nVidia,但是据我了解,GLFW将强制使用正确的GPU进行渲染。

如果将上下文更改为2.1,则似乎一切正常,但是着色器不兼容。

有任何想法吗?

更新:如果删除了所有glfwWindowHint()调用,则会创建窗口,但着色器不兼容。我假设如果删除了这些,GLFW会自动选择一个上下文,该上下文恰巧与带有version 330 core的着色器不兼容。

最佳答案

问题归结为在GLFW中设置了前向兼容性标志。 This answer导致进行以下调用的答案:
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
这也显示在GLFW FAQ中。

10-08 07:45