Как написать файл заголовка, если я хочу скомпилировать HLSL во время сборки в файлы заголовка,

MSDN говорит, что вы можете скомпилировать ваши .hlsl файлы в байтовые массивы, которые определены в заголовочных файлах. И это код, который они дают.

    #include "PixelShader.h"ComPtr<ID3D11PixelShader> m_pPixelShader;
hr = pDevice->CreatePixelShader(g_psshader,
sizeof(g_psshader), nullptr, &m_pPixelShader);

Так g_psshader это байтовый массив. Но как определить g_psshader?
Я нигде не могу найти разговоров об этом. Я пробовал несколько способов, но все не получилось. MSDN предоставил Пример медиа-расширений. Но в этом примере нет PixelShader.h.

В случае, если вы пропустили вопрос: как определить g_psshader в приведенном выше коде (я имею в виду в заголовке PixelShader.h).

1

Решение

g_ префикс подсказывает, что это может быть глобальная переменная, и чтение CreatePixelShader Документация говорит мне, что это указатель на скомпилированный байт-код. Это означает, что сначала вы должны загрузить и скомпилировать исходный код шейдера, а затем передать указатель на этот скомпилированный код CreatePixelShader функция. Какую функцию выполняет загрузка / компиляция исходного кода шейдера, я понятия не имею, так как я ничего не знаю о D3D, я просто использую здравый смысл (относительно имени переменной) и быстрый поиск в Интернете документации по функциям.

0

Другие решения

Это решение для Visual Studio 2012.

Чтобы установить заголовочный файл и имя переменной, связанной с файлом .fx или .hlsl:

  1. Щелкните правой кнопкой мыши файл .fx или .hlsl внутри обозревателя решений и выберите Свойства.
  2. Слева должно быть дерево под названием «HLSL Compiler». Разверните это дерево и выберите «Выходные файлы».
  3. На странице свойств справа есть несколько свойств для управления компиляцией HLSL.

«Имя переменной заголовка» -> Имя переменной, которая будет содержать байт-код шейдера.

«Имя файла заголовка» -> Имя файла заголовка, в который нужно вставить байт-код шейдера.

Насколько я понимаю, если вы включите этот файл в свой код, то у вас должен быть доступ к переменным, скомпилированным в этот файл. Код FX и HLSL должен быть скомпилирован в эти файлы перед началом процесса сборки в основном проекте.

ПРИМЕЧАНИЕ. Возможно, вам также придется изменить «Имя точки входа» в разделе «Общие», чтобы отразить название метода, который вы хотите скомпилировать (при условии, что вы используете .fx). Также могут быть проблемы с «типом шейдера» и «моделью шейдера», которые вы должны будете указать для своего конкретного файла шейдера.

5

По вопросам рекламы [email protected]