OpenGL (ES) - glBindBuffer генерирует исключение IllegalArgumentException: оставшийся <size () - PullRequest
2 голосов
/ 01 мая 2011

Я создал буфер вершин, который правильно рисует при использовании glDrawArrays, однако они не загружаются в VBO.Вот код:


FloatBuffer circleBuffer = ByteBuffer.allocateDirect(numVertices * 3 *
  4).order(ByteOrder.nativeOrder()).asFloatBuffer();

for (int j = 0; j &lt 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() &lt size
ERROR/AndroidRuntime(7127): at com.google.android.gles_jni.GLImpl.glBufferData(Native Method)

РЕДАКТИРОВАТЬ - Решение

<code>
buffer.flip();

1 Ответ

0 голосов
/ 01 мая 2011

Исключение Java, которое должно быть преднамеренно вызвано методами, которым не нравятся их параметры.Это расширяет RuntimeException, что означает, что его не нужно перехватывать.Несмотря на то, что имя в единственном числе может представлять собой неудовлетворенное ограничение между несколькими параметрами.Чем больше вы используете и проверяете параметры, тем больше вы продвигаетесь к исключению в собственном вызове метода.Во многих случаях код, который генерирует исключение NullPointerException, должен проверять аргументы и генерировать это с приличным пояснительным сообщением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...