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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| 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 { 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().glPopMatrix();
gl.glFlush(); x++; if (x > 50f) { x = -100f; } spinDisplay(); } |