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

Serun1017·2024년 10월 23일
0

컴퓨터그래픽스

목록 보기
10/31

Immediate Mode Graphics

Immediate Mode Graphics 는 그래픽스를 그릴 때, 명령이 호출되면 즉시 화면에 렌더링되는 방식이다.

특징

  • 즉각적인 렌더링
    그래픽 명령이 호출되면 바로 그 결과가 화면에 표시된다.
  • 상태 의존성
    그래픽 상태(색상, 텍스처)는 각 명령 호출 시마다 설정해야 하며, 매번 설정하지 않으면 이전 상태가 유지된다.
  • 효율성 저하
    매번 렌더링 명령을 호출해야 하므로 복잡한 장면에서 비효율적이다.
    CPU와 GPU 간의 병목 현상이 발생할 수 있다.

실습: RandomDot_Immediate.cpp

#include <vgl.h>

const int NUM_POINT = 5000;

// Immediate Mode
// display를 요청할 때마다 새롭게 계산(생성)하여 display 함
void display() {

	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_POINTS);

	for (int i = 0; i < NUM_POINT; i++) {
		float x = (rand() % 1000) / 500.0f - 1;
		float y = (rand() % 1000) / 500.0f - 1;

		glVertex2f(x, y);
	}

	glEnd();
	glFlush();
}

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

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

	glutDisplayFunc(display);

	glutMainLoop();

	return 0;
}

display 함수에서는 랜덤하게 NUM_POINT 개의 vertex를 생성하고 렌더링 한다.

이때display는 콜백 함수로 등록되어 윈도우(프로그램 창)의 사이즈를 변경할 때 등 마다 호출된다. 문제는 display 함수가 호출 될 때마다 CPU에서는 NUM_POINT 만큼의 랜덤한 vertex를 생성하여 렌더링 한다. 때문에 윈도우 사이즈를 변경할 때마다 화면에 점이 랜덤하게 찍히는 것을 볼 수 있다.

이러한 방식 때문에 Immediate Mode 는 매우 비효율적이고, CPU의 vertex 계산 속도와 GPU 렌더링 속도 차이 및 BUS의 속도 문제로 병목 현상이 발생할 수 있다.

0개의 댓글