Android OpenGL ES "java.lang.IllegalArgumentException: Must use a native order direct Buffe"

来源:互联网 发布:网络物理隔离卡 编辑:程序博客网 时间:2024/05/22 10:22

 

OpenGL是一个非常底层的画图接口,它所使用的缓冲区存储结构是和java程序中不相同的。Java是大端字节序(BigEdian),而OpenGL所需要的数据是小端字节序(LittleEdian)。

很多文章给出的转换方式有一点小问题。

public static IntBuffer fBuffer(int[] a) {
// 先初始化buffer,数组的长度*4,因为一个int 占4个字节
ByteBuffer mbb = ByteBuffer.allocateDirect(a.length * 4);
// 数组排列用nativeOrder
mbb.order(ByteOrder.nativeOrder());
floatBuffer = mbb.asIntBuffer();
floatBuffer.put(a);
floatBuffer.position(0);
return floatBuffer;

}

 

注意:

转换的接口是:ByteBuffer mbb = ByteBuffer.allocateDirect(a.length * 4),而不是
ByteBuffer mbb = ByteBuffer.allocate(a.length * 4);

 

 

原创粉丝点击