2011-10-14 30 views
4

我最近看了關於加快信息添加到頂點緩衝的過程中對Badlogicgames.com的文章(或任何其他intbuffer),它確實增加了我的項目的速度,但我不明白的將int數組插入到Android的OpenGL ES 1.0的intbuffer中?

「注意到了IntBuffer.put(INT [] SRC)並沒有受到影響的問題」

聲明....是否有可能養活一個int []數組爲IntBuffer獲得速度增加如果你不需要浮點數?每次我嘗試將int []放入緩衝區時,任何渲染...

這是我目前使用的例子:

現在,如果int數組「COORDS」是充滿了漂浮轉換爲使用「浮動整數點數字變量
dMesh[i].putVertexBuffer(coords); //function being called 

      public void putVertexBuffer(int[] input) //actual function 
      { 
       ByteBuffer tC = ByteBuffer.allocateDirect(input.length *4); 
       tC.order(ByteOrder.nativeOrder()); 
       _vertexBuffer = tC.asIntBuffer(); 
       _vertexBuffer.put(input); 
       _vertexBuffer.position(0); 
      } 

。 floatToIntBits(float value)「;這是好的......但一個標準整數數組並沒有顯示任何東西......但是,如果我只是有一個float []數組並將「asIntBuffer()」更改爲「asFloatBuffer()」,這是否有效?我很困惑。是否需要轉換? Thankyou提前給任何洞察力的人。

快速編輯: 我差點忘了...這是我引用的文章: http://www.badlogicgames.com/wiki/index.php/Direct_Bulk_FloatBuffer.put_is_slow

+0

歡迎來到StackOverflow,我希望你閱讀[FAQ](http://stackoverflow.com/faq#howtoask)。 –

回答

0

您沒有使用一個int數組的GL_FLOAT參數在glVertexPointer呼叫類型,是嗎?在這種情況下,我不會懷疑這種行爲。當使用int作爲頂點函數時,請務必使用GL_INT類型作爲glVertexPointer(或任何此類屬性數組函數)中的類型參數。

+0

我不認爲GL_INT在Android的OpenGL ES 1.0中受支持......它理解GL_FLOAT,GL_SHORT,我相信還有一些不是int。 – Kalisme

+0

@Kalisme然後一個int數組不會工作,你需要一個短陣列。但是,使用與GL_INT不同的任何內容的數組只是錯誤的用法,並且不起作用。 –

1

當你試圖整數,你也改變其使用的陣列消耗整數,而不是浮動的代碼?我在這裏遇到各種各樣的問題。

有可能我剛纔的問題/答案幫助 - 它在這方面的:

Passing java.nio.IntBuffer to C function in an Android game

+0

感謝您的意見,這聽起來像很好的建議,但我使用的Android 2.2.1「FroYo」,我不相信NDK與... JNI要求NDK不是嗎? 嗯,感謝您的幫助,如果我有其他設備,我可能會稍後使用它。 – Kalisme

+0

NDK從1.5開始工作。我從來沒有調查過的其他一些本地活動內容僅適用於2.3+,但這完全不同。 –