который рисует текстуру, данный вызов попадает в очередь отрисовки, когда все draw отработали я прохожу по массиву и создаю батчи с сортировкой поуникальной текстуре. И получается, что данный механиз эффективен, но имеет проблему в порядке отрисовки, что бы это исправить требуется очередно группировать в батчи. Что увеличивает их количество. Для того, что бы минимизировать draw call, следует рисовать слоями, сначала draw для слоя 0, 1,2 и т.д И тогда батчи будут группироваться по слоям + id текстуры. Отсюда вопрос, как лучше отобразить это в APi?
Это всё 2D графика, материалов нет.
Хотелось бы создать простое и удобное API.
Простой вариант, добавляю аргумент в метод, номер слоя size_t layer по умолчанию 0
Vec2u это size_t x, size_t y
void Render::Draw(Texture* image, const Vec2u& dstPos, const Vec2u& dstSize, const Vec2u& srcPos, const Vec2u& srcSize, size_t layer = 0)
К нему доп вопрос, в SDL2 есть опция включающая батчинг, но в API никаких слоев нет. Есть мысли как это работает?
рассуждения верные, в своё время делал что-то типа nextLayer() вызова и сортировал батчи с учётом layerIndex. Но, если есть возможность ограничить артистов на количество и размер текстур, то сможешь рендерить всё в один батч без сортировок и прочего, просто используя текстурный массив. В вершинах хранить индекс текстуры (0..255 например)
Я примерно о таком думал, но это уже слежующий шаг в реализации. Буду при загрузке текстур объединять их в одну, что ещё больше снизит количество отрисовок. Но для меня данный шаг ещё сложен в реализации. И дополнительная сложность, это всё скрыть под капотом, предоставив простой API.
Обсуждают сегодня