Handmade Hero»Episode Guide
Large Texture Support
?
?

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
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
2:11Plug Meow Hash1
📖
2:11Plug Meow Hash1
📖
2:11Plug Meow Hash1
📖
3:59Try to run the game but crash in OpenGLManageTextures()
🏃
3:59Try to run the game but crash in OpenGLManageTextures()
🏃
3:59Try to run the game but crash in OpenGLManageTextures()
🏃
4:57“Forget the recap, we've got work to do, folks.”α
4:57“Forget the recap, we've got work to do, folks.”α
4:57“Forget the recap, we've got work to do, folks.”α
5:09Investigate the crash in OpenGLManageTextures(), to find that a fresh rebuild does not crash
🏃
5:09Investigate the crash in OpenGLManageTextures(), to find that a fresh rebuild does not crash
🏃
5:09Investigate the crash in OpenGLManageTextures(), to find that a fresh rebuild does not crash
🏃
10:48Run the Renderer Test noting that we have adequate throughput
🏃
10:48Run the Renderer Test noting that we have adequate throughput
🏃
10:48Run the Renderer Test noting that we have adequate throughput
🏃
12:18Run the game and note our new absence of support for large textures in our texture array
🏃
12:18Run the game and note our new absence of support for large textures in our texture array
🏃
12:18Run the game and note our new absence of support for large textures in our texture array
🏃
14:25Approaching the problem of handling large textures now that we have a fixed-size texture array
🗩
14:25Approaching the problem of handling large textures now that we have a fixed-size texture array
🗩
14:25Approaching the problem of handling large textures now that we have a fixed-size texture array
🗩
17:03Consider mipmapping our sprites
🗩
17:03Consider mipmapping our sprites
🗩
17:03Consider mipmapping our sprites
🗩
19:33Run the Renderer Test and try to see scaling artifacts that could be fixed by mipmaps
🏃
19:33Run the Renderer Test and try to see scaling artifacts that could be fixed by mipmaps
🏃
19:33Run the Renderer Test and try to see scaling artifacts that could be fixed by mipmaps
🏃
23:21Set out our strategy for handling large texturesβ
23:21Set out our strategy for handling large texturesβ
23:21Set out our strategy for handling large texturesβ
26:49Add a renderer_texture array to render_entry_textured_quads to special-case our rendering of large textures
26:49Add a renderer_texture array to render_entry_textured_quads to special-case our rendering of large textures
26:49Add a renderer_texture array to render_entry_textured_quads to special-case our rendering of large textures
35:38Enable GetCurrentQuads() to handle large textures, adding a stretchy renderer_texture *QuadTextures buffer to game_render_commands, introducing IsSpecialTexture() and stubbing out GetSpecialTextureHandleFor()
35:38Enable GetCurrentQuads() to handle large textures, adding a stretchy renderer_texture *QuadTextures buffer to game_render_commands, introducing IsSpecialTexture() and stubbing out GetSpecialTextureHandleFor()
35:38Enable GetCurrentQuads() to handle large textures, adding a stretchy renderer_texture *QuadTextures buffer to game_render_commands, introducing IsSpecialTexture() and stubbing out GetSpecialTextureHandleFor()
54:29Run the Renderer Test and the game successfully
🏃
54:29Run the Renderer Test and the game successfully
🏃
54:29Run the Renderer Test and the game successfully
🏃
55:15Enable LoadBitmap() to handle special large textures, introducing DimensionsRequireSpecialTexture() and SpecialTextureIndexFrom()
55:15Enable LoadBitmap() to handle special large textures, introducing DimensionsRequireSpecialTexture() and SpecialTextureIndexFrom()
55:15Enable LoadBitmap() to handle special large textures, introducing DimensionsRequireSpecialTexture() and SpecialTextureIndexFrom()
1:05:01Add SpecialTextureHandleCount and NextSpecialTextureHandle to game_assets and enable AllocateGameAssets() to handle special large textures
1:05:01Add SpecialTextureHandleCount and NextSpecialTextureHandle to game_assets and enable AllocateGameAssets() to handle special large textures
1:05:01Add SpecialTextureHandleCount and NextSpecialTextureHandle to game_assets and enable AllocateGameAssets() to handle special large textures
1:09:18Enable OpenGLAllocateTexture() to handle special large textures, introducing TextureIndexFrom()
1:09:18Enable OpenGLAllocateTexture() to handle special large textures, introducing TextureIndexFrom()
1:09:18Enable OpenGLAllocateTexture() to handle special large textures, introducing TextureIndexFrom()
1:12:37XOR vs AND NOTγ
1:12:37XOR vs AND NOTγ
1:12:37XOR vs AND NOTγ
1:16:02A few words on demythologising programming and the truth of making mistakes
🍷
1:16:02A few words on demythologising programming and the truth of making mistakes
🍷
1:16:02A few words on demythologising programming and the truth of making mistakes
🍷
1:19:30Continue to enable OpenGLAllocateTexture(), Win32InitOpenGL() and OpenGLBeginFrame() to handle special large textures
1:19:30Continue to enable OpenGLAllocateTexture(), Win32InitOpenGL() and OpenGLBeginFrame() to handle special large textures
1:19:30Continue to enable OpenGLAllocateTexture(), Win32InitOpenGL() and OpenGLBeginFrame() to handle special large textures
1:42:54Run the game and crash in OpenGLInit()
🏃
1:42:54Run the game and crash in OpenGLInit()
🏃
1:42:54Run the game and crash in OpenGLInit()
🏃
1:44:08Fix Win32InitOpenGL() to allocate the asset and texture handle arrays before calling OpenGLInit()
1:44:08Fix Win32InitOpenGL() to allocate the asset and texture handle arrays before calling OpenGLInit()
1:44:08Fix Win32InitOpenGL() to allocate the asset and texture handle arrays before calling OpenGLInit()
1:44:41Run the game nominally correctly, before switching to the cutscene and crashing in OpenGLAllocateTexture()
🏃
1:44:41Run the game nominally correctly, before switching to the cutscene and crashing in OpenGLAllocateTexture()
🏃
1:44:41Run the game nominally correctly, before switching to the cutscene and crashing in OpenGLAllocateTexture()
🏃
1:45:53Step through LoadBitmap() to see what happens with the large textures
🏃
1:45:53Step through LoadBitmap() to see what happens with the large textures
🏃
1:45:53Step through LoadBitmap() to see what happens with the large textures
🏃
1:49:01Fix DimensionsRequireSpecialTexture() to correctly handle textures that are larger than standard on either axis (rather than both)
1:49:01Fix DimensionsRequireSpecialTexture() to correctly handle textures that are larger than standard on either axis (rather than both)
1:49:01Fix DimensionsRequireSpecialTexture() to correctly handle textures that are larger than standard on either axis (rather than both)
1:49:17Run the game, switch to the cutscene and hit our Assert(TextureIndex == Texture.Index) in PushQuad()
🏃
1:49:17Run the game, switch to the cutscene and hit our Assert(TextureIndex == Texture.Index) in PushQuad()
🏃
1:49:17Run the game, switch to the cutscene and hit our Assert(TextureIndex == Texture.Index) in PushQuad()
🏃
1:50:33Fix PushQuad() to peel off the handle from the texture in stages, first as a u32, then cast down to a u16
1:50:33Fix PushQuad() to peel off the handle from the texture in stages, first as a u32, then cast down to a u16
1:50:33Fix PushQuad() to peel off the handle from the texture in stages, first as a u32, then cast down to a u16
1:51:12Run the game and crash in OpenGLEndFrame()
🏃
1:51:12Run the game and crash in OpenGLEndFrame()
🏃
1:51:12Run the game and crash in OpenGLEndFrame()
🏃
1:53:43Fix GetCurrentQuads() to set the IndexArrayOffset, and change OpenGLEndFrame() to use this offset accordingly
1:53:43Fix GetCurrentQuads() to set the IndexArrayOffset, and change OpenGLEndFrame() to use this offset accordingly
1:53:43Fix GetCurrentQuads() to set the IndexArrayOffset, and change OpenGLEndFrame() to use this offset accordingly
1:57:44Run the game without crashing, but see no cutscene textures
🏃
1:57:44Run the game without crashing, but see no cutscene textures
🏃
1:57:44Run the game without crashing, but see no cutscene textures
🏃
2:00:43Step in to OpenGLEndFrame() and inspect the Texture
🏃
2:00:43Step in to OpenGLEndFrame() and inspect the Texture
🏃
2:00:43Step in to OpenGLEndFrame() and inspect the Texture
🏃
2:01:01Fix PushQuad() to actually push on special textures
2:01:01Fix PushQuad() to actually push on special textures
2:01:01Fix PushQuad() to actually push on special textures
2:02:30Run the game, see that the Texture at this point in OpenGLEndFrame() looks a lot better, but that we don't see the cutscene textures in-game
🏃
2:02:30Run the game, see that the Texture at this point in OpenGLEndFrame() looks a lot better, but that we don't see the cutscene textures in-game
🏃
2:02:30Run the game, see that the Texture at this point in OpenGLEndFrame() looks a lot better, but that we don't see the cutscene textures in-game
🏃
2:03:46Q&A
🗩
2:03:46Q&A
🗩
2:03:46Q&A
🗩
2:04:16rooctag Q: Commands-> should be Entry-> on the line where it breaks. Commands was leftover and not updated to Entry
🗪
2:04:16rooctag Q: Commands-> should be Entry-> on the line where it breaks. Commands was leftover and not updated to Entry
🗪
2:04:16rooctag Q: Commands-> should be Entry-> on the line where it breaks. Commands was leftover and not updated to Entry
🗪
2:04:47Fix OpenGLEndFrame() to set the special Texture from the Entry, rather than from the Commands
2:04:47Fix OpenGLEndFrame() to set the special Texture from the Entry, rather than from the Commands
2:04:47Fix OpenGLEndFrame() to set the special Texture from the Entry, rather than from the Commands
2:04:55Run the game and still see no cutscene textures
🏃
2:04:55Run the game and still see no cutscene textures
🏃
2:04:55Run the game and still see no cutscene textures
🏃
2:06:37etisdew Q: How do you handle attributes and varyings for your GLSL?
🗪
2:06:37etisdew Q: How do you handle attributes and varyings for your GLSL?
🗪
2:06:37etisdew Q: How do you handle attributes and varyings for your GLSL?
🗪
2:07:54A few words on the need for a language that offers the ability to read in material written in another language (e.g. GLSL), and use the types defined in that material directly, noting that Jon Blow's JAI has this ability
🗩
2:07:54A few words on the need for a language that offers the ability to read in material written in another language (e.g. GLSL), and use the types defined in that material directly, noting that Jon Blow's JAI has this ability
🗩
2:07:54A few words on the need for a language that offers the ability to read in material written in another language (e.g. GLSL), and use the types defined in that material directly, noting that Jon Blow's JAI has this ability
🗩
2:09:58“Did insobot just say "Domo arigato, Mr. Compiler"? Because if so, then that is the new high watermark for artificial intelligence”δ
2:09:58“Did insobot just say "Domo arigato, Mr. Compiler"? Because if so, then that is the new high watermark for artificial intelligence”δ
2:09:58“Did insobot just say "Domo arigato, Mr. Compiler"? Because if so, then that is the new high watermark for artificial intelligence”δ
2:10:12caseyismyhero1337 Q: Casey my man, what are the stats on your glasses?
🗪
🎲
2:10:12caseyismyhero1337 Q: Casey my man, what are the stats on your glasses?
🗪
🎲
2:10:12caseyismyhero1337 Q: Casey my man, what are the stats on your glasses?
🗪
🎲
2:11:13Wrap it up
🗩
2:11:13Wrap it up
🗩
2:11:13Wrap it up
🗩