I am playing around with the JOGL double-buffering example at http://www.java-tips.org/other-api-tips/jogl/how-to-implement-a-simple-double-buffered-animation-with-mouse-e.html, and modified it to draw a rotating square moving across the page.
This worked, but when I tried to bind a texture to it, the image flickers as it goes across the screen. I have tried also setting the swap interval to use vsync, but there was no improvement.
What could cause the flickering, and what can I do to get rid of it?
Here is where I altered the code from Kiet Le’s original example:
Texture elf;
float x = -100f;
public void init(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.setSwapInterval(1);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.getGL2().glShadeModel(GLLightingFunc.GL_FLAT);
gl.glEnable(GL.GL_BLEND);
try {
// load a 64x64 image
elf = loadImage("jogl/ch8/0_2.png");
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
elf.enable();
elf.setTexParameteri(GL.GL_TEXTURE_WRAP_S,
GL2.GL_CLAMP);
elf.setTexParameteri(GL.GL_TEXTURE_WRAP_T,
GL2.GL_CLAMP);
elf.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER,
GL.GL_NEAREST);
elf.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER,
GL.GL_NEAREST);
elf.bind();
gl.getGL2().glPushMatrix();
gl.getGL2().glTranslatef(x, -50, 0f);
gl.getGL2().glRotatef(spin, 0.0f, 0.0f, 1.0f);
gl.getGL2().glColor3f(1.0f, 1.0f, 1.0f);
gl.getGL2().glBegin(GL2.GL_QUADS);
gl.getGL2().glTexCoord2f(0, 1);
gl.getGL2().glVertex2f(0, 0);
gl.getGL2().glTexCoord2f(1, 1);
gl.getGL2().glVertex2f(25, 0);
gl.getGL2().glTexCoord2f(1, 0);
gl.getGL2().glVertex2f(25, 25);
gl.getGL2().glTexCoord2f(0, 0);
gl.getGL2().glVertex2f(0, 25);
gl.getGL2().glEnd();
elf.disable();
//gl.getGL2().glRectf(x, -50f, x + 25f, -25f);
gl.getGL2().glPopMatrix();
gl.glFlush();
x++;
if (x > 50f) {
x = -100f;
}
spinDisplay();
}