Hi
If you want to use software just use the components graphics object to paint the framebuffer on to the component..
frambuffer.display(component.getGraphics());
For the hardware mode you could use a canvas like this and add it to a jpanel(if you want to use both, soft and hardware modus you can then just replace the canvas in the jpanel by its software counterpart). I think there could be some problems with that because of Swing/awt integration..this one needs to call render() after every update to the world you want rendered...:
public class HardwareCanvas extends Canvas
{
private FrameBuffer _buffer;
private World _world;
private Canvas myCanvas;
private boolean isWireframeMode = false;
public HardwareCanvas(World myWorld)
{
this.myWorld = myWorld;
createCanvas(800, 800);
}
/**
* Set up the panel and listener, and create a framebuffer
* in hardwarerendering mode.
*/
private void createCanvas(int height, int width) {
if(myCanvas == null)
{
myFramebuffer = new FrameBuffer(
width,
height,
FrameBuffer.SAMPLINGMODE_HARDWARE_ONLY);
myFramebuffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
myCanvas = myFramebuffer.enableGLCanvasRenderer(); // Enable hardware rendering
/* Your listeners go here*/
myCanvas.addKeyListener( new KeyAdapter() {} );
myCanvas.requestFocus();
}
}
/* Render the world...could use a render loop as well so you dont have to call it after every update */
public void render() {
myFramebuffer.clear();
//Render the scene onto an image
myWorld.renderScene(myFramebuffer);
if (!isWireframeMode) {
myWorld.draw(myFramebuffer);
} else {
myWorld.drawWireframe(myFramebuffer, Color.white);
}
myFramebuffer.update();
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
myFramebuffer.displayGLOnly();
myCanvas.repaint();
}
});
}
public void changeWireframeMode()
{
isWireframeMode = !isWireframeMode;
this.render();
}
}