[video output=day302 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Confirming No Total Ordering" vod_platform=youtube id=DH_QepPBeaI annotator=Miblo] [1:15][handmade_render_group.cpp: Correctly compute the SpriteBound values in GetBoundFor()] [2:23][Recap and set the stage for the day] [6:42][handmade_render_group.cpp: Enable SortEntries() to do a total ordering check] [12:14][Run the game, try doing the new check and hit our Assertion] [12:46][Debugger: Inspect the SortKey values for EntryA and EntryB] [15:28][handmade_sort.cpp: Temporarily change the Assert in SortEntries() to a BreakHere, and count the SortErrors] [17:22][Debugger: Break into SortEntries() to see how many sort errors there were] [18:13][Blackboard: Sort Partial Ordering Problem] [20:43][Blackboard: Turning our Partial Ordering into a Total Ordering] [24:00][handmade_sort.cpp: Consider making IsInFrontOf() sort by distance from the camera] [26:20][Blackboard: Sorting by distance from the camera] [29:43][Blackboard: Orthographic camera] [32:55][Blackboard: Will taking the topmost point of cards be sufficient?] [35:25][handmade_sort.cpp: Introduce BuildSpriteGraph()] [40:50][Blackboard: Graph Theory] [43:14][Blackboard: Directed Graph] [44:27][Blackboard: Directed Acyclic Graph] [46:43][handmade_sort.cpp: Continue implementing BuildSpriteGraph()] [49:45][handmade_math.h: Introduce a version of RectanglesIntersect() that takes rectangle2] [52:31][handmade_sort.cpp: Consider partitioning the screen in order to build this graph and potentially using the Z-buffer] [55:40][handmade_sort.cpp: Consider leveraging the screen partitioning in order to optimise the software renderer] [56:15][Q&A][:speech] [57:03][@roam00010011][How much more work would you have to do to get a full 3D sorting?] [58:47][@roam00010011][I mean, use fake 3D data, since our cards are essentially flat, we can give an epsilon width to it for the sorting] [59:15][Blackboard: Sorting 3D objects] [1:02:38][Blackboard: Sorting all entities in a linear total ordering] [1:10:55][Blackboard: Common problematic cases in Handmade Hero] [1:14:23][@insofaras][Sorry if this was already answered, but what was the issue with a "return a_z != b_z ? a_z - b_z \: a_y - b_y" style total ordering?] [1:14:41][Blackboard: The problem with sorting heroes behind walls on rugs on tiles] [1:19:02][@insofaras][Would the Y then Z sort work if Z is quantized to room layers, and sprites are split where they cross layers (and maybe the ground is special cased)?] [1:20:10][Wind it down][:speech] [/video]