Какой приемлемый способ реализовать двойную буферизацию в JOGL (Java OpenGL)?
Я пытаюсь сделать это с помощью следующего кода:
...
/** Creating canvas. */
GLCapabilities capabilities = new GLCapabilities();
capabilities.setDoubleBuffered(true);
GLCanvas canvas = new GLCanvas(capabilities);
...
/** Function display(…), which draws a white Rectangle on a black background. */
public void display(GLAutoDrawable drawable) {
drawable.swapBuffers();
gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glBegin(GL.GL_POLYGON);
gl.glVertex2f(-0.5f, -0.5f);
gl.glVertex2f(-0.5f, 0.5f);
gl.glVertex2f(0.5f, 0.5f);
gl.glVertex2f(0.5f, -0.5f);
gl.glEnd();
}
...
/** Other functions are empty. */
Вопросы:
- Когда я изменяю размер окна, я обычно мерцаю. На мой взгляд, у меня ошибка в моей реализации двойной буферизации.
- У меня есть сомнения, где я должен разместить функцию swapBuffers - до или после (как говорят многие источники) чертежа? Как вы заметили, я использую функцию swapBuffers (drawable.swapBuffers()
) до рисования прямоугольника. В противном случае, я получаю шум после изменения размера. Итак, что является подходящим способом сделать это?
Включение или пропуск строки capabilities.setDoubleBuffered(true)
не оказывает никакого влияния.