GLUT_DOUBLE和GLUT_SINGLE 用例

简介:

说明

GLUT_SINGLE 0x0000 指定单缓存窗口

GLUT_DOUBLE 0x0002 指定双缓存窗口


原理

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

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


GLUT_SINGLE例子

#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();

  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(&myDisplay);

  glutMainLoop();

  return 0;

}


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;

}


    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1881257,如需转载请自行联系原作者





相关文章
|
14天前
|
存储 人工智能
AscendC编程中的double buffer是什么?
在AI Core上,指令队列分为Vector(V)、Matrix(M)和存储移动指令队列(MTE2、MTE3)。这些队列的独立性和可并行性是double buffer优化的基础。通过将数据搬运与Vector计算并行执行,double buffer机制有效减少了Vector单元的等待时间,提高了其利用率。例如,Tensor1进行Compute时,Tensor2可同时执行CopyIn;当切换到Tensor2计算时,Tensor1执行CopyOut。此机制适用于大多数场景,但在数据搬运时间短或数据量小的情况下,性能提升可能有限。
|
5月前
|
API
Qt绘图之Paint系统
Qt绘图之Paint系统
71 2
|
5月前
|
算法 API 图形学
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
297 2
|
8月前
float.h 头文件
float.h 头文件。
37 1
|
存储 编译器 API
Qt d_pointer
如果你曾经查看过Qt的源代码文件,例如这个Q_D和Q_Q宏定义。 文就来揭开这些宏使用的目的。 Q_D 和Q_Q宏定义是d-pointer, 它可以把一个类库的实施细节对使用的用户隐藏, 而且对实施的更改不会打破二进制兼容。
129 0
|
编译器 C语言
Qt的Q_UNUSED()函数的功能
Qt的Q_UNUSED()函数的功能
274 0
关于OLED移植出现Symbol oled_pow multiply defined
关于OLED移植出现Symbol oled_pow multiply defined
337 0
Qt6:移除[signal] void QComboBox:: currentIndexChanged (const QString & text )信号
通过对比Qt 6.0.1和qt 5.12.9的文档发现,Qt 6.0.1中已经没有[signal] void QComboBox:: currentIndexChanged (const QString & text )信号了。
169 0
Qt6:移除[signal] void QComboBox:: currentIndexChanged (const QString & text )信号
Only Tensors of floating point and complex dtype can require gradients问题解决方案
Only Tensors of floating point and complex dtype can require gradients问题解决方案
440 0
Only Tensors of floating point and complex dtype can require gradients问题解决方案
编译错误:GL/glew.h, GL/glut.h, EGL/egl.h没有那个文件或目录
编译错误:GL/glew.h, GL/glut.h, EGL/egl.h没有那个文件或目录
340 0