0

我通常通过 D3DX11CompileFromFile 获取顶点着色器的字节码,但是有没有办法从 ID3D11VertexShader 获取字节码?或其他接口。

我尝试过其他 D3DX11Compile* 函数,例如 D3DX11CompileFromMemory、D3DX11CompileFromResource,但这些函数不是针对这个问题设计的。

ID3DBlob* VertexBlob;

D3DX11CompileFromFile(Resource->GetPath(), NULL, NULL, "VS", "vs_5_0", 
D3DCOMPILE_ENABLE_STRICTNESS, 0, NULL, &VertexBlob, &ErrorBlob, &hr);

正如我所说,我通常通过 D3DX11CompileFromFile 函数初始化着色器字节码(ID3DBlob*),但我不再使用它了。

我试图找到其他方法来解决这个问题。但我失败了。

是否可以在不使用 D3DX11Compile* 函数的情况下获取着色器字节码?

4

1 回答 1

2

为了创建 Direct3D 11 顶点着色器对象、像素着色器对象等,您必须提供着色器 blob 所包含的编译着色器二进制文件。

如果提供的编译着色器二进制文件无效或签名对于运行时不正确,则Direct3D 11 函数将失败。因此,二进制文件首先必须来自 HLSL Direct3D 编译器。通常这是离线完成的,然后作为二进制数据直接从磁盘加载,在游戏运行时在生产中创建此类二进制 blob 的缓存,或者在运行时通过 Direct3D 编译从着色器源构建的旧示例中很常见API。

请注意,这些D3DX11Compile*函数只是D3D 编译API 的包装器。D3DX11 已弃用,因此您应该直接使用 D3DCompile。

请参阅此博客文章

于 2019-07-28T20:19:10.140 回答