Integrating JME into SWT Shell

I’m working on the same Problem. I know that JMonkeyEngine runns the update loop. But the Canvas is not visible. I thought that I have to update the Canvas, but how?

if I use this class I get a get a black Canvas in size of 512x512.

[java]package jme3.swt;



import org.eclipse.swt.SWT;

import org.eclipse.swt.opengl.GLCanvas;

import org.eclipse.swt.opengl.GLData;



import com.ncm.jme.plugin.eclipse.canvas.JmeView;



public class SwtCanvas extends GLCanvas {



private SwtCanvas instance = this;



public SwtCanvas( GLData data) {

super( JmeView.getComposite(), SWT.None, data );

setSize(512, 512);

setCurrent();



}





public int getWidth () {

return getSize().x;

}



public int getHeight() {

return getSize().y;

}





}[/java]



I also implementet an updateloop:

[java] new Runnable() {

public void run() {

if (canvas.isDisposed()) return;

canvas.getDisplay().update();

System.out.println("Canvas: Width: "+canvas.getWidth()+" Height: "+canvas.getHeight());

System.out.println("Composite: Width: "+canvas.getParent().getSize().x+" Height: "+canvas.getParent().getSize().y);

canvas.setSize(canvas.getWidth(),canvas.getHeight());

settings.setResolution(canvas.getParent().getSize().x, canvas.getParent().getSize().y);

canvas.swapBuffers();



canvas.getDisplay().timerExec(50, this);

}

}.run();[/java]



From this I know that the canvas is changing its Size, but the shown black canvas is still 512x512…



Edit: The Problem is, that the canvas is painted only once. I found it out with this:

[java]addListener (SWT.Paint, new Listener () {

public void handleEvent (Event event) {

System.out.println("Paint");

}

});[/java]

@niccommander

Hi! I’m considering to start working on my visualization project again, but I won’t be using any engine other than jme3.

did you manage to fix the repaint issue? If not I’ll try to combine the built-in awt integration with the SWT/AWT bridge and see how it performs.



(sorry if I haven’t contributed to you posts, but at that time I was finishing up my thesis and I stopped checking the forum)

It should be fairly easy to create an SWT compatible canvas. You start with jME3’s “LwjglCanvas” source and just replace all references to AWT/LWJGL to SWT. The critical part is the GLContext.useContext() method which actually allows you to bind LWJGL to an SWT GLCanvas.



I found this snippet of code that shows how to do it:

http://bingjava.appspot.com/snippet.jsp?id=389



The parts with the “GL11” calls should be replaced with proper callback to jME3’s SystemListener interface which then goes back to Application.

sorry, but I stoped trying a while ago because I had no success.

If Momoko_Fan 's method works pls let me know