59 lines
3.5 KiB
Plaintext
59 lines
3.5 KiB
Plaintext
[video output=day089 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Renderer Push Buffer Entry Types" vod_platform=youtube id=lllby5vrEes annotator=dspecht annotator=ZedZull annotator=Miblo]
|
|
[1:34][Take a look at what happened on Friday]
|
|
[3:56][Blackboard: Rendering]
|
|
[5:25][Blackboard: Reasons for using a PushBuffer]
|
|
[6:24][Blackboard: History of game architecture built around the renderer]
|
|
[7:01][Blackboard: Modern day luxuries and trade-offs]
|
|
[8:03][Blackboard: Output Target]
|
|
[9:44][Blackboard: Balanced approach to optimisation]
|
|
[11:05][Blackboard: PushBuffer benefits]
|
|
[13:01][Blackboard: Considerations for supporting multiple targets]
|
|
[14:16][Blackboard: Our first target: Software 'GPU-esque Rendering']
|
|
[17:00][Blackboard: Two ways of looking at a render working: 1) Explicit Surface Rasteriser]
|
|
[18:22][Blackboard: 2) Implicit Surface Rasteriser]
|
|
[19:39][Blackboard: Reasons to use the Implicit method]
|
|
[19:56][Blackboard: Something like how our renderer will look]
|
|
[20:47][Blackboard: SIMD instruction sets]
|
|
[22:41][Blackboard: Overview of what we're building]
|
|
[25:02][Start pulling the Draw functions out]
|
|
[25:25][Mini-rant on devenv]
|
|
[26:08][Take a look at where we're at]
|
|
[26:27][Start playing with the code]
|
|
[26:53][Vaporise PieceCount]
|
|
[27:06][Look at adding multiple types of commands in there, starting by renaming entity_visible_piece to render_group_entry]
|
|
[28:09][Pull RenderGroupToOutput out into handmade_render_group.cpp]
|
|
[30:38][Compression Oriented Programming]
|
|
[32:21][Consider operating on groups of entities]
|
|
[34:18][Setup cases for handling different types of Entry]
|
|
[35:27][Introduce InvalidDefaultCase]
|
|
[36:05][Increment BaseAddress depending on the Entry->Type]
|
|
[36:51][Write those cases]
|
|
[37:53][Create the corresponding render_entries]
|
|
[39:59][Describe 'compact discriminated union']
|
|
[42:23][Review our new ability]
|
|
[43:57][Ridiculous Trick: Prepend the type_name with RenderGroupEntryType to make the Identifier, and #define PushRenderElement macro for a type-safe way of correctly setting the type field in one step]
|
|
[45:52][Pass the Type to PushRenderElement]
|
|
[46:54][Compile and clean up]
|
|
[47:45][Check all is still well in-game]
|
|
[47:58][Create a bitmap type]
|
|
[49:23][Call the PushPiece function for the bitmap]
|
|
[49:59][Hit an assertion because the Entry->Bitmap is not filled in]
|
|
[50:10][Make sure we push a rectangle on when we call the bitmap type]
|
|
[51:10][Check that all is still okay in-game]
|
|
[51:46][Compress the code down into something more usable]
|
|
[54:30][Bake the offsets in to PushRect]
|
|
[58:24][Pull out the EntityBasis computation]
|
|
[59:58][Clean up]
|
|
[1:01:32][See where we're at]
|
|
[1:01:38][Q&A][:speech]
|
|
[1:03:15][@pseudonym73][Warning! There may be lots of prestream questions today]
|
|
[1:03:57][@phantomu][When you meet a bug in the game and are able to recreate it, will you get a bug line in the programming, or how does it work?]
|
|
[1:04:36][@wardinsc][Is it worth aligning render_entries?]
|
|
[1:05:51][@robotchocolatedino][What is Mantle?]
|
|
[1:06:08][@denuviel][Any recommendations of some reading about GPUs, rendering, rasterisation, except for a Google search?]
|
|
[1:09:03][@aooaooa][Why use pointers over references?]
|
|
[1:10:31][@terminalgain][About Mantle, were you aware AMD dropped development for it and put a lot of that manpower into helping push Vulkan?]
|
|
[1:11:23][@mr4thdimention][The PushBuffer is an abstraction layer relying on memory for communication instead of a bunch of functions, if I understand correctly. Is that how you prefer API design in general?]
|
|
[1:13:03][We are done here][:speech]
|
|
[/video]
|