无法在OSX上使用openGL 3.2+(pyopenGL)

时间:2017-10-13 19:42:23

标签: python macos opengl pyopengl

这个系统使用openGL 2.1可以正常使用pygame,glut和glfw,但是当我尝试强制打开openGL 3.2时,openGL会立即失败。这是我的glfw实现,我也有类似sytle的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:

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

您需要重新编写软件以仅使用Core配置文件代码(现代OpenGL),或者需要重新编写它以使用旧版OpenGL,并且创建GL上下文需要匹配代码。现在,您正在创建Core配置文件上下文并使用旧版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);

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

相关问题