Handmade Hero»Episode Guide
Recording Diagram Commands
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:39Thoughts on diagrammed debugging of our collision system
🏃
0:39Thoughts on diagrammed debugging of our collision system
🏃
0:39Thoughts on diagrammed debugging of our collision system
🏃
5:07Describe our DIAGRAM_*() functions
📖
5:07Describe our DIAGRAM_*() functions
📖
5:07Describe our DIAGRAM_*() functions
📖
6:51Introduce DIAGRAM_Color() and DIAGRAM_Thickness()
6:51Introduce DIAGRAM_Color() and DIAGRAM_Thickness()
6:51Introduce DIAGRAM_Color() and DIAGRAM_Thickness()
9:01Introduce diagram_entry and diagram_group structs
9:01Introduce diagram_entry and diagram_group structs
9:01Introduce diagram_entry and diagram_group structs
14:24Wonder how Jon handles conditional compiling out of functions in JAI
🗩
14:24Wonder how Jon handles conditional compiling out of functions in JAI
🗩
14:24Wonder how Jon handles conditional compiling out of functions in JAI
🗩
15:03Remove DIAGRAM_Phase() in favour of permitting nested diagrams at the Begin and End, and introduce DIAGRAM_Point(), DIAGRAM_Text() and DIAGRAM_Out()
15:03Remove DIAGRAM_Phase() in favour of permitting nested diagrams at the Begin and End, and introduce DIAGRAM_Point(), DIAGRAM_Text() and DIAGRAM_Out()
15:03Remove DIAGRAM_Phase() in favour of permitting nested diagrams at the Begin and End, and introduce DIAGRAM_Point(), DIAGRAM_Text() and DIAGRAM_Out()
18:20Check the chat for JAI info
🗩
18:20Check the chat for JAI info
🗩
18:20Check the chat for JAI info
🗩
18:49Rename DIAGRAM_Text() to DIAGRAM_Overlay(), and make diagram_entry be a linked list in an arena
18:49Rename DIAGRAM_Text() to DIAGRAM_Overlay(), and make diagram_entry be a linked list in an arena
18:49Rename DIAGRAM_Text() to DIAGRAM_Overlay(), and make diagram_entry be a linked list in an arena
20:36Set up diagram_entry as a linked list, augmenting diagram_group with an Arena and PhaseDepth
20:36Set up diagram_entry as a linked list, augmenting diagram_group with an Arena and PhaseDepth
20:36Set up diagram_entry as a linked list, augmenting diagram_group with an Arena and PhaseDepth
23:01Add Text to diagram_entry and rename DIAGRAM_Out() to DIAGRAM_Text()
23:01Add Text to diagram_entry and rename DIAGRAM_Out() to DIAGRAM_Text()
23:01Add Text to diagram_entry and rename DIAGRAM_Out() to DIAGRAM_Text()
25:24Introduce AppendDiagramEntry(), with thoughts on threading and architecture-transparent debug systems
25:24Introduce AppendDiagramEntry(), with thoughts on threading and architecture-transparent debug systems
25:24Introduce AppendDiagramEntry(), with thoughts on threading and architecture-transparent debug systems
28:19Fix up compile errors at diagramming calling sites, introducing DIAGRAM_IsOn()
28:19Fix up compile errors at diagramming calling sites, introducing DIAGRAM_IsOn()
28:19Fix up compile errors at diagramming calling sites, introducing DIAGRAM_IsOn()
35:22Implement AppendDiagramEntry() and introduce diagram_attributes
35:22Implement AppendDiagramEntry() and introduce diagram_attributes
35:22Implement AppendDiagramEntry() and introduce diagram_attributes
38:27Introduce DIAGRAM_Stick()
38:27Introduce DIAGRAM_Stick()
38:27Introduce DIAGRAM_Stick()
39:33Implement DIAGRAM_Color() and DIAGRAM_Thickness()
39:33Implement DIAGRAM_Color() and DIAGRAM_Thickness()
39:33Implement DIAGRAM_Color() and DIAGRAM_Thickness()
40:29Continue to implement the AppendDiagramEntry() linked list
40:29Continue to implement the AppendDiagramEntry() linked list
40:29Continue to implement the AppendDiagramEntry() linked list
42:54Implement DIAGRAM_Sphere(), _Line(), _Box(), _Point() and _Overlay()
42:54Implement DIAGRAM_Sphere(), _Line(), _Box(), _Point() and _Overlay()
42:54Implement DIAGRAM_Sphere(), _Line(), _Box(), _Point() and _Overlay()
44:43Implement DIAGRAM_Begin() and DIAGRAM_End()
44:43Implement DIAGRAM_Begin() and DIAGRAM_End()
44:43Implement DIAGRAM_Begin() and DIAGRAM_End()
46:03Reflect on our diagramming code
📖
46:03Reflect on our diagramming code
📖
46:03Reflect on our diagramming code
📖
46:51Consider recording the diagramming state for the renderer to track
📖
46:51Consider recording the diagramming state for the renderer to track
📖
46:51Consider recording the diagramming state for the renderer to track
📖
48:50Make a union of the P[] and Attrib values in diagram_entry, including the Text buffer from diagram_attributes
48:50Make a union of the P[] and Attrib values in diagram_entry, including the Text buffer from diagram_attributes
48:50Make a union of the P[] and Attrib values in diagram_entry, including the Text buffer from diagram_attributes
51:57Implement DIAGRAM_Text(), augmenting diagram_group with a FormatBuffer[1024]
51:57Implement DIAGRAM_Text(), augmenting diagram_group with a FormatBuffer[1024]
51:57Implement DIAGRAM_Text(), augmenting diagram_group with a FormatBuffer[1024]
57:06Consider future work on our diagramming system
📖
57:06Consider future work on our diagramming system
📖
57:06Consider future work on our diagramming system
📖
59:12Introduce RenderDiagrams()
59:12Introduce RenderDiagrams()
59:12Introduce RenderDiagrams()
1:00:15Hit a write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
🏃
1:00:15Hit a write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
🏃
1:00:15Hit a write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
🏃
1:00:55Compile in -Od and again hit that write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
🏃
1:00:55Compile in -Od and again hit that write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
🏃
1:00:55Compile in -Od and again hit that write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
🏃
1:02:03Investigate our write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
📖
1:02:03Investigate our write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
📖
1:02:03Investigate our write access violation on DEBUG_RECORD_ALLOCATION() in PushSize_()
📖
1:03:35Disable HANDMADE_DIAGRAMS
1:03:35Disable HANDMADE_DIAGRAMS
1:03:35Disable HANDMADE_DIAGRAMS
1:04:12Demo the memory arena viewer
🏃
1:04:12Demo the memory arena viewer
🏃
1:04:12Demo the memory arena viewer
🏃
1:06:40Our debug_event array in debug_table is 136 MiB
📖
1:06:40Our debug_event array in debug_table is 136 MiB
📖
1:06:40Our debug_event array in debug_table is 136 MiB
📖
1:09:27Increase our debug_event array to 2*64*65536 (544 MiB)
1:09:27Increase our debug_event array to 2*64*65536 (544 MiB)
1:09:27Increase our debug_event array to 2*64*65536 (544 MiB)
1:09:39Run the game
🏃
1:09:39Run the game
🏃
1:09:39Run the game
🏃
1:10:02Revert our expansion of the debug_event array
1:10:02Revert our expansion of the debug_event array
1:10:02Revert our expansion of the debug_event array
1:10:10Introduce DIAGRAM_Reset() for GAME_UPDATE_AND_RENDER() to call
1:10:10Introduce DIAGRAM_Reset() for GAME_UPDATE_AND_RENDER() to call
1:10:10Introduce DIAGRAM_Reset() for GAME_UPDATE_AND_RENDER() to call
1:14:44In -O2, overflow the debug_event array via the collision system
🏃
1:14:44In -O2, overflow the debug_event array via the collision system
🏃
1:14:44In -O2, overflow the debug_event array via the collision system
🏃
1:15:06In -Od, overflow the debug_event array via the diagramming system
🏃
1:15:06In -Od, overflow the debug_event array via the diagramming system
🏃
1:15:06In -Od, overflow the debug_event array via the diagramming system
🏃
1:16:56Increase our debug_event array to 2*64*65536 (544 MiB)
1:16:56Increase our debug_event array to 2*64*65536 (544 MiB)
1:16:56Increase our debug_event array to 2*64*65536 (544 MiB)
1:17:10Again overflow the debug_event array via the diagramming system
🏃
1:17:10Again overflow the debug_event array via the diagramming system
🏃
1:17:10Again overflow the debug_event array via the diagramming system
🏃
1:17:56Decrease our debug_event array to 2*16*65536 (136 MiB)
1:17:56Decrease our debug_event array to 2*16*65536 (136 MiB)
1:17:56Decrease our debug_event array to 2*16*65536 (136 MiB)
1:18:10Step in to DIAGRAM_Reset() and through to diagramming calls
🏃
1:18:10Step in to DIAGRAM_Reset() and through to diagramming calls
🏃
1:18:10Step in to DIAGRAM_Reset() and through to diagramming calls
🏃
1:19:36Determine to limit our diagramming to a particular entity
📖
1:19:36Determine to limit our diagramming to a particular entity
📖
1:19:36Determine to limit our diagramming to a particular entity
📖
1:21:20Set up AppendDiagramEntry() to conditionally push on a diagram_entry
1:21:20Set up AppendDiagramEntry() to conditionally push on a diagram_entry
1:21:20Set up AppendDiagramEntry() to conditionally push on a diagram_entry
1:23:01Run in -Od without overflowing the debug_event array
🏃
1:23:01Run in -Od without overflowing the debug_event array
🏃
1:23:01Run in -Od without overflowing the debug_event array
🏃
1:23:05Run in -O2 without overflowing the debug_event array
🏃
1:23:05Run in -O2 without overflowing the debug_event array
🏃
1:23:05Run in -O2 without overflowing the debug_event array
🏃
1:23:24Introduce DIAGRAM_SetFilter() and DIAGRAM_Filter(), augmenting diagram_group with Filter and FilterPassed values
1:23:24Introduce DIAGRAM_SetFilter() and DIAGRAM_Filter(), augmenting diagram_group with Filter and FilterPassed values
1:23:24Introduce DIAGRAM_SetFilter() and DIAGRAM_Filter(), augmenting diagram_group with Filter and FilterPassed values
1:27:57Run without overflowing the debug_event array
🏃
1:27:57Run without overflowing the debug_event array
🏃
1:27:57Run without overflowing the debug_event array
🏃
1:28:53Disable the debug visualisation in the entity system
📖
1:28:53Disable the debug visualisation in the entity system
📖
1:28:53Disable the debug visualisation in the entity system
📖
1:30:37Q&A
🗩
1:30:37Q&A
🗩
1:30:37Q&A
🗩
1:31:16centhusiast Q: Do you know about WebView2?1
🗪
1:31:16centhusiast Q: Do you know about WebView2?1
🗪
1:31:16centhusiast Q: Do you know about WebView2?1
🗪
1:32:22said6289 Q: What's sphere roll-off?
🗪
1:32:22said6289 Q: What's sphere roll-off?
🗪
1:32:22said6289 Q: What's sphere roll-off?
🗪
1:33:09jack_mousseau Q: You made a note about rewinding a memory arena? Does a rewind free the allocation?
🗪
1:33:09jack_mousseau Q: You made a note about rewinding a memory arena? Does a rewind free the allocation?
🗪
1:33:09jack_mousseau Q: You made a note about rewinding a memory arena? Does a rewind free the allocation?
🗪
1:34:21alexkelbo Q: Shouldn't we add spatial partitioning for collision and such at this point?
🗪
1:34:21alexkelbo Q: Shouldn't we add spatial partitioning for collision and such at this point?
🗪
1:34:21alexkelbo Q: Shouldn't we add spatial partitioning for collision and such at this point?
🗪
1:35:19mindmark42 Q: You mentioned you are doing memory arenas differently now. What are you doing differently?
🗪
1:35:19mindmark42 Q: You mentioned you are doing memory arenas differently now. What are you doing differently?
🗪
1:35:19mindmark42 Q: You mentioned you are doing memory arenas differently now. What are you doing differently?
🗪
1:36:07matiasmunkp Q: In the early videos you were mentioning if the series got enough attraction, you could probably look into adding networking features. What is your stance on this now?2
🗪
1:36:07matiasmunkp Q: In the early videos you were mentioning if the series got enough attraction, you could probably look into adding networking features. What is your stance on this now?2
🗪
1:36:07matiasmunkp Q: In the early videos you were mentioning if the series got enough attraction, you could probably look into adding networking features. What is your stance on this now?2
🗪
1:36:52jonathanlivingstone Q: Why did you forward-declare the diagram functions in the header file? I thought you did the unity build system so you didn't need to do that kind of thing. Unless the #include order requires it?
🗪
1:36:52jonathanlivingstone Q: Why did you forward-declare the diagram functions in the header file? I thought you did the unity build system so you didn't need to do that kind of thing. Unless the #include order requires it?
🗪
1:36:52jonathanlivingstone Q: Why did you forward-declare the diagram functions in the header file? I thought you did the unity build system so you didn't need to do that kind of thing. Unless the #include order requires it?
🗪
1:38:33botondar Q: Off-topic: Do you know any particular reason why MSVC would optimize a piece of code better with /Ox instead of /O2 (2x speed-up)?
🗪
1:38:33botondar Q: Off-topic: Do you know any particular reason why MSVC would optimize a piece of code better with /Ox instead of /O2 (2x speed-up)?
🗪
1:38:33botondar Q: Off-topic: Do you know any particular reason why MSVC would optimize a piece of code better with /Ox instead of /O2 (2x speed-up)?
🗪
1:39:20Plug godbolt3
📖
1:39:20Plug godbolt3
📖
1:39:20Plug godbolt3
📖
1:42:28mindmark42 Q: Sorry but what do you mean by grow linearly? Is that like reallocating so it's contiguous?
🗪
1:42:28mindmark42 Q: Sorry but what do you mean by grow linearly? Is that like reallocating so it's contiguous?
🗪
1:42:28mindmark42 Q: Sorry but what do you mean by grow linearly? Is that like reallocating so it's contiguous?
🗪
1:43:02botondar Q: (cont.) No, the code performs better with /Ox and not /O2 which doesn't make sense to me because /O2 enables more optimizations
🗪
1:43:02botondar Q: (cont.) No, the code performs better with /Ox and not /O2 which doesn't make sense to me because /O2 enables more optimizations
🗪
1:43:02botondar Q: (cont.) No, the code performs better with /Ox and not /O2 which doesn't make sense to me because /O2 enables more optimizations
🗪
1:45:42philliptrudeau Q: Would it be possible to render all of the unfiltered N-squared diagrams if the number of debug events was huge? Or are there just way way too many diagrams for that?
🗪
1:45:42philliptrudeau Q: Would it be possible to render all of the unfiltered N-squared diagrams if the number of debug events was huge? Or are there just way way too many diagrams for that?
🗪
1:45:42philliptrudeau Q: Would it be possible to render all of the unfiltered N-squared diagrams if the number of debug events was huge? Or are there just way way too many diagrams for that?
🗪
1:47:05Recommend making a highly optimised debug system as a project
🗩
1:47:05Recommend making a highly optimised debug system as a project
🗩
1:47:05Recommend making a highly optimised debug system as a project
🗩
1:48:12xxthebigfoxx Q: What do you use to build on Linux?
🗪
1:48:12xxthebigfoxx Q: What do you use to build on Linux?
🗪
1:48:12xxthebigfoxx Q: What do you use to build on Linux?
🗪
1:48:31centhusiast Q: Do you know that Sean Barrett is writing a C compiler. Are you going to use it?
🗪
1:48:31centhusiast Q: Do you know that Sean Barrett is writing a C compiler. Are you going to use it?
🗪
1:48:31centhusiast Q: Do you know that Sean Barrett is writing a C compiler. Are you going to use it?
🗪
1:48:52xxthebigfoxx Q: Any build system? Or just .sh files?
🗪
1:48:52xxthebigfoxx Q: Any build system? Or just .sh files?
🗪
1:48:52xxthebigfoxx Q: Any build system? Or just .sh files?
🗪
1:49:21Wrap it up with a glimpse into the future
🗩
1:49:21Wrap it up with a glimpse into the future
🗩
1:49:21Wrap it up with a glimpse into the future
🗩