Handmade Hero»Episode Guide
Cleaning Up Debug GUIDs
?
?

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:12Setting the stage and getting right back into cleaning up the debug layer
0:12Setting the stage and getting right back into cleaning up the debug layer
0:12Setting the stage and getting right back into cleaning up the debug layer
2:21Fixing compile errors after reactivating the -DHANDMADE_INTERNAL switch
2:21Fixing compile errors after reactivating the -DHANDMADE_INTERNAL switch
2:21Fixing compile errors after reactivating the -DHANDMADE_INTERNAL switch
3:10handmade_world_mode.cpp: Removing EntityDebugID from the DEBUG_DATA_BLOCK() call and considering adding it in a DEBUG_VALUE() call, if needed
3:10handmade_world_mode.cpp: Removing EntityDebugID from the DEBUG_DATA_BLOCK() call and considering adding it in a DEBUG_VALUE() call, if needed
3:10handmade_world_mode.cpp: Removing EntityDebugID from the DEBUG_DATA_BLOCK() call and considering adding it in a DEBUG_VALUE() call, if needed
4:46Replacing BlockName with GUID and further cleaning up the debug code
4:46Replacing BlockName with GUID and further cleaning up the debug code
4:46Replacing BlockName with GUID and further cleaning up the debug code
5:58handmade_debug_interface.h: Wrapping names that pass through the system in DEBUG_NAME()
5:58handmade_debug_interface.h: Wrapping names that pass through the system in DEBUG_NAME()
5:58handmade_debug_interface.h: Wrapping names that pass through the system in DEBUG_NAME()
8:17Fixing the TIMED_BLOCK macros
8:17Fixing the TIMED_BLOCK macros
8:17Fixing the TIMED_BLOCK macros
9:58handmade_render.cpp: Changing various BEGIN_BLOCK() calls to reference strings
9:58handmade_render.cpp: Changing various BEGIN_BLOCK() calls to reference strings
9:58handmade_render.cpp: Changing various BEGIN_BLOCK() calls to reference strings
11:31Removing names from END_BLOCK() calls
11:31Removing names from END_BLOCK() calls
11:31Removing names from END_BLOCK() calls
13:50Running after fixing compile errors
13:50Running after fixing compile errors
13:50Running after fixing compile errors
16:58handmade_debug.h: Deciding to simplify the debug_state struct
16:58handmade_debug.h: Deciding to simplify the debug_state struct
16:58handmade_debug.h: Deciding to simplify the debug_state struct
17:43handmade_debug.cpp: Checking if and where HighPriorityQueue is used, and removing it afterwards
17:43handmade_debug.cpp: Checking if and where HighPriorityQueue is used, and removing it afterwards
17:43handmade_debug.cpp: Checking if and where HighPriorityQueue is used, and removing it afterwards
18:39Removing the compiler feature from the debug system, but leaving it in place in the platform layer for the moment
18:39Removing the compiler feature from the debug system, but leaving it in place in the platform layer for the moment
18:39Removing the compiler feature from the debug system, but leaving it in place in the platform layer for the moment
22:17Reacquainting with the debug view system
22:17Reacquainting with the debug view system
22:17Reacquainting with the debug view system
24:52Breakdown of debug_view, debug_stored_event, debug_element and debug_tree
24:52Breakdown of debug_view, debug_stored_event, debug_element and debug_tree
24:52Breakdown of debug_view, debug_stored_event, debug_element and debug_tree
28:34Parsing the content of the GUID in the debug_element in order to obtain a more readable format
28:34Parsing the content of the GUID in the debug_element in order to obtain a more readable format
28:34Parsing the content of the GUID in the debug_element in order to obtain a more readable format
30:04handmade_debug.cpp: Hashing the strings in order for having them persistent across hot-reloads
30:04handmade_debug.cpp: Hashing the strings in order for having them persistent across hot-reloads
30:04handmade_debug.cpp: Hashing the strings in order for having them persistent across hot-reloads
35:46handmade_debug.h: Re-adding the GUID to the debug_element struct
35:46handmade_debug.h: Re-adding the GUID to the debug_element struct
35:46handmade_debug.h: Re-adding the GUID to the debug_element struct
37:42Storing the GUIDs in the persistent storage DebugArena
37:42Storing the GUIDs in the persistent storage DebugArena
37:42Storing the GUIDs in the persistent storage DebugArena
38:35Parsing the GUIDs to obtain FileNameCount, LineNumber and NameStartsAt
38:35Parsing the GUIDs to obtain FileNameCount, LineNumber and NameStartsAt
38:35Parsing the GUIDs to obtain FileNameCount, LineNumber and NameStartsAt
41:16handmade_debug_interface.h: Optimizing the UniqueFileCounterString__ macro for parsing
41:16handmade_debug_interface.h: Optimizing the UniqueFileCounterString__ macro for parsing
41:16handmade_debug_interface.h: Optimizing the UniqueFileCounterString__ macro for parsing
45:12Adding functions to easily retrieve the name and filename using counted strings from the debug element GUID
45:12Adding functions to easily retrieve the name and filename using counted strings from the debug element GUID
45:12Adding functions to easily retrieve the name and filename using counted strings from the debug element GUID
47:17Fixing compile errors
47:17Fixing compile errors
47:17Fixing compile errors
49:06Running and verifying the results - the parsing partially works
49:06Running and verifying the results - the parsing partially works
49:06Running and verifying the results - the parsing partially works
50:21handmade_debug.cpp: Reassigning the correct GUID when storing events so that they are safe across hot-reloads
50:21handmade_debug.cpp: Reassigning the correct GUID when storing events so that they are safe across hot-reloads
50:21handmade_debug.cpp: Reassigning the correct GUID when storing events so that they are safe across hot-reloads
53:47Changing the pre-storing of the GUID with the already extracted name
53:47Changing the pre-storing of the GUID with the already extracted name
53:47Changing the pre-storing of the GUID with the already extracted name
54:28Changing the separators from underscores to slashes
54:28Changing the separators from underscores to slashes
54:28Changing the separators from underscores to slashes
56:40Q&A
🗩
56:40Q&A
🗩
56:40Q&A
🗩
56:56desuused Please use the following hash computation: HashValue = HashValue * 65599 + *Scan; (sdbm, source: http://www.cse.yorku.ca/~oz/hash.html). Simply using a sum of chars *will* produce a lot of collisions. (source: http://programmers.stackexchange.com/a/145633)
🗪
56:56desuused Please use the following hash computation: HashValue = HashValue * 65599 + *Scan; (sdbm, source: http://www.cse.yorku.ca/~oz/hash.html). Simply using a sum of chars *will* produce a lot of collisions. (source: http://programmers.stackexchange.com/a/145633)
🗪
56:56desuused Please use the following hash computation: HashValue = HashValue * 65599 + *Scan; (sdbm, source: http://www.cse.yorku.ca/~oz/hash.html). Simply using a sum of chars *will* produce a lot of collisions. (source: http://programmers.stackexchange.com/a/145633)
🗪
1:00:47Pseudonym73 Yes, the reasoning behind the hash is that it's used for symbols in ELF. If you think about it, symbols tend to come in clusters: i, j, k, x1, x2, x3 etc. ElfHash is designed to behave sensibly in that case
🗪
1:00:47Pseudonym73 Yes, the reasoning behind the hash is that it's used for symbols in ELF. If you think about it, symbols tend to come in clusters: i, j, k, x1, x2, x3 etc. ElfHash is designed to behave sensibly in that case
🗪
1:00:47Pseudonym73 Yes, the reasoning behind the hash is that it's used for symbols in ELF. If you think about it, symbols tend to come in clusters: i, j, k, x1, x2, x3 etc. ElfHash is designed to behave sensibly in that case
🗪
1:03:29caffeine_storm Do you have a stream schedule?
🗪
1:03:29caffeine_storm Do you have a stream schedule?
🗪
1:03:29caffeine_storm Do you have a stream schedule?
🗪
1:04:26Pseudonym73 Actually, could you humour me and look at the disassembly for that hash function? The 65599 one? I'm curious to know how well it compiles
🗪
1:04:26Pseudonym73 Actually, could you humour me and look at the disassembly for that hash function? The 65599 one? I'm curious to know how well it compiles
🗪
1:04:26Pseudonym73 Actually, could you humour me and look at the disassembly for that hash function? The 65599 one? I'm curious to know how well it compiles
🗪
1:09:33Cubercaleb what is imul, int multiply?
🗪
1:09:33Cubercaleb what is imul, int multiply?
🗪
1:09:33Cubercaleb what is imul, int multiply?
🗪
1:16:18x13pixels Dude, you inspired me to write a handmade Windows debugger. Thanks for everything you do
🗪
1:16:18x13pixels Dude, you inspired me to write a handmade Windows debugger. Thanks for everything you do
🗪
1:16:18x13pixels Dude, you inspired me to write a handmade Windows debugger. Thanks for everything you do
🗪
1:16:46Mojobojo Why did you put the delta time of each frame into the input struct (Input->dtForFrame). That seemed a bit strange to me while looking through the source code today
🗪
1:16:46Mojobojo Why did you put the delta time of each frame into the input struct (Input->dtForFrame). That seemed a bit strange to me while looking through the source code today
🗪
1:16:46Mojobojo Why did you put the delta time of each frame into the input struct (Input->dtForFrame). That seemed a bit strange to me while looking through the source code today
🗪
1:17:13Cubercaleb Why are the half-bytes of the hex value 1003fh reversed in the instruction. I could understand the bytes being reversed, but the half-bytes?
🗪
1:17:13Cubercaleb Why are the half-bytes of the hex value 1003fh reversed in the instruction. I could understand the bytes being reversed, but the half-bytes?
🗪
1:17:13Cubercaleb Why are the half-bytes of the hex value 1003fh reversed in the instruction. I could understand the bytes being reversed, but the half-bytes?
🗪
1:20:41quartertron And you want Intel to ship a unifying ISA for all GPUs...
🗪
1:20:41quartertron And you want Intel to ship a unifying ISA for all GPUs...
🗪
1:20:41quartertron And you want Intel to ship a unifying ISA for all GPUs...
🗪
1:22:20x13pixels I'll keep that in mind
🗪
1:22:20x13pixels I'll keep that in mind
🗪
1:22:20x13pixels I'll keep that in mind
🗪
1:22:54Mojobojo Why was it passed in that structure? I was specifically looking for the delta time variable and that was the last place I expected it to be
🗪
1:22:54Mojobojo Why was it passed in that structure? I was specifically looking for the delta time variable and that was the last place I expected it to be
🗪
1:22:54Mojobojo Why was it passed in that structure? I was specifically looking for the delta time variable and that was the last place I expected it to be
🗪
1:24:13Mojobojo To add on, since each player has their own input struct, passing it through each one when it's going to be the same for each player seems redundant
🗪
1:24:13Mojobojo To add on, since each player has their own input struct, passing it through each one when it's going to be the same for each player seems redundant
🗪
1:24:13Mojobojo To add on, since each player has their own input struct, passing it through each one when it's going to be the same for each player seems redundant
🗪
1:25:39Wrap up. Thank you
🗩
1:25:39Wrap up. Thank you
🗩
1:25:39Wrap up. Thank you
🗩