在orangepi-PC下使用pyopengl

在OrangePi-PC下安装显卡驱动以及opengl:

http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=53

在这个链接中说要:Copy Libs (libGLES* libGLES* LibUmp LibMali) to /usr/lib 

但是在查找动态链接库的时候,orangepi会在/usr/lib/arm-linux-gnueabihf下查找动态库,请参考ldconfig的手册,或者是查看/etc/ld.so.conf.d下的文件

因此,我们需要拷贝 (libGLES* libGLES* LibUmp LibMali) 到 /usr/lib/arm-linux-gnueabihf 下

安装完成后即可使用opengl es以及egl的c接口进行开发

但是如果安装PyOpenGL:

  http://pyopengl.sourceforge.net

  在ubuntu下直接使用pip安装:

pip install PyOpenGL --user
pip install PyOpenGL-accelerate --user

在import OpenGL.GL或者import OpenGL.GLES2时会报错:

/home/orangepi/.local/lib/python2.7/site-packages/OpenGL/platform/glx.pyc in GL(self)
     18             ) 
     19         except OSError as err:
---> 20             raise ImportError("Unable to load OpenGL library", *err.args)
     21     @baseplatform.lazy_property
     22     def GLU(self):

ImportError: ('Unable to load OpenGL library', '/usr/lib/arm-linux-gnueabihf/GL: cannot read file data: Is a directory', 'GL', None)

这是由于OrangePi的mali驱动只提供了OpenGL ES接口,而PyOpenGL要求必须有GL接口。

修正这个问题需要更改PyOpenGL下的platform/glx.py文件(如果使用pip安装,并使用--user参数,则安装路径为:~/.local/lib/python2.7/site-packages/OpenGL/platform/glx.py), 做如下更改:

@baseplatform.lazy_property
def GL(self):
    try:
        return ctypesloader.loadLibrary(
            ctypes.cdll,
            'GL',
            mode=ctypes.RTLD_GLOBAL
        )
   except OSError as err:
        # -- raise ImportError("Unable to load OpenGL library", *err.args)
# ++ return None
return None
# GLX doesn't seem to have its own loadable module?
@baseplatform.lazy_property
# -- def GLX(self): return self.GL
# ++ def GLX(self): return self.GLES2
def GLX(self): return self.GLES2
@baseplatform.lazy_property
def GetCurrentContext( self ):
    # -- return self.GL.glXGetCurrentContext
    # ++ return None
    return None
@baseplatform.lazy_property
def glGetError( self ): 
    # -- return self.GL.glGetError
    # ++ return self.GLES2.glGetError
    return self.GLES2.glGetError

 这是在import OpenGL.GLES2即可成功

原文地址:https://www.cnblogs.com/astreye/p/5125502.html