opengl 单缓冲与双缓冲
Posted keguniang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于opengl 单缓冲与双缓冲的主要内容,如果未能解决你的问题,请参考以下文章