Handmade Hero»Episode Guide
Win32 Platform Layer Cleanup
?
?

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:05Goals for the day
1:05Goals for the day
1:05Goals for the day
2:50Fixing a dumb audio bug
2:50Fixing a dumb audio bug
2:50Fixing a dumb audio bug
8:18Failing to find a supposed SUCCEEDED related bug
8:18Failing to find a supposed SUCCEEDED related bug
8:18Failing to find a supposed SUCCEEDED related bug
9:48Concerns about WasDown/IsDown
9:48Concerns about WasDown/IsDown
9:48Concerns about WasDown/IsDown
12:25Fixing a bug in our gamepad input handling
12:25Fixing a bug in our gamepad input handling
12:25Fixing a bug in our gamepad input handling
14:37Fun? with Krita
14:37Fun? with Krita
14:37Fun? with Krita
16:47Back to Paint to illustrate the input bugfix
16:47Back to Paint to illustrate the input bugfix
16:47Back to Paint to illustrate the input bugfix
20:57Changing our renderbuffer to have fixed dimensions
20:57Changing our renderbuffer to have fixed dimensions
20:57Changing our renderbuffer to have fixed dimensions
23:39Improving the build.bat file
23:39Improving the build.bat file
23:39Improving the build.bat file
25:00Changing the write location for our .hmi files
25:00Changing the write location for our .hmi files
25:00Changing the write location for our .hmi files
27:37Writing some helper functions to create the dll path
27:37Writing some helper functions to create the dll path
27:37Writing some helper functions to create the dll path
33:51Step-through
33:51Step-through
33:51Step-through
36:12Taking our helper functions and using them elsewhere
36:12Taking our helper functions and using them elsewhere
36:12Taking our helper functions and using them elsewhere
40:23Testing the changes to input recording
40:23Testing the changes to input recording
40:23Testing the changes to input recording
41:22Input Assert firing and turning off Topmost window
41:22Input Assert firing and turning off Topmost window
41:22Input Assert firing and turning off Topmost window
42:45Changing Win32GetLastWriteTime() to use GetFileAttributesEx()
42:45Changing Win32GetLastWriteTime() to use GetFileAttributesEx()
42:45Changing Win32GetLastWriteTime() to use GetFileAttributesEx()
46:02Using DeviceIoControl to potentially speed up input recording hitch
46:02Using DeviceIoControl to potentially speed up input recording hitch
46:02Using DeviceIoControl to potentially speed up input recording hitch
51:06Removing stub functions from handmade.h for easier porting
51:06Removing stub functions from handmade.h for easier porting
51:06Removing stub functions from handmade.h for easier porting
53:50Looking at improvments to our 1GB VirtualAlloc()
53:50Looking at improvments to our 1GB VirtualAlloc()
53:50Looking at improvments to our 1GB VirtualAlloc()
55:12Whiteboard illustration of virtual memory
55:12Whiteboard illustration of virtual memory
55:12Whiteboard illustration of virtual memory
59:00Looking at real world virtual memory addresses
59:00Looking at real world virtual memory addresses
59:00Looking at real world virtual memory addresses
1:01:39Translation of virtual memory addresses into physical memory by the TLB
1:01:39Translation of virtual memory addresses into physical memory by the TLB
1:01:39Translation of virtual memory addresses into physical memory by the TLB
1:04:06So what are large pages?
1:04:06So what are large pages?
1:04:06So what are large pages?
1:05:26Changing VirtualAlloc() to use large pages
1:05:26Changing VirtualAlloc() to use large pages
1:05:26Changing VirtualAlloc() to use large pages
1:07:18Putting aside the large page support for later
1:07:18Putting aside the large page support for later
1:07:18Putting aside the large page support for later
1:08:26Q&A
🗩
1:08:26Q&A
🗩
1:08:26Q&A
🗩
1:09:50Can we go over really fast an overview of the game recording code?
1:09:50Can we go over really fast an overview of the game recording code?
1:09:50Can we go over really fast an overview of the game recording code?
1:14:16When you're saving the game_state snapshot, how big is the file?
1:14:16When you're saving the game_state snapshot, how big is the file?
1:14:16When you're saving the game_state snapshot, how big is the file?
1:15:25Can you check if the StringLength() needs a win32 prefix, or is this game code?
1:15:25Can you check if the StringLength() needs a win32 prefix, or is this game code?
1:15:25Can you check if the StringLength() needs a win32 prefix, or is this game code?
1:15:37How many lines of code is the finished game estimated to be?
1:15:37How many lines of code is the finished game estimated to be?
1:15:37How many lines of code is the finished game estimated to be?
1:16:02Maybe use two randoms in your batch file to get a more unique file name?
1:16:02Maybe use two randoms in your batch file to get a more unique file name?
1:16:02Maybe use two randoms in your batch file to get a more unique file name?
1:16:20Any advice on where I could go or what to do to pick up a bit more coding or knowledge experience?
1:16:20Any advice on where I could go or what to do to pick up a bit more coding or knowledge experience?
1:16:20Any advice on where I could go or what to do to pick up a bit more coding or knowledge experience?
1:17:05What is a good example of well-written game code? Everyone talks about the DOOM source code.
1:17:05What is a good example of well-written game code? Everyone talks about the DOOM source code.
1:17:05What is a good example of well-written game code? Everyone talks about the DOOM source code.
1:17:29Assuming you want to record exactly what happens in the game, how would the looping handle random values; Say enemy bullets that are fired at random angles?
1:17:29Assuming you want to record exactly what happens in the game, how would the looping handle random values; Say enemy bullets that are fired at random angles?
1:17:29Assuming you want to record exactly what happens in the game, how would the looping handle random values; Say enemy bullets that are fired at random angles?
1:18:23If we dump memory to disk in a large-scale application, wouldn't that cause more than a 1GB footprint for every state?
1:18:23If we dump memory to disk in a large-scale application, wouldn't that cause more than a 1GB footprint for every state?
1:18:23If we dump memory to disk in a large-scale application, wouldn't that cause more than a 1GB footprint for every state?
1:19:34I don't get the stuff where you declare a variable without initializing it, and then you use the address to it in a function call. Is that a dummy thing, or what is it used for?
1:19:34I don't get the stuff where you declare a variable without initializing it, and then you use the address to it in a function call. Is that a dummy thing, or what is it used for?
1:19:34I don't get the stuff where you declare a variable without initializing it, and then you use the address to it in a function call. Is that a dummy thing, or what is it used for?
1:21:49You can make the recording instantaneous using copy-on-write pages.
1:21:49You can make the recording instantaneous using copy-on-write pages.
1:21:49You can make the recording instantaneous using copy-on-write pages.
1:22:58Would the sparse file flags dropped the .hmi file size?
1:22:58Would the sparse file flags dropped the .hmi file size?
1:22:58Would the sparse file flags dropped the .hmi file size?
1:23:29I'm still not sure why we're using the Windows API to get memory instead of the standard library. Why are we making Windows calls if we are supposed to be doing everything from scratch?
1:23:29I'm still not sure why we're using the Windows API to get memory instead of the standard library. Why are we making Windows calls if we are supposed to be doing everything from scratch?
1:23:29I'm still not sure why we're using the Windows API to get memory instead of the standard library. Why are we making Windows calls if we are supposed to be doing everything from scratch?
1:24:49As the game grows, how are you going to partition the game memory between systems to keep the record-and-playback feature working?
1:24:49As the game grows, how are you going to partition the game memory between systems to keep the record-and-playback feature working?
1:24:49As the game grows, how are you going to partition the game memory between systems to keep the record-and-playback feature working?
1:25:20Would it make sense to temporary lessen the size of game memory we don't use at the moment anyway?
1:25:20Would it make sense to temporary lessen the size of game memory we don't use at the moment anyway?
1:25:20Would it make sense to temporary lessen the size of game memory we don't use at the moment anyway?
1:25:54Are you happy with the timing FPS results? I found an old article on _rdtsc() for more accurate timing.
1:25:54Are you happy with the timing FPS results? I found an old article on _rdtsc() for more accurate timing.
1:25:54Are you happy with the timing FPS results? I found an old article on _rdtsc() for more accurate timing.
1:27:01When would the Mac code start? I am following with Windows in a VM and it's really slow.
1:27:01When would the Mac code start? I am following with Windows in a VM and it's really slow.
1:27:01When would the Mac code start? I am following with Windows in a VM and it's really slow.
1:27:46Is there any negative effects of making the page size bigger?
1:27:46Is there any negative effects of making the page size bigger?
1:27:46Is there any negative effects of making the page size bigger?
1:29:47How do you calculate the size of a struct?
1:29:47How do you calculate the size of a struct?
1:29:47How do you calculate the size of a struct?
1:31:38Can you add line numbers, so those of us following along have an easier time?
1:31:38Can you add line numbers, so those of us following along have an easier time?
1:31:38Can you add line numbers, so those of us following along have an easier time?
1:33:50I believe some people think that the game_state is saved every time with the input, whereas it is only saved at the beginning of the recording and then modified through input playback.
1:33:50I believe some people think that the game_state is saved every time with the input, whereas it is only saved at the beginning of the recording and then modified through input playback.
1:33:50I believe some people think that the game_state is saved every time with the input, whereas it is only saved at the beginning of the recording and then modified through input playback.
1:34:21Do you think the recording technique will run into problems if we have multiple threads using the game_state?
1:34:21Do you think the recording technique will run into problems if we have multiple threads using the game_state?
1:34:21Do you think the recording technique will run into problems if we have multiple threads using the game_state?
1:35:07If VirtualAlloc() does not guarantee contiguous memory, could this pose a hindrance to cache optimizations?
1:35:07If VirtualAlloc() does not guarantee contiguous memory, could this pose a hindrance to cache optimizations?
1:35:07If VirtualAlloc() does not guarantee contiguous memory, could this pose a hindrance to cache optimizations?
1:36:45Where can I get earlier versions of the code? The link only gives me the latest version.
1:36:45Where can I get earlier versions of the code? The link only gives me the latest version.
1:36:45Where can I get earlier versions of the code? The link only gives me the latest version.
1:37:15Wrap-up
🗩
1:37:15Wrap-up
🗩
1:37:15Wrap-up
🗩