셰이더 컴파일하기

WanJu Kim·2022년 12월 29일

Direct3D

목록 보기
13/29

셰이더를 적용하기 위해서 따로 만들었다. 이것을 어떻게 현 프로그램에 적용시키는가? 가령 D3DX 함수를 사용해서 컴파일 할 수 있다.(다른 함수들도 있다.)

HRESULT D3DX11CompileFromFile(
	LPCTSTR pSrcFile,
	CONST D3D10_SHADER_MACRO *pDefines,
	LPD3D10INCLUDE plnclude,
	LPCSTR pFunctionName,
	LPCSTR pProfile,
	UINT Flagsl,
	UINT Flags2,
	ID3DXllThreadPump *pPump,
	ID3D10Blob **ppShader,
	ID3D10Blob **ppErrorMsgs,
	HRESULT *pHResult
);

이 함수는 <D3DX11async.h> 헤더 파일 및 d3dx11.lib 정적 라이브러리 파일을 포함해주어야 한다.

  1. pFileName : 컴파일할 셰이더 소스 코드를 담고 있는 파일의 이름.
  2. pDefines : 고급 옵션. 일단 0 넣어.
  3. pInclude : 고급 옵션. 일단 0 넣어.
  4. pFunctionName : 셰이더 프로그램의 진입점. 즉 셰이더 주 함수의 이름. ex) "VS". 이는 파일 옵션에서도 변경해주어야 한다.
  5. pProfile : 사용할 셰이더 버전을 뜻하는 문자열. Direct3D 11의 경우 "vs_5_0"을 사용한다. 이는 파일 옵션에서도 변경해주어야 한다.
  6. Flags1 : 셰이더 코드의 컴파일 방식에 영향을 미치는 플래그들 지정. 많은 플래그들이 있지만 다음 두 가지만 사용한다.
    (a) D3D10_SHADER_DEBUG : 셰이더를 디버그 모드에서 컴파일한다.
    (b) D3D10_SHADER_SKIP_OPTIMIZATION : 컴파일 시 최적화를 적용하지 않는다(디버깅에 유용함).
  7. Flags2 : 고급 옵션. 일단 0 넣어.
  8. pPump : 고급 옵션. 일단 0 넣어.
  9. ppShader : 컴파일된 셰이더를 담은 ID3D10Blob 구조체를 가리키는 포인터를 돌려준다.
  10. ppErrorMsgs : 컴파일 오류 시 오류 메시지를 담은 문자열을 담은 ID3D10Blob 구조체를 가리키는 포인터를 돌려준다.
  11. pHResult : 고급 옵션. 일단 0 넣어.

예시는 다음과 같다.

HRESULT hr = D3DX11CompileFromFile
		(
			L"./VertexColor.hlsl",
			nullptr,
			nullptr,
			"VS",
			"vs_5_0",
			0,
			0,
			nullptr,
			&vsBlob,
			nullptr,
			nullptr
		);

hlsl파일의 속성에 들어가서, 함수 매개변수로 적은 파일 이름, 진입점 이름, 셰이더 모델, 셰이더 형식이 똑같도록 설정을 해주어야 한다.

profile
Question, Think, Select

0개의 댓글