Как один раз объявить ресурсы шейдера для C++ и пяти графических API
В движке SETech интерфейс ресурсов задают в общем заголовке, который обрабатывают и компилятор шейдеров, и C++. Это заменяет три синхронизируемых вручную сущности: объявление в шейдере, его копию в C++ и таблицу отражения. Если переименовать ресурс и не исправить обращение к нему, C++ перестанет собираться. Тихо получить непривязанную текстуру уже не выйдет.
Макросы превращаются в обычные объявления HLSL на стороне шейдера и в структуру с описателями на стороне C++. Препроцессор назначает регистры и пространства отдельно для D3D11, D3D12, Vulkan, Metal и WebGPU.
Ресурсы делятся на Fixed, PerFrame, PerBatch и PerDraw по частоте обновления. Благодаря этому движок повторно привязывает только изменившиеся группы. В техническом разборе схемы SETech есть код генерации раскладок и ограничения D3D11.
Post #2098
356
