View

DirectX11에서 View는 GPU가 리소스(텍스처, 버퍼 등)에 접근하는 방식을 정의하는 객체이다. GPU는 리소스를 직접 사용할 수 없기 때문에, View를 통해 리소스를 접근할 수 있도록 설정해야 한다.

// 1. RenderTarget Texture를 SwapChain으로부터 가져오기
SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)RenderTargetTex.GetAddressOf());

// 2. RenderTargetView를 생성한다.
Device->CreateRenderTargetView(RenderTargetTex.Get(), nullptr, RenderTargetView.GetAddressOf());

// 3. DepthStencil용 Texture 제작
D3D11_TEXTURE2D_DESC Desc = {};

// Depth 25bit, Stencil 8Bit
Desc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
// 렌더타겟과 해상도 일치
Desc.Width = (UINT)RenderResolution.x;
Desc.Height = (UINT)RenderResolution.y;
Desc.ArraySize = 1;					// 배열크기
Desc.CPUAccessFlags = 0;			// CPU 접근 없음
Desc.Usage = D3D11_USAGE_DEFAULT;	// 기본사용
Desc.MipLevels = 1;
Desc.SampleDesc.Count = 1;			// 멀티 샘플링 비활성
Desc.SampleDesc.Quality = 0;		// 품질 설정
// 텍스쳐 용도설정(깊이를 저장하는 전용 명시)
Desc.BindFlags = D3D11_BIND_DEPTH_STENCIL;

Device->CreateTexture2D(&Desc, nullptr, DepthStencilTex.GetAddressOf());

// 4. DepthStencil View
Device->CreateDepthStencilView(DepthStencilTex.Get(), nullptr, DepthStencilView.GetAddressOf());

// RenderTarget과 DepthStencilTarget을 출력으로 지정.
Context->OMSetRenderTargets(1, RenderTargetView.GetAddressOf(), DepthStencilView.Get());

View의 역할

View는 GPU 리소스(버퍼, 텍스처 등)를 렌더링 파이프라인에서 접근할 수 있도록 설정하는 객체다. DirectX에서 GPU가 렌더링할 데이터(텍스처, 버퍼 등)에 접근하는 방법을 정의하는 역할을 한다.

View 종류 설명
Render Target View (RTV) 렌더링 결과를 출력하는 백 버퍼(Frame Buffer)
Depth-Stencil View (DSV) 깊이(Depth) 및 스텐실(Stencil) 버퍼
Shader Resource View (SRV) 쉐이더에서 사용할 텍스처 또는 버퍼
Unordered Access View (UAV) 컴퓨트 쉐이더(Compute Shader)에서 사용할 수 있는 메모리

View가 필요한 이유

  • DirectX에서 생성된 리소스(텍스처, 버퍼 등)는 기본적으로 GPU가 직접 접근할 수 없다.
  • View를 생성하여 GPU가 해당 리소스를 사용할 수 있도록 지정해야 한다.
  • GPU는 View를 통해 읽기/쓰기 가능한 메모리 영역을 인식하고, 이를 렌더 타겟, 깊이 버퍼, 쉐이더 리소스 등으로 사용할 수 있다.

주요 View 종류

Render Target View (RTV)

RTV는 렌더링 결과를 저장하는 백 버퍼(프레임 버퍼). 모든 프레임은 GPU에서 처리된 후 Render Target을 통해 화면에 출력된다.

RTV역할

  • GPU가 렌더링한 결과를 저장하는 프레임 버퍼(Frame Buffer) 역할을 수행.
  • 화면에 출력되기 전에 픽셀 데이터를 담아놓는 공간.

Depth-Stencil View (DSV)

DSV는 깊이(Depth) 및 스텐실(Stencil) 버퍼를 설정하는 View. 깊이 버퍼는 3D 장면에서 오브젝트의 원근감을 처리하는 데 필수적이다.

DSV역할

  • GPU가 픽셀의 깊이를 검사하여 보이지 않는 오브젝트를 자동으로 제거(Z-Buffering).
  • 스텐실(Stencil) 기능을 사용하면 특정 영역만 렌더링 가능.

Shader Resource View (SRV)

SRV는 쉐이더(Shader)에서 사용할 텍스처나 버퍼 데이터를 정의하는 View. 쉐이더는 SRV를 통해 텍스처 데이터를 읽을 수 있다.

SRV역할

  • 픽셀 쉐이더(Pixel Shader)에서 텍스처를 읽어 색상 및 조명을 계산하는 데 사용.
  • 텍스처 매핑(Texture Mapping), 노멀 매핑(Normal Mapping) 등에 활용.

Unordered Access View (UAV)

UAV는 컴퓨트 쉐이더(Compute Shader)에서 읽기/쓰기 가능한 버퍼. RTV, SRV와 달리 임의의 순서로(Random Order) 읽고 쓸 수 있는 점이 특징.

UAV역할

  • GPU 연산을 수행하는 Compute Shader에서 데이터를 읽고 쓸 때 사용.
  • 일반적인 렌더링이 아닌 GPGPU(General-Purpose GPU) 연산을 위한 버퍼.

결론

  • View는 GPU가 리소스를 접근할 수 있도록 정의하는 객체.
  • Render Target View(RTV) → 렌더링된 결과를 저장.
  • Depth-Stencil View(DSV) → 깊이 및 스텐실 테스트에 사용.
  • Shader Resource View(SRV) → 쉐이더에서 텍스처를 읽는 데 사용.
  • Unordered Access View(UAV) → Compute Shader에서 읽기/쓰기 가능.

태그: ,

카테고리:

업데이트:

댓글남기기