我切换到使用 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() 的行为,我不确定这是否也能解决它。