SharpDX - ошибка fxc.exe при компиляции файла hlsl
Я начинаю изучать SharpDX и голографический шаблон для C#.
При компиляции проекта у меня возникает ошибка при компиляции файла шейдера.
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 ответ
Файлы CSO необходимо загрузить, а затем создать соответствующий шейдер. Ниже приведен пример функции, которую я использую для загрузки шейдера. Обратите внимание, что в этом примере вам следует придерживаться как байтового кода, так и вершинного шейдера.
Функция Helper - это моя перекрестная оболочка uwp / mfc, но она в основном возвращает файл в потоке данных в памяти.
Файл CSO представляет собой байт-код, его необходимо прикрепить к правильному классу шейдеров Sharpdx.Direct3D11.
Байт-код также используется для ссылки на семантический интерфейс (только для буферов вершин). как только вы это создали, ваш вызов отрисовки может сопоставить данные с регистром графического процессора, с которым он связан. Но код ниже по крайней мере загрузит ваш 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);
}
}