• opengl 单缓冲与双缓冲


    1、说明

    GLUT_SINGLE  指定单缓存窗口

    GLUT_DOUBLE  指定双缓存窗口

     应用程序使用单缓冲绘图时可能会存在图像闪烁的问题。 这是因为生成的图像不是一下子被绘制出来的,而是按照从左到右,由上而下逐像素地绘制而成的。最终图像不是在瞬间显示给用户,而是通过一步一步生成的,这会导致渲染的结果很不真实。为了规避这些问题,我们应用双缓冲渲染窗口应用程序。缓冲保存着最终输出的图像,它会在屏幕上显示;而所有的的渲染指令都会在缓冲上绘制。当所有的渲染指令执行完毕后,我们交换(Swap)前缓冲和后缓冲,这样图像就立即呈显出来,之前提到的不真实感就消除了。

    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;
    }                                        
  • 相关阅读:
    几个基本trick
    CSP2019 树上的树 口胡
    To do List
    对代码风格的探索(持续更新)
    我回来了。
    年度悲剧
    最短路
    平衡树
    线段树-模板
    jmeter断言之JSON Assertion
  • 原文地址:https://www.cnblogs.com/keguniang/p/9857321.html
Copyright © 2020-2023  润新知