おはよう私の友人、Android/OpenGLES2/examples:ByteBufferをコードとして使用する理由
私はAndroidとJavaには一般的に新しいので、noobの質問には申し訳ありません。 私は、標準のOpenGL ESの例に出くわしたと、このコードを理解しようとした:
static float wallCoords[] = {
// in counterclockwise order:
-0.5f, 0.6f, 0.0f, // top left
-0.5f, 0.5f, 0.0f, // bottom left
0.5f, 0.5f, 0.0f, // bottom right
0.5f, 0.6f, 0.0f, // top right
};
private final int vertexCount = wallCoords.length/COORDS_PER_VERTEX;
private final int vertexStride = COORDS_PER_VERTEX * 4; // 4 bytes per vertex
float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 0.0f };
private final FloatBuffer vertexBuffer;
private final ShortBuffer drawListBuffer;
private final short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices
...
ByteBuffer bb = ByteBuffer.allocateDirect(
// (number of coordinate values * 4 bytes per float)
wallCoords.length * 4);
// use the device hardware's native byte order
bb.order(ByteOrder.nativeOrder());
// create a floating point buffer from the ByteBuffer
vertexBuffer = bb.asFloatBuffer();
// add the coordinates to the FloatBuffer
vertexBuffer.put(wallCoords);
// set the buffer to read the first coordinate
vertexBuffer.position(0);
例えばFloatBuffer.wrap()メソッドを使用しないで、なぜ私の質問は次のとおりです。
vertexBuffer = FloatBuffer.wrap(wallCoords);
ありがとうございました!
はい、正解:この説明が見つかりました。しかし、これは快適なAPIがないことを説明していません。とにかく、この状況ではバッファと配列は強く結びついています(そして率直に言って、Androidでは常にそうです)。 –