起初,我不习惯开发应用程序。到目前为止,我只将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
谢谢您的时间!