Directx 从ID3D11VertexShader或任何东西获取着色器字节码

Directx 从ID3D11VertexShader或任何东西获取着色器字节码,directx,d3dx,Directx,D3dx,我通常通过D3DX11CompileFromFile获取顶点着色器的字节码,但是有没有办法从ID3D11VertexShader获取字节码?或其他接口 我尝试过其他D3DX11Compile*函数,如D3DX11CompileFromMemory、D3DX11CompileFromResource,但这些函数不是为解决此问题而设计的 ID3DBlob* VertexBlob; D3DX11CompileFromFile(Resource->GetPath(), NULL, NULL, "

我通常通过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从着色器源构建的旧示例中很常见

请注意,
D3DX11Compile*
函数只是API的包装。D3DX11是,所以您应该直接使用D3DCompile


要创建Direct3D 11顶点着色器对象、像素着色器对象等,请参见。必须提供着色器blob包含的已编译着色器二进制文件

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

请注意,
D3DX11Compile*
函数只是API的包装。D3DX11是,所以您应该直接使用D3DCompile