SNMetamorph сделай проверку на соответствие текущего шейдера и шейдера эньтьи и переключай только если current_shader != entity_shader. Ну или просто сделать сортировку ещё и по шейдерам
GL_SelectTexture( glConfig.max_texture_units - 1 ); // force to cleanup all the units
2
GL_CleanUpTextureUnits( 0 );
3
pglBindVertexArray( GL_FALSE );
4
GL_BindShader( NULL );
5
GL_Cull( GL_FRONT );
В принципе такой подход избыточен и можно не обнулять ничего, но внимательно следить, чтобы всё встало в дефолтное состояние к концу кадра, чтобы движок смог корректно отрендерить худ.
Аналогично и в студиомоделях и еще где-то. Вообщем надо провести ревизию состояния стейтов.
Добавлено 09-04-2021 в 11:25:
Цитата:
KiQ писал: сделай проверку на соответствие текущего шейдера и шейдера эньтьи и переключай только если current_shader != entity_shader. Ну или просто сделать сортировку ещё и по шейдерам
Дядя Миша писал: А. В конце R_DrawBrushList будет вызов
C++ Source Code:
1
GL_SelectTexture( glConfig.max_texture_units - 1 ); // force to cleanup all the units
2
GL_CleanUpTextureUnits( 0 );
3
pglBindVertexArray( GL_FALSE );
4
GL_BindShader( NULL );
5
GL_Cull( GL_FRONT );
В принципе такой подход избыточен и можно не обнулять ничего, но внимательно следить, чтобы всё встало в дефолтное состояние к концу кадра, чтобы движок смог корректно отрендерить худ.
Аналогично и в студиомоделях и еще где-то. Вообщем надо провести ревизию состояния стейтов.
Добавлено 09-04-2021 в 11:25:
естественно там всё это есть.
То есть этот весь сброс стейтов можно убрать из функции R_DrawBrushList и сунуть в место которое находится непосредственно после рендеринга энтитей?
Поскольку я обход BSP со сбором всех видимых сурфейсов сделал опциональным, теперь надо еще как-то под это адаптировать код который рисует динлайты и траву, а еще декали. Пока не добрался до этого, но это как раз и буду в первую очередь делать.
Цитата:
Дядя Миша писал: Хоть бы спросил, почему там макрос, а не функция.
Ну наверное чтоб лишние вызовы не делать? Хотя хз насколько это вообще на производительность влияет.
Гарантия есть, но я не помню при каких условиях. Макрос надёжнее в этом плане, хоть и выглядит не так красиво.
Добавлено 15-04-2021 в 11:14:
Да и вообще, если макрос оперирует глобальными переменными, то пофигу. Вот что я не люблю, так это локальные макросы, для отдельно взятой функции, вот это реальное зло. Там по смыслу лмябды так и напрашиваются.
Сложно. Ну вот пофиксил я длайты вместе с декалями, а теперь пришел черёд травы. Проблема в том, что там нужно снова пройтись по всем сурфейсам (не только по видимым, как я понял) и для каждого применить R_AddGrassToChain. И так каждый кадр, как-то оно медленно будет, мне кажется
Добавлено 15-04-2021 в 21:12:
Цитата:
SNMetamorph писал: Сложно. Ну вот пофиксил я длайты вместе с декалями, а теперь пришел черёд травы. Проблема в том, что там нужно снова пройтись по всем сурфейсам (не только по видимым, как я понял) и для каждого применить R_AddGrassToChain. И так каждый кадр, как-то оно медленно будет, мне кажется
Похожая история и со скайбоксом была, но я как-то пофиксил ранее, хотя там уже другой баг вылез.
SNMetamorph писал: Проблема в том, что там нужно снова пройтись по всем сурфейсам (не только по видимым, как я понял)
нет, необязательно. Достаточно по тем сурфейсам, которые видны из лифов, попавших в кадр. Но может случится ситуация, когда сурфейс не виден, а трава на нём видна. На этот случай можно увелчить bbox лифа. Собсно я это уже сделал.