Как преобразовать массив с плавающей точкой в ​​java.nio.Buffer для glVertexPointer? - PullRequest
3 голосов
/ 03 января 2012

Я использую libgdx и имею следующий код

    float[] x;
    ...
    Buffer vVertices=x;//what to do here?
    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, vVertices);

Но я не уверен, как передать массив x в Buffer? Есть идеи?

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Вы должны сделать это:

FloatBuffer vVertices = Buffers.newDirectFloatBuffer(x);
vVertices.rewind();

Отлично работает с JOGL 2.0: статический FloatBuffer newDirectFloatBuffer (значения с плавающей точкой [])

Если вы все еще используете JOGL1, этот помощник находится в классе com.sun.opengl.util.BufferUtil.

Лучшее решение состоит в использовании метода из LIBGDX: static java.nio.FloatBuffer newFloatBuffer (int numFloats)

4 голосов
/ 03 января 2012
ByteBuffer byteBuf = ByteBuffer.allocateDirect(x.length * Float.BYTES); //4 bytes per float
byteBuf.order(ByteOrder.nativeOrder());
FloatBuffer buffer = byteBuf.asFloatBuffer();
buffer.put(x);
buffer.position(0);

И ByteBuffer, и FloatBuffer наследуются от Buffer.

...