如何将float数组转换为glVertexPointer的java.nio.Buffer?

时间:2012-01-02 22:26:05

标签: java nio libgdx

我正在使用libgdx并拥有以下代码

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

但我不确定如何将数组x传递给Buffer?有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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。

答案 1 :(得分:4)

你应该这样做:

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

它适用于JOGL 2.0: static FloatBuffer newDirectFloatBuffer(float[] values)

如果您仍然使用JOGL 1,则此助手位于com.sun.opengl.util.BufferUtil类中。

最好的解决方案是使用LIBGDX中的方法: static java.nio.FloatBuffer newFloatBuffer(int numFloats)