~dokomix/dokomix/+git/taisei:v1.4.x

Last commit made on 2024-04-20
Get this branch:
git clone -b v1.4.x https://git.launchpad.net/~dokomix/dokomix/+git/taisei

Branch merges

Branch information

Name:
v1.4.x
Repository:
lp:~dokomix/dokomix/+git/taisei

Recent commits

86e13e7... by Andrei Alexeyev <email address hidden>

stage: fix pause menu related crashes

There were two distinct things going on here:

1. If we receive multiple buffered TE_GAME_PAUSE events in the same
   frame, we'd process all of them and create a pause menu for each.
   This could theoretically overflow the evloop stack and crash the
   game.
2. The `stage_comain` task starts before scheduling the stage main
   loop via `eventloop_enter`. It initializes systems that depend on
   tasks, and then immediatelly enters its per-frame async loop,
   finishing its first iteration before yielding back to `_stage_enter`
   and thus allowing `eventloop_enter` to be finally called. If there is
   a TE_GAME_PAUSE event in the queue at this point, it would be handled
   right there, and a pause menu would be created before the stage main
   loop is scheduled. This messes things up quite a bit, leaking a
   "zombie" pause menu into the evloop stack. After the stage is
   destroyed, the evloop would try to switch to the frame created for
   this menu. The menu's draw function would then attempt to reference
   free'd resources of the destroyed stage, crashing the game. This
   crash has actually been observed and reported (thanks @0kalekale)

To fix #1, the stage now tracks its paused state and refuses to open a
pause menu if one already exists.

To fix #2, `stage_comain` now yields before starting its async loop, to
let the stage set up its main loop early.

Note that because the stage main loop runs all coroutine tasks before
incrementing the frame counter, `stage_comain`'s per-frame logic would
execute twice on frame 0. This is obviously wrong, but this behavior
must be preserved to maintain compatibility with v1.4 replays. For that
reason, the `stage_comain` loop now skips its first YIELD. This hack can
be removed once v1.4 compat is no longer a concern.

d00668e... by Andrei Alexeyev <email address hidden>

gl33: fix scissor test

6327afb... by Andrei Alexeyev <email address hidden>

boss: fix smoke particles

0004a07... by Andrei Alexeyev <email address hidden>

util/miscmath: force inline cdot[f] and cabs2[f]

These massively affect the performance of quantize_laser()
Shouldn't matter in LTO builds, but helps for quick debug/dev builds

e28aa51... by Andrei Alexeyev <email address hidden>

lasers/draw: sort before packing and allow rotation in sdf texture

Slightly improves packing efficiency

4fc9d5c... by Andrei Alexeyev <email address hidden>

util/miscmath: add cswapf()

0e9ae8c... by Andrei Alexeyev <email address hidden>

rectpack: allow optional rotation

0598e03... by Andrei Alexeyev <email address hidden>

rectpack: tune split and fitness heuristics

c017482... by Andrei Alexeyev <email address hidden>

resources: fix laser sdf shader being affected by screen shake

13aef2d... by Andrei Alexeyev <email address hidden>

xdg: update appdata