저는 DirectX 11을 사용하고 있습니다. 셰이더를 미리 컴파일 한 다음 런타임에로드하고 있습니다. 파일을 버퍼에로드 한 다음 CreateVertexShader로 보냅니다.DirectX 11 : 인코딩 된 정점 셰이더 크기가 지정된 크기와 일치하지 않습니다.
Encoded Vertex Shader size doesn't match specified size
다음과 같이 내가 명령 줄에서 버텍스 쉐이더를 컴파일하고 있습니다 : a의 경우
fxc /Fc /Od /Zi /T fx_5_0 /Fo "myfile.cso" "myfile.fx"
을 내가 CreateVertexShader를 호출 할 때 디버그 층이 켜져으로, 나는 다음과 같은 오류가 발생합니다 간단한 쉐이더이면 결과 파일은 약 200 바이트입니다. Windows 탐색기와 코드가 모두 동일한 바이트 수를보고하는지 확인할 수 있습니다.
나는 fx_5_0의 변형을 시도했다. 그런 다음
uint32_t length, rr;
char *buffer;
FILE *fp;
fp = fopen("<path to file>\\myfile.cso", "rb");
fseek(fp, 0, SEEK_END);
length = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = (char*)calloc(1, length);
rr = fread(buffer, sizeof(char), length, fp);
fclose(fp);
assert(rr == length);
: 여기
내가 파일을로드하고 어떻게
hr = device->lpVtbl->CreateVertexShader(device, buffer, length, NULL, NULL);
(참고 : 나는 리턴 코드로 S_FALSE를 얻을 것으로 예상 마지막 PARAM에 NULL을 전달하고 있습니다)
이 문제를 해결하기 위해 무엇을해야할지 모르겠습니다.
또한 원시 쉐이더가 아닌 효과를 컴파일하고 있습니다. 셰이더로 컴파일하려면 vs_5_0 또는 ps_5_0을 각각 정점/픽셀 셰이더에 사용하십시오. 셰이더 코드 크기가 15k에서 200-400 바이트로 떨어지는 것을보아야합니다. – Alex