[video output=day305 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Using Memory Arenas in the Platform Layer" vod_platform=youtube id=ImWSMzMe1kI annotator=Miblo]
[0:31][Recap and set the stage for the day]
[2:02][handmade_opengl.cpp: Consider making this whole file platform independent]
[4:58][handmade_platform.h: Consider moving platform_opengl_display_bitmap and platform_opengl_render_commands in from handmade_opengl.cpp]
[7:10][Consider (the downsides of) making all the platform layers include bindings and link the dll with opengl]
[9:59][win32_handmade.cpp: Make Win32DisplayBufferInWindow() call SortEntries(), and consider moving the sorting or the memory arena into the platform specific layer]
[11:31][Create handmade_memory.h and #include it handmade_shared.h]
[17:07][Consider the concept of an overflow memory state]
[20:13][win32_handmade.cpp: Make Win32DisplayBufferInWindow() take a memory_arena and create some temporarary_memory for SortEntries() and LinearizeClipRects() to use]
[24:00][handmade_opengl.cpp: Make OpenGLRenderCommands() call GetSortedIndices()]
[25:03][handmade_render.cpp: Make RenderCommandsToBitmap() call GetSortedIndices()]
[26:02][handmade_platform.h: Introduce game_render_prep struct and make the necessary functions take it]
[31:44][handmade_render.cpp: Introduce PrepForRender()]
[33:17][4coder: Request a mode that automatically creates a boundary in the bottom-right corner]
[33:52][win32_handmade.cpp: Stop WinMain() from dealing with the ClipMemory and make LinearizeClipRects() in handmade_render.cpp do it itself]
[35:37][On the importance of good utility functionality]
[41:29][Create handmade_render.h and stick the sprite structs in there]
[49:50][Run the game and hit the assertion in OpenGLRenderCommands()]
[52:10][handmade_render.cpp: Assert that OutIndex - OutIndexArray == InputNodeCount in WalkSpriteGraph(), and make SortEntries() traverse the nodes and write the indices of them]
[54:41][Run the game and see that all of our stuff is flowing without crashing]
[55:15][handmade_render.cpp: Make RecursiveFromToBack() correctly increment the OutIndex]
[55:49][Run the game and hit the assertion in BuildSpriteGraph()]
[56:10][handmade_render.cpp: Explain how RecursiveFromToBack() is working]
[58:30][handmade_render_group.cpp: Make PushRenderElement_() clear Flags]
[59:42][Run the game, confirm that our sort isn't working and consider how to make it work]
[1:02:43][Q&A][:speech]
[1:04:32][@insobot][Line 31?]
[1:06:05][@roam00010011][Since no on-topic, off-topic: Will the final game be orthographic?]
[1:06:42][@bryanwwag][When you're calculating pre-allocated buffer locations with offsets, do you find the pointer bugs that pop up sometimes difficult to track down, or is that kind of a non-issue when you do it often enough?]
[1:13:54][@roam00010011][Which system did you start programming on, way back in the previous millennium?[ref
    site="Wikipedia"
    page="Rainbow 100"
    url="https://en.wikipedia.org/wiki/Rainbow_100"]]
[1:14:55][@soysaucethekid][I know there is debug code for how long functions take. Is there any debug code for how much of a memory arena is being used?]
[1:15:47][Recollections of the Rainbow 100 and Turbo Pascal]
[1:20:46][@roam00010011][Did you program on the Amiga?]
[1:21:07][@pseudonym73][Did it have Word Star key bindings? That's really the test]
[1:21:14][Close down][:speech]
[/video]
