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

  • 相关阅读:
    Lua弱引用table
    Javascript定义类(class)的三种方法
    双检锁技术
    【翻译】ASP.NET缓存管理
    socket python
    mvc项目
    MSBuild
    阅读glibc源码
    MVC3使用Unity实现依赖注入接口与于实现类自动注册
    C# 指针之美
  • 原文地址:https://www.cnblogs.com/tianguook/p/2778771.html
Copyright © 2011-2022 走看看