【问题标题】:Unable to use openGL 3.2+ on OSX (pyopenGL)无法在 OSX (pyopenGL) 上使用 openGL 3.2+
【发布时间】:2018-03-26 00:11:58
【问题描述】:

该系统在使用 openGL 2.1 的 pygame、glut 和 glfw 上运行良好,但是一旦我尝试强制使用 openGL 3.2,openGL 立即失败。这是我的 glfw 实现,我也有一个类似风格的 GLUT 程序,它失败并出现相同的错误。

 class GlfwDisplayController(object):
    def __init__(self,resolution):
        glfw.init()
        self._resolution = resolution
        w,h = self._resolution
        glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 3)
        glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 2)
        glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE)
        glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE);
        self._window = glfw.create_window(w,h,"GLFW openGL render",None,None)
        glfw.make_context_current(self._window)

    def kill(self):
        glfw.terminate()

    def display(self):
        glfw.swap_buffers(self._window)
        glfw.poll_events()

if __name__ == "__main__":
    from OpenGL.GL import *
    import glfw
    testContext = GlfwDisplayController( (500,500) )
    #testing to make sure the context was created
    glMatrixMode(GL_MODELVIEW)

这是错误输出。如果我注释掉所有 glfw.window_hint() 调用,这适用于 openGL 2.1

Traceback (most recent call last):


 File "src/rendering/Display_controller.py", line 134, in <module>
    glMatrixMode(GL_MODELVIEW)
      File "/usr/local/lib/python2.7/site-packages/OpenGL/platform/baseplatform.py", line 402, in __call__
        return self( *args, **named )
      File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src/errorchecker.c:1218)
    OpenGL.error.GLError: GLError(
        err = 1282,
        description = 'invalid operation',
        baseOperation = glMatrixMode,
        cArguments = (GL_MODELVIEW,)
    )

据我所知,OSX 已全面更新,包括图形驱动程序。在系统中访问 openGL 3.2+ 时我需要做些什么特别的事情吗?我完全厌倦了使用 glsl 1.2 :(

glxinfo 输出:

$ glxinfo | grep openGL

OpenGL vendor string: Intel Inc.
OpenGL renderer string: Intel(R) Iris(TM) Graphics 6100
OpenGL version string: 2.1 INTEL-10.25.17
OpenGL shading language version string: 1.20
OpenGL extensions:

【问题讨论】:

    标签: python macos opengl pyopengl


    【解决方案1】:

    我认为您正在通过 glfw.OPENGL_CORE_PROFILE 创建核心配置文件。 将此更改为 glfw.OPENGL_COMPATIBILITY_PROFILE (请参阅确切标志)。您正在通过告诉驱动程序我不会在我的程序中使用任何固定功能特性来创建核心配置文件。但是显然有对 glMatrixMode(GL_MODELVIEW) 的调用,这不在现代 OpenGL 中。

    【讨论】:

    • 差不多就是这个!我建议看看here。确切的标志是OPENGL_COMPAT_PROFILE。此外,如果您要混合使用 glMatrixMode(GL_MODELVIEW) 之类的已弃用功能,那么强制使用 glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE) 效果不大,因为使用 GL_TRUE 会删除 glMatrixMode 之类的功能...
    • 我实际上不知道 glMatrixMode 不在现代 openGL 中? (我是 GL noobie),我如何指定要在现代中修改哪个矩阵?
    • 您只需将所有矩阵传递给着色器。我认为遵循一些关于现代 opengl 的好教程。
    • 我会试试的!但是,现在我将标志更改为 GL_COMPAT_PROFILE 并收到:glfw.GLFWError: (65543) NSGL: The targeted version of OS X only supports core profile contexts for OpenGL 3.2 and above 有什么办法吗?
    • 尝试将版本更改为 3.2 以下
    【解决方案2】:

    与 PC 配置文件相比,OSX OpenGL 配置文件受到严格限制。大多数 PC 支持现代 OpenGL 中的兼容性配置文件,这意味着您可以将可编程管道与使用旧功能(如 glMatrixMode)的代码混合和匹配。

    您要么需要重新编写软件以仅使用核心配置文件代码(现代 OpenGL),要么需要重新编写软件以使用旧版 OpenGL,并且 GL 上下文的创建需要与代码匹配。现在,您正在创建一个核心配置文件上下文并使用旧版 OpenGL 中的禁用功能。

    #testing to make sure the context was created
    glMatrixMode(GL_MODELVIEW)
    

    这是用于测试上下文创建的错误代码,因为它与旧管道相关联。尝试类似

    glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    

    这适用于核心配置文件或旧配置文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多