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
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
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
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
1:01:32See where we're at
1:01:32See where we're at
1:01:32See where we're at
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?
🗪