Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法在OSX(pyopenGL)上使用openGL 3.2+_Python_Macos_Opengl_Pyopengl - Fatal编程技术网

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

Python 无法在OSX(pyopenGL)上使用openGL 3.2+,python,macos,opengl,pyopengl,Python,Macos,Opengl,Pyopengl,这个系统在使用OpenGL2.1的pygame、glut和glfw上运行良好,但是只要我尝试强制使用OpenGL3.2,openGL就会立即失败。这是我的glfw实现,我在类似的系统中也有一个GLUT程序,它失败时会出现相同的错误 class GlfwDisplayController(object): def __init__(self,resolution): glfw.init() self._resolution = resolution

这个系统在使用OpenGL2.1的pygame、glut和glfw上运行良好,但是只要我尝试强制使用OpenGL3.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\u提示调用,这在OpenGL2.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,)
    )

我认为您正在通过glfw.OPENGL_core_profile创建核心概要文件。
将此更改为glfw.OPENGL_兼容性_配置文件请参见确切标志。通过告诉驱动程序我不会在我的程序中使用任何固定功能特性,您正在创建核心配置文件。但也有对glMatrixModeGL_MODELVIEW的调用,这在现代OpenGL中是不存在的

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

您需要重新编写软件以仅使用核心配置文件代码modern 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);

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

差不多就是这个!我建议你去看看。确切的标志是OPENGL\u COMPAT\u PROFILE。另外,如果你打算混合使用不推荐的功能,比如glMatrixModeGL_MODELVIEW,然后强制glfw.window\u hintglfw.OPENGL_FORWARD\u COMPAT,GL_TRUE几乎没有什么用处,因为使用GL_TRUE会删除像glMatrixMode这样的函数……我实际上不知道glMatrixMode不在现代OPENGL中?我是GL noobie,如何指定要在modern中修改的矩阵?只需将所有矩阵传递给着色器。我想你可以参考一些关于现代opengl的好教程。我会试试的!但是,目前我将标志更改为GL_COMPAT_PROFILE并收到:glfw.glfwror:65543 NSGL:目标版本的OS X仅支持OpenGL 3.2及以上版本的核心配置文件上下文。是否有任何方法可以解决此问题?请尝试将版本更改为低于3.2的版本
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);