Я переключился на использование GLJPanel из GLCanvas, чтобы избежать некоторых мерцающих проблем, однако это привело к нескольким непредвиденным последствиям.
Из того, что я до сих пор выяснил, GLJPanel вызывает GLEventListener.init() каждый раз, когда он изменяет свой размер, который либо сбрасывает различные функции openGL, которые я включил в init () (тест глубины, освещение и т. д.), если мне повезет, либо полностью стирает мою модель, если я не везу.
Я пытался отладить его, но не могу исправить это поведение.Это моя функция 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 ()?Учитывая поведение init () и reshape () для GLJPanel, я не уверен, что это тоже исправит.