Зачем использовать буферы в OpenGL (LWJGL), если работают простые массивы? - PullRequest
1 голос
/ 21 февраля 2020

Итак, в настоящее время я изучаю OpenGL, и в следующем уроке говорится:

Первое, что мы должны сделать, это сохранить наш массив с плавающей точкой в ​​FloatBuffer. Это в основном связано с тем, что мы должны взаимодействовать с библиотекой OpenGL, которая основана на C, поэтому мы должны преобразовать наш массив с плавающей точкой во что-то, что может управляться библиотекой.

И я полностью понимаю, но что было странно, что каждый метод OpenGL, предоставленный LWJGL, работает с буферами, но также и с простыми массивами.

Почему это так и почему я должен использовать буферы тогда?

Некоторые примеры:

Это работает с indices, являющимся IntBuffer, но также и int[].

glBufferData(GL_ARRAY_BUFFER, indices, GL_STATIC_DRAW);

Это работает с value является FloatBuffer, но также является float[].

glUniformMatrix4fv(
     uniforms.get(uniformName),
     false,
     value
);

1 Ответ

2 голосов
/ 21 февраля 2020

Исходя из цитаты, я предполагаю, что учебник не был написан для LWJGL 3.

LWJGL 3.0.0 была первой добавленной версией поддержка ароматизированных методов «Java массива параметров», которые ранее использовали / поддерживали только буферы NIO.

Добавлена ​​поддержка Java параметров массива и критических аборигенов HotSpot.

Основано на обсуждении, которое можно найти в выпуске 175

...