Login  Register

Re: JOGL display update problem

Posted by polirol on Dec 29, 2012; 2:31pm
URL: https://forum.jogamp.org/JOGL-display-update-problem-tp4027643p4027645.html

Ok, here is the full code:

import javax.media.opengl.fixedfunc.*;
import javax.media.opengl.*;
import com.jogamp.opengl.util.Animator;
import com.jogamp.opengl.util.gl2.GLUT;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
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.glu.GLU;
import javax.media.opengl.glu.*;
import com.jogamp.opengl.util.FPSAnimator;
import static javax.media.opengl.GL.*;
import static javax.media.opengl.GL2.*;
import com.jogamp.opengl.util.texture.*;

import java.io.InputStream;



public class TestClass extends GLCanvas implements GLEventListener, KeyListener {


    private GLU glu = new GLU();
    private GLUT glut = new GLUT();
    private float t;


    public TestClass()
    {
        t = 0.0f;
        addKeyListener(this);
    }

    public void init( GLAutoDrawable d ) {
      GL2 gl = d.getGL().getGL2();
      gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
      gl.glClearDepth(1.0f);
      gl.glEnable(GL_DEPTH_TEST);
      gl.glDepthFunc(GL_LEQUAL);
      gl.glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
      gl.glShadeModel(GL_SMOOTH);


   float ambientLight[]={1f,1f,1f,1.0f};                 // set ambient light parameters
   gl.glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight,0);

   float lightPos[]={0.0f,30.0f,0.0f,0.0f};                    // set light position
   gl.glLightfv(GL_LIGHT0,GL_POSITION,lightPos,0);

   gl.glEnable(GL_LIGHT0);                                      // activate light0
   gl.glEnable(GL_LIGHTING);                                    // enable lighting

   }



    public void reshape(GLAutoDrawable d, int x, int y, int width, int height ){
      GL2 gl = d.getGL().getGL2();  // get the OpenGL 2 graphics context
      if (height == 0) height = 1;   // prevent divide by zero
      float aspect = (float)width / height;

      // Set the view port (display area) to cover the entire window
      gl.glViewport(0, 0, width, height);
      gl.glMatrixMode(GL_PROJECTION);
      gl.glLoadIdentity();
      glu.gluPerspective(45.0, aspect, 0.1, 100.0); // fovy, aspect, zNear, zFar

      // Enable the model-view transform
      gl.glMatrixMode(GL_MODELVIEW);
      gl.glLoadIdentity(); // reset

    }


    public void display( GLAutoDrawable d ) {

      GL2 gl = d.getGL().getGL2();
      gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear color and depth buffers
      gl.glMatrixMode(GL_MODELVIEW);
      gl.glLoadIdentity();  // reset the model-view matrix



      gl.glPushMatrix();
      gl.glTranslatef(0.0f,0.0f,-3f);
      glut.glutSolidTeapot(0.5f * Math.sin(t) );
      gl.glPopMatrix();

     // t+=0.05f;

      //d.swapBuffers();
      gl.glFlush();

    }



    public static void main( String[] args ) {

                JFrame frame = new JFrame("test class");
                frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );


                GLCanvas canvas = new TestClass();
                canvas.setSize(800,800);

                final Animator animator = new Animator(canvas);

        TestClass listener = new TestClass();
                canvas.addGLEventListener( listener );

                frame.getContentPane().add( canvas, BorderLayout.CENTER );

                frame.pack();
                frame.setVisible( true );
                animator.start();

        }



  public void displayChanged( GLAutoDrawable d, boolean modeChanged,
            boolean deviceChanged ) { }

  public void dispose(GLAutoDrawable d)
  {
  System.out.println("Exiting");
  }



  ///KeyEvents///


  public void keyReleased(KeyEvent ke)
  { }

  public void keyTyped(KeyEvent ke){}


  public void keyPressed(KeyEvent ke)
  {
  System.out.println("Key pressed : " + ke.getKeyChar());

  switch(ke.getKeyChar())
  {

   //TODO

  }

  t+=0.5f;

  }



}

Thank you very much for your time