问题描述
|
我已经制作了一个顶点缓冲区,可以在使用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的代码应进行参数检查并抛出此错误,并附上适当的说明性消息。