DirectX 11 Компиляция отдельных файлов HLSL (без эффектов)
Во-первых, я совершенно новичок в DirectX11. Поскольку Microsoft выпустила Windows 8 с эффектом Effects & D3DX, я хочу использовать альтернативу Effects. Однако я понятия не имею, как это сделать, я просто знаю, что каждый файл HLSL должен иметь 1 точку входа для определенного шейдера (вершина, пиксель, вычисления, ...). Вот и все, так кто-нибудь знает хороший урок о hlsl шейдерах без эффектов? Или кто-то может сказать мне, как они это делают?
Заранее спасибо!
1 ответ
Если вы полностью новичок в DirectX и хотите перейти прямо к новейшей версии для Windows 8, вам понадобится учебник по DirectX 11.1 или DirectX 11.2. Я бы предложил этот конкретный урок, чтобы помочь вам понять проблему шейдеров:
http://www.directxtutorial.com/Lesson.aspx?lessonid=111-4-5
Это часть учебников по DirectX 11.1 для Windows 8, поэтому вам следует хорошо изучить их, чтобы узнать, какие части делают DX 11.1, а вы до сих пор не понимаете.
Итак, позвольте мне вкратце рассказать о том, как шейдеры обрабатываются без эффектов в новом мире DX 11.1.
Файлы шейдеров HLSL теперь являются частью решений Visual Studio. Вы должны создать отдельные файлы для вершинных и пиксельных шейдеров. Они будут скомпилированы с вашим программным кодом, так что вы должны загрузить во время выполнения уже скомпилированный двоичный код. Вы сохраняете этот код в байтовых массивах (например, VSFile->Data и PSFile->Data) и создаете шейдерные объекты, используя:
//dev is the Device pointer
dev->CreateVertexShader(VSFile->Data, VSFile->Length, nullptr, &vertexshader);
dev->CreatePixelShader(PSFile->Data, PSFile->Length, nullptr, &pixelshader);
тогда вы устанавливаете активные шейдеры так:
//devcon is the DeviceContext pointer
devcon->VSSetShader(vertexshader.Get(), nullptr, 0);
devcon->PSSetShader(pixelshader.Get(), nullptr, 0);
Я надеюсь, что это проясняет эту проблему.