https://github.com/walbourn/directx-sdk-samples/blob/main/Direct3D11Tutorials/Tutorial01/Tutorial01.cpp

https://github.com/kevinmoran/BeginnerDirect3D11

 

# include <d3d11.h>

# include <d3dcompiler.h>

 

D3D11CreateDevice(머신?) → CreateSwapChain(draw buffer? front buffer ↔ back buffer swap 관리자인듯)

  • SwapChain에 draw된 RenderTarget을 가져오고 ( SwapChain→GetBuffer , Device→CreateRenderTargetView )
  • depth stencil 가져와서 ( CreateTexture(DepthStencil flag )
  • 쿵짝쿵짝

 

 

Frame

  • context에서 clear rendertarget view
  • swap chain에서 present

 

render pipe _ shader config

  • vs Blob 생성 → 메모리 할당(D3DCompileFromFile) → vertex shader 생성(CreateVertexShader)
  • ps Blob 생성 → 메모리 할당(D3DCompileFromFile) → pixel shader 생성(CreatePixelShader)
  • inputLayoutDesces에서 cemantic에 대한 정의

 

예시

// Create Input Layout
ID3D11InputLayout* inputLayout;
{
    D3D11_INPUT_ELEMENT_DESC inputElementDesc[] =
    {
        { "POS", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
        { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}
    };
 
    HRESULT hResult = d3d11Device->CreateInputLayout(inputElementDesc, ARRAYSIZE(inputElementDesc), vsBlob->GetBufferPointer(), vsBlob->GetBufferSize(), &inputLayout);
    assert(SUCCEEDED(hResult));
    vsBlob->Release();
}

 

render pipe _ draw call

  • D3D11_SubResource_data에 vertex 데이터 입력 ( { float[] } ) ← 3개마다 나눠서 x, y, z로 샘플링 ( flag : BindVertexBuffer ) → CreateBuffer
  • 동일하게 indces도 ( vertex index 기반 polygons ) ( flag : Bind_Index_Buffer )
  • constant buffer(createrbuffer) → resterizer state → depth stencil state
    • 상수버퍼 : 모든 버텍스에서 참조하는 상수 값. 전역변수같은 역할인듯. ex) object의 position 등. vs나 ps에서 상수버퍼 변수명 그대로 쓰면 됨
    •  
struct Constants
{
    float4x4 modelViewProj;
};
 
ID3D11Buffer* constantBuffer;
{
    D3D11_BUFFER_DESC constantBufferDesc = {};
    // ByteWidth must be a multiple of 16, per the docs
    constantBufferDesc.ByteWidth      = sizeof(Constants) + 0xf & 0xfffffff0;
    constantBufferDesc.Usage          = D3D11_USAGE_DYNAMIC;
    constantBufferDesc.BindFlags      = D3D11_BIND_CONSTANT_BUFFER;
    constantBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
 
    HRESULT hResult = d3d11Device->CreateBuffer(&constantBufferDesc, nullptr, &constantBuffer);
    assert(SUCCEEDED(hResult));
}

'3D Graphics' 카테고리의 다른 글

Graphics 개요2  (0) 2024.05.22
기본 수학  (0) 2024.05.22
FBX 구조  (0) 2024.05.22
Graphics 개요  (0) 2024.05.22

+ Recent posts