작성
·
508
·
수정됨
0
삼각형 띄우기 학습후 코드 실행시
"Shader Create Failed !"
라는 메시지가 뜨는 경우가 있습니다.
이 경우 혹시 .hlsli 파일을 저장할때
인코딩 하여 저장 -> "유니코드(서명 있는 UTF08) - 코드 페이지 65001"
로 저장하지 않았는지 확인해 보시면 좋을것 같습니다.
이경우 에러가 발생하며,
"한국어 - 코드페이지 949"
로 저장시 에러가 발생하지 않더군요.
멀티바이트와 유니코드 관련 문제 인것 같고
D3DCompileFromFile 을 사용할때 아마 셰이더 파일을 읽어서
Blob 이라는 버퍼에 이진데이터로 직렬화하여 저장을 하는거 같은데,
그때 멀티바이트를 직렬화 할때랑 유니코드를 직렬화 할때
값이 달라서 발생하는 문제인것 같은데,
이게 맞는건지. 다른분들은 어떠신지, 같은 문제가 발생하는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
삼각형 띄우기 학습 후 “Shader Create Failed!“라는 메시지가 뜨는 이유는 .hlsli 파일을 저장할때 인코딩을 정확하게 하지 않았기 때문입니다. 코드의 실행을 위해서는 .hlsli 파일을 저장할때 “유니코드(서명 있는 UTF-8) - 코드 페이지 65001”로 저장해야 합니다. 만약 “한국어 - 코드 페이지 949”로 저장하면 에러가 발생하게 됩니다.
멀티바이트와 유니코드 관련 문제로 이해할 수 있는데, D3DCompileFromFile 함수에서 셰이더 파일을 읽어서 Blob 이라는 버퍼에 이진데이터로 직렬화하여 저장하는데, 여기서 멀티바이트를 직렬화 할 때와 유니코드를 직렬화 할 때 값이 달라서 발생하는 문제인 것 같습니다.
이 문제는 .hlsli 파일의 인코딩 방식을 변경하여 해결할 수 있습니다. 다른 분들도 이와 같은 문제가 발생하였는지 알 수 없으므로 확인해 보시는 것이 좋을 것 같습니다.
만약 제시한 해결책으로도 문제가 해결되지 않을 경우, 자세한 상황을 언제든 다시 문의해 주세요. 감사합니다.