私はGDC 2011でGoogleが行った方法で、未圧縮の未圧縮VBOデータを読み込もうとしました。このメソッドはMappedByteBufferを使って、その後のglBufferDataの呼び出し残念ながら、私のためには、それは機能していないだけです。私はそれのためのハッキーな仕事を見つけることができました(私のコードでコメントしました)が、私はこのハックなしで動作するようにしたいと思います。ここに私のコードのサンプルです:あなたのポストから経過生のVBOデータをMappedByteBuffer経由で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