Posted by
gouessej on
Dec 30, 2012; 10:15am
URL: https://forum.jogamp.org/JOGL-display-update-problem-tp4027643p4027654.html
You create 2 instances of TestClass, your main method was completely wrong. This source code works (without volatile):
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) );
System.out.println("Display : " + 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 );
TestClass canvas = new TestClass();
canvas.setSize(800,800);
final Animator animator = new Animator(canvas);
canvas.addGLEventListener( canvas );
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() + " " + t);
switch(ke.getKeyChar())
{
//TODO
}
t+=0.5f;
}
}