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をどこに配置する必要がありますか—(多くの情報源が言うように)描画の前または後ですか?お気づきのように、長方形を描く前にdrawable.swapBuffers()
関数swapBuffers( )を使用しています。そうしないと、サイズ変更後にノイズが発生します。それで、それを行うための適切な方法は何ですか?
行を含めたり省略したりしてcapabilities.setDoubleBuffered(true)
も効果はありません。