0x2*_*9A3 3 java graphics jogl
什么是在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. */
Run Code Online (Sandbox Code Playgroud)
问题:
- 当我调整窗口大小时,我通常会闪烁.在我看来,我的双缓冲实现中有一个错误.
- 我怀疑,在哪里我必须放置函数swapBuffers - 之前或之后(如许多消息来源所说)绘图?正如您所注意到的,我在绘制矩形之前使用函数swapBuffers(drawable.swapBuffers()).否则,我在调整大小后会发出噪音.那么这样做的恰当方法是什么?
包含或省略该行capabilities.setDoubleBuffered(true)不会产生任何影响.
如果使用GLCanvas,默认情况下autoSwapBuffer模式设置为true,则不必手动调用swapBuffers().你的闪烁与双缓冲无关,而是将sun.awt.noerasebackground设置为true.
| 归档时间: |
|
| 查看次数: |
6677 次 |
| 最近记录: |