[video 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]