【发布时间】:2009-10-08 22:45:25
【问题描述】:
在 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) 行不会产生任何影响。
【问题讨论】: