【问题标题】:OpenGL version on Xcode - glfw vs sfmlXcode 上的 OpenGL 版本 - glfw vs sfml
【发布时间】:2017-09-04 06:41:05
【问题描述】:

我正在使用glfwsfml 在我的Mac 上学习opengl,并在OpenGL 版本上遇到了一些障碍。

当我运行代码时:

printf ("Renderer: %s\n", glGetString (GL_RENDERER));
printf ("OpenGL version supported: %s\n", glGetString (GL_VERSION));
printf("glsl: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION));

glfw

Renderer: Intel(R) Iris(TM) Graphics 6100
OpenGL version supported: 4.1 INTEL-10.22.25
glsl: 4.10

sfml

Renderer: Intel(R) Iris(TM) Graphics 6100
OpenGL version supported: 2.1 INTEL-10.22.25
glsl: 1.20

这是我在xcode 项目上的设置还是默认框架设置?有没有办法可以更改sfml 以使用OpenGL 4.1 以便我也获得glsl 4.1?

glfw 有这个设置:

glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 1);

sfml 有类似的东西吗?

【问题讨论】:

    标签: c++ xcode opengl sfml glfw


    【解决方案1】:

    使用 SFML,您可以使用 sf::ContextSettings 指定 OpenGL 版本。

    sf::ContextSettings settings;
    settings.depthBits = 24;
    settings.stencilBits = 8;
    settings.majorVersion = 4;
    settings.minorVersion = 1;
    settings.attributeFlags = sf::ContextSettings::Default;
    

    然后在创建时将其传递给sf:Window

    sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, settings);
    

    底线是 SFML 需要一个向后兼容的上下文。因为 SFML 在内部依赖于一些遗留的 OpenGL 功能。

    因此,如果您没有将 SFML 用于任何特定于 SFML 的内容。那我建议继续使用 GLFW。

    【讨论】:

    • 通过将settings 放入window 会产生魔力。我使用sfml 作为界面图形,我发现在glfw 中很难处理,至少目前是这样。
    • 您可以将 SFML 与任何 OpenGL 上下文版本一起使用,但 SFML 图形模块的 2.x 版本仅使用固定功能管道(将随着即将到来的 3.0 更改)。所以只要你自己画,你应该没有问题。
    猜你喜欢
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多