Handmade Hero»Episode Guide
Finishing Asset System 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)
0:00Recap and set the stage for the day finishing our asset system cleanup
🗩
0:00Recap and set the stage for the day finishing our asset system cleanup
🗩
0:00Recap and set the stage for the day finishing our asset system cleanup
🗩
0:49Reacquaint ourselves with the renderer_texture queueing / dequeuing code
📖
0:49Reacquaint ourselves with the renderer_texture queueing / dequeuing code
📖
0:49Reacquaint ourselves with the renderer_texture queueing / dequeuing code
📖
5:00Split AddOp() into newly introduced functions CompleteTextureOp() and BeginTextureOp()
5:00Split AddOp() into newly introduced functions CompleteTextureOp() and BeginTextureOp()
5:00Split AddOp() into newly introduced functions CompleteTextureOp() and BeginTextureOp()
12:36Texture transfer buffer size and circularity
🗩
12:36Texture transfer buffer size and circularity
🗩
12:36Texture transfer buffer size and circularity
🗩
16:05Implement the texture transfer buffer as an in-order circular buffer, augmenting texture_op_list with TransferMemory and related data
16:05Implement the texture transfer buffer as an in-order circular buffer, augmenting texture_op_list with TransferMemory and related data
16:05Implement the texture transfer buffer as an in-order circular buffer, augmenting texture_op_list with TransferMemory and related data
33:28Determining the available space in a circular buffer, in both the wrapped and unwrapped cases
🖌
33:28Determining the available space in a circular buffer, in both the wrapped and unwrapped cases
🖌
33:28Determining the available space in a circular buffer, in both the wrapped and unwrapped cases
🖌
34:40Make BeginTextureOp() compute the SizeAvailable in both cases
34:40Make BeginTextureOp() compute the SizeAvailable in both cases
34:40Make BeginTextureOp() compute the SizeAvailable in both cases
40:03Switch InitTextureQueue() to our new TransferMemory circular buffer scheme
40:03Switch InitTextureQueue() to our new TransferMemory circular buffer scheme
40:03Switch InitTextureQueue() to our new TransferMemory circular buffer scheme
43:27Tie the game's platform layer and OpenGL renderer in to our TransferMemory
43:27Tie the game's platform layer and OpenGL renderer in to our TransferMemory
43:27Tie the game's platform layer and OpenGL renderer in to our TransferMemory
51:22Switch the Renderer Test to use our TransferMemory
51:22Switch the Renderer Test to use our TransferMemory
51:22Switch the Renderer Test to use our TransferMemory
53:37Switch OpenGLAllocateTextures() to our TransferMemory
53:37Switch OpenGLAllocateTextures() to our TransferMemory
53:37Switch OpenGLAllocateTextures() to our TransferMemory
1:10:16Introduce platform_renderer_limits
1:10:16Introduce platform_renderer_limits
1:10:16Introduce platform_renderer_limits
1:13:37Make the Renderer Test use our TransferMemory everywhere necessary
1:13:37Make the Renderer Test use our TransferMemory everywhere necessary
1:13:37Make the Renderer Test use our TransferMemory everywhere necessary
1:20:12Step in to LoadBMP() in the Renderer Test to see what we're getting
🏃
1:20:12Step in to LoadBMP() in the Renderer Test to see what we're getting
🏃
1:20:12Step in to LoadBMP() in the Renderer Test to see what we're getting
🏃
1:24:06Fix BeginTextureOp() to increase the TransferMemoryUsedCount
1:24:06Fix BeginTextureOp() to increase the TransferMemoryUsedCount
1:24:06Fix BeginTextureOp() to increase the TransferMemoryUsedCount
1:25:31Step through LoadBMP() in the Renderer Test into BeginTextureOp() to see what it does
🏃
1:25:31Step through LoadBMP() in the Renderer Test into BeginTextureOp() to see what it does
🏃
1:25:31Step through LoadBMP() in the Renderer Test into BeginTextureOp() to see what it does
🏃
1:27:39Fix BeginTextureOp() to enqueue an op when there is enough space available
1:27:39Fix BeginTextureOp() to enqueue an op when there is enough space available
1:27:39Fix BeginTextureOp() to enqueue an op when there is enough space available
1:27:59Continue to step through BeginTextureOp() into OpenGLManageTextures() to find that it all works
🏃
1:27:59Continue to step through BeginTextureOp() into OpenGLManageTextures() to find that it all works
🏃
1:27:59Continue to step through BeginTextureOp() into OpenGLManageTextures() to find that it all works
🏃
1:31:24Run the Renderer Test in release mode, and consider stress testing our TransferMemory wrapping
🏃
1:31:24Run the Renderer Test in release mode, and consider stress testing our TransferMemory wrapping
🏃
1:31:24Run the Renderer Test in release mode, and consider stress testing our TransferMemory wrapping
🏃
1:32:33Switch the game's asset system over to our TransferMemory
1:32:33Switch the game's asset system over to our TransferMemory
1:32:33Switch the game's asset system over to our TransferMemory
1:35:41Break
🗩
1:35:41Break
🗩
1:35:41Break
🗩
1:36:35Make LoadFont() acquire its own memory specially, introducing KeepTemporaryMemory()
1:36:35Make LoadFont() acquire its own memory specially, introducing KeepTemporaryMemory()
1:36:35Make LoadFont() acquire its own memory specially, introducing KeepTemporaryMemory()
1:42:19Switch OutputPlayingSounds() over to use its special sliding window sample buffer
1:42:19Switch OutputPlayingSounds() over to use its special sliding window sample buffer
1:42:19Switch OutputPlayingSounds() over to use its special sliding window sample buffer
1:49:08Switch the whole game to use our new platform_renderer_limits, and AllocateGameAssets() to use our TransferMemory
1:49:08Switch the whole game to use our new platform_renderer_limits, and AllocateGameAssets() to use our TransferMemory
1:49:08Switch the whole game to use our new platform_renderer_limits, and AllocateGameAssets() to use our TransferMemory
1:53:51Hit an assertion in OpenGLManageTextures()
🏃
1:53:51Hit an assertion in OpenGLManageTextures()
🏃
1:53:51Hit an assertion in OpenGLManageTextures()
🏃
1:54:30Fix that assertion in OpenGLManageTextures()
1:54:30Fix that assertion in OpenGLManageTextures()
1:54:30Fix that assertion in OpenGLManageTextures()
1:54:45Hit the assertion in GetBitmap()
🏃
1:54:45Hit the assertion in GetBitmap()
🏃
1:54:45Hit the assertion in GetBitmap()
🏃
1:55:50Permit GetBitmap(), GetSoundSamples() and GetFont() to handle any asset with ID 0
1:55:50Permit GetBitmap(), GetSoundSamples() and GetFont() to handle any asset with ID 0
1:55:50Permit GetBitmap(), GetSoundSamples() and GetFont() to handle any asset with ID 0
1:56:34Run the game okay, see only grey, and step through LoadBitmap() and LoadAssetWork() to see what's going on
🏃
1:56:34Run the game okay, see only grey, and step through LoadBitmap() and LoadAssetWork() to see what's going on
🏃
1:56:34Run the game okay, see only grey, and step through LoadBitmap() and LoadAssetWork() to see what's going on
🏃
2:00:38Make LoadAssetWork() clear the work memory up front
2:00:38Make LoadAssetWork() clear the work memory up front
2:00:38Make LoadAssetWork() clear the work memory up front
2:02:44Step through LoadAssetWork() and then on to OpenGLManageTextures() to see what happens with our bitmaps
2:02:44Step through LoadAssetWork() and then on to OpenGLManageTextures() to see what happens with our bitmaps
2:02:44Step through LoadAssetWork() and then on to OpenGLManageTextures() to see what happens with our bitmaps
2:05:38Fix LoadBMP() to set the Asset->TextureHandle
2:05:38Fix LoadBMP() to set the Asset->TextureHandle
2:05:38Fix LoadBMP() to set the Asset->TextureHandle
2:06:55Find that everything except the white texture loaded correctly
🏃
2:06:55Find that everything except the white texture loaded correctly
🏃
2:06:55Find that everything except the white texture loaded correctly
🏃
2:07:29Fix AllocateGameAssets() to set the Op->Texture for our white texture
2:07:29Fix AllocateGameAssets() to set the Op->Texture for our white texture
2:07:29Fix AllocateGameAssets() to set the Op->Texture for our white texture
2:08:08Find that everything works fine
🏃
2:08:08Find that everything works fine
🏃
2:08:08Find that everything works fine
🏃
2:09:19Implement texture flushing for our "Import & Save" button, introducing UnloadBitmap()
2:09:19Implement texture flushing for our "Import & Save" button, introducing UnloadBitmap()
2:09:19Implement texture flushing for our "Import & Save" button, introducing UnloadBitmap()
2:14:32Try out our "Import & Save" button, totally successfully
🏃
2:14:32Try out our "Import & Save" button, totally successfully
🏃
2:14:32Try out our "Import & Save" button, totally successfully
🏃
2:15:54Q&A
🗩
2:15:54Q&A
🗩
2:15:54Q&A
🗩
2:16:44b3zman41 Q: What is going on in your optimized build?
🗪
2:16:44b3zman41 Q: What is going on in your optimized build?
🗪
2:16:44b3zman41 Q: What is going on in your optimized build?
🗪
2:17:23b3zman41 Q: Are you optimizing assets or something? I just wanted to know what it looks like
🗪
2:17:23b3zman41 Q: Are you optimizing assets or something? I just wanted to know what it looks like
🗪
2:17:23b3zman41 Q: Are you optimizing assets or something? I just wanted to know what it looks like
🗪
2:19:49gg_nate Q: Why don't you have any moderators for twitch chat?1
🗪
2:19:49gg_nate Q: Why don't you have any moderators for twitch chat?1
🗪
2:19:49gg_nate Q: Why don't you have any moderators for twitch chat?1
🗪
2:20:30b3zman41 Q: So MSVC just doesn't do all the inlining stuff by default? Sorry, I'm more of a web dev and don't get this low-level stuff
🗪
2:20:30b3zman41 Q: So MSVC just doesn't do all the inlining stuff by default? Sorry, I'm more of a web dev and don't get this low-level stuff
🗪
2:20:30b3zman41 Q: So MSVC just doesn't do all the inlining stuff by default? Sorry, I'm more of a web dev and don't get this low-level stuff
🗪
2:21:03Walk through ComputeLightPropagation() and its disassembly in a debug build
🏃
2:21:03Walk through ComputeLightPropagation() and its disassembly in a debug build
🏃
2:21:03Walk through ComputeLightPropagation() and its disassembly in a debug build
🏃
2:23:57Compare the ComputeLightPropagation() assembly in optimised build
🏃
2:23:57Compare the ComputeLightPropagation() assembly in optimised build
🏃
2:23:57Compare the ComputeLightPropagation() assembly in optimised build
🏃
2:25:51blamebauer Q: Newbie question: Wouldn't inlining every function call speed things up? Does the compiler do that when you turn optimizations on?2
🗪
2:25:51blamebauer Q: Newbie question: Wouldn't inlining every function call speed things up? Does the compiler do that when you turn optimizations on?2
🗪
2:25:51blamebauer Q: Newbie question: Wouldn't inlining every function call speed things up? Does the compiler do that when you turn optimizations on?2
🗪
2:33:41Understanding the "inline" keyword as an advisory to the compiler
🗩
2:33:41Understanding the "inline" keyword as an advisory to the compiler
🗩
2:33:41Understanding the "inline" keyword as an advisory to the compiler
🗩
2:36:09Close it down
🗩
2:36:09Close it down
🗩
2:36:09Close it down
🗩