首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JOGL双缓冲

JOGL双缓冲
EN

Stack Overflow用户
提问于 2009-10-08 22:45:25
回答 3查看 7.1K关注 0票数 3

在JOGL (Java OpenGL)中实现双缓冲的合格方法是什么?

我试图通过以下代码来实现这一点:

代码语言:javascript
复制
...    

/** 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 - before或(如许多消息来源所述)之后的绘图?正如您注意到的,在绘制矩形之前,我使用函数swapBuffers (drawable.swapBuffers())。否则,我在调整尺寸后会有噪音。那么,怎样才是最合适的方法呢?

包括或省略行capabilities.setDoubleBuffered(true)不会产生任何影响。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-09 06:53:13

如果JOGL类似于C/C++版本:

RMorrisey和示例代码在说明glFlush的使用时是不正确的。

swapBuffers函数必须位于绘图的末尾。

要确认这一点:有形状做动画非常快,并注意撕裂。如果你被撕裂,那么你是在做一次抽签,如果你没有,那么你是使用双缓冲。

票数 3
EN

Stack Overflow用户

发布于 2011-10-20 14:09:38

如果使用GLCanvas,默认情况下将autoSwapBuffer模式设置为true,则不必手动调用swapBuffers()。您的闪烁与双缓冲无关,而是将sun.awt.noerasebackground设置为true。

票数 7
EN

Stack Overflow用户

发布于 2009-10-09 01:02:04

下面是一个使用JOGL的双缓冲动画示例:

http://www.java-tips.org/other-api-tips/jogl/how-to-implement-a-simple-double-buffered-animation-with-mouse-e.html

不要在显示(.)的末尾调用swapBuffers()打电话:

代码语言:javascript
复制
gl.glFlush();

我已经有一段时间没有使用JOGL做任何事情了,希望这会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1540928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档