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);
            }

        }
Другие вопросы по тегам