現在、私はPythonバインディングを使用してOpenGLを学習しています。私は効果的に基本的に、私は別の幅、高さの2500枚の長方形のグリッドを描画しています。このPythonとOpenGLのパフォーマンス向上
def draw():
background(35)
for x in range(50):
for y in range(50):
fill(random(), 1.0, 1.0)
rect(x, y, random(), random())
のような何かをするいくつかのコードを書いた、と色を記入してください。
draw()
に単一の呼び出しを実行するのに約40ミリを取るようです。
私は、オブジェクトを描画する方法は、私は非近代的なOpenGLのであると信じるものです:
rect(x, y, w, h)
は単にglRectf(x, y, x + w, y + h)
への呼び出しです。
fill(r, g, b)
は、glColor3f(r, g, b)
への呼び出しです。
ダブルバッファリングが使用されていないと、最後に、メインループは次のようになります。
while True:
draw()
glutSwapBuffers()
をdraw()
とても遅いですなぜ今、私は疑問に思って?問題を修正/診断で
私の試み:
私はオンラインで読むと、最終的には自分自身が問題は私がVBOs/VAOsを使用していなかったという事実に嘘をついたことを信じて、GPUへの呼び出しのすべてがわかりましたGPUに1回のメインドローコールを行うのではなく、すべての矩形でglRectf
と呼ぶので無用です。
頂点の配列を構築するのがまだ遅いかどうかはわかりません。だから、多くのコードをリファクタリングする前に、これが実際の問題である可能性が高いかどうか疑問に思っています。つまり、ボトルネックはGPUへの描画呼び出しが多すぎることになり、代わりにVBOを使用して、巨大な頂点の配列を構築し、draw
の最後にGPUを呼び出します。
ご協力いただければ幸いです。ありがとう!
大丈夫です!私が行うことは、頂点のリストを持ち、 'n '個のエントリでいっぱいになるたびに' glDrawArrays() 'を呼ぶことになります。私はそれがどれくらいうまくいくかを見ていきますありがとう! –