Debugging Missing Parent Pointers
?
?

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:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:33Show off our sprite Y-displacement solution (replacing Z bias)
🏃
0:33Show off our sprite Y-displacement solution (replacing Z bias)
🏃
0:33Show off our sprite Y-displacement solution (replacing Z bias)
🏃
3:06Make UpdateAndRenderWorld() pan the debug camera along its own axes (rather than those of the regular game camera)
3:06Make UpdateAndRenderWorld() pan the debug camera along its own axes (rather than those of the regular game camera)
3:06Make UpdateAndRenderWorld() pan the debug camera along its own axes (rather than those of the regular game camera)
9:47Try out our debug camera panning, and determine to finalise our asset alignment for accurate sorting and axis-correct snapping
9:47Try out our debug camera panning, and determine to finalise our asset alignment for accurate sorting and axis-correct snapping
9:47Try out our debug camera panning, and determine to finalise our asset alignment for accurate sorting and axis-correct snapping
17:34Set up to snap assets together by their alignment points
📖
17:34Set up to snap assets together by their alignment points
📖
17:34Set up to snap assets together by their alignment points
📖
25:48Ensure that the alignment points slide along the tilted pane
🏃
25:48Ensure that the alignment points slide along the tilted pane
🏃
25:48Ensure that the alignment points slide along the tilted pane
🏃
27:01Snapping children to their parent
📖
27:01Snapping children to their parent
📖
27:01Snapping children to their parent
📖
28:48Demonstrate that we are not snapping sprites together in Z
🏃
28:48Demonstrate that we are not snapping sprites together in Z
🏃
28:48Demonstrate that we are not snapping sprites together in Z
🏃
30:32Define sprite alignment and snapping: Sprite stacks snap together naturally when at the centre of the scene, and tilt when at the edges
🏃
30:32Define sprite alignment and snapping: Sprite stacks snap together naturally when at the centre of the scene, and tilt when at the edges
🏃
30:32Define sprite alignment and snapping: Sprite stacks snap together naturally when at the centre of the scene, and tilt when at the edges
🏃
35:56Aligning the sprite stack for the scene centre before snapping according the stack's actual position
📖
35:56Aligning the sprite stack for the scene centre before snapping according the stack's actual position
📖
35:56Aligning the sprite stack for the scene centre before snapping according the stack's actual position
📖
39:31Remove ZBias and BaseP offset from SpriteValuesForUpright(), and instead make its caller UpdateAndRenderEntities() perform the offset
39:31Remove ZBias and BaseP offset from SpriteValuesForUpright(), and instead make its caller UpdateAndRenderEntities() perform the offset
39:31Remove ZBias and BaseP offset from SpriteValuesForUpright(), and instead make its caller UpdateAndRenderEntities() perform the offset
41:47See that the sprite stack is aligned as before
🏃
41:47See that the sprite stack is aligned as before
🏃
41:47See that the sprite stack is aligned as before
🏃
41:58Temporarily prevent UpdateAndRenderEntities() from applying the sprite offset
41:58Temporarily prevent UpdateAndRenderEntities() from applying the sprite offset
41:58Temporarily prevent UpdateAndRenderEntities() from applying the sprite offset
44:21Find that we unexpectedly do not snap sprites directly
🏃
44:21Find that we unexpectedly do not snap sprites directly
🏃
44:21Find that we unexpectedly do not snap sprites directly
🏃
44:39Investigate why our sprites are not snapped directly
📖
44:39Investigate why our sprites are not snapped directly
📖
44:39Investigate why our sprites are not snapped directly
📖
47:29Aligning sprites to 0, 0, 0 in world-space
🖌
47:29Aligning sprites to 0, 0, 0 in world-space
🖌
47:29Aligning sprites to 0, 0, 0 in world-space
🖌
51:24Temporarily make SpriteValuesForUpright() snap sprite directly
51:24Temporarily make SpriteValuesForUpright() snap sprite directly
51:24Temporarily make SpriteValuesForUpright() snap sprite directly
51:57Find that our sprites are snapped directly, and Z-fighting
🏃
51:57Find that our sprites are snapped directly, and Z-fighting
🏃
51:57Find that our sprites are snapped directly, and Z-fighting
🏃
52:58Enable UpdateAndRenderEntities() to offset sprites in Y as SpriteValuesForUpright() used to
52:58Enable UpdateAndRenderEntities() to offset sprites in Y as SpriteValuesForUpright() used to
52:58Enable UpdateAndRenderEntities() to offset sprites in Y as SpriteValuesForUpright() used to
54:49Crash in FindAlign() with an "Access violation" error, and investigate it
🏃
54:49Crash in FindAlign() with an "Access violation" error, and investigate it
🏃
54:49Crash in FindAlign() with an "Access violation" error, and investigate it
🏃
58:11Reverse engineer the optimised assembly code generated for FindAlign()
🏃
58:11Reverse engineer the optimised assembly code generated for FindAlign()
🏃
58:11Reverse engineer the optimised assembly code generated for FindAlign()
🏃
1:07:05Find that UpdateAndRenderEntities() evaluates a non-zero ParentAlignType before going on to pass the bitmap with a ParentAlignType of 0 to FindAlign()
🏃
1:07:05Find that UpdateAndRenderEntities() evaluates a non-zero ParentAlignType before going on to pass the bitmap with a ParentAlignType of 0 to FindAlign()
🏃
1:07:05Find that UpdateAndRenderEntities() evaluates a non-zero ParentAlignType before going on to pass the bitmap with a ParentAlignType of 0 to FindAlign()
🏃
1:11:45Reverse engineer the optimised assembly code surrounding that ParentAlignType check in UpdateAndRenderEntities()
🏃
1:11:45Reverse engineer the optimised assembly code surrounding that ParentAlignType check in UpdateAndRenderEntities()
🏃
1:11:45Reverse engineer the optimised assembly code surrounding that ParentAlignType check in UpdateAndRenderEntities()
🏃
1:19:15TEST - Logical Compare1
📖
1:19:15TEST - Logical Compare1
📖
1:19:15TEST - Logical Compare1
📖
1:21:25Continue to reverse engineer the ParentAlignType check in UpdateAndRenderEntities(), to see that ecx gets overwritten after the check
🏃
1:21:25Continue to reverse engineer the ParentAlignType check in UpdateAndRenderEntities(), to see that ecx gets overwritten after the check
🏃
1:21:25Continue to reverse engineer the ParentAlignType check in UpdateAndRenderEntities(), to see that ecx gets overwritten after the check
🏃
1:23:27Investigate why ParentAlignType is evaluated to 259
🏃
1:23:27Investigate why ParentAlignType is evaluated to 259
🏃
1:23:27Investigate why ParentAlignType is evaluated to 259
🏃
1:32:39Consult our source of ConnectPiece() where ParentAlignType is set, and note that this entity's first piece should not have a non-zero, but valid ParentAlignType
📖
1:32:39Consult our source of ConnectPiece() where ParentAlignType is set, and note that this entity's first piece should not have a non-zero, but valid ParentAlignType
📖
1:32:39Consult our source of ConnectPiece() where ParentAlignType is set, and note that this entity's first piece should not have a non-zero, but valid ParentAlignType
📖
1:36:15Possible causes for our non-zero ParentAlignType
📖
1:36:15Possible causes for our non-zero ParentAlignType
📖
1:36:15Possible causes for our non-zero ParentAlignType
📖
1:43:40Reverse engineer the optimised assembly code generated for AddCat()
🏃
1:43:40Reverse engineer the optimised assembly code generated for AddCat()
🏃
1:43:40Reverse engineer the optimised assembly code generated for AddCat()
🏃
1:54:17Consider the nastiness of our bug
🏃
1:54:17Consider the nastiness of our bug
🏃
1:54:17Consider the nastiness of our bug
🏃
1:55:25Add an assertion in UpdateAndRenderEntities() to guard against our first piece, non-zero ParentAlignType bug
1:55:25Add an assertion in UpdateAndRenderEntities() to guard against our first piece, non-zero ParentAlignType bug
1:55:25Add an assertion in UpdateAndRenderEntities() to guard against our first piece, non-zero ParentAlignType bug
1:56:50Q&A
🗩
1:56:50Q&A
🗩
1:56:50Q&A
🗩
1:58:22noxnode Q: How do you like the progress of Handmade Hero so far?
🗪
1:58:22noxnode Q: How do you like the progress of Handmade Hero so far?
🗪
1:58:22noxnode Q: How do you like the progress of Handmade Hero so far?
🗪
2:01:23jim0_o Q: Will you add 3D primitives as collision proxies or something like that?
🗪
2:01:23jim0_o Q: Will you add 3D primitives as collision proxies or something like that?
🗪
2:01:23jim0_o Q: Will you add 3D primitives as collision proxies or something like that?
🗪
2:01:30aidsjorb Q: You've mentioned in the past you climb as a form of exercise. Have you seen Free Solo yet?
🗪
2:01:30aidsjorb Q: You've mentioned in the past you climb as a form of exercise. Have you seen Free Solo yet?
🗪
2:01:30aidsjorb Q: You've mentioned in the past you climb as a form of exercise. Have you seen Free Solo yet?
🗪
2:01:37rippinwaffles Q: Not related to the problem at hand, but on the subject of assembly, did you have a chance to look at the burst compiler demo from Unity's GDC 2019 keynote and, if so, what's your take on it? I thought it looked cool but don't know enough to be able to really have an informed opinion on it
🗪
2:01:37rippinwaffles Q: Not related to the problem at hand, but on the subject of assembly, did you have a chance to look at the burst compiler demo from Unity's GDC 2019 keynote and, if so, what's your take on it? I thought it looked cool but don't know enough to be able to really have an informed opinion on it
🗪
2:01:37rippinwaffles Q: Not related to the problem at hand, but on the subject of assembly, did you have a chance to look at the burst compiler demo from Unity's GDC 2019 keynote and, if so, what's your take on it? I thought it looked cool but don't know enough to be able to really have an informed opinion on it
🗪
2:04:13Miblo Q: Couple of days late, but now that we're hopping in Z, how about adding water so the hero can go swimming?
🗪
2:04:13Miblo Q: Couple of days late, but now that we're hopping in Z, how about adding water so the hero can go swimming?
🗪
2:04:13Miblo Q: Couple of days late, but now that we're hopping in Z, how about adding water so the hero can go swimming?
🗪
2:06:12clysmic Q: (Not a question). Hi Casey. On Monday I am starting my first day of work at a medium sized game studio after working for Microsoft for a few years. Just wanted to say thanks to you (among others) for the inspiration and education that made this career change possible for me
🗪
2:06:12clysmic Q: (Not a question). Hi Casey. On Monday I am starting my first day of work at a medium sized game studio after working for Microsoft for a few years. Just wanted to say thanks to you (among others) for the inspiration and education that made this career change possible for me
🗪
2:06:12clysmic Q: (Not a question). Hi Casey. On Monday I am starting my first day of work at a medium sized game studio after working for Microsoft for a few years. Just wanted to say thanks to you (among others) for the inspiration and education that made this career change possible for me
🗪
2:06:48rooctag Q: It was a good demo about how a bug can mess up the schedule and get you two hours of info, but sadly nothing...
🗪
2:06:48rooctag Q: It was a good demo about how a bug can mess up the schedule and get you two hours of info, but sadly nothing...
🗪
2:06:48rooctag Q: It was a good demo about how a bug can mess up the schedule and get you two hours of info, but sadly nothing...
🗪
2:09:22bulmanator Q: Hey Casey, the way you think / teach how to think about matrices has helped me understand the transformation pipeline a lot better. There is just one thing that I think I am missing. At one point you put the camera's coordinates into clip space [-1, 1] so I was wondering how you scale world units to make sure things aren't huge on screen?
🗪
2:09:22bulmanator Q: Hey Casey, the way you think / teach how to think about matrices has helped me understand the transformation pipeline a lot better. There is just one thing that I think I am missing. At one point you put the camera's coordinates into clip space [-1, 1] so I was wondering how you scale world units to make sure things aren't huge on screen?
🗪
2:09:22bulmanator Q: Hey Casey, the way you think / teach how to think about matrices has helped me understand the transformation pipeline a lot better. There is just one thing that I think I am missing. At one point you put the camera's coordinates into clip space [-1, 1] so I was wondering how you scale world units to make sure things aren't huge on screen?
🗪
2:16:07Projecting a 3D world onto a 2D screen
🖌
2:16:07Projecting a 3D world onto a 2D screen
🖌
2:16:07Projecting a 3D world onto a 2D screen
🖌
2:22:14Understanding scaling in terms of the film-back's distance from the aperture
🖌
2:22:14Understanding scaling in terms of the film-back's distance from the aperture
🖌
2:22:14Understanding scaling in terms of the film-back's distance from the aperture
🖌
2:31:180lpbm Q: I think in a pinhole camera, the focal length is 0 and the focal point is the actual pinhole itself
🗪
2:31:180lpbm Q: I think in a pinhole camera, the focal length is 0 and the focal point is the actual pinhole itself
🗪
2:31:180lpbm Q: I think in a pinhole camera, the focal length is 0 and the focal point is the actual pinhole itself
🗪
2:31:41Document the FocalLength in PerspectiveProjection()
2:31:41Document the FocalLength in PerspectiveProjection()
2:31:41Document the FocalLength in PerspectiveProjection()
2:32:46rippinwaffles Q: Going to the perspective question: So mathematically, you are recreating the space bounded by the near and far clip frame in the space "defined" by the lens and the focal length? So if you could imagine one pixel as being a vector from the lens to some point, you are literally just doing a magnitude scale. If that's the case, then how do you handle the fact that you're mapping a curved surface onto a plane?
🗪
2:32:46rippinwaffles Q: Going to the perspective question: So mathematically, you are recreating the space bounded by the near and far clip frame in the space "defined" by the lens and the focal length? So if you could imagine one pixel as being a vector from the lens to some point, you are literally just doing a magnitude scale. If that's the case, then how do you handle the fact that you're mapping a curved surface onto a plane?
🗪
2:32:46rippinwaffles Q: Going to the perspective question: So mathematically, you are recreating the space bounded by the near and far clip frame in the space "defined" by the lens and the focal length? So if you could imagine one pixel as being a vector from the lens to some point, you are literally just doing a magnitude scale. If that's the case, then how do you handle the fact that you're mapping a curved surface onto a plane?
🗪
2:34:29bulmanator Q: What you said made sense and I think I get it. Thank you very much! I'm going to mess around with it to get things scaled the way I like it
🗪
2:34:29bulmanator Q: What you said made sense and I think I get it. Thank you very much! I'm going to mess around with it to get things scaled the way I like it
🗪
2:34:29bulmanator Q: What you said made sense and I think I get it. Thank you very much! I'm going to mess around with it to get things scaled the way I like it
🗪
2:35:01ttbjm Q: How much do curved monitors complicate this?
🗪
2:35:01ttbjm Q: How much do curved monitors complicate this?
🗪
2:35:01ttbjm Q: How much do curved monitors complicate this?
🗪
2:35:56Projecting onto a curved monitor
🖌
2:35:56Projecting onto a curved monitor
🖌
2:35:56Projecting onto a curved monitor
🖌
2:38:49Recommend '3D Rasterization: A Bridge between Rasterization and Ray Casting'2
📖
2:38:49Recommend '3D Rasterization: A Bridge between Rasterization and Ray Casting'2
📖
2:38:49Recommend '3D Rasterization: A Bridge between Rasterization and Ray Casting'2
📖
2:41:36rippinwaffles Q: I'm imagining the "true" surface as being an arc with radius=focal length but you're mapping that arc onto a flat rectangular screen (assuming it's not a curved monitor)
🗪
2:41:36rippinwaffles Q: I'm imagining the "true" surface as being an arc with radius=focal length but you're mapping that arc onto a flat rectangular screen (assuming it's not a curved monitor)
🗪
2:41:36rippinwaffles Q: I'm imagining the "true" surface as being an arc with radius=focal length but you're mapping that arc onto a flat rectangular screen (assuming it's not a curved monitor)
🗪
2:42:00Projecting onto a flat surface
🖌
2:42:00Projecting onto a flat surface
🖌
2:42:00Projecting onto a flat surface
🖌
2:45:03ormone88 Q: If I wanted to create seamless terrains, starting from a cube-like tile map, what algorithm should I look into? Is Marching Cubes a viable approach?
🗪
2:45:03ormone88 Q: If I wanted to create seamless terrains, starting from a cube-like tile map, what algorithm should I look into? Is Marching Cubes a viable approach?
🗪
2:45:03ormone88 Q: If I wanted to create seamless terrains, starting from a cube-like tile map, what algorithm should I look into? Is Marching Cubes a viable approach?
🗪
2:45:22rippinwaffles Q: I was thinking that you'd want to solve the problem that you'd get a differential zooming, but it seems like that's not too much of an issue
🗪
2:45:22rippinwaffles Q: I was thinking that you'd want to solve the problem that you'd get a differential zooming, but it seems like that's not too much of an issue
🗪
2:45:22rippinwaffles Q: I was thinking that you'd want to solve the problem that you'd get a differential zooming, but it seems like that's not too much of an issue
🗪
2:48:00Close things down
🗩
2:48:00Close things down
🗩
2:48:00Close things down
🗩