【发布时间】:2014-11-25 05:50:22
【问题描述】:
我使用的是 DirectX 11。我预编译了着色器,然后在运行时加载。我将文件加载到缓冲区中,然后将其发送到 CreateVertexShader。当我在调试层打开的情况下调用 CreateVertexShader 时,出现以下错误:
编码的顶点着色器大小与指定大小不匹配
我在命令行编译顶点着色器如下:
fxc /Fc /Od /Zi /T fx_5_0 /Fo "myfile.cso" "myfile.fx"
在简单着色器的情况下,生成的文件大约为 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 );
(注意:我将 NULL 传递给期望获得 S_FALSE 作为返回码的最后一个参数)
我不确定还有什么办法可以解决这个问题。
【问题讨论】:
标签: shader direct3d directx-11 hlsl direct3d11