SharpDX - 编译hlsl文件时出现fxc.exe错误

时间:2018-01-22 14:13:11

标签: c# directx hlsl vertex-shader sharpdx

我开始为C#学习SharpDX和全息模板。

在编译项目时,我在编译着色器文件时遇到错误。

var vertexShaderByteCode = ShaderBytecode.CompileFromFile("Content/Shaders/VertexSharderShared.hlsl", "VS", "vs_5_0", ShaderFlags.Debug);

fxc.exe以代码1退出。

在示例中,他们使用一些.cso文件,同时将着色器加载到字节代码中: code img

由于我不太明白.cso来自哪里以及Vprt是什么,我更喜欢直接加载hlsl文件。我正在使用SharpDX 3.0.2,SharpDX.Direct3D11 3.0.2和SharpDX.D3DCompiler 3.0.2。

谢谢!

1 个答案:

答案 0 :(得分:0)

需要加载CSO文件,然后创建相关着色器。下面是我用来加载着色器的函数示例。请注意,您应该保留字节代码以及此示例中的顶点着色器。

Helper函数是我的交叉uwp / mfc包装器,但它基本上返回内存中数据流中的文件。

CSO文件是字节代码,您需要将其附加到正确的Sharpdx.Direct3D11着色器类。

字节码还用于引用语义接口(仅适用于Vertex缓冲区)。一旦创建了它,您的绘制调用就可以将数据与它所关联的GPU寄存器进行匹配。但是下面的代码至少会加载你的CSO文件并创建顶点着色器。

好运。

         using (Stream fileStream = Helper.GetFileStream(a_fileName, a_filePath))
        {
            a_byteCode = new D3DCompiler.ShaderBytecode(fileStream);

            if (a_byteCode != null)
            {
                a_child = new D3D11.VertexShader(a_device, a_byteCode)
                {
                    DebugName = "a_fileName"
                };
            }
            else
            {
                throw new Exception("Unable to load file: " + a_fileName);
            }

        }