Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ситуация
При переходе между уровнями что
ref_gl
, что вref_vk
рисуется чёрный экран. В оригинале игры изображение "застывает", пока не прогрузится следующий уровень. Чёрный экран сильно давит на глаза во время игры.На этот баг жаловались пару раз:
А так же было одно ишью в форке от @w23:
Причины проблемы
При смене уровня явно подразумевалась отрисовка скриншота уровня: для этого есть весь код. Но скриншота на момент смены локации не существует.
Поковыряв цепочку вызовов я выяснил, что для создания скриншотов происходит вызов
SCR_MakeLevelShot
, которая дёргает командуlevelshot
. Команда проставляет переменные и активируетSCR_MakeScreenShot
, которая сделает скриншот сразу после отрисовки следующего кадра.Но
SCR_MakeLevelShot
не отрабатывает, ибо в переменнуюscrshot_request
не прописанscrshot_plaque
, на который сделана проверка.Судя по всему, скриншот должен создаваться после вызова
CL_ParseServerData
. При вызове этой функции прописываются пути до скриншота уровня, а так же происходит какая-то неочевидная проверка с установкойscrshot_plaque
.Больше никто не проставляет
scrshot_plaque
для создания скриншота уровня.Не долго думая, я безусловно выставил
scrshot_plaque
вCL_ParseServerData
.Последствия фикса
При повторном переходе между уровнями теперь отображаются скриншоты. Правда, только при повторном. При первом переходе скриншот не успевает создаться и отрисовывается чёрный экран. Так же скриншоты не удаляются при выходе из игры или смены карты, и при переходе туда-сюда рисуется старый скриншот. Но кажется это лучше, чем контрастно чёрный экран после светлой локации, бьющий по глазам.
Дополнение
Я не думаю, что мой фикс правильный. У меня в голове нет понимания, что хотел сказать автор своим кодом и как лучше сделать "застывание" камеры при переключении уровней. Кажется, что скриншот для этого не очень подходит: копировать картинку с видеокарты, писать на диск и потом читать явно работает медленнее, чем сама смена уровня.