Handmade Hero»Episode Guide
Crashing the Stream with a Fragment Shader
?
?

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:04Recap and set the stage for the day
0:04Recap and set the stage for the day
0:04Recap and set the stage for the day
1:17Determine to handle the "Unable to compile Z Bias program on GTX 1070" issue1
1:17Determine to handle the "Unable to compile Z Bias program on GTX 1070" issue1
1:17Determine to handle the "Unable to compile Z Bias program on GTX 1070" issue1
4:17Run the game to see the current voxel-based lighting solution
4:17Run the game to see the current voxel-based lighting solution
4:17Run the game to see the current voxel-based lighting solution
5:00handmade_opengl.cpp: Change all the shaders to use GLSL version 3.302
5:00handmade_opengl.cpp: Change all the shaders to use GLSL version 3.302
5:00handmade_opengl.cpp: Change all the shaders to use GLSL version 3.302
7:30Run the game to see everything working as before
7:30Run the game to see everything working as before
7:30Run the game to see everything working as before
8:10Close that issue
8:10Close that issue
8:10Close that issue
12:19Determine to fix the "Shader layout issue" issue3
12:19Determine to fix the "Shader layout issue" issue3
12:19Determine to fix the "Shader layout issue" issue3
13:22win32_handmade.cpp: Set GLSL version 3.30 in Win32OpenGLAttribs, run the game, and close that issue
13:22win32_handmade.cpp: Set GLSL version 3.30 in Win32OpenGLAttribs, run the game, and close that issue
13:22win32_handmade.cpp: Set GLSL version 3.30 in Win32OpenGLAttribs, run the game, and close that issue
14:26Close the "Not compiling under VS2015" issue4
14:26Close the "Not compiling under VS2015" issue4
14:26Close the "Not compiling under VS2015" issue4
16:28Run the game, describe the voxel lookup scheme and determine to transfer this lighting solution to the GPU
16:28Run the game, describe the voxel lookup scheme and determine to transfer this lighting solution to the GPU
16:28Run the game, describe the voxel lookup scheme and determine to transfer this lighting solution to the GPU
20:23handmade_world_mode.h: Consider how to specify the lighting_textures to the GPU
20:23handmade_world_mode.h: Consider how to specify the lighting_textures to the GPU
20:23handmade_world_mode.h: Consider how to specify the lighting_textures to the GPU
23:26handmade_render_group.h: Introduce render_entry_lighting_transfer
23:26handmade_render_group.h: Introduce render_entry_lighting_transfer
23:26handmade_render_group.h: Introduce render_entry_lighting_transfer
25:41handmade_render_group.cpp: Introduce PushLighting()
25:41handmade_render_group.cpp: Introduce PushLighting()
25:41handmade_render_group.cpp: Introduce PushLighting()
29:05handmade_render_group.cpp: Make OutputLighting() call PushLighting()
29:05handmade_render_group.cpp: Make OutputLighting() call PushLighting()
29:05handmade_render_group.cpp: Make OutputLighting() call PushLighting()
30:05Run the game and hit the InvalidDefaultCase in OpenGLRenderCommands()
30:05Run the game and hit the InvalidDefaultCase in OpenGLRenderCommands()
30:05Run the game and hit the InvalidDefaultCase in OpenGLRenderCommands()
30:33handmade_opengl.cpp: Add a case in OpenGLRenderCommands() for the lighting_transfer5,6
30:33handmade_opengl.cpp: Add a case in OpenGLRenderCommands() for the lighting_transfer5,6
30:33handmade_opengl.cpp: Add a case in OpenGLRenderCommands() for the lighting_transfer5,6
40:17handmade_platform.h: Move in lighting_texel and lighting_textures from handmade_opengl.h
40:17handmade_platform.h: Move in lighting_texel and lighting_textures from handmade_opengl.h
40:17handmade_platform.h: Move in lighting_texel and lighting_textures from handmade_opengl.h
40:52win32_handmade.cpp: Pull in glTexImage3D() and glTexSubImage3D() from corearb.h7
40:52win32_handmade.cpp: Pull in glTexImage3D() and glTexSubImage3D() from corearb.h7
40:52win32_handmade.cpp: Pull in glTexImage3D() and glTexSubImage3D() from corearb.h7
43:37Run the game and hit an error, presumably because we haven't bound our lighting texture
43:37Run the game and hit an error, presumably because we haven't bound our lighting texture
43:37Run the game and hit an error, presumably because we haven't bound our lighting texture
44:43handmade_opengl.cpp: Make OpenGLChangeToSettings() bind and free the lighting textures8,9
44:43handmade_opengl.cpp: Make OpenGLChangeToSettings() bind and free the lighting textures8,9
44:43handmade_opengl.cpp: Make OpenGLChangeToSettings() bind and free the lighting textures8,9
54:33Run the game without error
54:33Run the game without error
54:33Run the game without error
55:04handmade_render_group.cpp: Make OutputLightingTextures() call PushLighting()
55:04handmade_render_group.cpp: Make OutputLightingTextures() call PushLighting()
55:04handmade_render_group.cpp: Make OutputLightingTextures() call PushLighting()
56:44Run the game under the assumption that our lighting solution is now available on the GPU
56:44Run the game under the assumption that our lighting solution is now available on the GPU
56:44Run the game under the assumption that our lighting solution is now available on the GPU
57:07handmade_opengl.cpp: Remove the old lighting code from CompileZBiasProgram(), and enable it to lookup into our voxel-based lighting solution10
57:07handmade_opengl.cpp: Remove the old lighting code from CompileZBiasProgram(), and enable it to lookup into our voxel-based lighting solution10
57:07handmade_opengl.cpp: Remove the old lighting code from CompileZBiasProgram(), and enable it to lookup into our voxel-based lighting solution10
1:17:09handmade_opengl.cpp: Make CompileZBiasProgram() and its UseProgramBegin() set up the voxels and link the samplers
1:17:09handmade_opengl.cpp: Make CompileZBiasProgram() and its UseProgramBegin() set up the voxels and link the samplers
1:17:09handmade_opengl.cpp: Make CompileZBiasProgram() and its UseProgramBegin() set up the voxels and link the samplers
1:20:45handmade_render_group.cpp: Make PushLighting() take the voxel data
1:20:45handmade_render_group.cpp: Make PushLighting() take the voxel data
1:20:45handmade_render_group.cpp: Make PushLighting() take the voxel data
1:22:23Run the game and see black
1:22:23Run the game and see black
1:22:23Run the game and see black
1:22:53handmade_opengl.cpp: Make OpenGLRenderCommands() bind the lighting textures
1:22:53handmade_opengl.cpp: Make OpenGLRenderCommands() bind the lighting textures
1:22:53handmade_opengl.cpp: Make OpenGLRenderCommands() bind the lighting textures
1:25:13Run the game and see no obvious errors, but still black
1:25:13Run the game and see no obvious errors, but still black
1:25:13Run the game and see no obvious errors, but still black
1:26:00handmade_opengl.cpp: Investigate what CompileZBiasProgram() is drawing
1:26:00handmade_opengl.cpp: Investigate what CompileZBiasProgram() is drawing
1:26:00handmade_opengl.cpp: Investigate what CompileZBiasProgram() is drawing
1:28:57Run the game and see red
1:28:57Run the game and see red
1:28:57Run the game and see red
1:29:00handmade_opengl.cpp: Investigate why we are always getting an index value of 0
1:29:00handmade_opengl.cpp: Investigate why we are always getting an index value of 0
1:29:00handmade_opengl.cpp: Investigate why we are always getting an index value of 0
1:33:36Run the game, toggle to the lighting view and inspect the values produced by OutputLightingTextures()
1:33:36Run the game, toggle to the lighting view and inspect the values produced by OutputLightingTextures()
1:33:36Run the game, toggle to the lighting view and inspect the values produced by OutputLightingTextures()
1:37:28handmade_render_group.cpp: Temporarily add volatile global variables for DebugX, DebugY, DebugZ and DebugColor
1:37:28handmade_render_group.cpp: Temporarily add volatile global variables for DebugX, DebugY, DebugZ and DebugColor
1:37:28handmade_render_group.cpp: Temporarily add volatile global variables for DebugX, DebugY, DebugZ and DebugColor
1:39:46Run the game and inspect those debug lighting values
1:39:46Run the game and inspect those debug lighting values
1:39:46Run the game and inspect those debug lighting values
1:40:11handmade_opengl.cpp: Force CompileZBiasProgram() to lookup into those debug values
1:40:11handmade_opengl.cpp: Force CompileZBiasProgram() to lookup into those debug values
1:40:11handmade_opengl.cpp: Force CompileZBiasProgram() to lookup into those debug values
1:40:58Run the game, toggle to the lighting view and determine that we are not getting valid values from the texture
1:40:58Run the game, toggle to the lighting view and determine that we are not getting valid values from the texture
1:40:58Run the game, toggle to the lighting view and determine that we are not getting valid values from the texture
1:42:28handmade_opengl.cpp: Change CompileZBiasProgram() to use usampler3D rather than sampler3D for the lookup sampler11
1:42:28handmade_opengl.cpp: Change CompileZBiasProgram() to use usampler3D rather than sampler3D for the lookup sampler11
1:42:28handmade_opengl.cpp: Change CompileZBiasProgram() to use usampler3D rather than sampler3D for the lookup sampler11
1:52:55handmade_opengl.cpp: Revert CompileZBiasProgram() to use sampler3D, and itself convert the incoming colour to the 0 to 65535 range
1:52:55handmade_opengl.cpp: Revert CompileZBiasProgram() to use sampler3D, and itself convert the incoming colour to the 0 to 65535 range
1:52:55handmade_opengl.cpp: Revert CompileZBiasProgram() to use sampler3D, and itself convert the incoming colour to the 0 to 65535 range
1:54:11Run the game and crash the stream, to be lost forever were it not for the magic of Mārtiņš Možeiko
1:54:11Run the game and crash the stream, to be lost forever were it not for the magic of Mārtiņš Možeiko
1:54:11Run the game and crash the stream, to be lost forever were it not for the magic of Mārtiņš Možeiko