#java #opengl #lwjgl
#java #opengl #lwjgl
Вопрос:
Я разрабатываю игру с использованием LWJGL. При перемещении окна (планирую добавить код изменения размера в будущем) цикл рендеринга зависает. Я бы хотел, чтобы он продолжал работать каким-то образом во время перемещения. LWJGL не включает glutMainLoop.
Отображение принадлежит OpenGL, а не Java.
Соответствующий код:
regular = new DisplayMode(800,600);
GL11.glClearColor(0.47f,0.55f,1.0f, 0.0f);
GL11.glClearDepth(1.0f);
try {
Display.setDisplayMode(regular);
Display.setTitle("Game Name");
Display.setIcon(loadIcon("resources/icon.png"));
Display.create();
seedresult= new Random(seed);
} catch (LWJGLException e) {
e.printStackTrace();
}
while (!Display.isCloseRequested()) {
Display.sync(60);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
//render objects
Display.update();}
System.exit(0);
Комментарии:
1. Конечно, цикл рендеринга зависает, поскольку окно обрабатывает событие перемещения, поэтому оно не отображается одновременно.
2. Я был уверен, что именно поэтому, но мне интересно, как я могу это исправить.
Ответ №1:
Эй, попробуйте создать часть рендеринга (инициализация Opengl и обновление / рендеринг) в отдельном потоке. Я имею в виду создание нового потока для рендеринга, отличного от использования основного потока.
для справки вы можете проверить эту вики (последний пример) http://lwjgl.org/wiki/index.php?title=Basic_LWJGL_Applet
Комментарии:
1. Я сделал это, и это не заняло много времени, так как у меня уже есть мой основной рендерер, содержащийся в классе, все, что мне нужно было сделать, это сделать его доступным для выполнения и создать поток в функции main, но это не решило проблему.
2. хорошо, последняя пробная версия … можете ли вы поместить режим ожидания на минимальное количество в игровой поток и сообщить мне статус?
3. Обычно я имею в виду, что при обработке событий ваш код не выполняется до тех пор, пока события не будут обработаны…
4. Изменение игры для запуска из холста решило проблему зависания экрана, но создало ряд новых проблем, с которыми я могу справиться, если я действительно хочу, чтобы это было исправлено. По-видимому, если у вас есть холст в отдельном потоке от отображения, он продолжает запускать игровой цикл во время событий окна. Поскольку моя игра многопоточна во всех отношениях, кроме рендеринга, я могу отложить это, если смогу эффективно заставить работать изменение размера и пару других вещей, которые в первую очередь затрудняют перемещение окна.
5. @Sean: Извините, я не понял, что именно вы имеете в виду: ( . Не могли бы вы сообщить мне точные изменения, внесенные вами, чтобы заставить его работать?