码迷,mamicode.com
首页 > 其他好文 > 详细

opengl 单缓冲与双缓冲

时间:2018-10-26 17:43:53      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:osi   glbegin   include   arc   nbsp   flush   isp   指定   wsize   

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;
}                                        

opengl 单缓冲与双缓冲

标签:osi   glbegin   include   arc   nbsp   flush   isp   指定   wsize   

原文地址:https://www.cnblogs.com/keguniang/p/9857321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!