1. 程式人生 > >opengl 單緩沖與雙緩沖

opengl 單緩沖與雙緩沖

play eat utc 原理 [] code 緩沖 div 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 單緩沖與雙緩沖