Android端Pydroid 3中PyOpenGL导入失败求助:AttributeError问题
在Pydroid 3中解决PyOpenGL导入报错的方案
问题重现
导入PyOpenGL时触发如下错误:
Traceback (most recent call last): File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 3, in from OpenGL.GL import * File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/OpenGL/GL/__init__.py", line 4, in from OpenGL.GL.VERSION.GL_1_1 import * File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/OpenGL/GL/VERSION/GL_1_1.py", line 14, in from OpenGL.raw.GL.VERSION.GL_1_1 import * File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/OpenGL/raw/GL/VERSION/GL_1_1.py", line 7, in from OpenGL.raw.GL import _errors File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/OpenGL/raw/GL/_errors.py", line 4, in _error_checker = _ErrorChecker( _p, _p.GL.glGetError ) AttributeError: 'NoneType' object has no attribute 'glGetError'
可行解决步骤
- 安装Pydroid OpenGL ES插件:打开Pydroid 3,进入「菜单 -> 插件」,找到并安装「OpenGL ES Support」插件,安装完成后重启Pydroid。Android设备仅支持OpenGL ES,默认环境缺少底层支持库会导致该报错。
- 替换为OpenGL ES导入语句:PyOpenGL默认调用桌面版OpenGL接口,需改用适配移动端的OpenGL ES绑定:
# 替换原导入代码 from OpenGL.GLES2 import * - 安装适配ARM架构的PyOpenGL版本:通过Pydroid包管理器安装时,指定安装适配Android ARM架构的旧版本,避免兼容性问题:
pip install PyOpenGL==3.1.5 - 先初始化GL上下文再调用PyOpenGL:单独导入PyOpenGL会因无GL上下文报错,需先通过Pygame或SDL2创建窗口并初始化上下文。示例代码:
import pygame from pygame.locals import * from OpenGL.GLES2 import * pygame.init() display = (800, 600) pygame.display.set_mode(display, DOUBLEBUF|OPENGL) # 后续可编写OpenGL渲染逻辑
内容的提问来源于stack exchange,提问作者turtlelover891
相关产品推荐
相关产品推荐

