- Resolution: 8x8 world cells, 2x2 UI cells (UI_SCALE=4) - GPU lighting: vertex-shader computed, light source list buffer (max 64) instead of O(N×R²) grid scan, O(N×S) per cell - Viewport-aware CA: iterate only active chunks, not all 250×250 - Flat array entity/item/shadow maps instead of HashMaps - Flat 128-entry ASCII atlas array instead of HashMap lookup - Partial grid upload: viewport + 30-cell margin only - Pre-allocated viewport arrays in renderer structs (zero alloc/frame) - Skip CPU lighting for GPU modes (pass None) - Benchmark mode: --mode benchmark with per-subsystem timing - GpuLightSource struct, light_count in push constants - gather_sources_in_range() for viewport-scoped source gathering Benchmark (600 ticks, release): Graphics: 531 FPS (was 386, +38%), render 1013us (was 1699us, -40%) ASCII: 402 FPS (was 313, +28%), render 1502us (was 2346us, -36%) All 171 tests + 14 scenarios pass.
186 lines
13 KiB
Plaintext
186 lines
13 KiB
Plaintext
=== Verbatim Headless Run: 5 ticks ===
|
|
|
|
World: 250x250
|
|
Player start: (125.0, 242.0)
|
|
Camera: (85, 230)
|
|
|
|
=== Tick 0 (initial state) ===
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35
|
|
36 @@@
|
|
37 TTTTT @@@
|
|
38 T T @@@@@
|
|
39 T T @@@@@@@ .
|
|
40 T T @@@@@ ...
|
|
41 T T ## @@@@@ .....
|
|
42 T T ## @@@ .......
|
|
43 T T ## @@@ """"""""""""" .........
|
|
44""" T T ## @@@@@ "":::::::::::::""" ..........
|
|
45:::""" ## @ @ @ """::::::::::::::::::"" ...........
|
|
46::::::"" ## @ @ @"":::::::::::::::::::::::""".........
|
|
47::::::::""""""""""""""""""""""""""""""@"""@::::::::::::::::::::::::::::"""""""""
|
|
48::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
49########################################>#######################################
|
|
50????????????????????????????????????????????????????????????????????????????????
|
|
51????????????????????????????????????????????????????????????????????????????????
|
|
52????????????????????????????????????????????????????????????????????????????????
|
|
53????????????????????????????????????????????????????????????????????????????????
|
|
54????????????????????????????????????????????????????????????????????????????????
|
|
Player: "Player hp=150.0/150.0 pos=(125.0,242.0) bodies=47/47 on_fire=false"
|
|
Entities: 1
|
|
|
|
=== Tick 1 ===
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35 @@@
|
|
36 @@@
|
|
37 TTTTT @@@@@
|
|
38 T T @@@@@@@
|
|
39 T T @@@@@ .
|
|
40 T T @@@@@ ...
|
|
41 T T ## @@@ .....
|
|
42 T T ## @@@ .......
|
|
43" T T ## @@@@@ """"""""""""" ........
|
|
44:""" T T ## @ @ @ "":::::::::::::""" .........
|
|
45::::""" ## @ @ @ """::::::::::::::::::"" ..........
|
|
46:::::::"" ## @ @ "":::::::::::::::::::::::"""........
|
|
47:::::::::"""""""""""""""""""""""""""""""""""::::::::::::::::::::::::::::""""""""
|
|
48::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
49#########################################>######################################
|
|
50????????????????????????????????????????????????????????????????????????????????
|
|
51????????????????????????????????????????????????????????????????????????????????
|
|
52????????????????????????????????????????????????????????????????????????????????
|
|
53????????????????????????????????????????????????????????????????????????????????
|
|
Player: "Player hp=150.0/150.0 pos=(124.0,241.0) bodies=47/47 on_fire=false"
|
|
Entities: 1
|
|
Alive entities: Player(hp=150, pos=(124.0, 241.0))
|
|
|
|
=== Tick 2 ===
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35 @@@
|
|
36 @@@
|
|
37 TTTTT @@@@@
|
|
38 T T @@@@@@@
|
|
39 T T @@@@@ .
|
|
40 T T @@@@@ ...
|
|
41 T T ## @@@ .....
|
|
42 T T ## @@@ .......
|
|
43" T T ## @@@@@ """"""""""""" ........
|
|
44:""" T T ## @ @ @ "":::::::::::::""" .........
|
|
45::::""" ## @ @ @ """::::::::::::::::::"" ..........
|
|
46:::::::"" ## @ @ "":::::::::::::::::::::::"""........
|
|
47:::::::::"""""""""""""""""""""""""""""""""""::::::::::::::::::::::::::::""""""""
|
|
48::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
49#########################################>######################################
|
|
50????????????????????????????????????????????????????????????????????????????????
|
|
51????????????????????????????????????????????????????????????????????????????????
|
|
52????????????????????????????????????????????????????????????????????????????????
|
|
53????????????????????????????????????????????????????????????????????????????????
|
|
Player: "Player hp=150.0/150.0 pos=(124.0,241.0) bodies=47/47 on_fire=false"
|
|
Entities: 1
|
|
Alive entities: Player(hp=150, pos=(124.0, 241.0))
|
|
|
|
=== Tick 3 ===
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35 @@@
|
|
36 @@@
|
|
37 TTTTT @@@@@
|
|
38 T T @@@@@@@
|
|
39 T T @@@@@ .
|
|
40 T T @@@@@ ...
|
|
41 T T ## @@@ .....
|
|
42 T T ## @@@ .......
|
|
43" T T ## @@@@@ """"""""""""" ........
|
|
44:""" T T ## @ @ @ "":::::::::::::""" .........
|
|
45::::""" ## @ @ @ """::::::::::::::::::"" ..........
|
|
46:::::::"" ## @ @ "":::::::::::::::::::::::"""........
|
|
47:::::::::"""""""""""""""""""""""""""""""""""::::::::::::::::::::::::::::""""""""
|
|
48::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
49#########################################>######################################
|
|
50????????????????????????????????????????????????????????????????????????????????
|
|
51????????????????????????????????????????????????????????????????????????????????
|
|
52????????????????????????????????????????????????????????????????????????????????
|
|
53????????????????????????????????????????????????????????????????????????????????
|
|
Player: "Player hp=150.0/150.0 pos=(124.0,241.0) bodies=47/47 on_fire=false"
|
|
Entities: 1
|
|
Alive entities: Player(hp=150, pos=(124.0, 241.0))
|
|
|
|
=== Tick 4 ===
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35 @@@
|
|
36 @@@
|
|
37 TTTTT @@@@@
|
|
38 T T @@@@@@@
|
|
39 T T @@@@@ .
|
|
40 T T @@@@@ ...
|
|
41 T T ## @@@ .....
|
|
42 T T ## @@@ .......
|
|
43" T T ## @@@@@ """"""""""""" ........
|
|
44:""" T T ## @ @ @ "":::::::::::::""" .........
|
|
45::::""" ## @ @ @ """::::::::::::::::::"" ..........
|
|
46:::::::"" ## @ @ "":::::::::::::::::::::::"""........
|
|
47:::::::::"""""""""""""""""""""""""""""""""""::::::::::::::::::::::::::::""""""""
|
|
48::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
49#########################################>######################################
|
|
50????????????????????????????????????????????????????????????????????????????????
|
|
51????????????????????????????????????????????????????????????????????????????????
|
|
52????????????????????????????????????????????????????????????????????????????????
|
|
53????????????????????????????????????????????????????????????????????????????????
|
|
Player: "Player hp=150.0/150.0 pos=(124.0,241.0) bodies=47/47 on_fire=false"
|
|
Entities: 1
|
|
Alive entities: Player(hp=150, pos=(124.0, 241.0))
|
|
|
|
=== Tick 5 ===
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35 @@@
|
|
36 @@@
|
|
37 TTTTT @@@@@
|
|
38 T T @@@@@@@
|
|
39 T T @@@@@ .
|
|
40 T T @@@@@ ...
|
|
41 T T ## @@@ .....
|
|
42 T T ## @@@ .......
|
|
43" T T ## @@@@@ """"""""""""" ........
|
|
44:""" T T ## @ @ @ "":::::::::::::""" .........
|
|
45::::""" ## @ @ @ """::::::::::::::::::"" ..........
|
|
46:::::::"" ## @ @ "":::::::::::::::::::::::"""........
|
|
47:::::::::"""""""""""""""""""""""""""""""""""::::::::::::::::::::::::::::""""""""
|
|
48::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
49#########################################>######################################
|
|
50????????????????????????????????????????????????????????????????????????????????
|
|
51????????????????????????????????????????????????????????????????????????????????
|
|
52????????????????????????????????????????????????????????????????????????????????
|
|
53????????????????????????????????????????????????????????????????????????????????
|
|
Player: "Player hp=150.0/150.0 pos=(124.0,241.0) bodies=47/47 on_fire=false"
|
|
Entities: 1
|
|
Alive entities: Player(hp=150, pos=(124.0, 241.0))
|
|
|