package net.sf.openrocket.gui.figure3d.photo; import com.jogamp.opengl.GL; import com.jogamp.opengl.GL2; import com.jogamp.opengl.GLAutoDrawable; import com.jogamp.opengl.GLCapabilities; import com.jogamp.opengl.GLEventListener; import com.jogamp.opengl.GLProfile; import com.jogamp.opengl.JoglVersion; import com.jogamp.opengl.awt.GLCanvas; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Rectangle; public class Test3D { public static void main(String[] args) { BasicFrame frame = new BasicFrame(); frame.setVisible(true); } private static class BasicFrame extends JFrame { public BasicFrame() { PhotoFrame pa = new PhotoFrame(); pa.setVisible(true); } } private static class PhotoFrame extends JFrame { private final PhotoPanel photoPanel; public PhotoFrame() { this.setSize(1024, 768); photoPanel = new PhotoPanel(); setContentPane(photoPanel); } } private static class PhotoPanel extends JPanel implements GLEventListener { private Component canvas; PhotoPanel() { this.setLayout(new BorderLayout()); initGLCanvas(); } private void initGLCanvas() { try { final GLProfile glp = GLProfile.get(GLProfile.GL2); final GLCapabilities caps = new GLCapabilities(glp); caps.setBackgroundOpaque(false); caps.setSampleBuffers(true); caps.setNumSamples(6); canvas = new GLCanvas(caps); // NOTE: using GLJPanel did not work either ((GLAutoDrawable) canvas).addGLEventListener(this); this.add(canvas, BorderLayout.CENTER); } catch (Throwable t) { canvas = null; this.add(new JLabel("Unable to load 3d Libraries: " + t.getMessage())); } } @Override public void paintImmediately(Rectangle r) { super.paintImmediately(r); if (canvas != null) ((GLAutoDrawable) canvas).display(); } @Override public void paintImmediately(int x, int y, int w, int h) { super.paintImmediately(x, y, w, h); if (canvas != null) ((GLAutoDrawable) canvas).display(); } @Override public void display(final GLAutoDrawable drawable) { draw(drawable); } private void draw(final GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); System.out.println(JoglVersion.getInstance().toString(gl)); float[] color = {1f, 1f, 0f, 1f}; gl.glEnable(GL.GL_MULTISAMPLE); gl.glClearColor(color[0], color[1], color[2], color[3]); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glDisable(GL.GL_BLEND); gl.glFrontFace(GL.GL_CCW); } @Override public void init(final GLAutoDrawable drawable) { final GL2 gl = drawable.getGL().getGL2(); gl.glClearDepth(1.0f); // clear z-buffer to the farthest gl.glDepthFunc(GL.GL_LESS); // the type of depth test to do } @Override public void dispose(GLAutoDrawable glAutoDrawable) { } @Override public void reshape(GLAutoDrawable glAutoDrawable, int i, int i1, int i2, int i3) { } } }