http://www.cnblogs.com/shengdoushi/archive/2011/01/02/1923940.html
这个系列的博客对学习OpenGL 2D开发很有帮助,不过它给出的代码在Android 3.1上运行报错,
Must use a native order direct Buffer
出现这个是因为 OpenGL是一个非常底层的画图接口,它所使用的缓冲区存储结构是和java程序中不相同的。Java是大端字节序(BigEdian),而OpenGL所需要的数据是小端字节序(LittleEdian)。所以,我们需要 Java 的缓冲区转化为 OpenGL 可用的缓冲区。
修改方法很简单
新建一个 大端字节序(BigEdian) 跟 小端字节序(LittleEdian)转换的函数
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
public class BufferUtil {
public static FloatBuffer floatBuffer;
public static FloatBuffer fBuffer(float[] a) {
// 先初始化buffer,数组的长度*4,因为一个float占4个字节
ByteBuffer mbb = ByteBuffer.allocateDirect(a.length * 4);
// 数组排列用nativeOrder
mbb.order(ByteOrder.nativeOrder());
floatBuffer = mbb.asFloatBuffer();
floatBuffer.put(a);
floatBuffer.position(0);
return floatBuffer;
}
}
FloatBuffer triggerBuffer = BufferUtil.fBuffer(new float[] { 60, 200, // 左上角
180, 200, // 右上角
120, 300, // 下顶角
});