Я хочу нарисовать модель с LWJGL
, и я знаю, что при вызове каждого метода glVertex
происходит вызов JNI
, что отнимает много времени. Поскольку у меня есть модель в файле, я хочу использовать только один вызов JNI
(добавьте собственный метод в библиотеку LWJGL
), а с другой стороны, верните мои модели из файла (используя язык c) и нарисуйте их все (избегая вызова JNI
на вершину). Итак, я хочу изменить исходный код библиотеки и добавить функцию для этого. мой вопрос в том, что эта функция доступна в LWJGL
, JOGL
или в любых возможных привязках java для openGL
?Использование LWJGL без чрезмерного количества вызовов JNI
ответ
Использование Vertex Buffer Objects для хранения данных вершин, и делать звонки рисовать, как много вершин/треугольников практична только с одним вызовом glDrawArrays, glDrawElements или подобное.
This page объясняет, как использовать их в LWJGL.
Обратите внимание, что версия LWJGL документов OpenGL довольно не хватает. Проверьте версии OpenGL official site на версии C, которые очень хорошо объясняют их функциональность.
Большое спасибо @Michael Slade –
Вы можете использовать функцию OpenGL glVertexPointer, которая в LWJGL завернута в glVertexPointer (link).
НО!
Если вы беспокоитесь о скорости простого вызова JNI, то почему бы не пересмотреть это в c/C++ вместо этого?
Позже Edit: documentation for glVertexPointer
, потому что другие части моей программы написаны на Java и SWT. –
Звонок JNI может занять около 10 нс. Сколько раз вы это называете? –
Я думаю около миллиона раз. –
Так что это может занять 10 мс. Стоит проверить, сколько времени занимает ваша машина (она может варьироваться довольно часто). Какой-то тип массовой загрузки имеет смысл, поэтому разумно проверить, что у нее нет такой функции. Конечно, JOCL может принимать целые массивы int/float/double в качестве аргументов (не совсем то же самое) –