Handmade Hero»Episode Guide
Debugging 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 debugging our large texture implementation
🗩
0:00Recap and set the stage for the day debugging our large texture implementation
🗩
0:00Recap and set the stage for the day debugging our large texture implementation
🗩
1:27Refresh our memories on the additional multiple-dispatch slow path for arbitrary sized textures
🗩
1:27Refresh our memories on the additional multiple-dispatch slow path for arbitrary sized textures
🗩
1:27Refresh our memories on the additional multiple-dispatch slow path for arbitrary sized textures
🗩
3:17Continue to investigate the incorrectness in the multiple-dispatch path
3:17Continue to investigate the incorrectness in the multiple-dispatch path
3:17Continue to investigate the incorrectness in the multiple-dispatch path
6:40Try making OpenGLInit() and OpenGLAllocateTexture() use GL_TEXTURE_2D_ARRAY for special textures
6:40Try making OpenGLInit() and OpenGLAllocateTexture() use GL_TEXTURE_2D_ARRAY for special textures
6:40Try making OpenGLInit() and OpenGLAllocateTexture() use GL_TEXTURE_2D_ARRAY for special textures
8:49Run the game and crash in OpenGLAllocateTexture()
🏃
8:49Run the game and crash in OpenGLAllocateTexture()
🏃
8:49Run the game and crash in OpenGLAllocateTexture()
🏃
9:08Fix OpenGLAllocateTexture() to allocate one slice
9:08Fix OpenGLAllocateTexture() to allocate one slice
9:08Fix OpenGLAllocateTexture() to allocate one slice
9:27Run the game and crash in OpenGLEndFrame()
🏃
9:27Run the game and crash in OpenGLEndFrame()
🏃
9:27Run the game and crash in OpenGLEndFrame()
🏃
9:54Make OpenGLEndFrame() use a GL_TEXTURE_2D_ARRAY for special textures
9:54Make OpenGLEndFrame() use a GL_TEXTURE_2D_ARRAY for special textures
9:54Make OpenGLEndFrame() use a GL_TEXTURE_2D_ARRAY for special textures
10:19Run the game without crashing, but also without seeing any cutscene textures
🏃
10:19Run the game without crashing, but also without seeing any cutscene textures
🏃
10:19Run the game without crashing, but also without seeing any cutscene textures
🏃
11:48Change GameUpdateAndRender() to boot directly into the cutscene
11:48Change GameUpdateAndRender() to boot directly into the cutscene
11:48Change GameUpdateAndRender() to boot directly into the cutscene
13:40Capture a frame with Nsight and inspect the events
🏃
13:40Capture a frame with Nsight and inspect the events
🏃
13:40Capture a frame with Nsight and inspect the events
🏃
18:57Praise NVIDIA for Nsight's event filter
🗩
18:57Praise NVIDIA for Nsight's event filter
🗩
18:57Praise NVIDIA for Nsight's event filter
🗩
19:35Continue to check out our glBindTexture events
🏃
19:35Continue to check out our glBindTexture events
🏃
19:35Continue to check out our glBindTexture events
🏃
21:04Break in the special texture path in OpenGLEndFrame() successfully
🏃
21:04Break in the special texture path in OpenGLEndFrame() successfully
🏃
21:04Break in the special texture path in OpenGLEndFrame() successfully
🏃
21:50Correctly set the working directory
🗹
21:50Correctly set the working directory
🗹
21:50Correctly set the working directory
🗹
22:40Check out the glBindTexture event for our GL_TEXTURE_2D_ARRAY
🏃
22:40Check out the glBindTexture event for our GL_TEXTURE_2D_ARRAY
🏃
22:40Check out the glBindTexture event for our GL_TEXTURE_2D_ARRAY
🏃
25:58Consult the documentation on glTexImage3D1
📖
25:58Consult the documentation on glTexImage3D1
📖
25:58Consult the documentation on glTexImage3D1
📖
26:14Make OpenGLAllocateTexture() pass 0 as the level to glTexImage3D()
26:14Make OpenGLAllocateTexture() pass 0 as the level to glTexImage3D()
26:14Make OpenGLAllocateTexture() pass 0 as the level to glTexImage3D()
27:29Run the game and see imagery
🏃
27:29Run the game and see imagery
🏃
27:29Run the game and see imagery
🏃
28:26Make PushQuad() correctly compute the UV coordinates for special textures
28:26Make PushQuad() correctly compute the UV coordinates for special textures
28:26Make PushQuad() correctly compute the UV coordinates for special textures
29:52Run the game and see our cutscene texture more correctly, but without animation or alpha blending
🏃
29:52Run the game and see our cutscene texture more correctly, but without animation or alpha blending
🏃
29:52Run the game and see our cutscene texture more correctly, but without animation or alpha blending
🏃
31:48Begin to investigate the bug in the alpha blending of large textures
31:48Begin to investigate the bug in the alpha blending of large textures
31:48Begin to investigate the bug in the alpha blending of large textures
35:33Step into PushQuad() and inspect the vertices
🏃
35:33Step into PushQuad() and inspect the vertices
🏃
35:33Step into PushQuad() and inspect the vertices
🏃
39:10Try making PushQuad() set the TextureIndex of special textures to 0
39:10Try making PushQuad() set the TextureIndex of special textures to 0
39:10Try making PushQuad() set the TextureIndex of special textures to 0
40:02Run the game to see that that doesn't solve the transparency problem
🏃
40:02Run the game to see that that doesn't solve the transparency problem
🏃
40:02Run the game to see that that doesn't solve the transparency problem
🏃
41:14Make OpenGLEndFrame() unbind the GL_TEXTURE_2D_ARRAY
41:14Make OpenGLEndFrame() unbind the GL_TEXTURE_2D_ARRAY
41:14Make OpenGLEndFrame() unbind the GL_TEXTURE_2D_ARRAY
44:38Run the game, see no difference and consider capturing a frame
🏃
44:38Run the game, see no difference and consider capturing a frame
🏃
44:38Run the game, see no difference and consider capturing a frame
🏃
45:12Try skipping the depth peeling altogether when rendering the cutscene
45:12Try skipping the depth peeling altogether when rendering the cutscene
45:12Try skipping the depth peeling altogether when rendering the cutscene
47:15Run the game to see that the cutscene layers do get composited, but still without alpha blending
🏃
47:15Run the game to see that the cutscene layers do get composited, but still without alpha blending
🏃
47:15Run the game to see that the cutscene layers do get composited, but still without alpha blending
🏃
48:48Try making RenderLayeredScene() draw the cutscene layers in the opposite order
48:48Try making RenderLayeredScene() draw the cutscene layers in the opposite order
48:48Try making RenderLayeredScene() draw the cutscene layers in the opposite order
50:00Run the game to see that this changed the zoom speed, but had no effect on the transparency
🏃
50:00Run the game to see that this changed the zoom speed, but had no effect on the transparency
🏃
50:00Run the game to see that this changed the zoom speed, but had no effect on the transparency
🏃
50:53Revert RenderLayeredScene() to draw the cutscene in the original order
50:53Revert RenderLayeredScene() to draw the cutscene in the original order
50:53Revert RenderLayeredScene() to draw the cutscene in the original order
51:39Capture a frame of the cutscene, scrub through the events and inspect the shaders
🏃
51:39Capture a frame of the cutscene, scrub through the events and inspect the shaders
🏃
51:39Capture a frame of the cutscene, scrub through the events and inspect the shaders
🏃
59:14Toggle on ALLOW_GPU_SRGB
59:14Toggle on ALLOW_GPU_SRGB
59:14Toggle on ALLOW_GPU_SRGB
1:01:30Run the game to see that that still works okay, but the cutscene also remains unaffected
🏃
1:01:30Run the game to see that that still works okay, but the cutscene also remains unaffected
🏃
1:01:30Run the game to see that that still works okay, but the cutscene also remains unaffected
🏃
1:04:23Capture a frame and scrutinise the fragment and vertex shaders
🏃
1:04:23Capture a frame and scrutinise the fragment and vertex shaders
🏃
1:04:23Capture a frame and scrutinise the fragment and vertex shaders
🏃
1:10:48Try making CompileZBiasProgram() hard set the FogAmount and AlphaAmount to known values
1:10:48Try making CompileZBiasProgram() hard set the FogAmount and AlphaAmount to known values
1:10:48Try making CompileZBiasProgram() hard set the FogAmount and AlphaAmount to known values
1:11:14Run it to see no effect
🏃
1:11:14Run it to see no effect
🏃
1:11:14Run it to see no effect
🏃
1:11:25Try making CompileZBiasProgram() hard set the SurfaceReflect.a to 0.5
1:11:25Try making CompileZBiasProgram() hard set the SurfaceReflect.a to 0.5
1:11:25Try making CompileZBiasProgram() hard set the SurfaceReflect.a to 0.5
1:11:42Run it to see no alpha blending
🏃
1:11:42Run it to see no alpha blending
🏃
1:11:42Run it to see no alpha blending
🏃
1:14:12Capture a frame and inspect the draw buffer settings
🏃
1:14:12Capture a frame and inspect the draw buffer settings
🏃
1:14:12Capture a frame and inspect the draw buffer settings
🏃
1:22:40Remove CompileDepthPeelToLighting() and other cruft from the OpenGL code
1:22:40Remove CompileDepthPeelToLighting() and other cruft from the OpenGL code
1:22:40Remove CompileDepthPeelToLighting() and other cruft from the OpenGL code
1:28:01Run the game and Renderer Test to see that we didn't bust anything
🏃
1:28:01Run the game and Renderer Test to see that we didn't bust anything
🏃
1:28:01Run the game and Renderer Test to see that we didn't bust anything
🏃
1:29:50Refrain from binding the OpenGLColor_Emit and OpenGLColor_NPL handle types
1:29:50Refrain from binding the OpenGLColor_Emit and OpenGLColor_NPL handle types
1:29:50Refrain from binding the OpenGLColor_Emit and OpenGLColor_NPL handle types
1:31:50Run the game to see that the background colour is now incorrect
🏃
1:31:50Run the game to see that the background colour is now incorrect
🏃
1:31:50Run the game to see that the background colour is now incorrect
🏃
1:32:57Remove the NPL samplers from CompilePeelComposite()
1:32:57Remove the NPL samplers from CompilePeelComposite()
1:32:57Remove the NPL samplers from CompilePeelComposite()
1:34:50Run the game to see that the background colour is correct again, and capture a frame to see our intended single colour target
🏃
1:34:50Run the game to see that the background colour is correct again, and capture a frame to see our intended single colour target
🏃
1:34:50Run the game to see that the background colour is correct again, and capture a frame to see our intended single colour target
🏃
1:36:22Determine to investigate the positional corruption as exhibited by the draw order of the cutscene layers
🏃
1:36:22Determine to investigate the positional corruption as exhibited by the draw order of the cutscene layers
🏃
1:36:22Determine to investigate the positional corruption as exhibited by the draw order of the cutscene layers
🏃
1:39:45Make OpenGLEndFrame() call glDrawElementsBaseVertex() directly in the special texture path
🏃
1:39:45Make OpenGLEndFrame() call glDrawElementsBaseVertex() directly in the special texture path
🏃
1:39:45Make OpenGLEndFrame() call glDrawElementsBaseVertex() directly in the special texture path
🏃
1:42:25Run it to see that it's looking a little better
🏃
1:42:25Run it to see that it's looking a little better
🏃
1:42:25Run it to see that it's looking a little better
🏃
1:42:41Make RenderLayeredScene() draw the layers in the original order
1:42:41Make RenderLayeredScene() draw the layers in the original order
1:42:41Make RenderLayeredScene() draw the layers in the original order
1:42:52Run it to see that the cutscene plates are now correct, but the alpha blending is still not happening
🏃
1:42:52Run it to see that the cutscene plates are now correct, but the alpha blending is still not happening
🏃
1:42:52Run it to see that the cutscene plates are now correct, but the alpha blending is still not happening
🏃
1:44:09Capture a frame and take a closer look at the pixel operations to see that alpha blending was turned off the whole time
🏃
1:44:09Capture a frame and take a closer look at the pixel operations to see that alpha blending was turned off the whole time
🏃
1:44:09Capture a frame and take a closer look at the pixel operations to see that alpha blending was turned off the whole time
🏃
1:47:37Make OpenGLEndFrame() call glEnable() at the end of a depth peel
1:47:37Make OpenGLEndFrame() call glEnable() at the end of a depth peel
1:47:37Make OpenGLEndFrame() call glEnable() at the end of a depth peel
1:48:27Run the game to see that the cutscene alpha blending works beautifully
🏃
1:48:27Run the game to see that the cutscene alpha blending works beautifully
🏃
1:48:27Run the game to see that the cutscene alpha blending works beautifully
🏃
1:52:41cemuzunlar Greatest Handmade Hero Episode! A real hands on example of an ordinary day of a graphics programmer
🗪
1:52:41cemuzunlar Greatest Handmade Hero Episode! A real hands on example of an ordinary day of a graphics programmer
🗪
1:52:41cemuzunlar Greatest Handmade Hero Episode! A real hands on example of an ordinary day of a graphics programmer
🗪
1:53:32Q&A
🗩
1:53:32Q&A
🗩
1:53:32Q&A
🗩
1:54:18frostyninja Q: Missed what was preventing the parallax movement; could you point that out again real quick? Also is it just me or is the gamma off a little on the cutscenes? It looks a bit washed out to me
🗪
1:54:18frostyninja Q: Missed what was preventing the parallax movement; could you point that out again real quick? Also is it just me or is the gamma off a little on the cutscenes? It looks a bit washed out to me
🗪
1:54:18frostyninja Q: Missed what was preventing the parallax movement; could you point that out again real quick? Also is it just me or is the gamma off a little on the cutscenes? It looks a bit washed out to me
🗪
1:55:14Toggle off ALLOW_GPU_SRGB
1:55:14Toggle off ALLOW_GPU_SRGB
1:55:14Toggle off ALLOW_GPU_SRGB
1:56:03vateferfout Q: In the OpenGLAllocateTexture(), in the non-special texture case, you're calling the GetTextureIndexFrom() to mask off the special texture bit, but at this point you know that this bit isn't set, or am I reading this incorrectly?
🗪
1:56:03vateferfout Q: In the OpenGLAllocateTexture(), in the non-special texture case, you're calling the GetTextureIndexFrom() to mask off the special texture bit, but at this point you know that this bit isn't set, or am I reading this incorrectly?
🗪
1:56:03vateferfout Q: In the OpenGLAllocateTexture(), in the non-special texture case, you're calling the GetTextureIndexFrom() to mask off the special texture bit, but at this point you know that this bit isn't set, or am I reading this incorrectly?
🗪
1:56:26charliekelly_aka_dayman Q: Do you have the story for the game all written / thought out or are you still working on it?
🗪
1:56:26charliekelly_aka_dayman Q: Do you have the story for the game all written / thought out or are you still working on it?
🗪
1:56:26charliekelly_aka_dayman Q: Do you have the story for the game all written / thought out or are you still working on it?
🗪
1:57:03Wrap it up
🗩
1:57:03Wrap it up
🗩
1:57:03Wrap it up
🗩