Pixel Shader에 대해 알아보자. 픽셀 쉐이더는 정점 쉐이더와 모든 과정이 흡사하다. Input Layout
설정만 빠지면 사실상 이름만 바뀌는 수준이다.
Shader Code 작성
쉐이더 코드는 정말 간단하다. 그냥 입력된 컬러를 그대로 반환한다.
C++
float4 PS( PixelIn input ) : SV_TARGET
{
return input.color;
}
입력된 데이터값이 이미 해당 픽셀 위치에 대해 정점간 데이터의 보간된 데이터이다. 따라서 추가 가공을 할 필요 없이 받은 파라메터의 값을 그대로 리턴하면 된다. 픽셀 쉐이더에서 리턴된 값은 그대로 연결된 렌더 타겟에 씌여지게 된다.
Shader Compile 하기
쉐이더 컴파일은 정점 쉐이더와 동일하다. EntryPoint
지정 정도만 PS
로 다르다.
C++
ID3DBlob* compiledShader = nullptr;
ID3DBlob* error = nullptr;
D3DCompileFromFile( Path, nullptr, nullptr, EntryPoint, ShaderModel, 0, 0, &compiledShader, &error );
Shader 만들기
쉐이더를 만드는 코드도 정점 쉐이더와 동일하다. 함수가 CreatePixelShader
로 정점 쉐이더와 구분된다.
C++
ID3D11PixelShader* PixelShader = nullptr;
D3D11Device->CreatePixelShader( compiledShader->GetBufferPointer(), compiledShader->GetBufferSize(), nullptr, &PixelShader );
Shader 연결하기
쉐이더 연결 코드도 정점 쉐이더와 동일하다. 함수가 PSSetShader
로 정점 쉐이더와 구분된다.
C++
D3D11DeviceContext->PSSetShader( PixelShader, nullptr, 0 );
Pixel Shader
까지 모두 준비가 되면 이제 삼각형을 렌더링하기 위한 모든 준비가 끝난다. ID3D11DeviceContext::Draw
를 통해 렌더링을 시작하면 화면에 삼각형이 보이는 것을 확인할 수 있다.

여기까지 정리된 코드는 yunei0313/CRY at Triangle-rendering에서 확인할 수 있다.
이전글 : [DirectX11] 7. 삼각형 – Input Layout에 대해 알아보자.
다음글 : [DirectX11] 9. 여러개의 슬롯에 연결된 버텍스 버퍼를 렌더링 해보자.