Добрый день, друзья,Android/OpenglES2/examples: Зачем использовать ByteBuffer для коордов?
Я новичок в Android и Java в целом, поэтому извините за вопрос о нобе. я наткнулся на стандартных примерах 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. В любом случае, Buffer и массив сильно привязаны в этой ситуации (и, откровенно говоря, в Android это всегда будет так). –