Attempting (and Failing) to Fix the Clock
?
?

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
z Toggle filter mode V Revert filter to original state

Menu toggling

q Quotes r References f Filter 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

Credits Menu

Enter Open URL (in new tab)
0:02Recap and set the stage for the day
0:02Recap and set the stage for the day
0:02Recap and set the stage for the day
2:44Run the game, consult the profiler and note that the game only updates itself as if it's running at 60FPS
2:44Run the game, consult the profiler and note that the game only updates itself as if it's running at 60FPS
2:44Run the game, consult the profiler and note that the game only updates itself as if it's running at 60FPS
9:51Determine to enable the game to play properly at various frame rates
9:51Determine to enable the game to play properly at various frame rates
9:51Determine to enable the game to play properly at various frame rates
12:33win32_handmade.cpp: Temporarily set TargetSecondsPerFrame to twice the expected rate, and run the game to see that it feels like the 60FPS version
12:33win32_handmade.cpp: Temporarily set TargetSecondsPerFrame to twice the expected rate, and run the game to see that it feels like the 60FPS version
12:33win32_handmade.cpp: Temporarily set TargetSecondsPerFrame to twice the expected rate, and run the game to see that it feels like the 60FPS version
16:54win32_handmade.cpp: Initialise TargetSecondsPerFrame in the game loop
16:54win32_handmade.cpp: Initialise TargetSecondsPerFrame in the game loop
16:54win32_handmade.cpp: Initialise TargetSecondsPerFrame in the game loop
21:22Blackboard: Computing the TargetSecondsPerFrame based on observed seconds elapsed
21:22Blackboard: Computing the TargetSecondsPerFrame based on observed seconds elapsed
21:22Blackboard: Computing the TargetSecondsPerFrame based on observed seconds elapsed
24:57win32_handmade.cpp: Compute MeasuredSecondsPerFrame and ExactTargetSecondsPerFrame
24:57win32_handmade.cpp: Compute MeasuredSecondsPerFrame and ExactTargetSecondsPerFrame
24:57win32_handmade.cpp: Compute MeasuredSecondsPerFrame and ExactTargetSecondsPerFrame
26:06Blackboard: Rounding seconds, accounting for jittering
26:06Blackboard: Rounding seconds, accounting for jittering
26:06Blackboard: Rounding seconds, accounting for jittering
26:58Run the game to show the jittering frame rate
26:58Run the game to show the jittering frame rate
26:58Run the game to show the jittering frame rate
28:50win32_handmade.cpp: Round the ExactTargetSecondsPerFrame and run the game to show that
28:50win32_handmade.cpp: Round the ExactTargetSecondsPerFrame and run the game to show that
28:50win32_handmade.cpp: Round the ExactTargetSecondsPerFrame and run the game to show that
30:14win32_handmade.cpp: Make the debug system display the ExpectedFramesPerUpdate
30:14win32_handmade.cpp: Make the debug system display the ExpectedFramesPerUpdate
30:14win32_handmade.cpp: Make the debug system display the ExpectedFramesPerUpdate
31:40Run the game and consult the profiler to see the ExpectedFramesPerUpdate oscillating
31:40Run the game and consult the profiler to see the ExpectedFramesPerUpdate oscillating
31:40Run the game and consult the profiler to see the ExpectedFramesPerUpdate oscillating
34:34win32_handmade.cpp: Consult the documentation on wglSwapInterval1
34:34win32_handmade.cpp: Consult the documentation on wglSwapInterval1
34:34win32_handmade.cpp: Consult the documentation on wglSwapInterval1
37:40win32_handmade.cpp: Pass 2 to wglSwapInterval(), run the game and investigate what wglSwapInterval is doing2
37:40win32_handmade.cpp: Pass 2 to wglSwapInterval(), run the game and investigate what wglSwapInterval is doing2
37:40win32_handmade.cpp: Pass 2 to wglSwapInterval(), run the game and investigate what wglSwapInterval is doing2
40:51Temporarily disable HANDMADE_STREAMING and run the game to see that the wglSwapInterval works more correctly
40:51Temporarily disable HANDMADE_STREAMING and run the game to see that the wglSwapInterval works more correctly
40:51Temporarily disable HANDMADE_STREAMING and run the game to see that the wglSwapInterval works more correctly
44:04Determine the refresh rate of the monitor
44:04Determine the refresh rate of the monitor
44:04Determine the refresh rate of the monitor
48:00win32_handmade.cpp: Set the TargetSecondsPerFrame to the MeasuredSecondsPerFrame of the previous frame
48:00win32_handmade.cpp: Set the TargetSecondsPerFrame to the MeasuredSecondsPerFrame of the previous frame
48:00win32_handmade.cpp: Set the TargetSecondsPerFrame to the MeasuredSecondsPerFrame of the previous frame
49:33Run the game and note all the jitter
49:33Run the game and note all the jitter
49:33Run the game and note all the jitter
51:16Try (unsuccessfully) to set a Swap Interval Override in the video driver
51:16Try (unsuccessfully) to set a Swap Interval Override in the video driver
51:16Try (unsuccessfully) to set a Swap Interval Override in the video driver
56:59Run the game and note that the movement speed is correct at lower frame rates
56:59Run the game and note that the movement speed is correct at lower frame rates
56:59Run the game and note that the movement speed is correct at lower frame rates
1:00:23Determine to get back to working on the camera, fading out floors above the hero
1:00:23Determine to get back to working on the camera, fading out floors above the hero
1:00:23Determine to get back to working on the camera, fading out floors above the hero
1:01:36"ATI peed on our cake"α
1:01:36"ATI peed on our cake"α
1:01:36"ATI peed on our cake"α
1:02:04Run the game and consider how to fade out upper floors
1:02:04Run the game and consider how to fade out upper floors
1:02:04Run the game and consider how to fade out upper floors
1:03:02handmade_world_mode.cpp: Increase the NearClipPlane and run the game to see that upper floors have been clipped out, and peel away gradually while moving between floors
1:03:02handmade_world_mode.cpp: Increase the NearClipPlane and run the game to see that upper floors have been clipped out, and peel away gradually while moving between floors
1:03:02handmade_world_mode.cpp: Increase the NearClipPlane and run the game to see that upper floors have been clipped out, and peel away gradually while moving between floors
1:06:08handmade_opengl.cpp: Enable the shader to modulate the fragments' alpha amounts by their distance from the camera
1:06:08handmade_opengl.cpp: Enable the shader to modulate the fragments' alpha amounts by their distance from the camera
1:06:08handmade_opengl.cpp: Enable the shader to modulate the fragments' alpha amounts by their distance from the camera
1:08:15Run the game to see how that looks
1:08:15Run the game to see how that looks
1:08:15Run the game to see how that looks
1:11:53Blackboard: The original idea for clipping out upper levels
1:11:53Blackboard: The original idea for clipping out upper levels
1:11:53Blackboard: The original idea for clipping out upper levels
1:13:33Blackboard: Depth peel
1:13:33Blackboard: Depth peel
1:13:33Blackboard: Depth peel
1:16:40Blackboard: Depth peel vs multi-sampling with alpha to coverage
1:16:40Blackboard: Depth peel vs multi-sampling with alpha to coverage
1:16:40Blackboard: Depth peel vs multi-sampling with alpha to coverage
1:21:30handmade_opengl.cpp: Enable OpenGLRenderCommands() to handle GL_TEXTURE_2D slots3,4
1:21:30handmade_opengl.cpp: Enable OpenGLRenderCommands() to handle GL_TEXTURE_2D slots3,4
1:21:30handmade_opengl.cpp: Enable OpenGLRenderCommands() to handle GL_TEXTURE_2D slots3,4
1:28:19Run the game without multisampling on
1:28:19Run the game without multisampling on
1:28:19Run the game without multisampling on
1:29:35Blackboard: Comparing two depth buffers
1:29:35Blackboard: Comparing two depth buffers
1:29:35Blackboard: Comparing two depth buffers
1:31:13handmade_opengl.cpp: Introduce a DepthSampler
1:31:13handmade_opengl.cpp: Introduce a DepthSampler
1:31:13handmade_opengl.cpp: Introduce a DepthSampler
1:33:27Consult the documentation on gl_FragCoord5,6
1:33:27Consult the documentation on gl_FragCoord5,6
1:33:27Consult the documentation on gl_FragCoord5,6
1:36:45handmade_opengl.cpp: Enable the DepthPeel code to discard fragments nearer the camera than the ClipDepth
1:36:45handmade_opengl.cpp: Enable the DepthPeel code to discard fragments nearer the camera than the ClipDepth
1:36:45handmade_opengl.cpp: Enable the DepthPeel code to discard fragments nearer the camera than the ClipDepth
1:39:47handmade_opengl.h: Introduce opengl_program struct and CompileZBiasProgram()
1:39:47handmade_opengl.h: Introduce opengl_program struct and CompileZBiasProgram()
1:39:47handmade_opengl.h: Introduce opengl_program struct and CompileZBiasProgram()
1:44:32handmade_opengl.cpp: Introduce UseProgramBegin() and UseProgramEnd()
1:44:32handmade_opengl.cpp: Introduce UseProgramBegin() and UseProgramEnd()
1:44:32handmade_opengl.cpp: Introduce UseProgramBegin() and UseProgramEnd()
1:48:22handmade_opengl.cpp: Make the shader call CompileZBiasProgram() for NoDepthPeel and DepthPeel, and fix compile errors
1:48:22handmade_opengl.cpp: Make the shader call CompileZBiasProgram() for NoDepthPeel and DepthPeel, and fix compile errors
1:48:22handmade_opengl.cpp: Make the shader call CompileZBiasProgram() for NoDepthPeel and DepthPeel, and fix compile errors
1:53:35Run the game to see that we can run the DepthPeel and regular versions
1:53:35Run the game to see that we can run the DepthPeel and regular versions
1:53:35Run the game to see that we can run the DepthPeel and regular versions
1:54:13Q&A
🗩
1:54:13Q&A
🗩
1:54:13Q&A
🗩
1:55:53garryjohanson While we wait for other questions, have you had a good experience with gdb?
🗪
1:55:53garryjohanson While we wait for other questions, have you had a good experience with gdb?
🗪
1:55:53garryjohanson While we wait for other questions, have you had a good experience with gdb?
🗪
1:59:50uplinkcoder How to stabilize the volume outlines?
🗪
1:59:50uplinkcoder How to stabilize the volume outlines?
🗪
1:59:50uplinkcoder How to stabilize the volume outlines?
🗪
2:00:33handmade_render_group.cpp: Make PushLineSegment() give the debug line segments some ZBias
2:00:33handmade_render_group.cpp: Make PushLineSegment() give the debug line segments some ZBias
2:00:33handmade_render_group.cpp: Make PushLineSegment() give the debug line segments some ZBias
2:01:14Run the game to see that the Z-fighting has gone
2:01:14Run the game to see that the Z-fighting has gone
2:01:14Run the game to see that the Z-fighting has gone
2:01:59acoto87 To follow the rule of writing the usage code first, don't believe that the project is at a point where it is better to advance in the game now, and when the game needs more engine features, then go and implement them?
🗪
2:01:59acoto87 To follow the rule of writing the usage code first, don't believe that the project is at a point where it is better to advance in the game now, and when the game needs more engine features, then go and implement them?
🗪
2:01:59acoto87 To follow the rule of writing the usage code first, don't believe that the project is at a point where it is better to advance in the game now, and when the game needs more engine features, then go and implement them?
🗪
2:06:32uplinkcoder Clarification: what to do when the angles are too close together?
🗪
2:06:32uplinkcoder Clarification: what to do when the angles are too close together?
🗪
2:06:32uplinkcoder Clarification: what to do when the angles are too close together?
🗪
2:07:02jessermeyer The debug text is drawing behind tree sprites, by the way
🗪
2:07:02jessermeyer The debug text is drawing behind tree sprites, by the way
🗪
2:07:02jessermeyer The debug text is drawing behind tree sprites, by the way
🗪
2:07:31handmade_render_group.h: Add a depth_clear render_group_entry_type and introduce PushDepthClear() for DEBUGStart() to call
2:07:31handmade_render_group.h: Add a depth_clear render_group_entry_type and introduce PushDepthClear() for DEBUGStart() to call
2:07:31handmade_render_group.h: Add a depth_clear render_group_entry_type and introduce PushDepthClear() for DEBUGStart() to call
2:09:57Run the game to see the debug text always drawn on top
2:09:57Run the game to see the debug text always drawn on top
2:09:57Run the game to see the debug text always drawn on top
2:10:37kilo_pasztetowej Do you have any idea when the engine layer will be finished, and you move to just gameplay programming?
🗪
2:10:37kilo_pasztetowej Do you have any idea when the engine layer will be finished, and you move to just gameplay programming?
🗪
2:10:37kilo_pasztetowej Do you have any idea when the engine layer will be finished, and you move to just gameplay programming?
🗪
2:11:41jezzi23 I'm not sure if the profiler shows some insightful information about CPU cache hit / miss rates. How might you implement something like that?
🗪
2:11:41jezzi23 I'm not sure if the profiler shows some insightful information about CPU cache hit / miss rates. How might you implement something like that?
🗪
2:11:41jezzi23 I'm not sure if the profiler shows some insightful information about CPU cache hit / miss rates. How might you implement something like that?
🗪
2:14:28chrysos42 Can the depth buffer contain infinity as a floating point value?
🗪
2:14:28chrysos42 Can the depth buffer contain infinity as a floating point value?
🗪
2:14:28chrysos42 Can the depth buffer contain infinity as a floating point value?
🗪
2:16:24kilo_pasztetowej Off-topic: What part of game programming do you enjoy the most? Engine, gameplay, etc?
🗪
2:16:24kilo_pasztetowej Off-topic: What part of game programming do you enjoy the most? Engine, gameplay, etc?
🗪
2:16:24kilo_pasztetowej Off-topic: What part of game programming do you enjoy the most? Engine, gameplay, etc?
🗪
2:16:42Close things down
🗩
2:16:42Close things down
🗩
2:16:42Close things down
🗩