import java.awt.GridLayout; import java.nio.ByteBuffer; import java.nio.FloatBuffer; import javax.media.opengl.GL; import javax.media.opengl.GL2; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLEventListener; import javax.media.opengl.awt.GLCanvas; import javax.media.opengl.awt.GLJPanel; import javax.media.opengl.glu.GLU; import javax.swing.JFrame; public class Renderer extends GLCanvas implements GLEventListener { private final int triangleSizeInBytes = 4*3*3; private final FloatBuffer triangle; private final GLU glu = new GLU(); private boolean useVertexArray = true; public static void main(String[] args) { JFrame frame = new JFrame("JOGL Test"); frame.setLayout(new GridLayout(1, 1)); frame.add(new Renderer()); frame.setSize(400, 300); frame.setVisible(true); } public Renderer() { addGLEventListener(this); triangle = ByteBuffer.allocateDirect(triangleSizeInBytes).asFloatBuffer(); float[] triangleArray = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f }; triangle.put(triangleArray).flip(); } @Override public void init(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); } @Override public void dispose(GLAutoDrawable drawable) { } @Override public void display(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f, -4.0f); gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); if (useVertexArray) { gl.glEnableClientState(GL2.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL2.GL_FLOAT, 0, triangle); gl.glDrawArrays(GL2.GL_TRIANGLES, 0, 3); gl.glDisableClientState(GL2.GL_VERTEX_ARRAY); } else { gl.glBegin(GL2.GL_TRIANGLES); gl.glVertex3f(triangle.get(0), triangle.get(1), triangle.get(2)); gl.glVertex3f(triangle.get(3), triangle.get(4), triangle.get(5)); gl.glVertex3f(triangle.get(6), triangle.get(7), triangle.get(8)); gl.glEnd(); } } @Override public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { GL2 gl = drawable.getGL().getGL2(); if (height <= 0) // avoid a divide by zero error! 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, 1.0f, 1000.0f); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity(); } }