OpenGL(ES) - glBindBuffer抛出IllegalArgumentException:剩余<尺寸()

时间:2011-05-01 14:27:55

标签: android graphics opengl-es

我在使用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重新分配为缓冲区。这有什么不对?谢谢!



ERROR/AndroidRuntime(7127): java.lang.IllegalArgumentException: remaining() < size
ERROR/AndroidRuntime(7127): at com.google.android.gles_jni.GLImpl.glBufferData(Native Method)

编辑 - 解决方案


buffer.flip();

1 个答案:

答案 0 :(得分:0)

应该由不喜欢其参数的方法故意抛出的Java异常。它扩展了RuntimeException,这意味着它不需要被捕获。 尽管有单数名称,但可以表示更多参数之间不满足的约束。您使用和检查参数越多,您在方法调用中正确地移动异常的次数就越多。 在许多情况下,抛出NullPointerException的代码应该是参数检查并抛出它,并附带一个不错的解释性消息。