Handmade Hero»Episode Guide
Sorting with Sprite Bounds
?
?

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: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
4:37handmade_sort.cpp: Double check that the sense of IsInFrontOf() is correct
4:37handmade_sort.cpp: Double check that the sense of IsInFrontOf() is correct
4:37handmade_sort.cpp: Double check that the sense of IsInFrontOf() is correct
5:46handmade_sort.cpp: Consider how to get sorting into layers for free, and turning the whole renderer into sprite-bound sorting
5:46handmade_sort.cpp: Consider how to get sorting into layers for free, and turning the whole renderer into sprite-bound sorting
5:46handmade_sort.cpp: Consider how to get sorting into layers for free, and turning the whole renderer into sprite-bound sorting
9:35handmade_render_group.h: Consider excising SortKey entirely from entity_basis_p_result
9:35handmade_render_group.h: Consider excising SortKey entirely from entity_basis_p_result
9:35handmade_render_group.h: Consider excising SortKey entirely from entity_basis_p_result
10:52handmade_render_group.cpp: Make PushRenderElement_() take a sort_sprite_bound rather than SortKey
10:52handmade_render_group.cpp: Make PushRenderElement_() take a sort_sprite_bound rather than SortKey
10:52handmade_render_group.cpp: Make PushRenderElement_() take a sort_sprite_bound rather than SortKey
13:13handmade_sort.cpp: Separate sort_sprite_bound out into sprite_bound and make IsInFrontOf() take sprite_bound
13:13handmade_sort.cpp: Separate sort_sprite_bound out into sprite_bound and make IsInFrontOf() take sprite_bound
13:13handmade_sort.cpp: Separate sort_sprite_bound out into sprite_bound and make IsInFrontOf() take sprite_bound
15:01handmade_sort.cpp: Consider which are the correct values to pass to PushBitmap()
15:01handmade_sort.cpp: Consider which are the correct values to pass to PushBitmap()
15:01handmade_sort.cpp: Consider which are the correct values to pass to PushBitmap()
17:14handmade_render_group.h and *.cpp: Delete SortKey from entity_basis_p_result
17:14handmade_render_group.h and *.cpp: Delete SortKey from entity_basis_p_result
17:14handmade_render_group.h and *.cpp: Delete SortKey from entity_basis_p_result
18:55handmade_render_group.cpp: Make PushBitmap() set the SpriteBound.YMin and .ZMax for Upright sprites
18:55handmade_render_group.cpp: Make PushBitmap() set the SpriteBound.YMin and .ZMax for Upright sprites
18:55handmade_render_group.cpp: Make PushBitmap() set the SpriteBound.YMin and .ZMax for Upright sprites
23:42handmade_render_group.cpp: Make PushBitmap() set the SpriteBound.YMin, .YMax and .ZMax for non-Upright sprites
23:42handmade_render_group.cpp: Make PushBitmap() set the SpriteBound.YMin, .YMax and .ZMax for non-Upright sprites
23:42handmade_render_group.cpp: Make PushBitmap() set the SpriteBound.YMin, .YMax and .ZMax for non-Upright sprites
25:28handmade_render_group.cpp: SpriteBound
25:28handmade_render_group.cpp: SpriteBound
25:28handmade_render_group.cpp: SpriteBound
26:32handmade_render_group.cpp: Consider making PushRect() do the same calculations as PushBitmap(), and make Clear() sort below everything
26:32handmade_render_group.cpp: Consider making PushRect() do the same calculations as PushBitmap(), and make Clear() sort below everything
26:32handmade_render_group.cpp: Consider making PushRect() do the same calculations as PushBitmap(), and make Clear() sort below everything
27:48handmade_render_group.cpp: Introduce GetBoundFor() and pull functionality into it from PushBitmap()
27:48handmade_render_group.cpp: Introduce GetBoundFor() and pull functionality into it from PushBitmap()
27:48handmade_render_group.cpp: Introduce GetBoundFor() and pull functionality into it from PushBitmap()
29:14Run the game and run into a world of hurt very quickly
29:14Run the game and run into a world of hurt very quickly
29:14Run the game and run into a world of hurt very quickly
30:04handmade_sort.cpp: Introduce GetSortEntries() in order to cast Entries to sort_sprite_bound
30:04handmade_sort.cpp: Introduce GetSortEntries() in order to cast Entries to sort_sprite_bound
30:04handmade_sort.cpp: Introduce GetSortEntries() in order to cast Entries to sort_sprite_bound
32:28handmade_render.cpp: Make SortEntries() call GetSortEntries() and no longer call RadixSort() in favour of MergeSort()
32:28handmade_render.cpp: Make SortEntries() call GetSortEntries() and no longer call RadixSort() in favour of MergeSort()
32:28handmade_render.cpp: Make SortEntries() call GetSortEntries() and no longer call RadixSort() in favour of MergeSort()
34:25handmade_render.cpp: Pull GetSortEntries() in from handmade_sort.cpp: and introduce GetSortTempMemorySize()
34:25handmade_render.cpp: Pull GetSortEntries() in from handmade_sort.cpp: and introduce GetSortTempMemorySize()
34:25handmade_render.cpp: Pull GetSortEntries() in from handmade_sort.cpp: and introduce GetSortTempMemorySize()
35:23win32_handmade.cpp: Make WinMain() call GetSortTempMemorySize()
35:23win32_handmade.cpp: Make WinMain() call GetSortTempMemorySize()
35:23win32_handmade.cpp: Make WinMain() call GetSortTempMemorySize()
36:33handmade_sort.cpp: Make SortEntries() a TIMED_FUNCTION()
36:33handmade_sort.cpp: Make SortEntries() a TIMED_FUNCTION()
36:33handmade_sort.cpp: Make SortEntries() a TIMED_FUNCTION()
37:35Debugger: Step into SortEntries() and inspect the SortKey values for EntryA and EntryB
37:35Debugger: Step into SortEntries() and inspect the SortKey values for EntryA and EntryB
37:35Debugger: Step into SortEntries() and inspect the SortKey values for EntryA and EntryB
41:02handmade_sort.cpp: #if 0 the HANDMADE_SLOW code in SortEntries(), run the game and see nothing
41:02handmade_sort.cpp: #if 0 the HANDMADE_SLOW code in SortEntries(), run the game and see nothing
41:02handmade_sort.cpp: #if 0 the HANDMADE_SLOW code in SortEntries(), run the game and see nothing
42:10handmade.cpp: Make GAME_UPDATE_AND_RENDER() just play the Cutscene
42:10handmade.cpp: Make GAME_UPDATE_AND_RENDER() just play the Cutscene
42:10handmade.cpp: Make GAME_UPDATE_AND_RENDER() just play the Cutscene
43:00Debugger: Break into SortEntries() and ensure that the sense of the IsInFrontOf() and MergeSort() are correct
43:00Debugger: Break into SortEntries() and ensure that the sense of the IsInFrontOf() and MergeSort() are correct
43:00Debugger: Break into SortEntries() and ensure that the sense of the IsInFrontOf() and MergeSort() are correct
47:23build.bat: Disable HANDMADE_INTERNAL and #define DEBUG_ macros in handmade_debug_interface.h
47:23build.bat: Disable HANDMADE_INTERNAL and #define DEBUG_ macros in handmade_debug_interface.h
47:23build.bat: Disable HANDMADE_INTERNAL and #define DEBUG_ macros in handmade_debug_interface.h
49:06Debugger: Break into SortEntries() and inspect the SortKey() values for the first 8 Entries
49:06Debugger: Break into SortEntries() and inspect the SortKey() values for the first 8 Entries
49:06Debugger: Break into SortEntries() and inspect the SortKey() values for the first 8 Entries
50:23Mini Owl of Shame Moment: This is not a front-to-back renderer
50:23Mini Owl of Shame Moment: This is not a front-to-back renderer
50:23Mini Owl of Shame Moment: This is not a front-to-back renderer
50:54handmade_sort.cpp: Make IsInFrontOf() sort in the correct direction
50:54handmade_sort.cpp: Make IsInFrontOf() sort in the correct direction
50:54handmade_sort.cpp: Make IsInFrontOf() sort in the correct direction
51:47Run the game and find that our fundamentals are not completely messed up
51:47Run the game and find that our fundamentals are not completely messed up
51:47Run the game and find that our fundamentals are not completely messed up
52:35handmade.cpp: Make GAME_UPDATE_AND_RENDER() go straight to the game, and then run the game and determine that we never fail our check in an obvious linear sweep
52:35handmade.cpp: Make GAME_UPDATE_AND_RENDER() go straight to the game, and then run the game and determine that we never fail our check in an obvious linear sweep
52:35handmade.cpp: Make GAME_UPDATE_AND_RENDER() go straight to the game, and then run the game and determine that we never fail our check in an obvious linear sweep
53:36handmade_entity.cpp: Make UpdateAndRenderEntities() draw entities in Z without flattening them to the plane
53:36handmade_entity.cpp: Make UpdateAndRenderEntities() draw entities in Z without flattening them to the plane
53:36handmade_entity.cpp: Make UpdateAndRenderEntities() draw entities in Z without flattening them to the plane
54:39Run the game and find that we're not getting the expected sort
54:39Run the game and find that we're not getting the expected sort
54:39Run the game and find that we're not getting the expected sort
55:05build.bat: Enable HANDMADE_INTERNAL
55:05build.bat: Enable HANDMADE_INTERNAL
55:05build.bat: Enable HANDMADE_INTERNAL
56:08Q&A
🗩
56:08Q&A
🗩
56:08Q&A
🗩
57:05andrewrussellnet Hey Casey, managed to make the stream today. Just wanted to pop in and say hi
🗪
57:05andrewrussellnet Hey Casey, managed to make the stream today. Just wanted to pop in and say hi
🗪
57:05andrewrussellnet Hey Casey, managed to make the stream today. Just wanted to pop in and say hi
🗪
58:40cvaucher The coordinates used for the sort rules are world space, right? Would another approach be to sort the screen space coordinates from the top of the screen down?
🗪
58:40cvaucher The coordinates used for the sort rules are world space, right? Would another approach be to sort the screen space coordinates from the top of the screen down?
🗪
58:40cvaucher The coordinates used for the sort rules are world space, right? Would another approach be to sort the screen space coordinates from the top of the screen down?
🗪
59:14Blackboard: Cases against being able to sort screen space without Z
59:14Blackboard: Cases against being able to sort screen space without Z
59:14Blackboard: Cases against being able to sort screen space without Z
1:04:46andrewrussellnet I have a question about your development approach: I don't think I've ever seen you create a separate program or environment to test stuff. You always seem to work within the running game. Do you ever find this "noisy"?
🗪
1:04:46andrewrussellnet I have a question about your development approach: I don't think I've ever seen you create a separate program or environment to test stuff. You always seem to work within the running game. Do you ever find this "noisy"?
🗪
1:04:46andrewrussellnet I have a question about your development approach: I don't think I've ever seen you create a separate program or environment to test stuff. You always seem to work within the running game. Do you ever find this "noisy"?
🗪
1:10:17andrewrussellnet I realise I tell a lie now. I have seen you do something along those lines on Witness Wednesdays, just less so on Handmade Hero
🗪
1:10:17andrewrussellnet I realise I tell a lie now. I have seen you do something along those lines on Witness Wednesdays, just less so on Handmade Hero
🗪
1:10:17andrewrussellnet I realise I tell a lie now. I have seen you do something along those lines on Witness Wednesdays, just less so on Handmade Hero
🗪
1:12:47magik603 How do you clean all the directories without deleting them?
🗪
1:12:47magik603 How do you clean all the directories without deleting them?
🗪
1:12:47magik603 How do you clean all the directories without deleting them?
🗪
1:14:25Demo Math Visualizations
1:14:25Demo Math Visualizations
1:14:25Demo Math Visualizations
1:23:00andrewrussellnet That was really awesome to see! Thanks!
🗪
1:23:00andrewrussellnet That was really awesome to see! Thanks!
🗪
1:23:00andrewrussellnet That was really awesome to see! Thanks!
🗪
1:23:28Close it on up
🗩
1:23:28Close it on up
🗩
1:23:28Close it on up
🗩