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

  • 相关阅读:
    man arch
    封装 pyinstaller -F -i b.ico excel.py
    Python比较两个excel文档内容的异同
    运维工具
    python封装成exe
    OCP内容
    OCP
    操作系统
    转:铁大树洞APP视频讲解和原型演示
    2020.3.31——针对超能陆战队铁大树洞项目的匿名特点分析
  • 原文地址:https://www.cnblogs.com/tianguook/p/2778771.html
Copyright © 2011-2022 走看看