In a demo app of mine I want to switch the polygon mode with glPolygonMode between LINES and FULL. To make things easy I added a KeyListener to the GLCanvas. I declared a (volatile) variable polyMode that is set by the listener method and used by a call to glPolygonMode(...) which is the first operation of GLEventListener.display(...).
Now something strange happens:
a)
Initially the polygonmode is set to lines. After successfully changing to FULL-mode the app doesn't get back to LINE mode although the controlling variable is set.
b)
When having gl.glPolygonMode() in display() resizing of the windows fails with the following exception:
1 2 3 4 5 6 7 8 9
| net.java.games.jogl.GLException: glGetError() returned the following error codes after a call to glViewport(): GL_INVALID_ENUM at net.java.games.jogl.DebugGL.checkGLGetError(DebugGL.java:9741) at net.java.games.jogl.DebugGL.glViewport(DebugGL.java:8974) at net.java.games.jogl.GLCanvas$1.run(GLCanvas.java:121) at net.java.games.jogl.impl.GLContext.invokeGL(GLContext.java:189) at net.java.games.jogl.GLCanvas.displayImpl(GLCanvas.java:196) at net.java.games.jogl.GLCanvas.display(GLCanvas.java:91) at net.java.games.jogl.Animator$1.run(Animator.java:104) at java.lang.Thread.run(Thread.java:534) |
Here the code that is directly called by an anonymouse KeyListener:
1 2 3 4 5 6 7
| private void keyPressed(int keyCode){ switch(keyCode){ case KeyEvent.VK_F: polyMode = (polyMode == GL.GL_LINES) ? GL.GL_FILL : GL.GL_LINES; break; } } |
And this is my display-Method:
1 2 3 4 5 6 7 8 9 10
| public void display(GLDrawable glDrawable) { gl.glPolygonMode(GL.GL_FRONT, polyMode); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT ); gl.glLoadIdentity();
gl.glTranslated(0, 0, zoom); wheel.paint(gl); } |
I am using JOGL from July 18th (Windows version).
Does anyone know what I am doing wrong or how to solve polygon mode switching problem?
Thanks in advance.