zoukankan      html  css  js  c++  java
  • OpenGL ES之Must use a native order direct Buffer解决方案

    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));即可

  • 相关阅读:
    Memcached源码分析之memcached.h
    Memcached源码分析之请求处理(状态机)
    Memcached源码分析之线程模型
    Memcached源码分析之从SET命令开始说起
    Memcached源码分析
    jqgrid 获取当前页码
    CSS 居中大全【转】
    判断浏览器是否IE10
    jQuery.validate的this.optional(element)作用
    Java中static、final用法小结
  • 原文地址:https://www.cnblogs.com/tianguook/p/2778771.html
Copyright © 2011-2022 走看看