从 ID3D11VertexShader 或任何东西获取着色器字节码
Getting shader bytecode from ID3D11VertexShader or anything
我通常通过 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* 函数的情况下获取着色器字节码?
为了创建 Direct3D 11 顶点着色器对象、像素着色器对象等,您必须提供已编译的着色器二进制文件,这是着色器 blob 包含的内容。
如果提供的已编译着色器二进制文件无效或运行时签名不正确,Direct3D 11 函数将失败。因此,二进制文件必须首先来自 HLSL Direct3D 编译器。通常这是离线完成的,然后直接从磁盘加载为二进制数据,在游戏运行时创建的二进制 blob 缓存,或者在运行时通过 Direct3D 编译从着色器源构建的旧示例中很常见API.
Note that the D3DX11Compile*
functions are merely wrappers around the D3D Compile API. D3DX11 is deprecated, so you should use D3DCompile directly instead.
我通常通过 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* 函数的情况下获取着色器字节码?
为了创建 Direct3D 11 顶点着色器对象、像素着色器对象等,您必须提供已编译的着色器二进制文件,这是着色器 blob 包含的内容。
如果提供的已编译着色器二进制文件无效或运行时签名不正确,Direct3D 11 函数将失败。因此,二进制文件必须首先来自 HLSL Direct3D 编译器。通常这是离线完成的,然后直接从磁盘加载为二进制数据,在游戏运行时创建的二进制 blob 缓存,或者在运行时通过 Direct3D 编译从着色器源构建的旧示例中很常见API.
Note that the
D3DX11Compile*
functions are merely wrappers around the D3D Compile API. D3DX11 is deprecated, so you should use D3DCompile directly instead.