1.3그래픽과 Direct3D

MwG·2024년 8월 2일

DirectX11

목록 보기
1/7

그래픽 출력

비디오(그래픽) 카드는 3차원 그래픽 출력을 위하여 특성화된 하드웨어적 기능을 지원한다. ->GPU(Graphic Processing Unit), 비디오 메모(VRAM, Video Memory), DAC(Digtial to Analog Converter)가 포함됨.

GPU는 그래픽 명령어를 처리함.
비디오 메모리는 그래픽 데이터를 저장하기 위한 공간.
DAC는 비디오 메모리의 내용을 주기적으로 모니터로 출력하는 역할.
DAC는 기본적으로 한줄씩 순서대로 프레임 버퍼의 내용을 왼쪽에서 오른쪽으로, 위에서 아래쪽으로 모니터에 출력한다.
->한 줄 출력하고 다음 줄의 출력을 시작하는 사이의 아주 짧은 시간을 수평회귀 시간(Horizontal Retrace Period)이라고 한다.
->모든 줄을 출력하면 다시 첫 줄부터 출력을 시작하는데 마지막 줄에서 첫 줄로 이동하는 시간을 수직회귀 시간(Vertical Retrace Period)이라고 한다.

3차원 그래픽 출력을 위해 GPU에서 실행되는 프로그램이 셰이더 프로그램이다.

Direct3D은 DirectX SDK 라이브러리가 제공하는 3D그래픽스 기능이다.

운영체제 관점에서 그래픽 하드웨어는 그래픽스 드라이브가 제공하는 기능이다. 프로그래머의 관점에서 그래픽 하드웨어는 Direct3D 라이브러리가 제공하는 API이라고 할 수 있다. 이러한 그래픽 하드웨어를 Direct3D 디바이스라고 한다.

프로그래머는 Direct3D API를 사용하여 그래픽 하드웨어에 대응하는 Direct3D 디바이스를 생성하고 이 디바이스를 사용하여 그래픽 출력을 해야한다.

프레젠테이션

이중 버퍼링을 사용할 때 후면 버퍼의 내용을 전면버퍼로 복사하는 것

대부분의 3D그래픽 출력에서 잘림이나 깜빡임을 방지하기 위해 그래픽을 출력하는 화면인 전면 버퍼(Front Buffer)과 다음에 출력할 프레임을 저장하는 후면 버퍼(Back Buffer)를 사용하는 이중 버퍼링(Double Buffering)을 사용한다.

전면 버퍼와 후면 버퍼들은 체인의 형태로 차례대로 연결되는데 이 집합을 스왑 체인(Swap Chain)이라고 한다.

블리팅(Blitting): 후면 버퍼의 내용을 전면으로 빠르게 복사하는 것
플리핑(Flipping): 후면과 전면 버퍼의 내용을 swap하는 것

Dircet3D에서는 프레젠테이션을 지원하기 위해 IDXGISwapChain::Present() 함수를 제공한다.
->두 버퍼의 포인터가 빠르게 교환됨.

Direct3D 객체와 COM객체

Direct3D API에서 모든 Direct3D 객체는 COM(Component Object Model)객체이다.

COM객체는 응용 프로그램이 어떤 작업을 수행하기 위하여 사용 할 수 있는 블랙박스와 같은 개체이다. 일반적으로 DLL형태로 제공된다. 객체 내부는 노출하지 않고 응용 프로그램이 호출할 수 있는 메서드(Method)만을 노출한다.

Direct3D API에서 응용 프로그램은 COM객체를 직접 참조할 수 없고 인터페이스를 통하여 참조할 수 있다.

IUnknown 인터페이스를 지원하고 세 개의 메서드가 있다.

IUnknown::AddRef():인터페이스의 참조 카운터를 1만큼 증가시킨다. 다른 객체가 이 객체를 사용(참조)하고 있음을 나타냄.
IUnknown::QueryInterface(): 이 객체가 어떤 인터페이스를 제공하는지 질의한다.
IUnknown::Release(): 인터페이스의 참조카운터를 1만큼 감소시킴. 다른 객체가 이 객체를 더는 사용(참조)하고 있지 않음을 나타냄.

객체 참조 카운터가 0이면 해당 객체는 자동 소멸, c++ new, delete사용대신 위 함수들을 호출 하면 됨.

0개의 댓글