无法使用 GLFW 设置 GL 标志

Can't set GL flags with GLFW

本文关键字:设置 GL 标志 GLFW      更新时间:2023-10-16

尝试设置以下一个或多个OpenGL标志:

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

使glfwOpenWindow失效。为什么会这样呢?

[编辑]它似乎工作与MAJOR=3和MINOR=2,但笔记本电脑运行在(MacBook Retina Mid2012)上的代码可以运行到OpenGL4.1 (Intel HD 4000有OpenGL 4.0, Nvidia GT 650M有4.1)。(/编辑)

同样,虽然可能不相关,但glfwGetGLVersion对所有三个参数都返回0

完整示例代码如下:

int main(int argc, char * argv[])
{
    if(!glfwInit()) {
        return EXIT_FAILURE;
    }
    glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
    //glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
    //glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
    //glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    //glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    {
        int *major = new int, *minor = new int, *rev = new int;
        glfwGetGLVersion(major, minor, rev);
        std::cout << *major << " " << *minor << " " << *rev << std::endl;
        delete major;
        delete minor;
        delete rev;
    }
    if(!glfwOpenWindow(512,512,
                       8,8,8,
                       8,24,8,
                       GLFW_WINDOW)) {
        return EXIT_FAILURE;
            // APPLICATION EXITS HERE IF ONE OF THE FLAGS ARE SET.
    }
    while (glfwGetWindowParam(GLFW_OPENED)) {   
        glClear(GL_COLOR_BUFFER_BIT);
        glfwSwapBuffers();
    }
    glfwTerminate();
    return 0;
}

如果是MacBook,你可能运行的是OSX系统。虽然你的显卡有能力支持opengl4。x, OSX只支持OpenGL 3.2.