Must use a native order direct Buffer错误,在android SDK2.2的环境下如何解决???
我在1.5的环境下,可以运行,但是在2.2的环境下就不能运行了。哪位大虾能告诉我在2.2下,怎么配置才能使其运行不?谢谢了
代码如下:public class GLRender implements Renderer
{
int one = 0x10000;
//三角形三个顶点
private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{
0,one,0, //上顶点
-one,-one,0, //左下点
one,-one,0,}); //右下点
//正方形的4个顶点
private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
one,one,0,
-one,one,0,
one,-one,0,
-one,-one,0});
@Override
public void onDrawFrame(GL10 gl)
{
// 清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,并移入屏幕 6.0
gl.glTranslatef(-1.5f, 0.0f, -6.0f);
// 允许设置顶点
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 设置三角形
gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer);
//绘制三角形
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
// 重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,并移入屏幕 6.0
gl.glTranslatef(1.5f, 0.0f, -6.0f);
//设置和绘制正方形
gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消顶点设置
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
} @Override
public void onSurfaceChanged(GL10 gl, int width, int height)
{
float ratio = (float) width / height;
//设置OpenGL场景的大小
gl.glViewport(0, 0, width, height);
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩阵
gl.glLoadIdentity();
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity(); } @Override
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
// 启用阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
// 黑色背景
gl.glClearColor(0, 0, 0, 0);
// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
}}在2.2的环境下,运行出错的信息如下:
05-29 13:37:12.401: ERROR/AndroidRuntime(407): FATAL EXCEPTION: GLThread 8
05-29 13:37:12.401: ERROR/AndroidRuntime(407): java.lang.IllegalArgumentException: Must use a native order direct Buffer
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at com.google.android.gles_jni.GLImpl.glVertexPointerBounds(Native Method)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at com.google.android.gles_jni.GLImpl.glVertexPointer(GLImpl.java:1121)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at com.open.gl.OpenGLReader.onDrawFrame(OpenGLReader.java:36)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1332)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116)
我在1.5的环境下,可以运行,但是在2.2的环境下就不能运行了。哪位大虾能告诉我在2.2下,怎么配置才能使其运行不?谢谢了
代码如下:public class GLRender implements Renderer
{
int one = 0x10000;
//三角形三个顶点
private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{
0,one,0, //上顶点
-one,-one,0, //左下点
one,-one,0,}); //右下点
//正方形的4个顶点
private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
one,one,0,
-one,one,0,
one,-one,0,
-one,-one,0});
@Override
public void onDrawFrame(GL10 gl)
{
// 清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,并移入屏幕 6.0
gl.glTranslatef(-1.5f, 0.0f, -6.0f);
// 允许设置顶点
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 设置三角形
gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer);
//绘制三角形
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
// 重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,并移入屏幕 6.0
gl.glTranslatef(1.5f, 0.0f, -6.0f);
//设置和绘制正方形
gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消顶点设置
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
} @Override
public void onSurfaceChanged(GL10 gl, int width, int height)
{
float ratio = (float) width / height;
//设置OpenGL场景的大小
gl.glViewport(0, 0, width, height);
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩阵
gl.glLoadIdentity();
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity(); } @Override
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
// 启用阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
// 黑色背景
gl.glClearColor(0, 0, 0, 0);
// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
}}在2.2的环境下,运行出错的信息如下:
05-29 13:37:12.401: ERROR/AndroidRuntime(407): FATAL EXCEPTION: GLThread 8
05-29 13:37:12.401: ERROR/AndroidRuntime(407): java.lang.IllegalArgumentException: Must use a native order direct Buffer
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at com.google.android.gles_jni.GLImpl.glVertexPointerBounds(Native Method)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at com.google.android.gles_jni.GLImpl.glVertexPointer(GLImpl.java:1121)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at com.open.gl.OpenGLReader.onDrawFrame(OpenGLReader.java:36)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1332)
05-29 13:37:12.401: ERROR/AndroidRuntime(407): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116)
解决方案 »
- android环境.so加载符号找不到的问题
- 如何在android的linux后台开机自动运行一个应用程序
- This element has no attached sources and the Javadoc could not found in the atta
- 关于CANVAS的问题,请知道的来回答下,很简单~
- android代码又错了,求救!!!
- android调用系统的邮件程序
- 小心机器人!
- 有大神在吗,在XML中对RelativeLayout设置onClick,然后报错
- 如何更改编译版本
- 请问下大佬这个可以实现吗,实现的话该怎么办》?
- 如何把一个horizontal的LinearLayout布局中的多个Button设置为等宽?
- 打包的问题
float[] vertexArray = new float[] {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
-1.0f, 1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
-1.0f, 1.0f, 0.0f
}; ByteBuffer vtxByteBuffer = ByteBuffer.allocateDirect(vertexArray.length * 4);
vtxByteBuffer.order(ByteOrder.nativeOrder());
vertexBuffer = vtxByteBuffer.asFloatBuffer();
vertexBuffer.put(vertexArray);
vertexBuffer.position(0);
}