import com.jogamp.opengl.util.Animator;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;
import javax.swing.JFrame;

public class TestFedora 
{
    public static void main(String[] args) 
    {
        GLProfile.initSingleton();
        GLProfile profile = GLProfile.getDefault();
        GLCapabilities capabilities = new GLCapabilities(profile);
        JOGLFrame frame = new JOGLFrame(capabilities);
        frame.setVisible(true);
    }
    
    private static class JOGLFrame extends JFrame
    {
        private static Animator animator;
        
        JOGLFrame(GLCapabilities capabilities)
        {
            super("Test Fedora 18 x86_64");
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            addWindowListener(new WindowWatcher());
            setSize(640, 480);
            //GLJPanel canvas = new GLJPanel(capabilities);
            GLCanvas canvas = new GLCanvas(capabilities);
            canvas.addGLEventListener(new CanvasGLEventListener());
            add(canvas);
            animator = new Animator(canvas);
            animator.start();
        }
        
        private class WindowWatcher extends WindowAdapter
        {
            @Override
            public void windowClosing(WindowEvent event)
            {
                animator.stop();
            }
        }
        
        private class CanvasGLEventListener implements GLEventListener
        {
            private GLU glu;

            CanvasGLEventListener()
            {
                super();
                glu = new GLU();
            }

            @Override
            public void reshape(GLAutoDrawable drawable, int x, int y, 
                        int width, int height) 
            {
                final GL2 gl = drawable.getGL().getGL2();
                if (height <= 0)
                {
                    height = 1;
                }
                final float h = (float)width / (float)height;
                gl.glViewport(0, 0, width, height);
                gl.glMatrixMode(GL2.GL_PROJECTION);
                gl.glLoadIdentity();
                glu.gluPerspective(45.0f, h, 1f, 20f);
                gl.glMatrixMode(GL2.GL_MODELVIEW);
                gl.glLoadIdentity();
            }
            
            @Override
            public void init(GLAutoDrawable drawable) 
            {
                final GL2 gl = drawable.getGL().getGL2();
                gl.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
            }

            @Override
            public void dispose(GLAutoDrawable drawable) 
            {

            }

            @Override
            public void display(GLAutoDrawable drawable) 
            {
                final GL2 gl = drawable.getGL().getGL2();
                gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
                gl.glLoadIdentity();
                gl.glTranslatef(-1.5f, 0.0f, -6.0f);
                gl.glBegin(GL.GL_TRIANGLES);
                    gl.glVertex3f( 0.0f, 1.0f, 0.0f);
                    gl.glVertex3f(-1.0f, -1.0f, 0.0f);
                    gl.glVertex3f( 1.0f, -1.0f, 0.0f);
                gl.glEnd();
                gl.glTranslatef(3.0f, 0.0f, 0.0f);
                gl.glBegin(GL2.GL_QUADS);
                    gl.glVertex3f(-1.0f, 1.0f, 0.0f);
                    gl.glVertex3f( 1.0f, 1.0f, 0.0f);
                    gl.glVertex3f( 1.0f, -1.0f, 0.0f);
                    gl.glVertex3f(-1.0f, -1.0f, 0.0f);
                gl.glEnd();
            }
        }
    }
}
