π Direct3D μ₯μΉ μ΄κΈ°ν κ³Όμ λ° μ©μ΄ μ 리
1. μμ μ(descriptor) κ°μ²΄
μμ μλ μμ μλ£λ₯Ό μ§μ νλ μλ¨μΌ λΏλ§ μλλΌ μμμ gpuμ μμ νλ μλ¨μ΄κΈ°λ νλ€. μμ μλ direct3dμκ² μμμ μ¬μ©λ²μ(μμμ νμ΄νλΌμΈμ μ΄λ€ λ¨κ³μ λ¬Άμ΄μΌ νλμ§) λ§ν΄μ€λ€. Dirext3D μμ© νλ‘κ·Έλ¨μ μμμ μ§μ νμ΄νλΌμΈμ λ¬Άμ§ μλλ€. λμ , 그리기 νΈμΆμ΄ μ°Έμ‘°ν μμ μλ€μ μ§μ ν¨μΌλ‘μ¨ μμμ νμ΄νλΌμΈμ λ¬Άλλ€.
2. μμ μ μ’ λ₯(νμ)
- CBV μμ μ : constant buffer(μμ λ²νΌ)λ₯Ό μμ νλ€.
- SRV μμ μ : shader resource(μ °μ΄λ μμ)μ μμ νλ€.
- UAV μμ μ : unordered access view(μμ μλ μ κ·Ό)μ μμ νλ€.
- νλ³ΈμΆμΆκΈ° μμ μ : sampler(νλ³ΈμΆμΆκΈ°)μμμ μμ νλ€. ( ν μ€μ² μ μ©μ μ°μΈλ€. )
- RTV μμ μ : render target(λ λ λμ) μμμ μμ νλ€.
- DSV μμ μ : depth/stencil (κΉμ΄/μ€ν μ€) μμμ μμ νλ€.
3. μμ μ ν(descriptor heap) μμ μλ€μ λ°°μ΄.
νμ΄νλΌμΈμ μ¬λ¬ λ¨κ³λ§λ€ κ°λ³μ μΈ μμ μκ° νμνλ€. μμ μλ€μ μμ© νλ‘κ·Έλ¨μ μ΄κΈ°ν μμ μ μμ±ν΄μΌ νλ€.
4. κ΅ν μ¬μ¬κ³Ό νμ΄μ§ μ ν
Double Buffering(μ΄μ€ λ²νΌλ§) : λ κ°μ λ²νΌ(front, back)λ₯Ό μ¬μ©νλ λ°©λ²
μ λ©΄ λ²νΌμ νλ©΄ λ²νΌλ νλμ κ΅ν μ¬μ¬μ νμ±νλ€. Direct3Dμμ κ΅ν μ¬μ¬μ λννλ μΈν°νμ΄μ€λ IDXGUSwapChainμ΄λ€.
5. κΉμ΄ λ²νΌ
depth buffer(κΉμ΄ λ²νΌ)λ μ΄λ―Έμ§ μλ£λ₯Ό λ΄μ§ μλ ν μ€μ²μ ν μμ΄λ€. depth bufferλ κ° ν½μ μ κΉμ΄ μ 보λ₯Ό λ΄λλ€. ν½μ μ κΉμ΄λ 0.0 μμ 1.0κΉμ§μ κ°.
- 0.0μ view frustum(μμΌ μ λ체)μμμ κ΄μ°°μμ μ΅λν κ°κΉμ΄ 물체.
- 1.0μ view frustuμμ κ΄μ°°μμ μ΅λν λ¨Ό 물체
π κ·Έλν½ νλ‘κ·Έλλ°μ CPUμ GPUμ μνΈμμ©
κ·Έλ¦Όμ 그리기 μν CPUμμ λΆν° GPUλ‘ λͺ λ Ήμ΄ μ΄λ£¨μ΄μ§λ μμ
1. CPUλ 그리기 λͺ
λ Ήλ€μ΄ λ΄κΈ΄ λͺ
λ Ή λͺ©λ‘(command List)μ Direct3D APIλ₯Ό ν΅ν΄μ λκΈ°μ΄μ μ μΆνλ€.
ex) RSSetViewports(), ClearRenderTargetView ..
2. λͺ λ Ήλ€μ λκΈ°μ΄μ μ μΆνκΈ° ν΄μλ ID3D12CommandQueue::ExecuteCommandList()ν¨μλ₯Ό νΈμΆνλ€.
3. ID3D12CommandList::Reset()λ©μλλ₯Ό νΈμΆνλ©΄ μλ‘μ΄ λͺ λ Ήλ€μ κΈ°λ‘νλ λ° μ¬μ¬μ© ν μ μλ€.
μΆκ° μ€λͺ λ° μ£Όμ λ΄μ©
* Direct3D 12μμ λͺ λ Ή λκΈ°μ΄μ λννλ μΈν°νμ΄μ€λ ID3D12CommandQueueμ΄λ€.
* ID3D12GraphicsCommandList μΈν°νμ΄μ€μλ λͺ λ Ήλ€μ λͺ λ Ή λͺ©λ‘μ μΆκ°νλ μ¬λ¬ λ©μλκ° μλ€.
* λͺ λ Ή κΈ°λ‘μ΄ λλ ν( ID3D12GraphicsCommandList::Close()) μ΄ νμ λͺ λ Ή λκΈ°μ΄μ 리μ€νΈλ₯Ό μ μΆ ν΄μΌ νλ€.
* λͺ λ Ή λͺ©λ‘μλ ID3D12CommandAllocator νμμ λ©λͺ¨λ¦¬ ν λΉμκ° νλ μ°κ΄λλ€. λͺ λ Ήλͺ©λ‘μ μΆκ°λ λͺ λ Ήλ€μ μ΄ ν λΉμμ λ©λͺ¨λ¦¬μ μ μ₯λλ€.
* GPUκ° λͺ λ Ή ν λΉμμ λ΄κΈ΄ λͺ¨λ λͺ λ Ήμ μ€ννμμ΄ νμ€ν΄μ§κΈ° μ κΉμ§λ λͺ λ Ή ν λΉμλ₯Ό μ¬μ€μ νμ§ λ§μμΌ νλ€.
* CPUμ GPU λκΈ°νλ₯Ό μν μλ¨μΌλ‘ ID3D12Fence μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€.
'π― game engine > β½ directX12' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[DirectX12] νλΈλ§΅ λ§λ€κΈ° / StructuredBuffer (0) | 2024.11.26 |
---|---|
[DirectX12] μ€ν μ€(stencil) κ±°μΈ λ§λ€κΈ° (0) | 2024.11.07 |
[DirectX12] μ‘°λͺ μ μ’ λ₯ (0) | 2023.12.19 |
[DirectX12] μ‘°λͺ μ°μ°μ μν λ²μ 벑ν°, λ²μ 벑ν°μ λ³ν (0) | 2023.12.14 |
[DirectX12] μκΈ°λ₯μ μ μ μ°κΈ°/λ λλ§ κ³Όμ μ΄ν΄νκΈ° (1) | 2023.12.12 |
μ νλ κ² λ³΄λ€ λ«κ² μ§
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!