今天试验android opengl 例子时,打开应用程序,发现程序意外终止,看了看logcat信息,发现出现了Must use a native order direct Buffer。没有头绪,只好求助于强大的搜索殷勤,寄希望有前人已经碰到并解决了,感叹自己的功力不够,无法从错误信息找到问题并修改。找到一篇博文,记录如下:
链接地址:http://blog.sina.com.cn/s/blog_4119bd830100wlab.html
OpenGL所使用的缓冲区存储结构是和我们的java 程序中不相同的。
Java 是大端字节序(BigEdian),而 OpenGL 所需要的数据是小端字节序(LittleEdian)。所以,我们在将 Java 的缓冲区转化为 OpenGL 可用的缓冲区时需要作一些工作。
否则在android1.6以下会报java.lang.IllegalArgumentException
最好创建一个工具类:
package vanilla.utils;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
public class BufferUtil {
}
然后在在onSurfaceCreated里面构建这个Buffer
verticeBuffer = BufferUtil.fBuffer(vertices);
vertices 是:
private float[] vertices = new float[] {