opengl不会在render中调用glClear()

时间:2012-12-13 00:44:29

标签: opengl jogl

我每次渲染都会绘制GLUT基元,越来越多。为了让事情更快,我决定不每次都清楚,只是把新的原语。这是错的吗?

当我这样做时,我眨眼了。 put sleep()表明一帧是好的,第二帧是空的,依此类推。

编辑: 渲染(显示)中的简短代码,执行一次(我使用Java的JOGL):

gl.glPushMatrix(); 
gl.glColor3f(1, 1, 0);
gl.glTranslatef(0, 0, 0);
glut.glutSolidCube(10);
gl.glPopMatrix();
drawable.swapBuffers();

3 个答案:

答案 0 :(得分:1)

当然它是空的。当你清空时,清除前缓冲帧。然后,当调用后缓冲帧的swapBuffers()变为前面时,同时你的东西被绘制到前缓冲帧,然后,当后备缓冲帧完成后,缓冲区交换完成(通过调用swapBuffers()触发。这就是双缓冲的工作方式。如果你不清除帧颜色,你会得到你的图纸随着时间的推移累积在前缓冲区中,我不确定是否需要结果。 在每个渲染循环开始时清除前缓冲区一次并不是一个很大的性能影响。当您经常调用glClear()时会出现问题,比如在每个对象绘制之前调用它,这也是没有意义的,就像在这种情况下你一样只会看到最后绘制的对象。 对于闪烁 - 你应该更加描述你如何做到这一切。从你的例子来看,目前还不清楚它为什么会发生。

答案 1 :(得分:0)

gl.glDisable(GL_DEPTH_TEST);

如果没有看到更多代码,很难说。

当我在openGL代码中得到意想不到的结果时,我会仔细查看状态可能性列表并将其设置为启用或禁用:

  • 深度测试
  • 纹理
  • 照明
  • 混合
  • 剔除
  • 帧缓存
  • 着色

答案 2 :(得分:0)

Swapbuffers(HDC)实际上并不复制缓冲区的内容,只是交换前后缓冲区,这就是为什么你会看到每个奇数帧,而不是偶数帧。