Handmade Hero»Episode Guide
Renderer Push Buffer Entry Types
?
?

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:34Take a look at what happened on Friday
1:34Take a look at what happened on Friday
1:34Take a look at what happened on Friday
3:56Blackboard: Rendering
3:56Blackboard: Rendering
3:56Blackboard: Rendering
5:25Blackboard: Reasons for using a PushBuffer
5:25Blackboard: Reasons for using a PushBuffer
5:25Blackboard: Reasons for using a PushBuffer
6:24Blackboard: History of game architecture built around the renderer
6:24Blackboard: History of game architecture built around the renderer
6:24Blackboard: History of game architecture built around the renderer
7:01Blackboard: Modern day luxuries and trade-offs
7:01Blackboard: Modern day luxuries and trade-offs
7:01Blackboard: Modern day luxuries and trade-offs
8:03Blackboard: Output Target
8:03Blackboard: Output Target
8:03Blackboard: Output Target
9:44Blackboard: Balanced approach to optimisation
9:44Blackboard: Balanced approach to optimisation
9:44Blackboard: Balanced approach to optimisation
11:05Blackboard: PushBuffer benefits
11:05Blackboard: PushBuffer benefits
11:05Blackboard: PushBuffer benefits
13:01Blackboard: Considerations for supporting multiple targets
13:01Blackboard: Considerations for supporting multiple targets
13:01Blackboard: Considerations for supporting multiple targets
14:16Blackboard: Our first target: Software 'GPU-esque Rendering'
14:16Blackboard: Our first target: Software 'GPU-esque Rendering'
14:16Blackboard: Our first target: Software 'GPU-esque Rendering'
17:00Blackboard: Two ways of looking at a render working: 1) Explicit Surface Rasteriser
17:00Blackboard: Two ways of looking at a render working: 1) Explicit Surface Rasteriser
17:00Blackboard: Two ways of looking at a render working: 1) Explicit Surface Rasteriser
18:22Blackboard: 2) Implicit Surface Rasteriser
18:22Blackboard: 2) Implicit Surface Rasteriser
18:22Blackboard: 2) Implicit Surface Rasteriser
19:39Blackboard: Reasons to use the Implicit method
19:39Blackboard: Reasons to use the Implicit method
19:39Blackboard: Reasons to use the Implicit method
19:56Blackboard: Something like how our renderer will look
19:56Blackboard: Something like how our renderer will look
19:56Blackboard: Something like how our renderer will look
20:47Blackboard: SIMD instruction sets
20:47Blackboard: SIMD instruction sets
20:47Blackboard: SIMD instruction sets
22:41Blackboard: Overview of what we're building
22:41Blackboard: Overview of what we're building
22:41Blackboard: Overview of what we're building
25:02Start pulling the Draw functions out
25:02Start pulling the Draw functions out
25:02Start pulling the Draw functions out
25:25Mini-rant on devenv
25:25Mini-rant on devenv
25:25Mini-rant on devenv
26:08Take a look at where we're at
26:08Take a look at where we're at
26:08Take a look at where we're at
26:27Start playing with the code
26:27Start playing with the code
26:27Start playing with the code
26:53Vaporise PieceCount
26:53Vaporise PieceCount
26:53Vaporise PieceCount
27:06Look at adding multiple types of commands in there, starting by renaming entity_visible_piece to render_group_entry
27:06Look at adding multiple types of commands in there, starting by renaming entity_visible_piece to render_group_entry
27:06Look at adding multiple types of commands in there, starting by renaming entity_visible_piece to render_group_entry
28:09Pull RenderGroupToOutput out into handmade_render_group.cpp
28:09Pull RenderGroupToOutput out into handmade_render_group.cpp
28:09Pull RenderGroupToOutput out into handmade_render_group.cpp
30:38Compression Oriented Programming
30:38Compression Oriented Programming
30:38Compression Oriented Programming
32:21Consider operating on groups of entities
32:21Consider operating on groups of entities
32:21Consider operating on groups of entities
34:18Setup cases for handling different types of Entry
34:18Setup cases for handling different types of Entry
34:18Setup cases for handling different types of Entry
35:27Introduce InvalidDefaultCase
35:27Introduce InvalidDefaultCase
35:27Introduce InvalidDefaultCase
36:05Increment BaseAddress depending on the Entry->Type
36:05Increment BaseAddress depending on the Entry->Type
36:05Increment BaseAddress depending on the Entry->Type
36:51Write those cases
36:51Write those cases
36:51Write those cases
37:53Create the corresponding render_entries
37:53Create the corresponding render_entries
37:53Create the corresponding render_entries
39:59Describe 'compact discriminated union'
39:59Describe 'compact discriminated union'
39:59Describe 'compact discriminated union'
42:23Review our new ability
42:23Review our new ability
42:23Review our new ability
43:57Ridiculous 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
43:57Ridiculous 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
43:57Ridiculous 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:52Pass the Type to PushRenderElement
45:52Pass the Type to PushRenderElement
45:52Pass the Type to PushRenderElement
46:54Compile and clean up
46:54Compile and clean up
46:54Compile and clean up
47:45Check all is still well in-game
47:45Check all is still well in-game
47:45Check all is still well in-game
47:58Create a bitmap type
47:58Create a bitmap type
47:58Create a bitmap type
49:23Call the PushPiece function for the bitmap
49:23Call the PushPiece function for the bitmap
49:23Call the PushPiece function for the bitmap
49:59Hit an assertion because the Entry->Bitmap is not filled in
49:59Hit an assertion because the Entry->Bitmap is not filled in
49:59Hit an assertion because the Entry->Bitmap is not filled in
50:10Make sure we push a rectangle on when we call the bitmap type
50:10Make sure we push a rectangle on when we call the bitmap type
50:10Make sure we push a rectangle on when we call the bitmap type
51:10Check that all is still okay in-game
51:10Check that all is still okay in-game
51:10Check that all is still okay in-game
51:46Compress the code down into something more usable
51:46Compress the code down into something more usable
51:46Compress the code down into something more usable
54:30Bake the offsets in to PushRect
54:30Bake the offsets in to PushRect
54:30Bake the offsets in to PushRect
58:24Pull out the EntityBasis computation
58:24Pull out the EntityBasis computation
58:24Pull out the EntityBasis computation
59:58Clean up
59:58Clean up
59:58Clean up
1:01:32See where we're at
1:01:32See where we're at
1:01:32See where we're at
1:01:38Q&A
🗩
1:01:38Q&A
🗩
1:01:38Q&A
🗩
1:03:15pseudonym73 Warning! There may be lots of prestream questions today
🗪
1:03:15pseudonym73 Warning! There may be lots of prestream questions today
🗪
1:03:15pseudonym73 Warning! There may be lots of prestream questions today
🗪
1:03:57phantomu 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:03:57phantomu 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:03:57phantomu 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:36wardinsc Is it worth aligning render_entries?
🗪
1:04:36wardinsc Is it worth aligning render_entries?
🗪
1:04:36wardinsc Is it worth aligning render_entries?
🗪
1:05:51robotchocolatedino What is Mantle?
🗪
1:05:51robotchocolatedino What is Mantle?
🗪
1:05:51robotchocolatedino What is Mantle?
🗪
1:06:08denuviel Any recommendations of some reading about GPUs, rendering, rasterisation, except for a Google search?
🗪
1:06:08denuviel Any recommendations of some reading about GPUs, rendering, rasterisation, except for a Google search?
🗪
1:06:08denuviel Any recommendations of some reading about GPUs, rendering, rasterisation, except for a Google search?
🗪
1:09:03aooaooa Why use pointers over references?
🗪
1:09:03aooaooa Why use pointers over references?
🗪
1:09:03aooaooa Why use pointers over references?
🗪
1:10:31terminalgain About Mantle, were you aware AMD dropped development for it and put a lot of that manpower into helping push Vulkan?
🗪
1:10:31terminalgain About Mantle, were you aware AMD dropped development for it and put a lot of that manpower into helping push Vulkan?
🗪
1:10:31terminalgain About Mantle, were you aware AMD dropped development for it and put a lot of that manpower into helping push Vulkan?
🗪
1:11:23mr4thdimention 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:11:23mr4thdimention 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:11:23mr4thdimention 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:03We are done here
🗩
1:13:03We are done here
🗩
1:13:03We are done here
🗩