我有一個包含一堆對象的場景,例如讓我們說它是一個簡單的瓷磚網格。所以有一個主要的「邊界」對象,然後(行x列)單元格。在使用opengl-es的Android上,我應該將所有glVertexPointer數據放入一個緩衝區嗎?
爲簡單起見,假設每個單元格都是一個由四節點GL_LINE_LOOP組成的簡單四段線。
目前,我的幀速率awefull,它似乎在坐所有glVertexBuffer()調用我正在做,每個單元都有它自己的一套頂點,所以它自己的調用glVertexPointer:
class MyModel extends Model {
...
public void onDrawFrame(GL10 gl) {
gl.glVertexPointer(0, GL10.GL_FLOAT, 0, mBuffer);
gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4);
}
}
我是否應該追蹤世界超級對象中的所有不同的原始模型,並保留內存中所有頂點的副本?然後,我可以在每幀的開始執行一次glVertexPointer調用,並使用DrawArrays的偏移量。
class MyModel extends Model {
public MyModel() {
// do something clever in parent Model class to track total verts
this.offsetId = somethingFromSuper();
}
public void onDrawFrame(GL10 gl) {
// super's vertices should all have been already sent to GL
gl.glDrawArrays(GL10.GL_LINE_LOOP, this.offsetId, 4);
}
}
啊,我明白了。進一步的分析顯示,glDraw命令與其他任何東西一樣,都是在錘擊時間,所以我會按照你的建議。這是一個非常簡單的'遊戲',所以現在一切都是由低(<10)頂點對象組成的,所以我懷疑你的問題已經解決了。 – Cylindric 2010-09-14 16:01:10
謝謝,我已經開始得到這個工作。它需要一點點工作來改變我的模型使用他們自己的glDrawX,但我到了那裏。 – Cylindric 2010-09-15 15:51:47