0:11Recap and set the stage for the day
0:11Recap and set the stage for the day
0:11Recap and set the stage for the day
2:07Blackboard: Layered Sorting
2:07Blackboard: Layered Sorting
2:07Blackboard: Layered Sorting
4:27Blackboard: How we currently pull entities out of the simulation for sorting
4:27Blackboard: How we currently pull entities out of the simulation for sorting
4:27Blackboard: How we currently pull entities out of the simulation for sorting
7:44Blackboard: Our choices for doing this layered sorting
7:44Blackboard: Our choices for doing this layered sorting
7:44Blackboard: Our choices for doing this layered sorting
10:50handmade_render.cpp: Consider how the code is currently working
10:50handmade_render.cpp: Consider how the code is currently working
10:50handmade_render.cpp: Consider how the code is currently working
12:40handmade_entity.cpp: Make UpdateAndRenderEntities() sort on the old position of the Entity
12:40handmade_entity.cpp: Make UpdateAndRenderEntities() sort on the old position of the Entity
12:40handmade_entity.cpp: Make UpdateAndRenderEntities() sort on the old position of the Entity
13:46handmade_entity.h and .cpp: Add ZLayer to the entity struct and make BeginSim() set that Dest->ZLayer
13:46handmade_entity.h and .cpp: Add ZLayer to the entity struct and make BeginSim() set that Dest->ZLayer
13:46handmade_entity.h and .cpp: Add ZLayer to the entity struct and make BeginSim() set that Dest->ZLayer
14:26handmade_entity.cpp: Make UpdateAndRenderEntities() keep track of and conditionally operate based on the CurrentAbsoluteZLayer
14:26handmade_entity.cpp: Make UpdateAndRenderEntities() keep track of and conditionally operate based on the CurrentAbsoluteZLayer
14:26handmade_entity.cpp: Make UpdateAndRenderEntities() keep track of and conditionally operate based on the CurrentAbsoluteZLayer
18:33handmade_render_group.cpp: Introduce PushSortBarrier()
18:33handmade_render_group.cpp: Introduce PushSortBarrier()
18:33handmade_render_group.cpp: Introduce PushSortBarrier()
20:00Run the game and hit the assertion in BuildSpriteGraph()
20:00Run the game and hit the assertion in BuildSpriteGraph()
20:00Run the game and hit the assertion in BuildSpriteGraph()
20:23handmade_render.cpp: Read through BuildSpriteGraph() and make it break after incrementing the NodeIndexA
20:23handmade_render.cpp: Read through BuildSpriteGraph() and make it break after incrementing the NodeIndexA
20:23handmade_render.cpp: Read through BuildSpriteGraph() and make it break after incrementing the NodeIndexA
21:40Debugger: Hit the assertion in BuildSpriteGraph() and investigate what's happening
21:40Debugger: Hit the assertion in BuildSpriteGraph() and investigate what's happening
21:40Debugger: Hit the assertion in BuildSpriteGraph() and investigate what's happening
23:52handmade_render.cpp: Change LastIndex to OnePastLastIndex in SortEntries() and operate on it accordingly
23:52handmade_render.cpp: Change LastIndex to OnePastLastIndex in SortEntries() and operate on it accordingly
23:52handmade_render.cpp: Change LastIndex to OnePastLastIndex in SortEntries() and operate on it accordingly
26:37Debugger: Run the game, hit the assertion in RecursiveFrontToBack() and investigate why
26:37Debugger: Run the game, hit the assertion in RecursiveFrontToBack() and investigate why
26:37Debugger: Run the game, hit the assertion in RecursiveFrontToBack() and investigate why
28:43handmade_render.cpp: Prevent BuildSpriteGraph() from taking NodeIndexA but rather set it relative, and then simplify SortEntries()
28:43handmade_render.cpp: Prevent BuildSpriteGraph() from taking NodeIndexA but rather set it relative, and then simplify SortEntries()
28:43handmade_render.cpp: Prevent BuildSpriteGraph() from taking NodeIndexA but rather set it relative, and then simplify SortEntries()
31:53Debugger: Run the game and hit the assertion in OpenGLRenderCommands()
31:53Debugger: Run the game and hit the assertion in OpenGLRenderCommands()
31:53Debugger: Run the game and hit the assertion in OpenGLRenderCommands()
32:21handmade_render_group.cpp: Make PushSortBarrier() increment the PushBufferElementCount
32:21handmade_render_group.cpp: Make PushSortBarrier() increment the PushBufferElementCount
32:21handmade_render_group.cpp: Make PushSortBarrier() increment the PushBufferElementCount
33:53handmade_render.cpp: Make SortEntries() change the total number of things to reflect how many there are without barriers
33:53handmade_render.cpp: Make SortEntries() change the total number of things to reflect how many there are without barriers
33:53handmade_render.cpp: Make SortEntries() change the total number of things to reflect how many there are without barriers
36:17"It's like Doctors Without Barriers, you know what I'm saying?"α
36:17"It's like Doctors Without Barriers, you know what I'm saying?"α
36:17"It's like Doctors Without Barriers, you know what I'm saying?"α
36:48Run the game and see that we are actually running, but that the sorting doesn't appear to be right per se
36:48Run the game and see that we are actually running, but that the sorting doesn't appear to be right per se
36:48Run the game and see that we are actually running, but that the sorting doesn't appear to be right per se
37:27Debugger: Step into UpdateAndRenderEntities() and investigate what's happening with the sorting
37:27Debugger: Step into UpdateAndRenderEntities() and investigate what's happening with the sorting
37:27Debugger: Step into UpdateAndRenderEntities() and investigate what's happening with the sorting
40:02handmade_render_group.cpp: Make PushSortBarrier() reverse the sense of the sort
40:02handmade_render_group.cpp: Make PushSortBarrier() reverse the sense of the sort
40:02handmade_render_group.cpp: Make PushSortBarrier() reverse the sense of the sort
41:38handmade_platform.h: Consolidate game_render_commands and game_render_prep into something more sane
41:38handmade_platform.h: Consolidate game_render_commands and game_render_prep into something more sane
41:38handmade_platform.h: Consolidate game_render_commands and game_render_prep into something more sane
43:47handmade_platform.h: Introduce GetSpriteBounds()
43:47handmade_platform.h: Introduce GetSpriteBounds()
43:47handmade_platform.h: Introduce GetSpriteBounds()
44:37handmade_render_group.cpp: Make PushSortBarrier() call GetSpriteBounds() and operate according to what it returns
44:37handmade_render_group.cpp: Make PushSortBarrier() call GetSpriteBounds() and operate according to what it returns
44:37handmade_render_group.cpp: Make PushSortBarrier() call GetSpriteBounds() and operate according to what it returns
46:58handmade_render_group.cpp: Make PushRenderElement_() similarly operate according to what GetSpriteBounds() returns
46:58handmade_render_group.cpp: Make PushRenderElement_() similarly operate according to what GetSpriteBounds() returns
46:58handmade_render_group.cpp: Make PushRenderElement_() similarly operate according to what GetSpriteBounds() returns
48:15handmade_render_group.cpp: Make BeginAggregateSortKey() and EndAggregateSortKey() work a little differently
48:15handmade_render_group.cpp: Make BeginAggregateSortKey() and EndAggregateSortKey() work a little differently
48:15handmade_render_group.cpp: Make BeginAggregateSortKey() and EndAggregateSortKey() work a little differently
50:52handmade_platform.h: Rename GetSpriteBounds() to GetSortEntries() and fix compile errors
50:52handmade_platform.h: Rename GetSpriteBounds() to GetSortEntries() and fix compile errors
50:52handmade_platform.h: Rename GetSpriteBounds() to GetSortEntries() and fix compile errors
54:27"Go away, Five minute warning!"β
54:27"Go away, Five minute warning!"β
54:27"Go away, Five minute warning!"β
59:28Run the game and crash and burn
59:28Run the game and crash and burn
59:28Run the game and crash and burn
1:00:28handmade_render_group.cpp: Introduce push_buffer_result struct and PushBuffer() to do some of the work of PushRenderElement_()
1:00:28handmade_render_group.cpp: Introduce push_buffer_result struct and PushBuffer() to do some of the work of PushRenderElement_()
1:00:28handmade_render_group.cpp: Introduce push_buffer_result struct and PushBuffer() to do some of the work of PushRenderElement_()
1:05:28handmade_render_group.cpp: Make PushClipRect() call PushBuffer()
1:05:28handmade_render_group.cpp: Make PushClipRect() call PushBuffer()
1:05:28handmade_render_group.cpp: Make PushClipRect() call PushBuffer()
1:07:15handmade_render_group.cpp: Make PushBuffer() correctly set Result.SortEntry
1:07:15handmade_render_group.cpp: Make PushBuffer() correctly set Result.SortEntry
1:07:15handmade_render_group.cpp: Make PushBuffer() correctly set Result.SortEntry
1:07:31Run the game and hit the assertion in SafeTruncateToU16()
1:07:31Run the game and hit the assertion in SafeTruncateToU16()
1:07:31Run the game and hit the assertion in SafeTruncateToU16()
1:09:01Debugger: Step into PushRenderElement() and GameUpdateAndRender() and inspect the values
1:09:01Debugger: Step into PushRenderElement() and GameUpdateAndRender() and inspect the values
1:09:01Debugger: Step into PushRenderElement() and GameUpdateAndRender() and inspect the values
1:10:52handmade_platform.h: Make RenderCommandStruct() take the correct default values
1:10:52handmade_platform.h: Make RenderCommandStruct() take the correct default values
1:10:52handmade_platform.h: Make RenderCommandStruct() take the correct default values
1:12:02dj_crixl You mentioned earlier that the compiler would optimize the code making pointer comparison unsafe. When does that happen?
🗪
1:12:02dj_crixl You mentioned earlier that the compiler would optimize the code making pointer comparison unsafe. When does that happen?
🗪
1:12:02dj_crixl You mentioned earlier that the compiler would optimize the code making pointer comparison unsafe. When does that happen?
🗪
1:12:24Blackboard: "Memory Region" / "Allocation", and Pointer Arithmetic
1:12:24Blackboard: "Memory Region" / "Allocation", and Pointer Arithmetic
1:12:24Blackboard: "Memory Region" / "Allocation", and Pointer Arithmetic