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