opengl 单缓冲与双缓冲

1、说明

GLUT_SINGLE  指定单缓存窗口

GLUT_DOUBLE  指定双缓存窗口

2、原理

GLUT_SINGLE单缓冲,屏幕显示调用glFlush(),将图像在当前显示缓存中直接渲染,会有图形跳动(闪烁)问题

GLUT_DOUBLE双缓冲,屏幕显示调用glutSwapBuffers(),将图像先绘制在另外的缓存中,渲染完毕之后,将其整个缓存贴到当前的窗口,能消除闪烁,一般动画要用双缓冲.

如果缓冲与函数不对应的话,则会出错。

3、GLUT_DOUBLE例子:

#include <gl/glut.h>

#include <Windows.h>

void myDisplay(void)

{

  glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glPointSize(20);

     glBegin(GL_POINTS);

      glColor3f(0.0, 1.0, 0.0);

      glVertex2f(0.0, 0.0);

     glEnd();

  glutSwapBuffers();

}



int main(int argc, char* argv[])

{

  glutInit(&argc, argv);

  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

  glutInitWindowPosition(200, 200);

  glutInitWindowSize(400, 400);

  glutCreateWindow("OpenGL 窗口1");

  glutDisplayFunc(&myDisplay);

  glutMainLoop();

  return 0;

}

4、GLUT_SINGLE例子:

#include <gl/glut.h>

#include <Windows.h>

void display()
{
  glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPointSize(20);
  glBegin(GL_POINTS);
      glColor3f(0.0, 1.0, 0.0);
      glVertex2f(0.0, 0.0);
  glEnd();
  glFlush();
}

int main(int argc, char* argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
  glutInitWindowPosition(200, 200);
  glutInitWindowSize(400, 400);
  glutCreateWindow("OpenGL 窗口1");
  glutDisplayFunc(display);
  glutMainLoop();
  return 0;
}                                        

猜你喜欢

转载自www.cnblogs.com/keguniang/p/9857321.html