일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 싱글턴 패턴
- 컴포지트 빌더
- 컴포지트
- 디자인패턴
- 프로토타입 중복처리
- 프로토타입
- 내부 팩터리
- 싱글턴
- 데커레이터
- 빌더 패턴
- 동적 데코레이터
- 그루비 스타일 빌더
- 흐름식 빌더
- 디자인 패턴
- 싱글톤
- 팩터리 메서드
- 컴포지트 패턴
- 동적 데커레이터
- 빌더
- 브릿지
- 프로토타입 패턴
- 데커레이터 패턴
- 단순한 빌더
- 팩터리 패턴
- 싱글톤 패턴
- 브릿지 패턴
- 팩터리
- 모던C++디자인패턴
- 추상 팩터리
- 함수형 팩터리
- Today
- Total
GGym's Practice Notes
DirectX 12을 시작하기 전에 알아야 할 기본 지식 본문
1. 텍스처 형식
데이터 형식 용어
RGBA ( 성분 비트, 개수 ) : Red/Green/Blue/Alpha
U/S ( 부호 있는, unsigned /부호 있는, signed)
NORM/FLOAT/INT ( 정규화정수/부동소수점/정수)
TYPELESS ( 무형식 )
예시
DXGI_FORMAT_
R32G32B32_FLOAT : 32비트 부동 소수점 성분 3개
R16G16B16A16_UNORM : [0, 1] 구간으로 사상되는 16비트 성분 4개
R32G32_UINT : 부호 없는 32비트 정수 성분 2개
R8G8B8A8_UNORM : [0, 1] 구간으로 사상되는 8비트 성분 4개
R8G8B8A8_SNORM : [-1, 1] 구간으로 사상되는 8비트 성분 4개
R8G8B8A8_UINT : 부호 있는 정수형 8비트 성분 4개 [-128, 127]
R8G8B8A8_SINT : 부호 없는 정수형 8비트 성분 4개 [0, 255]
2. Swap chain(교환 사슬)과 페이지 전환
하나의 버퍼만 가지고 텍스처를 그리면 플리커링과 티어링이 발생
두개의 버퍼를 통해 하나의 화면을 미리 그리고 전환하는 것이 Double Buffering (* 3개의 버퍼를 사용하면 Triple Buffering)
Front buffer와 Back buffer 전환하는 것을 통해 형성하는 것이 Swap Chain
DirectX3D 에서 사용하는 SwapChain Interface : IDXGISwapChain
3. Depth buffering (깊이 버퍼링)
화면에 보이는 물체가 가려지고 앞에 보이는 처리를 하기 위해 만들어지는 버퍼
각 픽셀의 깊이 버퍼를 만드는 텍스처를 만들고 각 픽셀당 [0.0, 1.0] 사이의 값으로 정보를 저장한다.
이를 Depth buffer 또는 z-Buffer 이라고 부름
위에 서술 해놓은 텍스처 형식을 지정해서 사용.
예시
DXGI_FORMAT_
D32_FLOAT_S8X24_UINT : 32비트 깊이, 8비트 정수 스텐실, 24비트 padding용 값으로 구성
Stencil buffer는 해당 깊이 값에서 다시 값을 부여하는것 ( 특정 픽셀 렌더링 안되게 되는 용도 )
4. 자원과 서술자
서술자는 자원을 어떠한 파이프라인에 Bind 해야하는 알려주는 수단
서술자는 이전 버전까지 View라고 불렸었음.
아래와 같은 서술자들을 사용
1) CBV/SRV/UAV : Constant Buffer (상수 버퍼) / Shader Resource (쉐이더 자원) / Unordered Accesss (순서 없는 조건) View를 서술
2) Sampler Descriptor : 텍스처 적용에 사용되는 자원 서술
3) RTV : Render Target 자원 서술
4) DSV : Depth Stencil 자원 서술
Descriptor Heap(서술자 힙) : Application이 사용하는 서술자들이 저장되는 곳. 각 서술자 마다 개별적인 서술자 힙 필요
서술자들은 Application 초기화 시점에서 생성해야 함
5. MultiSampling (다중 표본화)
aliasing : 계단 현상 <-> antialiasing : 안티 앨리어싱
다중 표본화는 안티 앨리어싱을 하기 위해 DirectX에서 지원하는 기법.
다중 표본화를 위해 DXGI_SAMPLE_DESC 구조체를 작성
DXGI_SAMPLE_DESC 구조체
typedef struct DXGI\_SAMPLE\_DESC{
UINT Count; // 픽셀당 추출할 표본의 개수
UINT Quality; // 원하는 품질 수준
} DXGI\_SAMPLE\_DESC;
ID3D12Device::CheckFeatureSupport 를 사용하면 주어진 텍스처 형식과 표본 개수에 대한 품질 수준들의 개수를 알 수 있음
아래 후술.
6. Feature level (기능 수준)
DirectX3D 11에서 도입
D3D_FEATURE_LEVEL 열거형으로 대표
사용자의 하드웨어가 특정 기능 수준을 지원하지 않는 경우 실행이 안되지만 더 낮은 기능 수준으로 낮추면 사용 가능
7. DXGI (DirectX Graphics Infrastructure)
여러 그래픽 API들에 공통인 그래픽 관련 작업이 존재 ex) SwapChain, Adapter, Display Mode, etc...
IDXGISwapChain ( 교환 사슬 )
IDXGIFactory ( SwapChain 인터페이스 생성과 디스플레이 어댑터 열거 )
IDXGIAdapter ( 디스플레이 어댑터 )
IDXGIOutput ( 디스플레이 출력)
DXGI_MODE_DESC ( 디스플레이 모드를 서술)
참고자료
링크 (Microsoft Learn DXGI 문서)
8. Check Feature Support (기능 지원 점검)
ID3D12Device::CheckFeatureSupport 메서드를 사용하여 지원 여부 점검 가능.
HRESULT ID3D12Device::CheckFeatureSupport(
D3D12\_FEATURE Feature,
void\* pFeatureSupportData,
UINT FeatureSupportDataSize
);
1) Feature : 지원 여부를 점검할 기능들의 종류
D3D12_FEATURE_
D3D12_OPTIONS : DirectX12 의 여러 기능
ARCHITECTURE : 하드웨어 아키텍쳐 기능들
FEATURE_LEVELS : 기능 수준들
FORMAT_SUPPORT : 주어진 텍스쳐 형식에 대한 기능들
MULTISAMPLE_QUALITY_LEVELS : Multisampling 기능
2) pFeatureSupportData : 기능 지원 정보가 설정될 구조체. 점검할 기능을 지정한 대상에 따라 다른 구조체를 파라미터로 줘야 한다.
D3D12_FEATURE_DATA_
D3D12_OPTIONS
ARCHITECTURE
FEATURE_LEVELS
FORMAT_SUPPORT
MULTISAMPLE_QUALITY_LEVELS
3) FeatureSupportDataSize : pFeatureSupportData로 전달한 구조체의 크기
9. Residency (상주성)
DirectX12에서 Application은 자원을 GPU 메모리에서 내리거나 올리면서 자원의 Residency를 관리한다.
자세한 내용은 참고자료에서
링크 (Microsoft Learn 상주 문서)
'DirectX' 카테고리의 다른 글
DirectX 초기화 / 삼각형 그리기 (0) | 2020.08.13 |
---|---|
DirectX 쓰기 전 WinAPI 준비 (0) | 2020.08.12 |
DirectX Setup / stdafx.h 구성하기 (0) | 2020.08.12 |