Доделываю батчинг. Но есть вопрос. У меня есть метод draw

который рисует текстуру, данный вызов попадает в очередь отрисовки, когда все 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 никаких слоев нет. Есть мысли как это работает?

2 ответов

24 просмотра

рассуждения верные, в своё время делал что-то типа nextLayer() вызова и сортировал батчи с учётом layerIndex. Но, если есть возможность ограничить артистов на количество и размер текстур, то сможешь рендерить всё в один батч без сортировок и прочего, просто используя текстурный массив. В вершинах хранить индекс текстуры (0..255 например)

Евгений-Зощук Автор вопроса
Timur Gagiev
рассуждения верные, в своё время делал что-то типа...

Я примерно о таком думал, но это уже слежующий шаг в реализации. Буду при загрузке текстур объединять их в одну, что ещё больше снизит количество отрисовок. Но для меня данный шаг ещё сложен в реализации. И дополнительная сложность, это всё скрыть под капотом, предоставив простой API.

Похожие вопросы

Обсуждают сегодня

Подскажите, а есть vault lite или ченить такое?) А то нужен вольт для похода в вольт, но весит он ~500 мб) как-то многовато для парочки запросов ))
Alexandr Orloff
17
Ну, так - шо, грамодяне-эрленгяне? Все - готовы подписаться под словами "гуру" на счёт трудности применения POSIX threads и про, конкретно, мьютексы, что "... недопоставишь м...
Wlad
21
кто-нибудь пользуется тайм-трекерами во время работы? так много разных нагуглил, может есть что-то популярное
Lencore
8
Пацаны. Я разрабатываю софт для инвайтинга на телетон, и столкнулся с такой проблемой, в один из чатов не могу приглашать никого, не дает добавлять, в то же время через официа...
Kernel Panic
11
привет, как сбилдить свифт прогу статически? делаю -Xswiftc -static-executable - получаю такую ошибку: /lib/aarch64-linux-gnu/libc.a(pthread_join_common.o)(.note.stapsdt+0x14...
🦊 Fox 🌸 🌸
6
Я в прошлом году посмотрел на Apache Flink. Я пытался даже выучить скалу, но мне стало ужасно дурно. Потом я попытался посмотреть на Apache Storm и там всё точно такое же. Ест...
Matwey Kornilov
12
Здешний Лапшин и тот, что в видео - одна и та же личность? https://www.youtube.com/watch?v=MPUxk_6CMoA
Wlad
14
Господа, а можно ли как то при работе Packer-а с GCP “залогировать” все полиси, что были задействованы во время всего процесса работы Пакера? Охота минимизировать права, выдав...
elBobrKurwa
3
Скажите пожалуйта, можно ли испльзовать telethon для подписывания видео в моем канале? Меня не забанят за это?
Tony Anikos
6
VGA_WIDTH это сколько?
ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
7
Карта сайта