使用pyglet加载纹理/精灵时遇ContextException错误求解决
问题场景
调用pyglet.image.load().get_texture()或pyglet.sprite.Sprite()时,触发pyglet.gl.ContextException: Unable to share contexts错误,相关代码示例:
使用get_texture的代码
welcome_logo = pyglet.image.load('./assets/images/welcome.png').get_texture()
使用Sprite的代码
welcome_logo = pyglet.image.load('./assets/images/welcome.png') welcome_logo = pyglet.sprite.Sprite(welcome_logo) welcome_logo.scale = 0.5
报错回溯信息
Traceback (most recent call last): File "main.py", line 35, in <module> main() File "main.py", line 29, in main window = Window(width=1200, height=750, caption='Pygros', resizable=False) File "D:\code\Pygros\main.py", line 14, in __init__ super(Window, self).__init__(*args, **kwargs) File "C:\Users\chen\.virtualenvs\vv_310\lib\site-packages\pyglet\window\win32\__init__.py", line 104, in __init__ super(Win32Window, self).__init__(*args, **kwargs) File "C:\Users\chen\.virtualenvs\vv_310\lib\site-packages\pyglet\window\__init__.py", line 578, in __init__ self._create() File "C:\Users\chen\.virtualenvs\vv_310\lib\site-packages\pyglet\window\win32\__init__.py", line 258, in _create self.context.attach(self.canvas) File "C:\Users\chen\.virtualenvs\vv_310\lib\site-packages\pyglet\gl\win32.py", line 255, in attach super(Win32ARBContext, self).attach(canvas) File "C:\Users\chen\.virtualenvs\vv_310\lib\site-packages\pyglet\gl\win32.py", line 202, in attach raise gl.ContextException('Unable to share contexts.')
解决方法
调整代码执行顺序:Pyglet的纹理依赖GL上下文,必须先创建窗口实例,再加载图片生成纹理或创建精灵。示例:
# 先创建窗口 window = pyglet.window.Window(width=1200, height=750, caption='Pygros', resizable=False) # 再处理图片和精灵 welcome_logo = pyglet.image.load('./assets/images/welcome.png') welcome_logo_sprite = pyglet.sprite.Sprite(welcome_logo) welcome_logo_sprite.scale = 0.5禁用上下文共享:创建窗口时添加
context_share=False参数,强制关闭上下文共享机制:window = pyglet.window.Window(width=1200, height=750, caption='Pygros', resizable=False, context_share=False)更新显卡驱动:重置Windows后显卡驱动可能回退,尤其是Iris核显,去Intel官网下载对应型号的最新驱动覆盖安装。
降级Pyglet版本:新版本可能存在兼容性问题,尝试安装稳定旧版本:
pip install pyglet==1.5.27重建虚拟环境依赖:卸载现有pyglet后重新安装,确保依赖完整:
pip uninstall pyglet -y pip install pyglet
内容的提问来源于stack exchange,提问作者大傻逼
相关产品推荐
相关产品推荐

