opengl 單緩沖與雙緩沖
阿新 • • 發佈:2018-10-26
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> voidmyDisplay(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> voiddisplay() { 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 單緩沖與雙緩沖