[0:54]["You can't win 'em all but you're certainly not gonna win if you never roll"][quote 584]
[0:59][Run the game to see where we're at with respect to lighting]
[4:13][A few words on multigrid solvers]
[6:54][The two halves of our problem: 1) Getting our lighting information down to the renderer]
[9:22][2) We will need normals]
[9:59][handmade_opengl.h: Rename WriteEmit to WriteEmitFramebuffer in the light_buffer struct, and describe the framebuffers in this struct]
[14:33][Blackboard: On the possible need for an additional texture to write into]
[20:06][handmade_opengl.cpp: Toggle on the framebuffer visualisation code in OpenGLRenderCommands()]
[22:50][Research glReadBuffer[ref
site=docs.GL
page="glReadBuffer"
url=http://docs.gl/gl3/glReadBuffer]]
[24:27][handmade_opengl.cpp: Enable the framebuffer visualisation code to pick from a colour buffer]
[27:30][Run the game a get a black screen]
[27:58][handmade_opengl.cpp: Introduce FakeSeedLighting() and ComputeLightTransport()]
[30:17]["I assume it's "hare-brained", like the rabbit. Or is it "hair-brained", like the follicle?"][quote 585]
[30:29][handmade_opengl.cpp: Implement FakeSeedLighting() and introduce OpenGLBeginScreenFill() and OpenGLEndScreenFill() to perform some of ResolveMultisample()]
[35:06][Run the game to make sure that that still works]
[37:12][handmade_opengl.cpp: Introduce CompileFakeSeedLighting() based on CompileResolveMultisample(), with some structured artwork]
[41:12][handmade_opengl.h: Introduce fake_seed_lighting_program struct and add it to open_gl]
[42:14][handmade_opengl.cpp: Introduce a version of UseProgramBegin() that only takes a Prog and Setup, and enable OpenGLRenderCommands() to set up the debug lighting framebuffer]
[44:30][Run the game to see a green screen, and investigate why we do]
[45:45][Consult the Quick Reference Card[ref
site="OpenGL Registry"
page="The OpenGL Shading Language 1.50 Quick Reference Card"
url="https://www.khronos.org/files/opengl-quick-reference-card.pdf"] and the OpenGL Spec[ref
site="Khronos"
page="The OpenGL Shading Language 1.50"
url="https://khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.50.pdf"] to determine how to line up the output fragments with the framebuffer's bound colour attachments]
[50:23][handmade_opengl.cpp: Specify the fragments into which CompileFakeSeedLighting() should write our test colours]
[51:18][Run the game to see that that worked]
[51:21][handmade_platform.h: Add DebugLightBufferIndex and DebugLightBufferTexIndex to game_render_settings]
[54:50][Determine to provide debug keys to control the lighting framebuffers]
[56:22][handmade_opengl.h: Move the DebugLightBuffer settings into open_gl]
[56:50][win32_handmade.cpp: Add debug keys in Win32ProcessPendingMessage() for cycling through the lighting framebuffers]