我目前使用Python綁定學習OpenGL。我寫了一些代碼,有效地做這樣的事情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())
從本質上講,我繪製的矩形2500具有不同的寬度,高度一格,並填充顏色。
看來,它需要大約40 MS執行一次調用到draw()
。
我畫的對象的方式是什麼,我認爲是不現代的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()
這麼慢?
我在診斷/修復問題的嘗試:
我在網上,最終閱讀發現自己相信這個問題的事實撒謊說,我沒有使用維也納組織/ VAOs,所有的調用GPU的人因爲我在每個矩形上調用了glRectf
,而不是對GPU進行一次主繪製調用。我不確定構建頂點數組是否還要慢。所以,在我開始重構很多代碼之前,我想知道這是否是真正的問題。也就是說,瓶頸可能是過多GPU的繪製調用,並且我應該使用VBOs來構建大量的頂點,並在draw
的末尾對GPU執行一次繪製調用。
任何幫助,將不勝感激。謝謝!
好吧!我可能會做的是有一個頂點列表,每次用'n'條目填充時,我會調用'glDrawArrays()'。我會看到它的效果如何。謝謝! –