简单的OpenGL问题!

ch_984326013 2011-05-29 09:38:30
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)

...全文
304 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ch_984326013 2011-06-06
  • 打赏
  • 举报
回复
弄好了,谢谢各位了!
  • 打赏
  • 举报
回复
如对OpenGL的es扩展什么的都支持的不是很好!
  • 打赏
  • 举报
回复
貌似2.2对openGL接口支持的不是很好。
ch_984326013 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 linweipeng1985 的回复:]
创建工程的时候把sdk的最小兼容版本设置到1.5的版本就可以了,因为里面调用到了以前sdk的接口,后面已经去除了
[/Quote]

这样可是可以!但是有没有办法用版本2.2的实现呢!不要设置最低版本!
jeky_zhang2013 2011-06-01
  • 打赏
  • 举报
回复
版本一致很重要,用sdk manager更新下
linweipeng1985 2011-06-01
  • 打赏
  • 举报
回复
创建工程的时候把sdk的最小兼容版本设置到1.5的版本就可以了,因为里面调用到了以前sdk的接口,后面已经去除了
ch_984326013 2011-06-01
  • 打赏
  • 举报
回复
能给一个完整的实例么?这个还是不懂!这样写和那样写有什么区别不?
CyberLogix 2011-05-30
  • 打赏
  • 举报
回复
: java.lang.IllegalArgumentException

说明1.5和2.2的API接口已经发生变换,你需要修改成使用2.2的API
dinjay 2011-05-30
  • 打赏
  • 举报
回复
帮顶...没看出glVertexPointer函数有什么问题
haibo_han 2011-05-30
  • 打赏
  • 举报
回复
楼主解决了吗,分享一下
CrossTime 2011-05-30
  • 打赏
  • 举报
回复
哦,int型数据是 vtxByteBuffer.asIntBuffer();
CrossTime 2011-05-30
  • 打赏
  • 举报
回复
现在顶点数据一般都类似这么写,应该能运行:

private void initVertex(){
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);
}
ch_984326013 2011-05-30
  • 打赏
  • 举报
回复
怎么修改呢,能具体点么?我一开始用的就是2.2啊!但是没运行成功,后来,我就找1.5运行了下,在这上到成功了!还是不怎么清楚!

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧