Handmade Hero»Episode Guide
Separating the Renderer Completely (Part 2)
?
?

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:01Set the stage for the day making the texture system optional
🗩
0:01Set the stage for the day making the texture system optional
🗩
0:01Set the stage for the day making the texture system optional
🗩
2:14A few words on ping-ponging between the renderer test bed and the full game, to gradually work the code away from the game, like in cookery
🗩
2:14A few words on ping-ponging between the renderer test bed and the full game, to gradually work the code away from the game, like in cookery
🗩
2:14A few words on ping-ponging between the renderer test bed and the full game, to gradually work the code away from the game, like in cookery
🗩
4:16Pull out non-generic parts of handmade_renderer.h into handmade_math.h and handmade_renderer_software.h
4:16Pull out non-generic parts of handmade_renderer.h into handmade_math.h and handmade_renderer_software.h
4:16Pull out non-generic parts of handmade_renderer.h into handmade_math.h and handmade_renderer_software.h
13:18Work towards the removal of loaded_bitmap from handmade_renderer.h in favour of a unified texture API
🗩
13:18Work towards the removal of loaded_bitmap from handmade_renderer.h in favour of a unified texture API
🗩
13:18Work towards the removal of loaded_bitmap from handmade_renderer.h in favour of a unified texture API
🗩
18:55Introduce renderer_texture to replace loaded_bitmap, propagating this replacement
18:55Introduce renderer_texture to replace loaded_bitmap, propagating this replacement
18:55Introduce renderer_texture to replace loaded_bitmap, propagating this replacement
29:56Run the game to see textured rendering
🏃
29:56Run the game to see textured rendering
🏃
29:56Run the game to see textured rendering
🏃
30:08Move loaded_bitmap out of handmade_renderer.h to guide our replacement of it
30:08Move loaded_bitmap out of handmade_renderer.h to guide our replacement of it
30:08Move loaded_bitmap out of handmade_renderer.h to guide our replacement of it
38:10Create handmade_asset_rendering.cpp to contain the Handmade Hero-specific functions from handmade_renderer.cpp
🗹
38:10Create handmade_asset_rendering.cpp to contain the Handmade Hero-specific functions from handmade_renderer.cpp
🗹
38:10Create handmade_asset_rendering.cpp to contain the Handmade Hero-specific functions from handmade_renderer.cpp
🗹
40:57Replace loaded_bitmap with software_texture
40:57Replace loaded_bitmap with software_texture
40:57Replace loaded_bitmap with software_texture
44:20Change the hardware renderer to use renderer_texture directly
44:20Change the hardware renderer to use renderer_texture directly
44:20Change the hardware renderer to use renderer_texture directly
50:18Run the game and encounter a "GL_INVALID_OPERATION" OpenGL Error
🏃
50:18Run the game and encounter a "GL_INVALID_OPERATION" OpenGL Error
🏃
50:18Run the game and encounter a "GL_INVALID_OPERATION" OpenGL Error
🏃
51:09Fix RendererTextureFrom() to use the TextureHandle
51:09Fix RendererTextureFrom() to use the TextureHandle
51:09Fix RendererTextureFrom() to use the TextureHandle
51:37Run the game successfully
🏃
51:37Run the game successfully
🏃
51:37Run the game successfully
🏃
52:02Remove RendererTextureFrom() in favour of passing Bitmap->TextureHandle to PushQuad() and PushCube()
52:02Remove RendererTextureFrom() in favour of passing Bitmap->TextureHandle to PushQuad() and PushCube()
52:02Remove RendererTextureFrom() in favour of passing Bitmap->TextureHandle to PushQuad() and PushCube()
52:26Try to include handmade_renderer.cpp in win32_renderer_test.cpp, and set up to push our lighting solution into the renderer
52:26Try to include handmade_renderer.cpp in win32_renderer_test.cpp, and set up to push our lighting solution into the renderer
52:26Try to include handmade_renderer.cpp in win32_renderer_test.cpp, and set up to push our lighting solution into the renderer
54:28Move lighting_point_state, lighting_box and LIGHT_POINTS_PER_CHUNK into handmade_renderer.h
54:28Move lighting_point_state, lighting_box and LIGHT_POINTS_PER_CHUNK into handmade_renderer.h
54:28Move lighting_point_state, lighting_box and LIGHT_POINTS_PER_CHUNK into handmade_renderer.h
55:34Try to let win32_renderer_test.cpp call PushFullClear()
55:34Try to let win32_renderer_test.cpp call PushFullClear()
55:34Try to let win32_renderer_test.cpp call PushFullClear()
55:59Run the renderer test, see no clear colour and investigate why
🏃
55:59Run the renderer test, see no clear colour and investigate why
🏃
55:59Run the renderer test, see no clear colour and investigate why
🏃
56:32Make win32_renderer_test.cpp use PushFullClear() as the game uses it, performing the depth peel
56:32Make win32_renderer_test.cpp use PushFullClear() as the game uses it, performing the depth peel
56:32Make win32_renderer_test.cpp use PushFullClear() as the game uses it, performing the depth peel
58:15Run the renderer test to see our clear colour
🏃
58:15Run the renderer test to see our clear colour
🏃
58:15Run the renderer test to see our clear colour
🏃
58:34Add a camera in win32_renderer_test.cpp
58:34Add a camera in win32_renderer_test.cpp
58:34Add a camera in win32_renderer_test.cpp
1:02:54Call PushCube() in win32_renderer_test.cpp
1:02:54Call PushCube() in win32_renderer_test.cpp
1:02:54Call PushCube() in win32_renderer_test.cpp
1:03:53Run the game and see no cube
🏃
1:03:53Run the game and see no cube
🏃
1:03:53Run the game and see no cube
🏃
1:04:44Set CameraDolly to 10.0f
1:04:44Set CameraDolly to 10.0f
1:04:44Set CameraDolly to 10.0f
1:04:52Run the game, see the cube and tweak the camera parameters
🏃
1:04:52Run the game, see the cube and tweak the camera parameters
🏃
1:04:52Run the game, see the cube and tweak the camera parameters
🏃
1:06:51Consider how to proceed, tackling texturing
🗩
1:06:51Consider how to proceed, tackling texturing
🗩
1:06:51Consider how to proceed, tackling texturing
🗩
1:10:21Set up win32_renderer_test.cpp to load a bitmap for passing to a texturing system1
1:10:21Set up win32_renderer_test.cpp to load a bitmap for passing to a texturing system1
1:10:21Set up win32_renderer_test.cpp to load a bitmap for passing to a texturing system1
1:17:52Make cube_test.bmp and sprite_test.bmp
🎨
1:17:52Make cube_test.bmp and sprite_test.bmp
🎨
1:17:52Make cube_test.bmp and sprite_test.bmp
🎨
1:22:03Step through LoadBMP() in win32_renderer_test.cpp to see our bitmap loaded successfully
1:22:03Step through LoadBMP() in win32_renderer_test.cpp to see our bitmap loaded successfully
1:22:03Step through LoadBMP() in win32_renderer_test.cpp to see our bitmap loaded successfully
1:22:28Set up to submit our textures to the renderer as two types: odd-sized (slower) and 512×512 (faster)
🗩
1:22:28Set up to submit our textures to the renderer as two types: odd-sized (slower) and 512×512 (faster)
🗩
1:22:28Set up to submit our textures to the renderer as two types: odd-sized (slower) and 512×512 (faster)
🗩
1:27:43Consider how to structure the two-tiered textured quads
🗩
1:27:43Consider how to structure the two-tiered textured quads
🗩
1:27:43Consider how to structure the two-tiered textured quads
🗩
1:31:10Pull AddOp() and related structs into handmade_renderer.{cpp,h}
1:31:10Pull AddOp() and related structs into handmade_renderer.{cpp,h}
1:31:10Pull AddOp() and related structs into handmade_renderer.{cpp,h}
1:45:09Run the game and crash in AtomicAddU64()
🏃
1:45:09Run the game and crash in AtomicAddU64()
🏃
1:45:09Run the game and crash in AtomicAddU64()
🏃
1:45:42Fix WinMainCRTStartup() to set the GameMemory.TextureQueue
1:45:42Fix WinMainCRTStartup() to set the GameMemory.TextureQueue
1:45:42Fix WinMainCRTStartup() to set the GameMemory.TextureQueue
1:46:01Run the game successfully
🏃
1:46:01Run the game successfully
🏃
1:46:01Run the game successfully
🏃
1:46:08Determine to make the renderer use a fixed number of textures, to remove notion of allocating / deallocating textures, in favour of only updating them
🗩
1:46:08Determine to make the renderer use a fixed number of textures, to remove notion of allocating / deallocating textures, in favour of only updating them
🗩
1:46:08Determine to make the renderer use a fixed number of textures, to remove notion of allocating / deallocating textures, in favour of only updating them
🗩
1:49:28Introduce renderer_texture_group and renderer_memory_layout
1:49:28Introduce renderer_texture_group and renderer_memory_layout
1:49:28Introduce renderer_texture_group and renderer_memory_layout
1:56:06Q&A
🗩
1:56:06Q&A
🗩
1:56:06Q&A
🗩
1:56:31edvinholm Q: How would you approach front-to-back rendering?
🗪
1:56:31edvinholm Q: How would you approach front-to-back rendering?
🗪
1:56:31edvinholm Q: How would you approach front-to-back rendering?
🗪
1:57:24edvinholm handmade_hero Yes
🗪
1:57:24edvinholm handmade_hero Yes
🗪
1:57:24edvinholm handmade_hero Yes
🗪
1:58:06nickito97 Q: Is including a cpp file generally a bad idea?
🗪
1:58:06nickito97 Q: Is including a cpp file generally a bad idea?
🗪
1:58:06nickito97 Q: Is including a cpp file generally a bad idea?
🗪
1:59:23iantjac Q: Is it possible to make variadic functions in C, when compiling without a LIBC?
🗪
1:59:23iantjac Q: Is it possible to make variadic functions in C, when compiling without a LIBC?
🗪
1:59:23iantjac Q: Is it possible to make variadic functions in C, when compiling without a LIBC?
🗪
2:04:34oldganon handmade_hero Including varargs.h doesnt pull in libc
🗪
2:04:34oldganon handmade_hero Including varargs.h doesnt pull in libc
🗪
2:04:34oldganon handmade_hero Including varargs.h doesnt pull in libc
🗪
2:05:05snovind92 Q: Why would the person you are helping not want to use a game engine if they are not too experienced with 3D programming?
🗪
2:05:05snovind92 Q: Why would the person you are helping not want to use a game engine if they are not too experienced with 3D programming?
🗪
2:05:05snovind92 Q: Why would the person you are helping not want to use a game engine if they are not too experienced with 3D programming?
🗪
2:07:16xkrouzu Q: Kinda new to the stream, but did you do any sort of batch rendering (like rendering once by storing into a texture)?
🗪
2:07:16xkrouzu Q: Kinda new to the stream, but did you do any sort of batch rendering (like rendering once by storing into a texture)?
🗪
2:07:16xkrouzu Q: Kinda new to the stream, but did you do any sort of batch rendering (like rendering once by storing into a texture)?
🗪
2:08:08nickito97 Q: Does the current renderer support arbitrary meshes or shaders?
🗪
2:08:08nickito97 Q: Does the current renderer support arbitrary meshes or shaders?
🗪
2:08:08nickito97 Q: Does the current renderer support arbitrary meshes or shaders?
🗪
2:08:47floorislava Q: When the texture is sent to the GPU is it a 1:1 size ratio or does it get compressed
🗪
2:08:47floorislava Q: When the texture is sent to the GPU is it a 1:1 size ratio or does it get compressed
🗪
2:08:47floorislava Q: When the texture is sent to the GPU is it a 1:1 size ratio or does it get compressed
🗪
2:09:11jim0_o Q: Did you noticed that the stream went down for a minute at around minute 45 of this stream?
🗪
2:09:11jim0_o Q: Did you noticed that the stream went down for a minute at around minute 45 of this stream?
🗪
2:09:11jim0_o Q: Did you noticed that the stream went down for a minute at around minute 45 of this stream?
🗪
2:10:06dudeinbasement1 Q: Thoughts on a simple handmade OBS?
🗪
2:10:06dudeinbasement1 Q: Thoughts on a simple handmade OBS?
🗪
2:10:06dudeinbasement1 Q: Thoughts on a simple handmade OBS?
🗪
2:11:22vaualbus Q: Would this texture system solve our binding texture timing?
🗪
2:11:22vaualbus Q: Would this texture system solve our binding texture timing?
🗪
2:11:22vaualbus Q: Would this texture system solve our binding texture timing?
🗪
2:11:39ponkkiz Q: Where do you buy your cool hats?
🗪
2:11:39ponkkiz Q: Where do you buy your cool hats?
🗪
2:11:39ponkkiz Q: Where do you buy your cool hats?
🗪
2:11:58kittehk Q: Stupid question, but would there ever be a need to use compute shaders in the game, or are we staying away from this side of the API?
🗪
2:11:58kittehk Q: Stupid question, but would there ever be a need to use compute shaders in the game, or are we staying away from this side of the API?
🗪
2:11:58kittehk Q: Stupid question, but would there ever be a need to use compute shaders in the game, or are we staying away from this side of the API?
🗪
2:12:20vaualbus Q: I mean the time spent in glBindTexture()
🗪
2:12:20vaualbus Q: I mean the time spent in glBindTexture()
🗪
2:12:20vaualbus Q: I mean the time spent in glBindTexture()
🗪
2:13:09frostyninja Q: Can we get another Lemongrab impersonation for my compilation?2
🗪
2:13:09frostyninja Q: Can we get another Lemongrab impersonation for my compilation?2
🗪
2:13:09frostyninja Q: Can we get another Lemongrab impersonation for my compilation?2
🗪
2:16:03xghost7 Q: Why did you change to Visual Studio editor? You were using something else before, I think
🗪
2:16:03xghost7 Q: Why did you change to Visual Studio editor? You were using something else before, I think
🗪
2:16:03xghost7 Q: Why did you change to Visual Studio editor? You were using something else before, I think
🗪
2:16:17vaualbus Q: Any idea on how to handle different textures when using instancing rendering? Pack all the textures in an array and write a custom sampler?
🗪
2:16:17vaualbus Q: Any idea on how to handle different textures when using instancing rendering? Pack all the textures in an array and write a custom sampler?
🗪
2:16:17vaualbus Q: Any idea on how to handle different textures when using instancing rendering? Pack all the textures in an array and write a custom sampler?
🗪
2:17:20jhaxgaming Q: Sorry to ask a noob question, but why do your function signatures use the internal keyword?
🗪
2:17:20jhaxgaming Q: Sorry to ask a noob question, but why do your function signatures use the internal keyword?
🗪
2:17:20jhaxgaming Q: Sorry to ask a noob question, but why do your function signatures use the internal keyword?
🗪
2:17:42naimlesson Q: Do you know if DX12 is going to be needed for making use of the new hardware ray tracing stuff? What alternatives exists, and is it going to be worth it?
🗪
2:17:42naimlesson Q: Do you know if DX12 is going to be needed for making use of the new hardware ray tracing stuff? What alternatives exists, and is it going to be worth it?
🗪
2:17:42naimlesson Q: Do you know if DX12 is going to be needed for making use of the new hardware ray tracing stuff? What alternatives exists, and is it going to be worth it?
🗪
2:19:11vaualbus Q: And there is a reason for that, Casey: if you include any cpp it will break as they define their version of internal somewhere in the STL
🗪
2:19:11vaualbus Q: And there is a reason for that, Casey: if you include any cpp it will break as they define their version of internal somewhere in the STL
🗪
2:19:11vaualbus Q: And there is a reason for that, Casey: if you include any cpp it will break as they define their version of internal somewhere in the STL
🗪
2:20:01nickito97 Q: What's wrong with STL?
🗪
2:20:01nickito97 Q: What's wrong with STL?
🗪
2:20:01nickito97 Q: What's wrong with STL?
🗪
2:23:39garryjohanson Invasive list?
🗪
2:23:39garryjohanson Invasive list?
🗪
2:23:39garryjohanson Invasive list?
🗪
2:25:42Close down shop
🗩
2:25:42Close down shop
🗩
2:25:42Close down shop
🗩