sashikknox

sashikknox 

C/C++ programmer, love Aurora OS

75subscribers

87posts

goals2
$842.57 of $4 308 raised
Поддержать портирование игрового движка Godot 4 для ОС Аврора с экспортом проекта в RPM файл, совместимый с RuStore.
$237.44 of $7 179 raised
just donate if you want =) Портирование игр и игровых движков: Prey 2006, Doom 3, GZDoom, Xash3D, RE3, VCMI, Super Tux Kart, Love2D games, Godot 4...

Godot 4.5. Грустная история портировщика.

Плохие новости: разработчики Godot опять изменили код, отвечающий за финальный рендеринг кадра.
Хорошие новости: Новый подход близок к тому, что я делал при портировании Godot 4.4 на ОС Аврора. Это так же предотвратит гарантированный баг, который будет заметен в моем порте Godot 4 в будущей ОС Аврора 5.2 при переносе окна  игры на внешний экран. Поясню подробнее.

Как обстояли дела в Godot 4.4

Перед началом рендеринга финального кадра вызывается функция glViewport. Она сообщает драйверу, какой участок буфера будет использоваться для вывода изображения. В Godot 4.4 размер этого участка не соответствовал фактическому размеру окна, а задавался заведомо бо́льшим. (Причины расписывать долго, так было нужно)
Для моего порта под ОС Аврора это было крайне неудобно. Я использовал
полноэкранный квад (quad), который занимал весь viewport, и поворачивал
его с помощью матрицы, чтобы адаптировать рендер под ориентацию экрана устройства. Из-за этого мне приходилось использовать в потоке рендеринга (render thread) реальные размеры дисплея, а не окна приложения. Это, по своей сути, неверный подход, но он позволил быстро реализовать нужную функциональность без усложнения логики. Моё решение гарантированно ломало бы вывод на внешний монитор, но на тот момент работа с несколькими экранами в ОС Аврора была ещё на ранней стадии разработки.
Кроме того, движок использовал функцию glBlitFrameBuffer для копирования пикселей из буфера на экран. Этот метод мне тоже не
подходил, так как не позволял учесть поворот. Поэтому я заменил его на
рендеринг того самого квада с наложенной текстурой, в качестве которой и
выступал отрендеренный кадр.

Что изменилось в Godot 4.5

Теперь всё стало гораздо логичнее:
  • В поток рендеринга передаётся корректный размер окна (супер!).
  • Рендеринг финального кадра теперь тоже выполняется через квад, а не через glBlitFrameBuffer

Что в итоге?

Хотя новый подход и является более удобным для меня, код рендеринга довольно сильно изменился. Это значит, что половину моих доработок придётся либо выбросить, либо серьёзно переписать. Процесс будет небыстрым, поскольку я занимаюсь этим в свободное время и, по большому счёту, на чистом энтузиазме (бесплатно 😅).
главное не бросай сие дело. чем сможем поможем.
Subscription levels4

Donate Extra Light

$1.43 per month
All subscriptions do not open nothing special for subscribers, it just easy way to donate monthly.
RU:
Все подписчики не получают никакого особенного контента, или каких то
закрытых постов. Это просто удобный способ сделать ежемесячные
пожертвования.

Donate Light

$2.16 per month
All subscriptions do not open nothing special for subscribers, it just easy way to donate monthly.
RU: Все подписчики не получают никакого особенного контента, или каких то закрытых постов. Это просто удобный способ сделать ежемесячные пожертвования.

Donate Medium

$4.4 per month
All subscriptions do not open nothing special for subscribers, it just easy way to donate monthly.
RU:
Все подписчики не получают никакого особенного контента, или каких то
закрытых постов. Это просто удобный способ сделать ежемесячные
пожертвования.

Donate Like a Man!

$8.7 per month
All subscriptions do not open nothing special for subscribers, it just easy way to donate monthly.
RU:
Все подписчики не получают никакого особенного контента, или каких то
закрытых постов. Это просто удобный способ сделать ежемесячные
пожертвования.
Go up