我开始为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。
谢谢!
答案 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);
}
}