Mac OS X上的GLSL版本

时间:2017-10-17 18:44:28

标签: opengl glsl

我正在编写一个适用于Mac OS X上的OpenGL的C ++应用程序。

我尝试过GLFW和Freeglut用于窗口管理。

glfw和freeglut都已安装brew

有些事我不明白。

这是我的FreeGlut C ++代码:

int main(int argc, char* argv[]) 
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitContextVersion (3, 3);
    glutInitContextFlags (GLUT_CORE_PROFILE | GLUT_DEBUG);
    glutInitWindowSize(WIDTH, HEIGHT);
    glutCreateWindow("Test");

    glewExperimental = GL_TRUE;
    GLenum err = glewInit();
    if (GLEW_OK != err) 
    {
        return -1;
    }

    cout < <"GL_SHADING_LANGUAGE_VERSION: "<< glGetString (GL_SHADING_LANGUAGE_VERSION) << endl;
    ...

有输出:

GL_SHADING_LANGUAGE_VERSION: 1.20

这是我用GLFW的C ++代码:

int main(int argc, const char * argv[])
{
    if (!glfwInit())
    {
        return -1;
    }

    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);

    window = glfwCreateWindow(640, 480, "Test", NULL, NULL);
    if (window == NULL) {
        return -1;
    }
    glfwMakeContextCurrent(window);

    glewExperimental = true;
    if (glewInit() != GLEW_OK) {
        return -1;
    }

    std::cout << "GL_SHADING_LANGUAGE_VERSION: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl;

这是输出:

GL_SHADING_LANGUAGE_VERSION: 4.10

我的问题是为什么GLSL版本不一样?

由于

1 个答案:

答案 0 :(得分:1)

过剩初始化是错误的。 GLUT_CORE_PROFILE不是glutInitContextFlags的有效参数。正确的代码应如下所示:

glutInitContextVersion(3, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutInitContextFlags(GLUT_DEBUG);

Source

另请注意,您并未在两个示例中请求相同的配置文件。 GLUT示例要求3.3 Core with Debug,而glfw示例要求3.3 Core具有前向兼容性。