为什么我的Python OpenGL render2DTexture函数这么慢?

2021-05-13 13:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

已解决:问题实际上是在每个CPU周期使用time.time()来查看是否应该绘制下一帧。执行所需的时间时间。时间()对FPS有影响。在

我在OpenGL应用程序中将2D纹理绘制为2D视图中的图像。在做了一些测试后,我发现每个纹理占用1-2 fps。我知道我可能在这段代码中做错了什么。有什么想法吗?我把FPS限制在60。在

编辑:当我禁用纹理渲染时,它会增加大约15%的fps。当我禁用文本渲染时,它会增加大约15%的fps。当我禁用这两者时,几乎没有任何fps被消耗。IE:60帧中有20帧同时打开。当一个人残疾时,60分之三十。当两者都失效时,60分之58分。在

当呈现按钮(我用来测试这个控件)上的文本时,它只在设置按钮标签时“准备”文本。在

更新的代码,仍然以相同的速度运行,但工作方式仍然相同:

def render2DTexture( self, texture, rect, texrect ):
    glEnable( GL_TEXTURE_2D )
    glBindTexture( GL_TEXTURE_2D, texture )
    glBegin( GL_QUADS )
    glTexCoord2f( texrect.left, texrect.bottom )
    glVertex2i( rect.left, self.windowSize[1] - rect.top )
    glTexCoord2f( texrect.right, texrect.bottom )
    glVertex2i( rect.left + rect.right, self.windowSize[1] - rect.top )
    glTexCoord2f( texrect.right, texrect.top )
    glVertex2i( rect.left + rect.right, self.windowSize[1] - ( rect.top + rect.bottom ) )
    glTexCoord2f( texrect.left, texrect.top )
    glVertex2i( rect.left, self.windowSize[1] - ( rect.top + rect.bottom ) )
    glEnd()
    glDisable( GL_TEXTURE_2D )

def prepareText( self, text, fontFace, color ):
    self.loadFont( fontFace )
    bmp = self.fonts[ fontFace ].render( text, 1, color )
    return ( pygame.image.tostring( bmp, 'RGBA', 1 ), bmp.get_width(), bmp.get_height() )

def renderText( self, pText, position ):
    glRasterPos2i( position[0], self.windowSize[1] - ( position[1] + pText[2] ) )
    glDrawPixels( pText[1], pText[2], GL_RGBA, GL_UNSIGNED_BYTE, pText[0] )