Handmade Hero»Episode Guide
Incremental Debug Frame Processing
?
?

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:10Recap and plan for today
0:10Recap and plan for today
0:10Recap and plan for today
1:53Current features of the debug display
1:53Current features of the debug display
1:53Current features of the debug display
2:49We want to be able to expand the top-level debug bars
2:49We want to be able to expand the top-level debug bars
2:49We want to be able to expand the top-level debug bars
3:17Should the debug bars be horizontal?
3:17Should the debug bars be horizontal?
3:17Should the debug bars be horizontal?
4:04Turning the chart sideways
4:04Turning the chart sideways
4:04Turning the chart sideways
9:12Fixing the height of the bars
9:12Fixing the height of the bars
9:12Fixing the height of the bars
10:00The debug rectangles don't fit in the screen even running an optimized build
10:00The debug rectangles don't fit in the screen even running an optimized build
10:00The debug rectangles don't fit in the screen even running an optimized build
11:01Reviewing FrameRateWait
11:01Reviewing FrameRateWait
11:01Reviewing FrameRateWait
13:06Turning FrameRateWait off
13:06Turning FrameRateWait off
13:06Turning FrameRateWait off
13:39DebugCollation is very expensive
13:39DebugCollation is very expensive
13:39DebugCollation is very expensive
15:24Processing frames incrementally to reduce collation time
15:24Processing frames incrementally to reduce collation time
15:24Processing frames incrementally to reduce collation time
16:45We want to avoid restarting the collation on each new frame
16:45We want to avoid restarting the collation on each new frame
16:45We want to avoid restarting the collation on each new frame
18:12We will restart the collation when we run out of frame storage
18:12We will restart the collation when we run out of frame storage
18:12We will restart the collation when we run out of frame storage
18:30Implementing RestartCollation
18:30Implementing RestartCollation
18:30Implementing RestartCollation
19:25Testing. It works
19:25Testing. It works
19:25Testing. It works
19:38Collating events in sweeps
19:38Collating events in sweeps
19:38Collating events in sweeps
20:12Restarting at the last event array index we used
20:12Restarting at the last event array index we used
20:12Restarting at the last event array index we used
22:02Storing the collation array index inside debug_state
22:02Storing the collation array index inside debug_state
22:02Storing the collation array index inside debug_state
22:48Testing that the game still runs
22:48Testing that the game still runs
22:48Testing that the game still runs
23:00Restarting collation when we run out of frames
23:00Restarting collation when we run out of frames
23:00Restarting collation when we run out of frames
24:44Adding CollationFrame to the debug_state
24:44Adding CollationFrame to the debug_state
24:44Adding CollationFrame to the debug_state
25:38Testing. It still takes a lot of time to run the event collation. Where is it spent?
25:38Testing. It still takes a lot of time to run the event collation. Where is it spent?
25:38Testing. It still takes a lot of time to run the event collation. Where is it spent?
27:39Are we hitting the debug event limit and restarting every frame?
27:39Are we hitting the debug event limit and restarting every frame?
27:39Are we hitting the debug event limit and restarting every frame?
28:16Testing. Collation still takes a lot of time
28:16Testing. Collation still takes a lot of time
28:16Testing. Collation still takes a lot of time
29:18Optimization makes it tolerable
29:18Optimization makes it tolerable
29:18Optimization makes it tolerable
30:00Why does right-clicking turn the debug display off?
30:00Why does right-clicking turn the debug display off?
30:00Why does right-clicking turn the debug display off?
31:46It happens both in optimized and non-optimized mode...
31:46It happens both in optimized and non-optimized mode...
31:46It happens both in optimized and non-optimized mode...
32:10Let's step through the code to debug this issue
32:10Let's step through the code to debug this issue
32:10Let's step through the code to debug this issue
33:17Why is DebugState not initialized?
33:17Why is DebugState not initialized?
33:17Why is DebugState not initialized?
34:15We never DebugState->initialized to true!
34:15We never DebugState->initialized to true!
34:15We never DebugState->initialized to true!
34:50And that solves the collation slowness problem
34:50And that solves the collation slowness problem
34:50And that solves the collation slowness problem
36:03Let's expand the timing bars
36:03Let's expand the timing bars
36:03Let's expand the timing bars
37:07Right now, we are throwing away all timing blocks under the top level
37:07Right now, we are throwing away all timing blocks under the top level
37:07Right now, we are throwing away all timing blocks under the top level
37:34Instead of showing the descendants of the top-level block, we will show the timing blocks whose source is a particular debug_record
37:34Instead of showing the descendants of the top-level block, we will show the timing blocks whose source is a particular debug_record
37:34Instead of showing the descendants of the top-level block, we will show the timing blocks whose source is a particular debug_record
40:45Implementing GetRecordFrom
40:45Implementing GetRecordFrom
40:45Implementing GetRecordFrom
41:27ScopeToRecord will allow us to move down the hierarchy of debug records
41:27ScopeToRecord will allow us to move down the hierarchy of debug records
41:27ScopeToRecord will allow us to move down the hierarchy of debug records
42:38When the left mouse button is pressed over a debug block, we'll set ScopeToRecord
42:38When the left mouse button is pressed over a debug block, we'll set ScopeToRecord
42:38When the left mouse button is pressed over a debug block, we'll set ScopeToRecord
43:20Testing it. It does nothing
43:20Testing it. It does nothing
43:20Testing it. It does nothing
44:40We need to recollate the events when we select a time block
44:40We need to recollate the events when we select a time block
44:40We need to recollate the events when we select a time block
46:20Implementing RefreshCollation
46:20Implementing RefreshCollation
46:20Implementing RefreshCollation
46:34Testing. It crashes
46:34Testing. It crashes
46:34Testing. It crashes
46:56Performing the collation refresh at the end of DEBUGOverlay
46:56Performing the collation refresh at the end of DEBUGOverlay
46:56Performing the collation refresh at the end of DEBUGOverlay
49:10Testing. It works now but sometimes we still hit the maximum limit of regions per frame
49:10Testing. It works now but sometimes we still hit the maximum limit of regions per frame
49:10Testing. It works now but sometimes we still hit the maximum limit of regions per frame
51:20Implementing TextOutAt, a DEBUGTextLine with explicit positioning
51:20Implementing TextOutAt, a DEBUGTextLine with explicit positioning
51:20Implementing TextOutAt, a DEBUGTextLine with explicit positioning
54:12Moving the time block debug information next to the mouse pointer
54:12Moving the time block debug information next to the mouse pointer
54:12Moving the time block debug information next to the mouse pointer
56:36Q&A
🗩
56:36Q&A
🗩
56:36Q&A
🗩
57:00insofaras Are the events keeping the same colors across frames? The long one looks like it keeps changing
🗪
57:00insofaras Are the events keeping the same colors across frames? The long one looks like it keeps changing
🗪
57:00insofaras Are the events keeping the same colors across frames? The long one looks like it keeps changing
🗪
57:32handmade_debug.cpp: Make the colors persist across frames
57:32handmade_debug.cpp: Make the colors persist across frames
57:32handmade_debug.cpp: Make the colors persist across frames
1:00:04handmade_debug.h: Add ColorIndex to debug_frame_region
1:00:04handmade_debug.h: Add ColorIndex to debug_frame_region
1:00:04handmade_debug.h: Add ColorIndex to debug_frame_region
1:01:48elxenoaizd Does the 0.5 pixel error in yesterday's stream matter a lot? I mean, it seemed a pretty easy thing to overlook. Would it make some calculations erroneous?
🗪
1:01:48elxenoaizd Does the 0.5 pixel error in yesterday's stream matter a lot? I mean, it seemed a pretty easy thing to overlook. Would it make some calculations erroneous?
🗪
1:01:48elxenoaizd Does the 0.5 pixel error in yesterday's stream matter a lot? I mean, it seemed a pretty easy thing to overlook. Would it make some calculations erroneous?
🗪
1:02:41SoysauceTheKid Why are there blank gaps on some of the bars? And why are the collated frames not flush with the other lines?
🗪
1:02:41SoysauceTheKid Why are there blank gaps on some of the bars? And why are the collated frames not flush with the other lines?
🗪
1:02:41SoysauceTheKid Why are there blank gaps on some of the bars? And why are the collated frames not flush with the other lines?
🗪
1:03:13elxenoaizd Is there a reason why we have many different starting points for coordinate systems (center vs top-left vs top-right corners; windows vs Direct3D vs OpenGL)? Wouldn't our lives be easier if there was a standard for them?
🗪
1:03:13elxenoaizd Is there a reason why we have many different starting points for coordinate systems (center vs top-left vs top-right corners; windows vs Direct3D vs OpenGL)? Wouldn't our lives be easier if there was a standard for them?
🗪
1:03:13elxenoaizd Is there a reason why we have many different starting points for coordinate systems (center vs top-left vs top-right corners; windows vs Direct3D vs OpenGL)? Wouldn't our lives be easier if there was a standard for them?
🗪
1:04:09ChronalDragon With handling sorting here, will we finally handle sorting of the other sprites in the game? Or will we just push that off further?
🗪
1:04:09ChronalDragon With handling sorting here, will we finally handle sorting of the other sprites in the game? Or will we just push that off further?
🗪
1:04:09ChronalDragon With handling sorting here, will we finally handle sorting of the other sprites in the game? Or will we just push that off further?
🗪
1:04:26elxenoaizd Why do we have both bool32 and int32?
🗪
1:04:26elxenoaizd Why do we have both bool32 and int32?
🗪
1:04:26elxenoaizd Why do we have both bool32 and int32?
🗪
1:04:41JamesWidman Pretty cool! It does seem like a lot of calls take very different amounts of time even though they're probably not doing anything different. Is that due to other active processes? Is it usually worthwhile to try to get more consistent timings?
🗪
1:04:41JamesWidman Pretty cool! It does seem like a lot of calls take very different amounts of time even though they're probably not doing anything different. Is that due to other active processes? Is it usually worthwhile to try to get more consistent timings?
🗪
1:04:41JamesWidman Pretty cool! It does seem like a lot of calls take very different amounts of time even though they're probably not doing anything different. Is that due to other active processes? Is it usually worthwhile to try to get more consistent timings?
🗪
1:05:05elxenoaizd How 'valuable' do you think C++ operator overloading actually is? I'm thinking of fully moving to just pure C. Do you think it would be inconvenient / a hassle to program without them? (Vector operations, etc.)
🗪
1:05:05elxenoaizd How 'valuable' do you think C++ operator overloading actually is? I'm thinking of fully moving to just pure C. Do you think it would be inconvenient / a hassle to program without them? (Vector operations, etc.)
🗪
1:05:05elxenoaizd How 'valuable' do you think C++ operator overloading actually is? I'm thinking of fully moving to just pure C. Do you think it would be inconvenient / a hassle to program without them? (Vector operations, etc.)
🗪
1:05:40cubercaleb Will you show us how to do hit detection for obscure shapes that may or may not exist in the debug UI?
🗪
1:05:40cubercaleb Will you show us how to do hit detection for obscure shapes that may or may not exist in the debug UI?
🗪
1:05:40cubercaleb Will you show us how to do hit detection for obscure shapes that may or may not exist in the debug UI?
🗪
1:06:07RacerNA Have you seen the UE4 GDC Trailer and what are your opinions on it? I understand we are all indies, but just in general, from a player standpoint
🗪
1:06:07RacerNA Have you seen the UE4 GDC Trailer and what are your opinions on it? I understand we are all indies, but just in general, from a player standpoint
🗪
1:06:07RacerNA Have you seen the UE4 GDC Trailer and what are your opinions on it? I understand we are all indies, but just in general, from a player standpoint
🗪
1:06:34SoysauceTheKid The longer bars (which I assumed was when the collation was happening) are farther left on the screen, than the shorter bars
🗪
1:06:34SoysauceTheKid The longer bars (which I assumed was when the collation was happening) are farther left on the screen, than the shorter bars
🗪
1:06:34SoysauceTheKid The longer bars (which I assumed was when the collation was happening) are farther left on the screen, than the shorter bars
🗪
1:07:10cubercaleb By obscure shapes, I mean a slice in a pie-chart1
🗪
1:07:10cubercaleb By obscure shapes, I mean a slice in a pie-chart1
🗪
1:07:10cubercaleb By obscure shapes, I mean a slice in a pie-chart1
🗪
1:09:10SoysauceTheKid Yes
🗪
1:09:10SoysauceTheKid Yes
🗪
1:09:10SoysauceTheKid Yes
🗪
1:11:04RacerNA Yes the graphics. Check it out whenever2
🗪
1:11:04RacerNA Yes the graphics. Check it out whenever2
🗪
1:11:04RacerNA Yes the graphics. Check it out whenever2
🗪
1:12:47JamesWidman [re functions taking different amounts of time] I mean, if we don't send any input and essentially the same image keeps getting rendered repeatedly, we still see a lot of fluctuation in the amount of time being consumed per frame. We have a lot of chop where I would have expected relatively calm waters (unless we're losing time to other processes on the machine)
🗪
1:12:47JamesWidman [re functions taking different amounts of time] I mean, if we don't send any input and essentially the same image keeps getting rendered repeatedly, we still see a lot of fluctuation in the amount of time being consumed per frame. We have a lot of chop where I would have expected relatively calm waters (unless we're losing time to other processes on the machine)
🗪
1:12:47JamesWidman [re functions taking different amounts of time] I mean, if we don't send any input and essentially the same image keeps getting rendered repeatedly, we still see a lot of fluctuation in the amount of time being consumed per frame. We have a lot of chop where I would have expected relatively calm waters (unless we're losing time to other processes on the machine)
🗪
1:15:12garryjohanson Curious what point represents the amount of time it takes the operating system to set up the parallelism, if parallelism is the right word
🗪
1:15:12garryjohanson Curious what point represents the amount of time it takes the operating system to set up the parallelism, if parallelism is the right word
🗪
1:15:12garryjohanson Curious what point represents the amount of time it takes the operating system to set up the parallelism, if parallelism is the right word
🗪
1:16:26cubercaleb Do you know why one of the worker threads started after the others?
🗪
1:16:26cubercaleb Do you know why one of the worker threads started after the others?
🗪
1:16:26cubercaleb Do you know why one of the worker threads started after the others?
🗪
1:17:16AlephAnt Every once in a while it seems like a frame gets missed; I've noticed that happens in things I do as well. Is there a way to get around that reliably?
🗪
1:17:16AlephAnt Every once in a while it seems like a frame gets missed; I've noticed that happens in things I do as well. Is there a way to get around that reliably?
🗪
1:17:16AlephAnt Every once in a while it seems like a frame gets missed; I've noticed that happens in things I do as well. Is there a way to get around that reliably?
🗪
1:18:36elxenoaizd What do you think of the theory that says we already know everything, all the knowledge there is, but we just don't remember it? So when we study, etc. we start remembering things...
🗪
1:18:36elxenoaizd What do you think of the theory that says we already know everything, all the knowledge there is, but we just don't remember it? So when we study, etc. we start remembering things...
🗪
1:18:36elxenoaizd What do you think of the theory that says we already know everything, all the knowledge there is, but we just don't remember it? So when we study, etc. we start remembering things...
🗪
1:20:17Announce an announcement and sign off
🗩
1:20:17Announce an announcement and sign off
🗩
1:20:17Announce an announcement and sign off
🗩