Pygletを使用してバッチでパフォーマンスを改善するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4504572

  •  12-10-2019
  •  | 
  •  

質問

Pygletライブラリを使用してバッチを作成するコードがいくつかあります。完全にロードされたとき、全体に約10 000のクワッドが含まれています。これで、シーン全体をレンダリングするスクリプトを実行すると(完全に静的なシーンです)、3fpsを取得します。シーンレンダラーに使用したプロトタイプでは、ゆっくりとずさんな書かれたPythonコードを使用してマップを構築しました。 PygletのバッチはC ++を使用して管理されているため、3FPでバッチを描画する明白な何かが欠けているという気持ちがあります。

これは私のシーンの初期化コードです:

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()
役に立ちましたか?

解決

シーンが静的な場合は、表示リストを使用して簡単に修正する必要があります。一部のベンダーは、それらをVBOおよびGLMULTIDRAWELEMENTS()に内部的に変換することにより、ディスプレイリストを最適化するため、いくつかのお粗末な10Kクワッドは問題ありません。そして、それは4行のコードのようなものです。

他のヒント

Cpythonを使用している場合、このショートカットがあります。 Pypyはしばらくの間Pygletをサポートしてきました(http://pypy.org/compat.html)。 Pypyに切り替えると、パフォーマンスの改善を簡単に得ることができ、基本的にコードを変更する必要はありません。あなたに役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top