티스토리 뷰
HLSL 프로그램은 ASCII 문자 형태로만 작성이 되면 된다.
프로그래밍 하는 코드 안에 문자열로 코드를 포함하는것도 가능하다.
D3DXCompileShader 함수를 이용하여 다음과 같이 컴파일하며
(D3DXCompileShader : 컴파일된 셰이더 코드를 리턴한다.
실패했을 경우에는
LPD3DXBUFFER 타입 변수( pError )에 오류코드와 메세지 문자열을 담아 E_FAIL을 리턴한다)
컴파일된 셰이더코드를 가져다가 이렇게 셰이더를 만들어준 후 이용했던 pShader 를 해제해준다.
그치만그치만그치만
모듈화/ 편리함의 측면에 있어 프로그래밍코드와 셰이더코드는 분리를 하는것이 바람직하다
.txt .fx등의 파일형태로 저장하고
프로그래밍 코드에서는 해당파일로 셰이더를 로딩해오기만 하자
D3DXCompileShaderFromFile 함수를 이용하면 되는데 픽셀셰이더, 버텍스 셰이더 둘다 컴파일할 수 있다
셰이더 버전은
버텍스셰이더 : vs_1_1, vs_2_0, vs_2_sw 등등
픽셀셰이더 : ps_1_1, ps_1_1, ps_1_3, ps_1_4, ps_2_0, ps_2_sw 등등
이 있다.
컴파일된 셰이더 코드를 가져다가
요렇게 셰이더를 만들어주면 된다.(윗부분에 있는것과 같음)
파일에 픽셀셰이더와 버텍스셰이더를 동시에 넣는것도 가능하며
위에서 불러왔던 shader.fx에 픽셀셰이더도 있다면
이렇게 똑같이 픽셀셰이더도 컴파일하고 만들어주면된다.
//에러메세지를 위한 여러가지 방법
if (FAILED(hr))
{
char sErr[2048] = { 0 };
if (pError)
{
char* s = (char*)pError->GetBufferPointer();
sprintf(sErr, s);
}
else
{
sprintf(sErr, "Cannot Compile Shader.");
}
MessageBox(hWnd, sErr, "Err", MB_ICONEXCLAMATION);
return -1;
}
//////////////
if (pError)
{
OutputDebugStringA((char*)pError->GetBufferPointer());
SAFE_RELEASE(pError);
}
//////////////
if(pError)
{
int size = pError->GetBufferSize();
void *str = pError->GetBufferPointer();
if (str)
{
char* printStr = new char[size];
sprintf(printStr, (const char*)str, size);
OutputDebugString(printStr);
delete[] str;
}
}
셰이더 프로그래밍입문 책
'ComComComCom > Shader HLSL' 카테고리의 다른 글
쉐이더란 쉐이더 프로그래밍이란 HLSL이란 버텍스쉐이더 픽셀쉐이더 (0) | 2017.08.03 |
---|