GLFW opens OpenGL 3.2 context but Freeglut can't - why?

后端 未结 3 1847
一整个雨季
一整个雨季 2021-02-15 13:47

I am working on a Mac, I\'ve got FreeGlut compiled and installed, but I can\'t seem to get the OpenGL 3.2 context with it. However, I can get it without any problem while using

相关标签:
3条回答
  • 2021-02-15 14:17

    Freeglut is an extended implementation of the SGI GLUT Toolkit, and ( with a few exceptions around obsolete hardware ) implements the same functions.

    Unfortunately, this includes a number of features that would break in a strictly CORE/FORWARD COMPATIBLE implementation.

    Typically, if you request a context WITHOUT specifying a version or profile, you will get the best that the combination of driver and GL toolkit can offer, which is normally a compatibility profile, rather than core profile.

    Note that the only thing you lose through using a compatibility profile is the supposed checking for deprecated functions. All new core function should work without issue.

    This problem with freeglut is not restricted to Apple, it also manifests under Linux using some Gallium drivers. It is not clear that there is any short-term intent to rectify this, so if you need to use CORE/FORWARD COMPATIBLE, you should probably switch to GLFW or SDL.

    0 讨论(0)
  • 2021-02-15 14:33

    In 10.8 and 10.7 GL 3.2 is available if you explicitly call for it when setting up the GL context. Apple calls this the "Core Profile" to distinguish from the "Legacy Profile" which is GL 2.1.

    I ran into this issue with Wine on OSX, it does not support OpenGL 3.2. My understanding is that the X11 server (either Apple X11 or XQuartz) currently does not implement the 3.2 support, nor is there a switch to flip somewhere to enable it. It could be for compatibility concerns since 3.2 profile will break some existing GL applications

    This post suggests using GLFW (or maybe Apple's GLUT.framework if there is still such a thing)

    This page explains the GL stack on OSX and confirms the 2.1 issue with GLX.

    0 讨论(0)
  • 2021-02-15 14:36

    You need to include the flag. usually under the Version. It should look something like this:

    glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);
    
    0 讨论(0)
提交回复
热议问题