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

SharpDX - fxc.exe error when compiling hlsl file

我正在开始学习 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。

谢谢!

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

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

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

字节码还用于引用语义接口(仅适用于顶点缓冲区)。一旦你创建了它,你的绘图调用就可以将数据与它关联的 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);
            }

        }