#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 байт.