博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL ES之Must use a native order direct Buffer解决方案
阅读量:5236 次
发布时间:2019-06-14

本文共 1000 字,大约阅读时间需要 3 分钟。

OpenGL ES中使用类似于一下代码:

1)创建三个顶点

private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{  

        0,one,0,  

      -one,-one,0,  

        one,-one,0,  

    });  

2)然后使用triggerBuffer 画顶点

例如:gl.glVertexPointer(3, GL10.GL_FIXED, 0,triggerBuffer );

经常会出现:Must use a native order direct Buffer的错误。

 

解决方案:(创建一个方法)

/*

     * OpenGL 是一个非常底层的画图接口,它所使用的缓冲区存储结构是和我们的 java 程序中不相同的。
     * Java 是大端字节序(BigEdian),而 OpenGL 所需要的数据是小端字节序(LittleEdian)。
     * 所以,我们在将 Java 的缓冲区转化为 OpenGL 可用的缓冲区时需要作一些工作。建立buff的方法如下
     * */ 
    public Buffer bufferUtil(int []arr){ 
         IntBuffer mBuffer ;         
         //先初始化buffer,数组的长度*4,因为一个int占4个字节 
         ByteBuffer qbb = ByteBuffer.allocateDirect(arr.length * 4); 
         //数组排列用nativeOrder 
         qbb.order(ByteOrder.nativeOrder()); 
         
         mBuffer = qbb.asIntBuffer(); 
         mBuffer.put(arr); 
         mBuffer.position(0); 
          
         return mBuffer; 
    }

接下来(同样是2个步骤):

1)使用int数组创建顶点

private int[] triggerBuffer = new int[]{  

        0,one,0,  

      -one,-one,0,  

        one,-one,0,  

    }; 

2)使用数组

gl.glVertexPointer(3, GL10.GL_FIXED, 0, bufferUtil(triggerBuffer));即可

转载于:https://www.cnblogs.com/tianguook/archive/2012/11/20/2778771.html

你可能感兴趣的文章
303. Range Sum Query - Immutable
查看>>
图片加载失败显示默认图片占位符
查看>>
【★】浅谈计算机与随机数
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>