[컴퓨터그래픽스] Retained Mode Graphics

Serun1017·2024년 10월 23일
0

컴퓨터그래픽스

목록 보기
11/31

Retained Mode Graphics

Retained Mode Graphics 는 그래픽 요소를 메모리에 저장하고 관리하는 방식이다. 이 모드는 객체 지향적인 접근 방식을 사용하여 그래픽 요소의 상태를 유지한다.

특징

  • 객체 관리
    그래픽 요소(도형, 텍스처 등)를 객체로 정의하고 메모리에 유지한다. 이는 각 객체의 속성(색상, 위치 등)을 쉽게 수정할 수 있게 한다.
  • 효율적인 렌더링
    한 번 정의된 객체는 필요할 때만 렌더링 할 수 있으며, 상태를 전환하는 데 소요되는 시간과 자원을 절약할 수 있다.

실습: RandomDot_Retained.cpp

#include <vgl.h>

const int NUM_POINT = 5000;

// Retained Mode
// 데이터(vertex)를 미리 생성하고 display에 줌
struct vec2 {
	float x;
	float y;
};

vec2 points[NUM_POINT];
void initialize() {
	for (int i = 0; i < NUM_POINT; i++) {
		points[i].x = (rand() % 1000) / 500.0f - 1;
		points[i].y = (rand() % 1000) / 500.0f - 1;
	}
}

void display() {

	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_POINTS);

	for (int i = 0; i < NUM_POINT; i++) {
		glVertex2f(points[i].x, points[i].y);
	}

	glEnd();
	glFlush();
}

int main(int argc, char** argv)
{
	glutInit(&argc, argv);

	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
	glutInitWindowSize(512, 512);
	glutCreateWindow("Hello GL");

	initialize();
	glutDisplayFunc(display);

	glutMainLoop();

	return 0;
}

initialize 함수에서는 NUM_POINT 개의 랜덤한points 데이터를 생성하여 전역으로 저장한다.

display 함수에서는 initialize 함수에서 초기화 한 전역 points 데이터를 가져와 vertex를 생성하고 렌더링 한다.initialize 함수에서 points 를 한 번만 생성하고 display 에서 렌더링 하기 때문에 display 를 다시 호출하여도 points를 수정하지 않는 이상 같은 화면을 보여준다. 이러한 방식 때문에 Retained Mode는 Immediate Mode 보다 효율적이다.

그러나 CPU에 특성 때문에 병렬 계산을 수행하지 않아 다수의 vertex에 대한 수정을 할 시 비효율 적이다. 예를 들어 3차원 를 평행 이동할 떼 모든 vertex에 대해 순차 접근을 하여 평행 이동을 수행한다.

또한 CPU-GPU 사이의 느린 BUS 속도 때문에 병목 현상이 발생할 수 있다. Retained Mode 에서는 CPU 메모리에 points 정보를 가지고 있고 이를 display 콜백 함수에서 CPU-GPU 사이의 BUS를 통해 vertex 정보를 넘긴다. 그러나 느린 BUS 속도 때문에 병목 현상이 발생할 수 있다.

0개의 댓글