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).
g_
префикс подсказывает, что это может быть глобальная переменная, и чтение CreatePixelShader
Документация говорит мне, что это указатель на скомпилированный байт-код. Это означает, что сначала вы должны загрузить и скомпилировать исходный код шейдера, а затем передать указатель на этот скомпилированный код CreatePixelShader
функция. Какую функцию выполняет загрузка / компиляция исходного кода шейдера, я понятия не имею, так как я ничего не знаю о D3D, я просто использую здравый смысл (относительно имени переменной) и быстрый поиск в Интернете документации по функциям.
Это решение для Visual Studio 2012.
Чтобы установить заголовочный файл и имя переменной, связанной с файлом .fx или .hlsl:
«Имя переменной заголовка» -> Имя переменной, которая будет содержать байт-код шейдера.
«Имя файла заголовка» -> Имя файла заголовка, в который нужно вставить байт-код шейдера.
Насколько я понимаю, если вы включите этот файл в свой код, то у вас должен быть доступ к переменным, скомпилированным в этот файл. Код FX и HLSL должен быть скомпилирован в эти файлы перед началом процесса сборки в основном проекте.
ПРИМЕЧАНИЕ. Возможно, вам также придется изменить «Имя точки входа» в разделе «Общие», чтобы отразить название метода, который вы хотите скомпилировать (при условии, что вы используете .fx). Также могут быть проблемы с «типом шейдера» и «моделью шейдера», которые вы должны будете указать для своего конкретного файла шейдера.