#ifndef (정의자)
#define (정의자)
(본문)
#endif
-> 이 문법 같은 경우 C문법 스타일이며, ifndef에 정의자가 선언되어 있지 않을 경우에 해당 본문을 정의해달라는 말이다.
shader 코드는 프로그램이 실행중에 해당 주소로부터 shader 파일을 사용하기 때문에 winapi 당시에 사용하던 resource와 같은 맥락을 가진다.
// 버텍스 쉐이더
// HLSL 버텍스 쉐이더 함수 컴파일
// parameter
// 1. 쉐이더 파일 경로
// 2. nullptr
// 3. D3D_COMPILE_STANDARD_INCLUDE
// 4. entryPoint
// 5. hlsl 파일 버전
// 6. debug msg(D3DCOMPILE_DEBUG)
// 7. 0
// 8. 생성된 Blob 객체 반환
// 9. error 용도 blob 객체 반환
// D3DCompileFromFile();
bufferpointer , size, nullptr, 버텍스 정보
DEVICE->CreateVertexShader()
DEVICE->CreatePixelShader()
해당 함수들은 setting 함수들이기때문에 셋팅 순서는 상관없음 결국
DrawCall 형태로 rendering pipeline을 거치기 때문
-> layout은 buffer 넘겨준 정점의 구조를 알려주는 객체
-> 위상 도형은 그 정점을 토대로 만들 도형의 구조를 알려주는 객체
-> Semantic name 일치
-> semantic name이 동일할 경우 index로 구분(그래서 POSITION 시멘틱은 사실 뒤에 0이 생략되어 있는거라 보면 된다.)
InputLayOutSetting with float3 pos float4 Color float2uv
// 정점 구조정보(Layout) 생성
D3D11_INPUT_ELEMENT_DESC arrElement[3] = {};
arrElement[0].InputSlot = 0;
arrElement[0].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
arrElement[0].SemanticName = "POSITION";
arrElement[0].SemanticIndex = 0;
arrElement[0].AlignedByteOffset = 0;
arrElement[0].InstanceDataStepRate = 0;
arrElement[0].Format = DXGI_FORMAT_R32G32B32_FLOAT;
arrElement[1].InputSlot = 0;
arrElement[1].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
arrElement[1].SemanticName = "COLOR";
arrElement[1].SemanticIndex = 0;
arrElement[1].AlignedByteOffset = 12;
arrElement[1].InstanceDataStepRate = 0;
arrElement[1].Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
arrElement[2].InputSlot = 0;
arrElement[2].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA;
arrElement[2].SemanticName = "TEXCOORD";
arrElement[2].SemanticIndex = 0;
arrElement[2].AlignedByteOffset = 28;
arrElement[2].InstanceDataStepRate = 0;
arrElement[2].Format = DXGI_FORMAT_R32G32_FLOAT;
DEVICE->CreateInputLayout(arrElement, 3, g_VSBlob->GetBufferPointer(), g_VSBlob->GetBufferSize(), g_Layout.GetAddressOf());
DEVICECONTEXT->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY::D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
DEVICECONTEXT->IASetInputLayout(g_Layout.Get());
정점 안의 픽셀 정보들을 생성함과 동시에 색깔은 해당 정점들의 거리를 비율로 100%안에서 나눠서 색깔을 표현하는 선형보간을 한다. 이는 픽셀 쉐이더전에 일어나는 일이다.