关于GL 3.2下GLFW行为的问题

时间:2012-06-02 13:07:50

标签: opengl glfw

this tutorial开始学习opengl后,我有以下源代码:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glfw.h>
#include <glm/glm.hpp>

using namespace glm;

int
main(void){
    if(!glfwInit())
    {
        fprintf( stderr, "Failed to initialize GLFW\n" );
        return -1;
    }

    glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); // 4x antialiasing
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); // We want OpenGL 3.1
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 1);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //We don't want the old OpenGL

    // Open a window and create its OpenGL context
    if(!glfwOpenWindow(1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW))
    {
        int a = glfwOpenWindow(1024, 768, 0,0,0,0, 32,0, GLFW_WINDOW);
          fprintf( stderr, "Failed to open GLFW window\n" );
          glfwTerminate();
          return 1;
    }

}

这总是会产生“无法打开GLFW窗口”错误。我下载了源代码,看看是否会编译并将差异缩小到GLFW_OPENGL_VERSION_MINOR变量。

如果minor设置为2或3,程序将编译并运行正常但如果设置为1则不会。这是GLFW中的错误还是有一些有趣的事情发生在这里?

glfw源码中window.c的第487行说:

if( wndconfig.glProfile &&
    ( wndconfig.glMajor < 3 || ( wndconfig.glMajor == 3 && wndconfig.glMinor < 2 ) ) )
{
    // Context profiles are only defined for OpenGL version 3.2 and above
    return GL_FALSE;
}

如果这是原因(它看起来像是这样)究竟是什么意思,为什么它会阻止窗口被创建?

1 个答案:

答案 0 :(得分:6)

请阅读来源中的评论消息。它说:

  

仅为OpenGL版本3.2及更高版本

定义了上下文配置文件

OpenGL 3.1中core profile 的概念不存在。因此,当您要求3.1版时,无法执行此操作:

  

glfwOpenWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);

你要求的东西根本不存在,所以GLFW不允许你这样做。

如果您需要核心资料,请询问GL 3.2或以上版本。如果您要求较低的GL版本,请停止询问核心配置文件。