Skip to main content
 首页 » 编程设计

python之如何使用 pyglet 提高批处理的性能

2025年05月04日6haluo1

我有一些使用 pyglet 库创建批处理的代码。满载时,整个东西包含大约 10 000 个四边形。现在,当我运行渲染整个场景(它是一个完全静态的场景)的脚本时,我得到 3FPS。在我用于场景渲染器的原型(prototype)中,唯一的事情是,我会使用一些缓慢而草率的 Python 代码来构建 map ,而对于完全相同的场景,这些代码恰好也以 3FPS 的速度运行。由于 pyglet 中的批处理是使用 C++ 管理的,因此我有一种令人烦恼的感觉,即我遗漏了一些明显导致批处理以 3FPS 绘制的东西。

这是我的场景初始化代码:

glViewport(0, 0, width, height) 
glMatrixMode(GL_PROJECTION) 
glLoadIdentity() 
gluPerspective(60.0, float(width)/height, .1, 10000.) 
glMatrixMode(GL_MODELVIEW) 
glClearColor(94.0/255.0, 161.0/255.0, 255.0/255.0, 0.5) 
glClearDepth(1.0) 
glShadeModel(GL_FLAT) 
glEnable(GL_DEPTH_TEST) 
glDepthFunc(GL_LEQUAL)   
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) 
glEnable(GL_BLEND) 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 

这是运行每一帧以渲染场景的代码:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT) 
glMatrixMode(GL_MODELVIEW) 
glLoadIdentity() 
glTranslatef(0, 0, -1*self.mapZoomLevel) 
glRotatef(self.mapPitch/5, 1, 0, 0) 
glRotatef(self.mapRotation, 0, 0, 1) 
glTranslatef(self.mapX, self.mapY, 0) 
self.mapPrimitive.batch.draw() 

请您参考如下方法:

如果您使用的是 CPython,则有一个快捷方式。 Pypy 支持 pyglet 有一段时间了(http://pypy.org/compat.html)。 切换到 Pypy,你可以很容易地获得性能提升,而且基本上不需要更改你的代码。 希望对你有所帮助。