Hi, I have question about how to properly(and efficiently) call OpenGL drwawing from outside SWT User Interface thread. I have a program, which I started to port from AWT to SWT. On AWT version I'm calling:
refresh = new Thread(){
public void run() {
while(true){
if (isVisible()) awtglcanvas.repaint();
Display.sync(fps);
}
}
};
refresh.setDaemon(true);
refresh.start();
And I was able to run it smoothly without any significant CPU overload for even fps>100.
In SWT I do:
(initialization)
this.datagl = new GLData ();
datagl.doubleBuffer = true;
swtglcanvas = new GLCanvas(shell, SWT.NONE, datagl);
swtglcanvas.setBounds(0,0,x,y);
swtglcanvas.setCurrent();
try {
GLContext.useContext(swtglcanvas);
} catch(LWJGLException e) { e.printStackTrace(); }
and displaying in non User Interface Thread(similary):
Thread refresh = new Thread(){
public void run() {
while(swt_display.isDisposed()==false){
order_of_draw();
org.lwjgl.opengl.Display.sync(fps);
}
}
};
refresh.setDaemon(true);
refresh.start();
,where "order_of_draw();" call the following:
public void order_of_draw(){
swt_display.asyncExec(new Runnable(){
public void run() {
someLWJGLheavyDrawing();
swtglcanvas.swapBuffers();
}
}
});
}
However, this latter consume much of CPU at similar fps compared to AWT version(>80% cpu load, compared to ~1% in AWTGLCanvas at fps=60. At 10 fps it is ~20% cpu load versus ~0% cpu load). There must be something I do wrong, but what it is? LWJGL drawing code is identical on both version. Thanks in advance for any replies and sorry for my english.