我從Android應用程序中刪除了一些使用memcpy將浮點數組複製到FloatBuffer中的原生C代碼(因爲我的舊設備在此非常慢)。使用Put on FloatBuffer困難
我當前的代碼如下所示:
mfVertexBuffer.position(0);
mfColourBuffer.position(0);
mfSizeBuffer.position(0);
mfVertexBuffer.put(fvertices, 0, nCount*2);
mfColourBuffer.put(fcolours, 0, nCount*4);
mfSizeBuffer.put(fsizes, 0, nCount);
我看mfVertexBuffer的狀態,它看起來像它的行爲; .position得到合理增加,並且底層緩衝區的內容看起來很明智。但是,屏幕上沒有任何東西正在呈現(通過後面的過程)。
我重寫上面 - 改變閒來無事在我的應用程序 - 什麼都到以下幾點:
int vs=0;
int vd=0;
int cs=0;
int cd=0;
int ss=0;
int sd=0;
for (int i = 0; i < nCount; i++) {
mfVertexBuffer.put(vd++, fvertices[vs++]);
mfVertexBuffer.put(vd++, fvertices[vs++]);
mfColourBuffer.put(cd++, fcolours[cs++]);
mfColourBuffer.put(cd++, fcolours[cs++]);
mfColourBuffer.put(cd++, fcolours[cs++]);
mfColourBuffer.put(cd++, fcolours[cs++]);
mfSizeBuffer.put(sd++, fsizes[ss++]);
}
而且它完美的作品。我根本不明白這一點。這兩段代碼如何不同?
的FloatBuffers設置了這樣的:
mfVertexBuffer = miscHelpers.getFloatBuffer(4 * NUMBER_OF_PARTICLES * 2);
mfColourBuffer = miscHelpers.getFloatBuffer(4 * NUMBER_OF_PARTICLES * 4);
mfSizeBuffer = miscHelpers.getFloatBuffer(4 * NUMBER_OF_PARTICLES);
public static FloatBuffer getFloatBuffer(int size) {
FloatBuffer fbRet;
ByteBuffer myBB = ByteBuffer.allocateDirect(size);
myBB.order(ByteOrder.nativeOrder());
fbRet = myBB.asFloatBuffer();
return fbRet;
}
fvertices等都是漂浮的簡單陣列,其值不變化。
count是繪製這一輪的粒子數。
NUMBER_OF_PARTICLES是可以創建的粒子的最大數量的編譯時間限制,並且總是大於或等於count,所以第一個(非工作)代碼執行更多工作,但行爲相同我將NUMBER_OF_PARTICLES設置爲與count相同的值。
我在運行4.2.2(Cyanogenmod 10.1.3)的Galaxy S3上使用OpenGL 1.1,Android API 17。
這不是我已經在做什麼(即在我的代碼的第一行)? –
嗯,是的,你在那裏設置位置。但是,它會通過'put()'調用進行更新。在進行put()調用之後,您需要將位置重置爲0 **。 –
你說得對。我只想着寫入緩衝區;我不明白OpenGL在渲染時使用它的位置。非常感謝! –