Android OpenGLES剩余()<大小<所需

时间:2018-09-11 23:00:22

标签: opengl-es-2.0

起初,我不习惯开发应用程序。到目前为止,我只将LWJGL用于计算机游戏,所以对我不要太严格:)

我试图实现一个VAO类,该类关心所有这些VAO东西(加载VAO,VBO,绑定索引缓冲区等)

有问题的代码段是bindIndicesBuffer(int []索引)函数中的代码段。

Vao.java:

private void bindIndicesBuffer(int[] indices){
    int vboID =genBuffers();
    vbos.add(vboID);
    GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, vboID);
    IntBuffer buffer = Tools.makeIntBuffer(indices);
    GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, indices.length*4, buffer, GLES20.GL_STATIC_DRAW);
}

附加代码:

private int genBuffers(){
    int[] ids = new int[1];
    GLES20.glGenBuffers(1, ids, 0);
    return ids[0];
}

Tools.java:

 public static IntBuffer makeIntBuffer(int[] arr){
    ByteBuffer bb = ByteBuffer.allocateDirect(arr.length *4).order(ByteOrder.nativeOrder());
    IntBuffer ib = bb.asIntBuffer();
    ib.put(arr);
    ib.position(0);
    ib.flip();
    return ib;
}

Main活动类调用GLSurfaceView的子类,该子类创建实现了GLSurfaceView.Renderer的MasterRenderer,并在onDrawFrame()中调用单独的渲染器的render方法;

我收到以下错误:

E / libEGL:在没有当前上下文的情况下调用OpenGL ES API(每个线程记录一次)

D / AndroidRuntime:关闭VM

E / AndroidRuntime:致命异常:主要

...

原因:java.lang.IllegalArgumentException:剩余()<大小<需要

在“ GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER,index.length * 4,缓冲区,GLES20.GL_STATIC_DRAW);”行中

现在有一个神奇的问题:我做错了什么? :D

谢谢您的时间!

0 个答案:

没有答案