Handmade Hero»Episode Guide
Adding Orthographic Projection
?
?

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)
1:03Recap and set the stage for today
1:03Recap and set the stage for today
1:03Recap and set the stage for today
1:52handmade.cpp: Turn off the debug lines
1:52handmade.cpp: Turn off the debug lines
1:52handmade.cpp: Turn off the debug lines
3:12Blackboard: Why ground tiles are no longer seamless now that we're doing perspective transformsα
3:12Blackboard: Why ground tiles are no longer seamless now that we're doing perspective transformsα
3:12Blackboard: Why ground tiles are no longer seamless now that we're doing perspective transformsα
6:43Blackboard: Doing the displacement with perspective transform
6:43Blackboard: Doing the displacement with perspective transform
6:43Blackboard: Doing the displacement with perspective transform
7:53Take a look at how FillGroundChunk is working
7:53Take a look at how FillGroundChunk is working
7:53Take a look at how FillGroundChunk is working
11:58Propose addressing GroundBuffers in terms of coordinates that mean something in the real world
11:58Propose addressing GroundBuffers in terms of coordinates that mean something in the real world
11:58Propose addressing GroundBuffers in terms of coordinates that mean something in the real world
13:11Walk through FillGroundChunk
13:11Walk through FillGroundChunk
13:11Walk through FillGroundChunk
14:42Consider telling the renderer to use the perspective transform
14:42Consider telling the renderer to use the perspective transform
14:42Consider telling the renderer to use the perspective transform
16:44Start by writing an API call to the renderer to enable seamless ground tiles using orthographic transform
16:44Start by writing an API call to the renderer to enable seamless ground tiles using orthographic transform
16:44Start by writing an API call to the renderer to enable seamless ground tiles using orthographic transform
19:19Provide the ability to switch between perspective and orthographic
19:19Provide the ability to switch between perspective and orthographic
19:19Provide the ability to switch between perspective and orthographic
22:00handmade_render_group.cpp: Write Perspective function
22:00handmade_render_group.cpp: Write Perspective function
22:00handmade_render_group.cpp: Write Perspective function
23:51Write Orthographic function
23:51Write Orthographic function
23:51Write Orthographic function
25:42Consider how to allow Perspective and Orthographic to flow through the pipeline
25:42Consider how to allow Perspective and Orthographic to flow through the pipeline
25:42Consider how to allow Perspective and Orthographic to flow through the pipeline
26:23Force them to be rectilinear
26:23Force them to be rectilinear
26:23Force them to be rectilinear
27:54Clean up and compile before moving on
27:54Clean up and compile before moving on
27:54Clean up and compile before moving on
28:48handmade.cpp: Make the orthographic version work
28:48handmade.cpp: Make the orthographic version work
28:48handmade.cpp: Make the orthographic version work
29:31handmade_render_group.cpp: Write at orthographic path in entity_basis_p_result
29:31handmade_render_group.cpp: Write at orthographic path in entity_basis_p_result
29:31handmade_render_group.cpp: Write at orthographic path in entity_basis_p_result
32:19handmade_render_group.h: Introduce bool32 Orthographic
32:19handmade_render_group.h: Introduce bool32 Orthographic
32:19handmade_render_group.h: Introduce bool32 Orthographic
34:29Take a look in-game
34:29Take a look in-game
34:29Take a look in-game
34:49handmade_render_group.cpp: Walk through entity_basis_p_result
34:49handmade_render_group.cpp: Walk through entity_basis_p_result
34:49handmade_render_group.cpp: Walk through entity_basis_p_result
35:34Correct OriginalP to P
35:34Correct OriginalP to P
35:34Correct OriginalP to P
36:02handmade.cpp: Consider what PushBitmap is doing in FillGroundChunk
36:02handmade.cpp: Consider what PushBitmap is doing in FillGroundChunk
36:02handmade.cpp: Consider what PushBitmap is doing in FillGroundChunk
37:48handmade_render_group.cpp: Ensure that MetersToPixels is being calculated correctly
37:48handmade_render_group.cpp: Ensure that MetersToPixels is being calculated correctly
37:48handmade_render_group.cpp: Ensure that MetersToPixels is being calculated correctly
38:28Debugger: Step in and see what's happening in Orthographic
38:28Debugger: Step in and see what's happening in Orthographic
38:28Debugger: Step in and see what's happening in Orthographic
41:42Moment of realisation: The Scale cannot be 1.0f
41:42Moment of realisation: The Scale cannot be 1.0f
41:42Moment of realisation: The Scale cannot be 1.0f
42:42Debugger: Step into FillGroundChunk
42:42Debugger: Step into FillGroundChunk
42:42Debugger: Step into FillGroundChunk
44:54Are we doing PixelsToMeters and MetersToPixels backwards?
44:54Are we doing PixelsToMeters and MetersToPixels backwards?
44:54Are we doing PixelsToMeters and MetersToPixels backwards?
46:18handmade.cpp: Correct the Pixels / Meters calculation in Orthographic
46:18handmade.cpp: Correct the Pixels / Meters calculation in Orthographic
46:18handmade.cpp: Correct the Pixels / Meters calculation in Orthographic
46:40Take a look in-game
46:40Take a look in-game
46:40Take a look in-game
48:17handmade.cpp: Walk through FillGroundChunk
48:17handmade.cpp: Walk through FillGroundChunk
48:17handmade.cpp: Walk through FillGroundChunk
49:12Make it splat in a more concentrated area and turn back on the debug lines
49:12Make it splat in a more concentrated area and turn back on the debug lines
49:12Make it splat in a more concentrated area and turn back on the debug lines
50:28Splat about half the space and note that there doesn't appear to be 100 things in that tile
50:28Splat about half the space and note that there doesn't appear to be 100 things in that tile
50:28Splat about half the space and note that there doesn't appear to be 100 things in that tile
50:43Return to splatting the whole tile and tweak the sizes
50:43Return to splatting the whole tile and tweak the sizes
50:43Return to splatting the whole tile and tweak the sizes
51:59Take a look at the seams
51:59Take a look at the seams
51:59Take a look at the seams
52:50Create a checkerboard pattern to accentuate the seams
52:50Create a checkerboard pattern to accentuate the seams
52:50Create a checkerboard pattern to accentuate the seams
54:47See the seams
54:47See the seams
54:47See the seams
55:45build.bat: Switch to -O2 and run around the world
55:45build.bat: Switch to -O2 and run around the world
55:45build.bat: Switch to -O2 and run around the world
56:24Q&A
🗩
56:24Q&A
🗩
56:24Q&A
🗩
57:18dmitsuki When do we make everything hardware accelerated to get the amazing powers of ROTATION?
🗪
57:18dmitsuki When do we make everything hardware accelerated to get the amazing powers of ROTATION?
🗪
57:18dmitsuki When do we make everything hardware accelerated to get the amazing powers of ROTATION?
🗪
57:56handmade_render_group.cpp: Demo rotation
57:56handmade_render_group.cpp: Demo rotation
57:56handmade_render_group.cpp: Demo rotation
1:00:47robrobby Will we see how to find "expensive" functions that are called between frames? So far we SIMD only the pixel renderer right now, because we know
🗪
1:00:47robrobby Will we see how to find "expensive" functions that are called between frames? So far we SIMD only the pixel renderer right now, because we know
🗪
1:00:47robrobby Will we see how to find "expensive" functions that are called between frames? So far we SIMD only the pixel renderer right now, because we know
🗪
1:01:55dmitsuki I'm so sorry, Casey-sama
🗪
1:01:55dmitsuki I'm so sorry, Casey-sama
🗪
1:01:55dmitsuki I'm so sorry, Casey-sama
🗪
1:03:00garlandobloom Can you briefly go over the rest of what we're going to do to the engine before we start implementing gameplay code?
🗪
1:03:00garlandobloom Can you briefly go over the rest of what we're going to do to the engine before we start implementing gameplay code?
🗪
1:03:00garlandobloom Can you briefly go over the rest of what we're going to do to the engine before we start implementing gameplay code?
🗪
1:04:22This will all be very game-codeyβ
1:04:22This will all be very game-codeyβ
1:04:22This will all be very game-codeyβ
1:05:52dmitsuki Right now to get more performance out of the render you multithread it to render the screen in chunks. GPUs are parallel by design so how do these two concepts differ?
🗪
1:05:52dmitsuki Right now to get more performance out of the render you multithread it to render the screen in chunks. GPUs are parallel by design so how do these two concepts differ?
🗪
1:05:52dmitsuki Right now to get more performance out of the render you multithread it to render the screen in chunks. GPUs are parallel by design so how do these two concepts differ?
🗪
1:06:28Blackboard: Tiled vs Non-tiled GPUs
1:06:28Blackboard: Tiled vs Non-tiled GPUs
1:06:28Blackboard: Tiled vs Non-tiled GPUs
1:10:00cfusion If there are no better questions, wouldn't the solution to internally link objects in an arbitrary amount of linked lists be performance problematic? Or is there a smart solution I am missing here?
🗪
1:10:00cfusion If there are no better questions, wouldn't the solution to internally link objects in an arbitrary amount of linked lists be performance problematic? Or is there a smart solution I am missing here?
🗪
1:10:00cfusion If there are no better questions, wouldn't the solution to internally link objects in an arbitrary amount of linked lists be performance problematic? Or is there a smart solution I am missing here?
🗪
1:10:43ofx360 I feel like the GroundChunks move faster than the trees on the same plane
🗪
1:10:43ofx360 I feel like the GroundChunks move faster than the trees on the same plane
🗪
1:10:43ofx360 I feel like the GroundChunks move faster than the trees on the same plane
🗪
1:11:04avenger36 The gaming industry is too hard to enter. Why do potential programmers waste their time?
🗪
1:11:04avenger36 The gaming industry is too hard to enter. Why do potential programmers waste their time?
🗪
1:11:04avenger36 The gaming industry is too hard to enter. Why do potential programmers waste their time?
🗪
1:11:32kededro There's a lot of mug action going on. Are you one of those coffee-blooded programmers?
🗪
1:11:32kededro There's a lot of mug action going on. Are you one of those coffee-blooded programmers?
🗪
1:11:32kededro There's a lot of mug action going on. Are you one of those coffee-blooded programmers?
🗪
1:11:46mvpatski I am about to commence studying a degree in Computer Science. I love gaming, and the concept of creating them is fairly interesting, though I am not entirely mathematically inclined. This being the case, would you suggest I stay away from Game Development and steer toward my original plan of Software Engineering?
🗪
1:11:46mvpatski I am about to commence studying a degree in Computer Science. I love gaming, and the concept of creating them is fairly interesting, though I am not entirely mathematically inclined. This being the case, would you suggest I stay away from Game Development and steer toward my original plan of Software Engineering?
🗪
1:11:46mvpatski I am about to commence studying a degree in Computer Science. I love gaming, and the concept of creating them is fairly interesting, though I am not entirely mathematically inclined. This being the case, would you suggest I stay away from Game Development and steer toward my original plan of Software Engineering?
🗪
1:12:32malavbhavsar I have Ruby and JS background and I was wondering if you normally do unit testing / behavioral testing in game development, or is it just too hard because of visual elements?
🗪
1:12:32malavbhavsar I have Ruby and JS background and I was wondering if you normally do unit testing / behavioral testing in game development, or is it just too hard because of visual elements?
🗪
1:12:32malavbhavsar I have Ruby and JS background and I was wondering if you normally do unit testing / behavioral testing in game development, or is it just too hard because of visual elements?
🗪
1:13:41darkrizen_tv On your site you responded to the question, "Why are you doing this project?" with: "Game programmers need to start creating high-quality teaching materials for their trade." How much progress have you made towards developing the twitch VODs into high-quality teaching materials?
🗪
1:13:41darkrizen_tv On your site you responded to the question, "Why are you doing this project?" with: "Game programmers need to start creating high-quality teaching materials for their trade." How much progress have you made towards developing the twitch VODs into high-quality teaching materials?
🗪
1:13:41darkrizen_tv On your site you responded to the question, "Why are you doing this project?" with: "Game programmers need to start creating high-quality teaching materials for their trade." How much progress have you made towards developing the twitch VODs into high-quality teaching materials?
🗪
1:14:24robrobby Do we know how many ms per frame we have right now for the game logic? So far we push 60 FPS but it's hard-locked and maybe we already have some room for game logic?
🗪
1:14:24robrobby Do we know how many ms per frame we have right now for the game logic? So far we push 60 FPS but it's hard-locked and maybe we already have some room for game logic?
🗪
1:14:24robrobby Do we know how many ms per frame we have right now for the game logic? So far we push 60 FPS but it's hard-locked and maybe we already have some room for game logic?
🗪
1:15:20marumoto Will everything be programatically animated or will it be done by an artist? Or both?
🗪
1:15:20marumoto Will everything be programatically animated or will it be done by an artist? Or both?
🗪
1:15:20marumoto Will everything be programatically animated or will it be done by an artist? Or both?
🗪
1:15:31sicknastybra Do you have a YouTube channel?
🗪
1:15:31sicknastybra Do you have a YouTube channel?
🗪
1:15:31sicknastybra Do you have a YouTube channel?
🗪
1:15:53darkrizen_tv Can you show a snippet where you implemented a hash table?
🗪
1:15:53darkrizen_tv Can you show a snippet where you implemented a hash table?
🗪
1:15:53darkrizen_tv Can you show a snippet where you implemented a hash table?
🗪
1:17:23dmitsuki If Vulkan is out by the time you hardware accelerate the renderer, would it be possible to use Vulkan?
🗪
1:17:23dmitsuki If Vulkan is out by the time you hardware accelerate the renderer, would it be possible to use Vulkan?
🗪
1:17:23dmitsuki If Vulkan is out by the time you hardware accelerate the renderer, would it be possible to use Vulkan?
🗪
1:17:42avenger36 Why do you think Microsoft decided to omit the 1080i resolution option for the XBox One? Do you think it was too difficult for them to include?
🗪
1:17:42avenger36 Why do you think Microsoft decided to omit the 1080i resolution option for the XBox One? Do you think it was too difficult for them to include?
🗪
1:17:42avenger36 Why do you think Microsoft decided to omit the 1080i resolution option for the XBox One? Do you think it was too difficult for them to include?
🗪
1:17:58noxy_key Do you plan on commenting the code before releasing the engine?
🗪
1:17:58noxy_key Do you plan on commenting the code before releasing the engine?
🗪
1:17:58noxy_key Do you plan on commenting the code before releasing the engine?
🗪
1:19:24robrobby It's just insane that we can have so many laggy games today when CPUs / GPUs are that fast... Thank you for bringing some light into the reasons for that (bad programming and/or languages)
🗪
1:19:24robrobby It's just insane that we can have so many laggy games today when CPUs / GPUs are that fast... Thank you for bringing some light into the reasons for that (bad programming and/or languages)
🗪
1:19:24robrobby It's just insane that we can have so many laggy games today when CPUs / GPUs are that fast... Thank you for bringing some light into the reasons for that (bad programming and/or languages)
🗪
1:22:59kededro Is unsafe memory key for high-performance optimizations needed for modern-day games? I've heard this is the key reason memory-safe languages like Rust and Haskell won't be able to take over for extremely low-latency applications or drivers, but I don't know enough about the domain
🗪
1:22:59kededro Is unsafe memory key for high-performance optimizations needed for modern-day games? I've heard this is the key reason memory-safe languages like Rust and Haskell won't be able to take over for extremely low-latency applications or drivers, but I don't know enough about the domain
🗪
1:22:59kededro Is unsafe memory key for high-performance optimizations needed for modern-day games? I've heard this is the key reason memory-safe languages like Rust and Haskell won't be able to take over for extremely low-latency applications or drivers, but I don't know enough about the domain
🗪
1:25:41Shut things down
🗩
1:25:41Shut things down
🗩
1:25:41Shut things down
🗩