Android 如何将浮点数组传递给glvertexattributepointer

Android 如何将浮点数组传递给glvertexattributepointer,android,opengl-es,opengl-es-2.0,Android,Opengl Es,Opengl Es 2.0,我正在android上开发OpenGL ES 2.0着色器 我有一个带有顶点位置和其他顶点属性的浮点数组。 位置和其他属性可能会随时间变化 如何将修改后的数组传递给GLVERTEXATTRIBPOINT, 这样我可以用更新的值绘制场景 当我试图通过它时,我得到了 GLES20类型中的方法glVertexAttribPointer(int,int,int,boolean,int,Buffer)不适用于参数(int,int,int,boolean,int,float[]) 是java.nio.Buf

我正在android上开发OpenGL ES 2.0着色器

我有一个带有顶点位置和其他顶点属性的浮点数组。 位置和其他属性可能会随时间变化

如何将修改后的数组传递给GLVERTEXATTRIBPOINT, 这样我可以用更新的值绘制场景

当我试图通过它时,我得到了

GLES20类型中的方法glVertexAttribPointer(int,int,int,boolean,int,Buffer)不适用于参数(int,int,int,boolean,int,float[])


是java.nio.Buffer吗?因为你似乎需要

java.nio.FloatBuffer
并调用floatBuffer.array()

从中取出float[]数组

但是,显然它在FloatBuffer.java中是最终的:

final float[] hb;   
看来你需要。。。可能会扩展FloatBuffer并使数组非final

FloatBuffer yourFloatBuffer;
float[] yourFloatArray;    

FloatBuffer byteBuf = ByteBuffer.allocateDirect(yourFloatArray.length * 4);
    byteBuf.order(ByteOrder.nativeOrder());
    yourFloatBuffer = byteBuf.asFloatBuffer();
    yourFloatBuffer.put(yourFloatArray);
    yourFloatBuffer.position(0);

这应该是可行的。

错误告诉您,您需要获取所拥有的浮点顶点数组,并以某种方式将其转换为缓冲区对象。我不是openGL专家,所以我只能回答这个问题。thanx Eric,但我不能修改缓冲区。。。所以我想使用数组,这很有效,我知道。但我想稍后在运行时修改浮点数组。。。有了这段代码,我无法实现我认为,每次更改数组时都应该执行这段代码。是的,我们可以这样做,但问题是当我将缓冲区传递给着色器时,GPU可能正在使用它,而我无法控制它。。。也许这就是为什么我会有例外