Почему моя функция Python OpenGL render2DTexture работает так медленно?Python

Программы на Python
Ответить
Anonymous
 Почему моя функция Python OpenGL render2DTexture работает так медленно?

Сообщение Anonymous »

РЕШЕНО: Проблема заключалась в том, что на самом деле проблема заключалась в использовании time.time() в каждом цикле ЦП, чтобы определить, следует ли отрисовывать следующий кадр или нет. Время, необходимое для выполнения time.time(), влияло на FPS.

Я создал эту функцию для рисования 2D-текстур в виде изображений в 2D-представлении в своем приложении OpenGL. Проведя некоторое тестирование, я обнаружил, что на текстуру уходит 1-2 кадра в секунду. Я знаю, что, вероятно, делаю что-то не так в этом коде. Есть идеи? Я ограничиваю FPS до 60.

Изменить: Когда я отключаю рендеринг текстур, он возвращает около 15% FPS. Когда я отключил рендеринг текста, это прибавило около 15% fps. Когда я отключаю оба, почти не потребляется fps. IE: 20 из 60 кадров в секунду при обоих включенных. 30 из 60, когда один отключен. 58 из 60, когда оба отключены.

При рендеринге текста на кнопке (элемент управления, который я использую для тестирования) он «подготавливает» текст только тогда, когда установлена ​​метка кнопки.

Обновленный код, все еще работает с той же скоростью, но работает так же:

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] )


Подробнее здесь: https://stackoverflow.com/questions/239 ... on-so-slow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»