特定のちらつきの問題を回避するために、GLCanvas から GLJPanel を使用するように切り替えましたが、これにより、いくつかの意図しない結果が生じました。
これまでに収集したことから、GLJPanel はサイズが変更されるたびに GLEventListener.init() を呼び出し、運が良ければ init() で有効にしたさまざまな openGL 関数 (深度テスト、照明など) をリセットします。 、そうでない場合はモデルを完全に消去します。
デバッグを試みましたが、この動作を修正できません。これは私の init() 関数です:
gl.glShadeModel( GL.GL_SMOOTH );
gl.glEnable( GL.GL_DEPTH_TEST );
gl.glDepthFunc( GL.GL_LEQUAL );
gl.glDepthRange( zNear, zFar );
gl.glDisable( GL.GL_LINE_SMOOTH );
gl.glEnable(GL.GL_NORMALIZE);
gl.glEnable( GL.GL_BLEND );
gl.glBlendFunc( GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA );
// set up the background color
gl.glClearColor( ((float)backColor.getRed () / 255.0f),
((float)backColor.getGreen() / 255.0f),
((float)backColor.getBlue () / 255.0f), 1.0f);
gl.glEnable ( GL.GL_LIGHTING );
gl.glLightfv( GL.GL_LIGHT0, GL.GL_AMBIENT, Constants.AMBIENT_LIGHT, 0 );
gl.glLightfv( GL.GL_LIGHT0, GL.GL_DIFFUSE, Constants.DIFFUSE_LIGHT, 0 );
gl.glEnable ( GL.GL_LIGHT0 );
gl.glTexEnvf( GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE );
gl.glHint( GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST );
// code to generate model
init() からすべてを削除し、display() 関数に追加する以外に、これを回避する方法はありますか? GLJPanel の init() と reshape() の動作を考えると、それが修正されるかどうかはわかりません。