package jogamp.opengl.awt;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.List;
import com.jogamp.opengl.GLProfile;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLCapabilities;
import com.jogamp.opengl.GLCapabilitiesImmutable;
import com.jogamp.opengl.GLDrawableFactory;
import com.jogamp.opengl.GLEventListener;
import com.jogamp.common.GlueGenVersion;
import com.jogamp.common.os.Platform;
import com.jogamp.common.util.VersionUtil;
import com.jogamp.opengl.JoglVersion;
@SuppressWarnings("serial")
public class VersionApplet extends Applet {
TextArea tareaVersion;
TextArea tareaCaps;
GLCanvas canvas;
public static void main(final String[] args) {
final Frame frame = new Frame("JOGL Version Applet");
frame.setSize(800, 600);
frame.setLayout(new BorderLayout());
final VersionApplet va = new VersionApplet();
frame.addWindowListener(new ClosingWindowAdapter(frame, va));
va.init();
frame.add(va, BorderLayout.CENTER);
frame.validate();
frame.setVisible(true);
va.start();
}
static class ClosingWindowAdapter extends WindowAdapter {
Frame f;
VersionApplet va;
public ClosingWindowAdapter(final Frame f, final VersionApplet va) {
this.f = f;
this.va = va;
}
@Override
public void windowClosing(final WindowEvent ev) {
f.setVisible(false);
va.stop();
va.destroy();
f.remove(va);
f.dispose();
System.exit(0);
}
}
private synchronized void my_init() {
if(null != canvas) { return; }
setEnabled(true);
final GLProfile glp = GLProfile.getDefault();
final GLCapabilities glcaps = new GLCapabilities(glp);
setLayout(new BorderLayout());
String s;
tareaVersion = new TextArea(120, 60);
s = VersionUtil.getPlatformInfo().toString();
System.err.println(s);
tareaVersion.append(s);
s = GlueGenVersion.getInstance().toString();
System.err.println(s);
tareaVersion.append(s);
/*
s = NativeWindowVersion.getInstance().toString();
System.err.println(s);
tareaVersion.append(NativeWindowVersion.getInstance().toString());
*/
s = JoglVersion.getInstance().toString();
System.err.println(s);
tareaVersion.append(s);
tareaCaps = new TextArea(120, 20);
final GLDrawableFactory factory = GLDrawableFactory.getFactory(glp);
final List<GLCapabilitiesImmutable> availCaps = factory.getAvailableCapabilities(null);
for(int i=0; i<availCaps.size(); i++) {
s = availCaps.get(i).toString();
System.err.println(s);
tareaCaps.append(s);
tareaCaps.append(Platform.getNewline());
}
final Container grid = new Container();
grid.setLayout(new GridLayout(2, 1));
grid.add(tareaVersion);
grid.add(tareaCaps);
add(grid, BorderLayout.CENTER);
canvas = new GLCanvas(glcaps);
canvas.addGLEventListener(new GLInfo());
canvas.setSize(10, 10);
add(canvas, BorderLayout.SOUTH);
validate();
}
private synchronized void my_release() {
if(null!=canvas) {
remove(canvas);
canvas.destroy();
canvas = null;
remove(tareaVersion.getParent()); // remove the grid
tareaVersion = null;
tareaCaps = null;
setEnabled(false);
}
}
@Override
public void init() {
System.err.println("VersionApplet: init() - begin");
my_init();
System.err.println("VersionApplet: init() - end");
}
@Override
public void start() {
System.err.println("VersionApplet: start() - begin");
canvas.setVisible(true);
System.err.println("VersionApplet: start() - end");
}
@Override
public void stop() {
System.err.println("VersionApplet: stop() - begin");
canvas.setVisible(false);
System.err.println("VersionApplet: stop() - end");
}
@Override
public void destroy() {
System.err.println("VersionApplet: destroy() - start");
my_release();
System.err.println("VersionApplet: destroy() - end");
}
class GLInfo implements GLEventListener {
@Override
public void init(final GLAutoDrawable drawable) {
final GL gl = drawable.getGL();
final String s = JoglVersion.getGLInfo(gl, null).toString();
System.err.println(s);
tareaVersion.append(s);
}
@Override
public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, final int height) {
}
@Override
public void display(final GLAutoDrawable drawable) {
}
@Override
public void dispose(final GLAutoDrawable drawable) {
}
}
}