LWJGL+ GUI - Выход из рендерного цикла для работы в GUI без потери окна - Java
Формулировка задачи:
Всем привет!
Учусь использовать OpenGL в Java. И у меня возникла небольшая проблемка, окно LWJGL запускается с гуи, и если уже запустился рендер (исполняется пока до тех пор пока не нажму Esc или пока не закрою окно), то никакие действия с ГУИ я больше не могу проводить(ведь цикл продолжается). Нужно как-небудь выйти из цикла рендера и при этом не потерять окна. Вот код:
Спасибо за совет!
public class LWJGL {
private boolean boxselected = false;
private List<Box> cubes = new ArrayList<Box>(16);
public LWJGL() {
try {
Display.setDisplayMode(new DisplayMode(640, 480));
Display.setTitle("Java OpenGL program");
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
// Initialization OpenGL
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 640, 0, 480, 1, -1);
glMatrixMode(GL_MODELVIEW);
float translate_x = 0;
float translate_y = 0;
while (!Display.isCloseRequested()) { // Менял на while (Display.isActive()) { не помогло
// Render
glClear(GL11.GL_COLOR_BUFFER_BIT);
glPushMatrix();
glTranslatef(translate_x, translate_y, 0);
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && Mouse.getX() > 0
&& Mouse.getY() < 640 && Mouse.getY() > 0
&& Mouse.getY() < 480) {
translate_x+=Mouse.getDX();
translate_y+=Mouse.getDY();
}
int mouseX=(int)(Mouse.getX()-translate_x);
int mouseY=(int)(Mouse.getY()-translate_y);
while (Keyboard.next()) {
if (Keyboard.isKeyDown(Keyboard.KEY_C)) {
cubes.add(new Box(mouseX, mouseY));
}
if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
glPushMatrix();
}
if (Keyboard.isKeyDown(Keyboard.KEY_L)) {
glPopMatrix();
}
if (Keyboard.isKeyDown(Keyboard.KEY_R)) {
glLoadIdentity();
glClear(GL11.GL_COLOR_BUFFER_BIT);
}
}
for (Box box : cubes) {
if (Mouse.isButtonDown(0)
&& box.inbound(mouseX, mouseY)
&& !boxselected) {
boxselected = true;
box.selected = true;
//System.out.println("You pressed boxXXX!");
}
if (!Mouse.isButtonDown(0)) {
boxselected = false;
box.selected = false;
}
if (box.selected) {
box.update(Mouse.getDX(), Mouse.getDY());
}
box.draw();
}
glPopMatrix();
Display.update();
Display.sync(60);
if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
Display.destroy();
System.exit(0);
}
}
Display.destroy();
System.exit(0);
}Решение задачи: «LWJGL+ GUI - Выход из рендерного цикла для работы в GUI без потери окна»
textual
Листинг программы
public void actionPerformed(ActionEvent e) {
try{
if(e.getSource()==b1){
Thread paint = new Thread(new LWJGL());
paint.start();
}