[video output=day344 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Selective Memory Restoration" vod_platform=youtube id=7oXRggHaP60 annotator=Miblo]
[0:14][Recap and set the stage for the day]
[1:05][Run the game and take a look at where we're at with the looped live code editing]
[3:06][Step into Win32BeginRecordingInput() and inspect what is going on]
[4:01][win32_handmade.cpp: Make Win32BeginRecordingInput() write to the right handle]
[5:20][Run the game to see that we've got our looped live code editing working with dynamic allocations]
[6:26][Consider how to save and restore the loop edits more efficiently]
[8:23][handmade_asset.cpp: Look at how the asset system currently operates]
[11:04][win32_handmade.h: Introduce win32_memory_block_flags in order to enable a win32_memory_block to be bypassed by the save / restore process]
[14:54][win32_handmade.cpp: Make Win32BeginRecordingInput() obey those flags]
[16:36][handmade_asset.cpp: Make AllocateGameAssets() bootstrap its own arena as NonRestoredMemory]
[18:54][Run the game and see it work just fine]
[19:25][handmade_memory.h: Make BootstrapPushSize_() take AllocationFlags, and introduce DefaultBootstrapParams() and NonRestoredArena()]
[23:27][handmade_platform.h: Make the platform_memory_block_flags platform independent]
[24:16][Run the game, try out the save / restore, hit the assert in BeginGeneration() and investigate why]
[26:29][handmade_asset.h: Try disabling the InFlightGeneration code]
[30:04][Run the game to see that it's all working, and consider whether or not to support InFlightGeneration]
[31:41][handmade.h: Try putting the InFlightGeneration code in the transient_state]
[37:19][Run the game with the asset locking being stored and check the size of loop_edit_1_input.hmi]
[40:09][Consider handling mid-recording memory allocations / deallocations]
[44:03][win32_handmade.cpp: Enable Win32EndInputPlayBack to handle memory AllocatedDuringLooping]
[49:56][win32_handmade.cpp: Introduce Win32ClearBlocksByMask() and Win32FreeMemoryBlock()]
[57:55][win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() and PLATFORM_DEALLOCATE_MEMORY() set the LoopingFlags, and introduce Win32IsInLoop()]
[1:00:17][Run the game and leave a loop running]
[1:00:26][Q&A][:speech]
[1:00:54][nxsy !qa]
[1:02:30][@neitchzehrer][What happened to the black dot?]
[1:04:15][@nxsy][I'm scared to look back at my own library reload (not even looped editing) after I stopped using it for a few months. Probably 10+ hours of debugging ahead of me]
[1:04:52][@drchilitopicoso][Besides UI, what things must use threads in games? Just started learning threads and I'm curious. There are some things that somehow run slower threaded than single]
[1:11:10][@drchilitopicoso][For the moment I have a thread job system. It's for rebuilding a mesh. For a big mesh it takes like 20 ms, so I thought maybe it would make it faster but not that much, maybe like 13% faster]
[1:12:55][Go ahead and close things down][:speech]
[1:14:22][Announcement: HandmadeCon 2016 speaker list[ref
    site="Molly Rocket"
    page="HandmadeCon 2016 Speakers"
    url="https://mollyrocket.com/news_0046.html"]][:research]
[/video]
