본문 바로가기
Language/C++ & openGL

openGL Retained mode(보류모드) / 디스플레이 리스트

by javapp 자바앱 2020. 5. 6.
728x90

보류모드 (Retained mode)에서는 미리 정의된 물체를 컴파일된 형태로 재사용을 수행함으로서 매번 그림을 그려내는 등의 반복적인 작업을 제거하여 계산 등의 속도 향상을 모색할 수 있다. OpenGL에서는 디스플레이 리스트를 만들어서 사용함으로서 보류모드를 구현할 수 있다.

 

#include <glut.h>                                                                  

#include <GL/gl.h>                                                                                         

#include <GL/glu.h>                     

GLuint g_objectID = -1;

 

GLint GenerateCallList()

{           

             GLint lid = glGenLists(1);

 

             glNewList(lid, GL_COMPILE);

 

             glColor3f(1.0f, 0.0f, 0.0f);

 

             glBegin(GL_POLYGON);

             glVertex3f(0.5, 0.5, 0.0);

             glVertex3f(-0.5, 0.5, 0.0);

             glVertex3f(-0.5, -0.5, 0.0);

             glVertex3f(0.5, -0.5, 0.0);

             glEnd();

 

             glEndList();

 

             return lid;

}

 

void MyDisplay()

{

             glClear(GL_COLOR_BUFFER_BIT);

            

             // Call Display Lists

             glCallList(g_objectID);

             glFlush();

}

 

int main(int argc, char** argv)

{

             glutInit(&argc, argv);

 

             glutCreateWindow("OpenGL Drawing Example");

 

             g_objectID = GenerateCallList();

 

             glutDisplayFunc(MyDisplay); //g_objectID 가 들어감

             glutMainLoop();

 

             return 0;

}

지금까지 실습한 MyDisplay 함수에서 glBegin() ~ glEnd() 등을 호출하여 그림을 그리는 경우 직접 모드 (Immedicate mode)로서 화면에 그림을 그려낸 후에는 기존의 물체에 대한 다양한 정보들을 모두 파기하고, 다시 호출하는 경우 그림을 그려내기 위한 처리를 다시 수행한다 (즉 동일한 계산 등을 수행해야 해서 시간이 낭비된다).

 

 

댓글