HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Наши проекты (https://hlfx.ru/forum/forumdisplay.php?forumid=1)
-- PrimeXT - логическое продолжение XashXT (https://hlfx.ru/forum/showthread.php?threadid=5371)
Отправлено Дядя Миша 15-03-2021 в 17:38:
Хорошо, будем ждать 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Crystallize 15-03-2021 в 17:43:
Дядя Миша я так понял, ты даже не ставил себе задачи реализовать батчинг в ксашмоде? Не похоже чтобы то что он сейчас делает вызвало бы проблемы у тебя.
Отправлено Дядя Миша 15-03-2021 в 18:33:
Там всё есть, но по некоторым причинам работает хуже, чем могло бы.
Последний апдейт в большой спешке делался и только потому что я пообещал его выпустить.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 15-03-2021 в 18:53:
Цитата:
SNMetamorph писал:
Это всё есть, но не вижу смысла в данный момент выкладывать т.к. я еще не закончил дела с батчингом. Когда закончу, стопочкой уже всё выложу и распишу.
В общем-то там немного совсем осталось, остается доделать только bindless textures и отключение обхода дерева. И можно будет переносить графоний и материалы из П2.__________________
Мой сайт
Xash3D Modding Discord
Отправлено SNMetamorph 18-03-2021 в 07:21:
За вчера запилил статик энтити и их батчинг, прикрутил более расширенную статистику в r_speeds и пофиксил несколько багов.
__________________
Мой сайт
Xash3D Modding Discord
Отправлено KiQ 19-03-2021 в 15:46:
Цитата:
SNMetamorph писал:
оно КАЖДУЮ букву рендерит через glBegin/glEnd
Зачем каждую?
множественные квады спокойно рисуются внутри одного glBegin/glEnd, вот у меня в движке например метод рисования текста
C++ Source Code:
2 | if (text == null) return; |
3 | if (text.length() <= 0) return; |
6 | float tmp_y = y - font.ascent; |
8 | GL11.glBindTexture(GL11.GL_TEXTURE_2D, font.getFontTexture().id); |
9 | GL11.glColor4f(color.r, color.g, color.b, color.a); |
11 | GL11.glBegin(GL11.GL_QUADS); |
13 | for (char c : text.toCharArray()) { |
14 | float w = font.charWidth(c); |
15 | float h = font.getHeight(); |
17 | float u = 1.0F / font.getFontTexture().width * font.getCharX(c); |
19 | float u2 = u + 1.0F / font.getFontTexture().width * w; |
22 | GL11.glTexCoord2f(u, v); |
23 | GL11.glVertex2f(tmp_x, tmp_y); |
25 | GL11.glTexCoord2f(u2, v); |
26 | GL11.glVertex2f(tmp_x + w, tmp_y); |
28 | GL11.glTexCoord2f(u2, v2); |
29 | GL11.glVertex2f(tmp_x + w, tmp_y + h); |
31 | GL11.glTexCoord2f(u, v2); |
32 | GL11.glVertex2f(tmp_x, tmp_y + h); |
39 | GL11.glColor4f(1f, 1f, 1f, 1f); |
40 | GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); |
Надо бы мне атласы шрифтов замутить для ускорения
Добавлено 19-03-2021 в 18:46:
Кстати, пробовал переводить на glDrawArrays, никакого прироста не получил__________________
-Brain is dead-
Отправлено Дядя Миша 19-03-2021 в 15:54:
Цитата:
KiQ писал:
множественные квады спокойно рисуются внутри одного glBegin/glEnd
ну да, я про это и говорил.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ncuxonaT 19-03-2021 в 16:50:
KiQ может, там рендер текста сделан на дисплейных списках по старому туториалу NeHe. На каждую букву свой glBegin/glEnd и сдвиг курсора через glTranslatef.
Отправлено SNMetamorph 21-03-2021 в 18:31:
Цитата:
Дядя Миша писал:
Хы. Mod_ResortFaces должен вызываться каждый кадр. Там недоделато.
А почему каждый кадр? Как оно по идее должно было работать?__________________
Мой сайт
Xash3D Modding Discord
Отправлено Дядя Миша 21-03-2021 в 19:27:
SNMetamorph оно ловит изменения кваров. Но сортировка выполняется 1 раз после смены квара.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 08-04-2021 в 19:00:
Цитата:
Дядя Миша писал:
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:
Вообще по мере того как я что-то допиливаю, еще и новая информация раскрывается и снова приходится что-то допиливать. Замкнутый круг какой-та.__________________
Мой сайт
Xash3D Modding Discord
Отправлено Дядя Миша 08-04-2021 в 19:02:
Цитата:
SNMetamorph писал:
Может быть как-то можно сделать чтоб шейдер был либо без лайтстилей, либо со всеми лайтстилями?
Попробуй, но так ИМХО еще тормознее. У тебя сортировка неправильная, не должно быть столько переключений.
Цитата:
SNMetamorph писал:
Вообще по мере того как я что-то допиливаю, еще и новая информация раскрывается и снова приходится что-то допиливать
Я сумел вовремя остановиться, да.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 08-04-2021 в 19:11:
Цитата:
Дядя Миша писал:
У тебя сортировка неправильная, не должно быть столько переключений.
Проблема в том что у энтитей то в общем-то и нечего сортировать, ну полупрозрачные и непрозрачные идут отдельно, конечно, но не более того.
А у непрозрачных каждая энтити рендерится отдельно, сбатчить их не получается из-за того что у каждой своя матрица трансформации.
Добавлено 08-04-2021 в 23:06:
Ну вообще, я пробовал делать сортировку сурфейсов именно каждой энтити, но это не оказало какого-либо влияния.
Добавлено 08-04-2021 в 23:07:
А вообще, конкретно мир сейчас довольно шустро рендерится, хотя все еще много что можно заоптимизировать.
Добавлено 08-04-2021 в 23:11:
Цитата:
SNMetamorph писал:
А у непрозрачных каждая энтити рендерится отдельно, сбатчить их не получается из-за того что у каждой своя матрица трансформации.
А что если все матрицы засунуть в uniform buffer object 
__________________
Мой сайт
Xash3D Modding Discord
Отправлено Дядя Миша 08-04-2021 в 20:43:
Цитата:
SNMetamorph писал:
А у непрозрачных каждая энтити рендерится отдельно
Ты походу не понял. Зачем переключать шейдер при смене энтити?
Вот у тебя 100 энтить и на всех нулевой лайтстиль. Ты что шйдер каждый раз обнуляешь и ставишь заново?
Или ты хочешь сказать, что у каждой энтити используются по нескольку шейдеров?
Цитата:
SNMetamorph писал:
А вообще, конкретно мир сейчас довольно шустро рендерится
сколько полигонов в кадре, сколько FPS, какая видеокарта.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 09-04-2021 в 06:21:
Цитата:
Дядя Миша писал:
Ты походу не понял. Зачем переключать шейдер при смене энтити?
Вот у тебя 100 энтить и на всех нулевой лайтстиль. Ты что шйдер каждый раз обнуляешь и ставишь заново?
Ну там у каждой энтити все ее сурфейсы отправляются в список tr.draw_surfaces который потом рисуется в R_DrawBrushList. Это так еще в ванильном ксашмоде работало и пока никто это не трогал. Ну да, получается что шейдер там переключаетмя с нуля каждый раз.