2011-05-28 33 views
0

我工作的OpenGL ES 2.0着色器在Android ...如何浮動數組傳遞給glVertexAttribPointer

我有與頂點的其他屬性一起頂點的位置float數組。 位置和其他屬性可能隨時間而改變。

怎麼可以這樣修改後的數組傳遞到glVertexAttribPointer, 這樣我可以使用更新的值

當我試圖通過它繪製場景,我得到

方法glVertexAttribPointer(INT, (INT,int,int,boolean,int,float [])不適用

+0

錯誤是告訴你,你需要把你有的浮點頂點數組,並以某種方式將它轉換成緩衝區對象。我不是openGL專家,所以就我可以回答這個問題。 – Eric 2011-05-28 08:49:20

+0

thanx埃裏克,但我不能修改緩衝區...所以想要使用數組intead – sravan 2011-05-28 09:03:58

回答

0

它是java.nio.Buffer嗎?因爲它似乎你需要

java.nio.FloatBuffer 

,並調用floatBuffer.array()

獲得浮動[]數組出來。

但是,這顯然是在最後FloatBuffer.java:

final float[] hb; 

如此看來,你需要...也許延長FloatBuffer,使陣列非決賽。

+0

我沒有嘗試過,但我得到例外說它被保護 – sravan 2011-05-28 09:05:28

+0

看到我編輯的答案 – Kamen 2011-05-28 09:35:45

2
FloatBuffer yourFloatBuffer; 
float[] yourFloatArray;  

FloatBuffer byteBuf = ByteBuffer.allocateDirect(yourFloatArray.length * 4); 
    byteBuf.order(ByteOrder.nativeOrder()); 
    yourFloatBuffer = byteBuf.asFloatBuffer(); 
    yourFloatBuffer.put(yourFloatArray); 
    yourFloatBuffer.position(0); 

這應該有效。

+0

這工作埃戈爾,我知道。但我想在運行期間稍後修改浮點數組...我用這個代碼不能實現 – sravan 2011-05-28 09:07:16

+0

我認爲,每次更改數組時都應該執行此代碼。 – Egor 2011-05-28 09:09:47

+0

雅我們可以做到這一點,但問題是當我將緩衝區傳遞給着色器時,GPU可能會使用它,並且我沒有控制它的可能...可能是多數民衆贊成爲什麼我得到異常 – sravan 2011-05-28 09:21:31