OpenGLES— glBindBuffer引发IllegalArgumentException:剩余<size

问题描述

| 我已经制作了一个顶点缓冲区,可以在使用glDrawArrays时正确绘制顶点,但是它们无法加载到VBO中。这是代码
FloatBuffer circleBuffer = ByteBuffer.allocateDirect(numVertices * 3 *
  4).order(ByteOrder.nativeOrder()).asFloatBuffer();

for (int j = 0; j < numVertices; j++) {
  circleBuffer.put((float) (Math.cos(theta)));
  circleBuffer.put((float) (Math.sin(theta)));
  circleBuffer.put(1);
  theta += 2 * Math.PI / (numVertices);
}

int[] buffer = new int[1];
int circleIndex=0;  
gl11.glGenBuffers(1,buffer,0);
circleIndex = buffer[0];
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER,circleIndex);
gl11.glBufferData(GL11.GL_ARRAY_BUFFER,circleBuffer.capacity() * 4,circleBuffer,GL11.GL_STATIC_DRAW);
输出了缓冲区的容量,它是105,其余的是0。我还尝试将FloatBuffer重新分配为Buffer。这怎么了谢谢!
ERROR/AndroidRuntime(7127): java.lang.IllegalArgumentException: remaining() < size
ERROR/AndroidRuntime(7127): at com.google.android.gles_jni.GLImpl.glBufferData(Native Method)
编辑-解决方
buffer.flip();
    

解决方法

一个Java异常,该异常应由不喜欢其参数的方法故意抛出。它扩展了RuntimeException,这意味着不需要捕获它。 尽管如此,单数名称仍可以表示更多参数之间的约束条件。您使用和检查参数的次数越多,您在进行正确的方法调用时就越倾向于异常。 在许多情况下,抛出NullPointerException的代码应进行参数检查并抛出此错误,并附上适当的说明性消息。