Исключение, вызывающее FloatBuffer? Как я могу это исправить?

#java #lwjgl

#java #lwjgl

Вопрос:

Код:

 FloatBuffer buf = BufferTools.reserveData(4);
float[] fl = new float[]{0.1f, 0.1f, 0.1f, 1.0f};
buf.put(fl);
  

где buf.put(fl) находится строка 2039, о которой говорит ошибка:

 Exception in thread "main" java.lang.IllegalArgumentException: Number of remaining buffer elements is 0, must be at least 4. Because at most 4 elements can be returned, a buffer with at least 4 elements is required, regardless of actual returned element count
    at org.lwjgl.BufferChecks.throwBufferSizeException(BufferChecks.java:162)
    at org.lwjgl.BufferChecks.checkBufferSize(BufferChecks.java:189)
    at org.lwjgl.BufferChecks.checkBuffer(BufferChecks.java:258)
    at org.lwjgl.opengl.GL11.glLight(GL11.java:2039)
    at Joehot200.TerrainDemo.setUpLighting(TerrainDemo.java:1543)
    at Joehot200.TerrainDemo.enterGameLoop(TerrainDemo.java:1984)
    at Joehot200.TerrainDemo.startGame(TerrainDemo.java:2109)
    at Joehot200.Main.main(Main.java:56)
  

Что я делаю не так? Я бы просто хотел иметь FloatBuffer с 4 элементами в нем, чтобы я мог установить окружающее освещение OpenGL.

Комментарии:

1. Что находится в TerrainDemo: 2109, 1984 и 1543?

2. Итак, код, который вы нам показываете, взят из org.lwjgl.opengl.GL11 , а не из вашего собственного кода?

3. BufferTools не является org.lwggl API. Откуда оно берется?

4. Кроме того, зачем использовать BufferTools ? FloatBuffer.allocate(N) делает то же самое

Ответ №1:

LWJGL выдает эту ошибку, если буфер слишком мал для запрошенной операции. Смотрите здесь

Я предполагаю, что BufferTools.reserveData(4) резервируется 4 байта, а не 4 * sizeof(float) == 16 байт.