在我的應用程序中,我必須用OpenGL繪製多個元素,其中一些是三角形,另一些是線條。無論何時我要繪製新形狀,我都會將頂點放入多個float[]
,並將我的索引放入多個short[]
。我還必須爲每個新陣列創建新的FloatBuffer
,ShortBuffer
和ByteBuffer
以使其工作。
我怎樣才能更有效地繪製多個元素?我正在考慮將所有頂點放到一個單獨的float[]
中,併爲每個元素創建一個新的short[]
以刪除多餘的陣列,但是可以使用一個FloatBuffer
,ShortBuffer
,並將所有陣列放入一個單獨的ByteBuffer
,例如:在OpenGL中使用一個具有多個數組的ByteBuffer
float[] vertices = { -3, -3, -3, 2, 3, 0, 2, -1, 0, 0, 5, 2, 3, 1 };
short[] indItemA = { 0, 1, 2, 0, 2, 3 };
short[] indItemB = { 4, 5, 6 };
FloatBuffer fBuff;
ShortBuffer sBuff;
ByteBuffer bBuff = ByteBuffer.allocateDirect(vertices.length * 4);
fbBuff.order(ByteOrder.nativeOrder());
fBuff = bBuff.asFloatBuffer();
fBuff.put(vertices);
fBuff.position(0);
sBuff = bBuff.asShortBuffer();
sBuff.put(indItemA);
sBuff.position(0);
sBuff.put(indItemB);
sBuff.position(0);
它完美的作品!我必須在每個'glBindBuffer'和'glBufferData'之前加入'GLES11.',並且調用'GL_ARRAY_BUFFER'和'GL_STATIC_DRAW',但除此之外,一切都按照我所希望的那樣工作。只是好奇,這是保存內存和CPU/GPU使用率的最有效方法嗎? – Adam
做某事的「最有效」方式很大程度上取決於正在做什麼。例如,如果您每創建一個字節緩衝區以將數據上傳到圖形卡,那麼效率就會更高。真正知道的唯一方法就是用不同的方法爲你的特定目的做基準。 –
我的目的是最初繪製一個大的數組或頂點和索引,但在整個活動的整個過程中不會改變。 – Adam