Дядя Миша я так понял, ты даже не ставил себе задачи реализовать батчинг в ксашмоде? Не похоже чтобы то что он сейчас делает вызвало бы проблемы у тебя.
Там всё есть, но по некоторым причинам работает хуже, чем могло бы.
Последний апдейт в большой спешке делался и только потому что я пообещал его выпустить.
SNMetamorph писал: Это всё есть, но не вижу смысла в данный момент выкладывать т.к. я еще не закончил дела с батчингом. Когда закончу, стопочкой уже всё выложу и распишу.
В общем-то там немного совсем осталось, остается доделать только bindless textures и отключение обхода дерева. И можно будет переносить графоний и материалы из П2.
KiQ может, там рендер текста сделан на дисплейных списках по старому туториалу NeHe. На каждую букву свой glBegin/glEnd и сдвиг курсора через glTranslatef.
Дядя Миша писал: SNMetamorph оно ловит изменения кваров. Но сортировка выполняется 1 раз после смены квара.
Ага, сегодня вот увидел и пофиксил. Там еще была такая проблема что tr.params_changed не обнулялся в R_ClearScene и в итоге сортировка каждый кадр выполнялась, но теперь в функции R_ClearScene если tr.params_changed трушный, то снова происходит сортировка. Вроде бы нормально работает.
Добавлено 08-04-2021 в 22:59:
Еще один фактор всплыл, который влияет на производительность рендеринга: на 74 отрисовки энтить приходится ~280 переключений шейдера, что конечно дофига. Я вручную проверил, что же там так чередуется, в итоге выяснилось что там есть 3 разных шейдера BmodelSolid, один без лайтстилей, второй с лайтстилем 0, и третий с лайтстилями 0 и 1.
Может быть как-то можно сделать чтоб шейдер был либо без лайтстилей, либо со всеми лайтстилями? А то в текущей реализации немало лишних переключений происходит.
Добавлено 08-04-2021 в 23:00:
Вообще по мере того как я что-то допиливаю, еще и новая информация раскрывается и снова приходится что-то допиливать. Замкнутый круг какой-та.
Дядя Миша писал: У тебя сортировка неправильная, не должно быть столько переключений.
Проблема в том что у энтитей то в общем-то и нечего сортировать, ну полупрозрачные и непрозрачные идут отдельно, конечно, но не более того.
А у непрозрачных каждая энтити рендерится отдельно, сбатчить их не получается из-за того что у каждой своя матрица трансформации.
Добавлено 08-04-2021 в 23:06:
Ну вообще, я пробовал делать сортировку сурфейсов именно каждой энтити, но это не оказало какого-либо влияния.
Добавлено 08-04-2021 в 23:07:
А вообще, конкретно мир сейчас довольно шустро рендерится, хотя все еще много что можно заоптимизировать.
Добавлено 08-04-2021 в 23:11:
Цитата:
SNMetamorph писал: А у непрозрачных каждая энтити рендерится отдельно, сбатчить их не получается из-за того что у каждой своя матрица трансформации.
А что если все матрицы засунуть в uniform buffer object
SNMetamorph писал: А у непрозрачных каждая энтити рендерится отдельно
Ты походу не понял. Зачем переключать шейдер при смене энтити?
Вот у тебя 100 энтить и на всех нулевой лайтстиль. Ты что шйдер каждый раз обнуляешь и ставишь заново?
Или ты хочешь сказать, что у каждой энтити используются по нескольку шейдеров?
Цитата:
SNMetamorph писал: А вообще, конкретно мир сейчас довольно шустро рендерится
сколько полигонов в кадре, сколько FPS, какая видеокарта.
Дядя Миша писал:
Ты походу не понял. Зачем переключать шейдер при смене энтити?
Вот у тебя 100 энтить и на всех нулевой лайтстиль. Ты что шйдер каждый раз обнуляешь и ставишь заново?
Ну там у каждой энтити все ее сурфейсы отправляются в список tr.draw_surfaces который потом рисуется в R_DrawBrushList. Это так еще в ванильном ксашмоде работало и пока никто это не трогал. Ну да, получается что шейдер там переключаетмя с нуля каждый раз.