Handmade Hero»Episode Guide
Adding Per-Element Clipping Rectangles
?
?

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)
1:00Recap and set the stage for the day
1:00Recap and set the stage for the day
1:00Recap and set the stage for the day
5:07Pig Hat Time
5:07Pig Hat Time
5:07Pig Hat Time
5:14handmade_debug.h: Add Duration and DurationOfChildren to debug_profile_node in order to separate out the clocks
5:14handmade_debug.h: Add Duration and DurationOfChildren to debug_profile_node in order to separate out the clocks
5:14handmade_debug.h: Add Duration and DurationOfChildren to debug_profile_node in order to separate out the clocks
6:06handmade_debug.cpp: Compute the DurationOfChildren and make the TopClocksList exclusive of the children
6:06handmade_debug.cpp: Compute the DurationOfChildren and make the TopClocksList exclusive of the children
6:06handmade_debug.cpp: Compute the DurationOfChildren and make the TopClocksList exclusive of the children
9:26"Clocks without children"α
9:26"Clocks without children"α
9:26"Clocks without children"α
10:05Run the game and see a clearer picture of where our time is being spent
10:05Run the game and see a clearer picture of where our time is being spent
10:05Run the game and see a clearer picture of where our time is being spent
11:47handmade_world_mode.cpp: Make UpdateAndRenderWorld a TIMED_FUNCTION
11:47handmade_world_mode.cpp: Make UpdateAndRenderWorld a TIMED_FUNCTION
11:47handmade_world_mode.cpp: Make UpdateAndRenderWorld a TIMED_FUNCTION
12:42Run the game and see what takes the time
12:42Run the game and see what takes the time
12:42Run the game and see what takes the time
14:30handmade_debug_interface.h: Make RecordDebugEvent take Name rather than DEBUG_NAME
14:30handmade_debug_interface.h: Make RecordDebugEvent take Name rather than DEBUG_NAME
14:30handmade_debug_interface.h: Make RecordDebugEvent take Name rather than DEBUG_NAME
16:01handmade_world_mode.cpp: Insert some TIMED_BLOCKs in UpdateAndRenderWorld
16:01handmade_world_mode.cpp: Insert some TIMED_BLOCKs in UpdateAndRenderWorld
16:01handmade_world_mode.cpp: Insert some TIMED_BLOCKs in UpdateAndRenderWorld
17:24Run the game and see that GroundChunksOn takes up so much of the time
17:24Run the game and see that GroundChunksOn takes up so much of the time
17:24Run the game and see that GroundChunksOn takes up so much of the time
17:35handmade_world_mode.cpp: Nuke GroundChunksOn and consult the profiler again
17:35handmade_world_mode.cpp: Nuke GroundChunksOn and consult the profiler again
17:35handmade_world_mode.cpp: Nuke GroundChunksOn and consult the profiler again
20:34handmade_debug.cpp: Clip the profiler drawing to ProfileRect.Min.Y
20:34handmade_debug.cpp: Clip the profiler drawing to ProfileRect.Min.Y
20:34handmade_debug.cpp: Clip the profiler drawing to ProfileRect.Min.Y
26:47Blackboard: Picking the correct line to clip to
26:47Blackboard: Picking the correct line to clip to
26:47Blackboard: Picking the correct line to clip to
27:32handmade_debug.cpp: Make the profiler overdraw by one line
27:32handmade_debug.cpp: Make the profiler overdraw by one line
27:32handmade_debug.cpp: Make the profiler overdraw by one line
28:30View the profiler and see this overdrawing
28:30View the profiler and see this overdrawing
28:30View the profiler and see this overdrawing
32:17handmade_render_group.h and .cpp: Consider how to enable the bitmaps to be clipped
32:17handmade_render_group.h and .cpp: Consider how to enable the bitmaps to be clipped
32:17handmade_render_group.h and .cpp: Consider how to enable the bitmaps to be clipped
36:44Blackboard: Respecifying bitmaps
36:44Blackboard: Respecifying bitmaps
36:44Blackboard: Respecifying bitmaps
39:02handmade_render_group.h: Try to introduce render_entry_cliprect, to pass the clipping area down the stream
39:02handmade_render_group.h: Try to introduce render_entry_cliprect, to pass the clipping area down the stream
39:02handmade_render_group.h: Try to introduce render_entry_cliprect, to pass the clipping area down the stream
40:05handmade_opengl.cpp: Consider the problem with sorting
40:05handmade_opengl.cpp: Consider the problem with sorting
40:05handmade_opengl.cpp: Consider the problem with sorting
42:26handmade_render_group.h: Add ClipRect to render_entry_bitmap and ClipRectIndex to render_group_entry_header in order allow clipping while sorting
42:26handmade_render_group.h: Add ClipRect to render_entry_bitmap and ClipRectIndex to render_group_entry_header in order allow clipping while sorting
42:26handmade_render_group.h: Add ClipRect to render_entry_bitmap and ClipRectIndex to render_group_entry_header in order allow clipping while sorting
44:16handmade_opengl.cpp: Call glScissor1
44:16handmade_opengl.cpp: Call glScissor1
44:16handmade_opengl.cpp: Call glScissor1
45:10handmade_platform.h: Add ClipRectCount and *ClipRects to game_render_commands
45:10handmade_platform.h: Add ClipRectCount and *ClipRects to game_render_commands
45:10handmade_platform.h: Add ClipRectCount and *ClipRects to game_render_commands
49:29handmade_render_group.h: Introduce game_render_clip_rect
49:29handmade_render_group.h: Introduce game_render_clip_rect
49:29handmade_render_group.h: Introduce game_render_clip_rect
52:21handmade_render_group.h: Set CurrentClipRectIndex for the entire window in Perspective
52:21handmade_render_group.h: Set CurrentClipRectIndex for the entire window in Perspective
52:21handmade_render_group.h: Set CurrentClipRectIndex for the entire window in Perspective
55:37handmade_render_group.cpp: Introduce PushClipRect
55:37handmade_render_group.cpp: Introduce PushClipRect
55:37handmade_render_group.cpp: Introduce PushClipRect
1:06:45win32_handmade.cpp: Make Win32DisplayBufferInWindow take ClipRectMemory and to call LinearizeClipRects
1:06:45win32_handmade.cpp: Make Win32DisplayBufferInWindow take ClipRectMemory and to call LinearizeClipRects
1:06:45win32_handmade.cpp: Make Win32DisplayBufferInWindow take ClipRectMemory and to call LinearizeClipRects
1:10:33handmade_render.cpp: Introduce LinearizeClipRects
1:10:33handmade_render.cpp: Introduce LinearizeClipRects
1:10:33handmade_render.cpp: Introduce LinearizeClipRects
1:16:27Run the game and hit an InvalidDefaultCase
1:16:27Run the game and hit an InvalidDefaultCase
1:16:27Run the game and hit an InvalidDefaultCase
1:18:59handmade_render_group.cpp: Guard against overflow in PushClipRect
1:18:59handmade_render_group.cpp: Guard against overflow in PushClipRect
1:18:59handmade_render_group.cpp: Guard against overflow in PushClipRect
1:22:30handmade_debug.cpp: Do a PushClipRect in DrawTopClocksList
1:22:30handmade_debug.cpp: Do a PushClipRect in DrawTopClocksList
1:22:30handmade_debug.cpp: Do a PushClipRect in DrawTopClocksList
1:25:06Debugger: Step into ClipRectIndex and inspect the values
1:25:06Debugger: Step into ClipRectIndex and inspect the values
1:25:06Debugger: Step into ClipRectIndex and inspect the values
1:26:05handmade_opengl.cpp: Enable GL_SCISSOR_TEST
1:26:05handmade_opengl.cpp: Enable GL_SCISSOR_TEST
1:26:05handmade_opengl.cpp: Enable GL_SCISSOR_TEST
1:26:35View our correctly clipping profiler
1:26:35View our correctly clipping profiler
1:26:35View our correctly clipping profiler
1:27:27handmade_opengl.cpp: Disable GL_SCISSOR_TEST in OpenGLDisplayBitmap
1:27:27handmade_opengl.cpp: Disable GL_SCISSOR_TEST in OpenGLDisplayBitmap
1:27:27handmade_opengl.cpp: Disable GL_SCISSOR_TEST in OpenGLDisplayBitmap
1:28:00handmade_render.cpp: Implement clipping in the software renderer
1:28:00handmade_render.cpp: Implement clipping in the software renderer
1:28:00handmade_render.cpp: Implement clipping in the software renderer
1:29:12Blackboard: Intersecting tiles
1:29:12Blackboard: Intersecting tiles
1:29:12Blackboard: Intersecting tiles
1:32:01View the profiler and see that it clips in both renderers
1:32:01View the profiler and see that it clips in both renderers
1:32:01View the profiler and see that it clips in both renderers
1:32:30Q&A
🗩
1:32:30Q&A
🗩
1:32:30Q&A
🗩
1:34:11Popcorn0x90 What are top three reason for FPS to go down?
🗪
1:34:11Popcorn0x90 What are top three reason for FPS to go down?
🗪
1:34:11Popcorn0x90 What are top three reason for FPS to go down?
🗪
1:34:36sonoftheright Will ClipRect be used outside of debug, and where?
🗪
1:34:36sonoftheright Will ClipRect be used outside of debug, and where?
🗪
1:34:36sonoftheright Will ClipRect be used outside of debug, and where?
🗪
1:35:46fierydrake Can you elaborate on the ODE you plan to replace your drag function with in MoveEntity?
🗪
1:35:46fierydrake Can you elaborate on the ODE you plan to replace your drag function with in MoveEntity?
🗪
1:35:46fierydrake Can you elaborate on the ODE you plan to replace your drag function with in MoveEntity?
🗪
1:36:00fyoucon How about making the toplist scrollable? Since we now clip it, can be painful when you start profiling a lot more
🗪
1:36:00fyoucon How about making the toplist scrollable? Since we now clip it, can be painful when you start profiling a lot more
🗪
1:36:00fyoucon How about making the toplist scrollable? Since we now clip it, can be painful when you start profiling a lot more
🗪
1:36:50blah238 When does clipping overdrawn areas cost more than just drawing them?
🗪
1:36:50blah238 When does clipping overdrawn areas cost more than just drawing them?
🗪
1:36:50blah238 When does clipping overdrawn areas cost more than just drawing them?
🗪
1:38:12sssmcgrath That's not entirely true, the state change on the clip isn't free, and if the size change is minor it's probably not worth it
🗪
1:38:12sssmcgrath That's not entirely true, the state change on the clip isn't free, and if the size change is minor it's probably not worth it
🗪
1:38:12sssmcgrath That's not entirely true, the state change on the clip isn't free, and if the size change is minor it's probably not worth it
🗪
1:39:11Miblo When you switch between the renderers, the viewing frame time is (obviously) affected. Are the clocks in our newly clipped box also affected by the renderers, i.e. ordered / distributed differently?
🗪
1:39:11Miblo When you switch between the renderers, the viewing frame time is (obviously) affected. Are the clocks in our newly clipped box also affected by the renderers, i.e. ordered / distributed differently?
🗪
1:39:11Miblo When you switch between the renderers, the viewing frame time is (obviously) affected. Are the clocks in our newly clipped box also affected by the renderers, i.e. ordered / distributed differently?
🗪
1:39:36build.bat: Switch to -O2 and -DHANDMADE_SLOW=0 and view the profile
1:39:36build.bat: Switch to -O2 and -DHANDMADE_SLOW=0 and view the profile
1:39:36build.bat: Switch to -O2 and -DHANDMADE_SLOW=0 and view the profile
1:40:59handmade_render.cpp: Ignore IGNORED_TIMED_FUNCTION and IGNORED_TIMED_BLOCK
1:40:59handmade_render.cpp: Ignore IGNORED_TIMED_FUNCTION and IGNORED_TIMED_BLOCK
1:40:59handmade_render.cpp: Ignore IGNORED_TIMED_FUNCTION and IGNORED_TIMED_BLOCK
1:45:05handmade_render.cpp: Ignore DrawRectangle and "Pixel Fill"
1:45:05handmade_render.cpp: Ignore DrawRectangle and "Pixel Fill"
1:45:05handmade_render.cpp: Ignore DrawRectangle and "Pixel Fill"
1:47:14longboolean What does OpenGL do when you enable gl_scissor_test? What is it testing for?
🗪
1:47:14longboolean What does OpenGL do when you enable gl_scissor_test? What is it testing for?
🗪
1:47:14longboolean What does OpenGL do when you enable gl_scissor_test? What is it testing for?
🗪
1:47:35Blackboard: glScissor
1:47:35Blackboard: glScissor
1:47:35Blackboard: glScissor
1:48:22Wrap it up
🗩
1:48:22Wrap it up
🗩
1:48:22Wrap it up
🗩
1:48:46build.bat: Switch back to -Od and -DHANDMADE_SLOW=1
1:48:46build.bat: Switch back to -Od and -DHANDMADE_SLOW=1
1:48:46build.bat: Switch back to -Od and -DHANDMADE_SLOW=1
1:48:50todo.txt: Update the TODO list
1:48:50todo.txt: Update the TODO list
1:48:50todo.txt: Update the TODO list
1:49:54Announce that the forums will be going down this weekend [note: actually the 22nd April]
🗩
1:49:54Announce that the forums will be going down this weekend [note: actually the 22nd April]
🗩
1:49:54Announce that the forums will be going down this weekend [note: actually the 22nd April]
🗩