我試圖通過Google在GDC 2011上演講的方法加載原始的,未壓縮的VBO數據。此方法使用MappedByteBuffer快速加載數據隨後調用glBufferData。不幸的是,對我來說,這只是不工作。我能夠找到一個hacky的工作(它在下面的代碼中註釋掉了),但是我希望在沒有這種攻擊的情況下實現這個工作。這裏是我的代碼示例:通過MappedByteBuffer將原始VBO數據加載到OpenGL中(不工作)
FileInputStream fis = new FileInputStream(new File(location));
FileChannel fc = fis.getChannel();
MappedByteBuffer mbb = fc.map(MapMode.READ_ONLY, 0, fc.size());
// Hackery because passing mbb to glBufferData isn't working.
//FloatBuffer fb = mbb.asFloatBuffer();
//float triangles[] = new float[fb.capacity()];
//for(int i = 0; i < triangles.length; i++) {
// triangles[i] = fb.get(i);
//}
//fb = FloatBuffer.wrap(triangles);
bufferInfo = new int[3];
bufferInfo[0] = newBufferID();
int size = (int)fc.size();
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufferInfo[0]);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, size, mbb, GLES20.GL_STATIC_DRAW);
具有相同的問題。我不認爲示例代碼實際上適用於所有設備/實現。 – HRJ
是的,在這一點上,我同意這一點。 FWIW,我的「黑客」仍然比使用InputStream更快。對於一些相當大的網格數據,這部分代碼會執行很多次,並且不會導致任何可見的減速。 – user8709