Handmade Hero»Episode Guide
Trying Multisampled Depth Peels
?
?

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:28Recap and set the stage for the day
0:28Recap and set the stage for the day
0:28Recap and set the stage for the day
1:46Run the game and demo the aliasing around our geometric primitives
1:46Run the game and demo the aliasing around our geometric primitives
1:46Run the game and demo the aliasing around our geometric primitives
6:28Describe the two processes at play: Artistic and Analytical Antialiasing
6:28Describe the two processes at play: Artistic and Analytical Antialiasing
6:28Describe the two processes at play: Artistic and Analytical Antialiasing
10:55Consider our two options for handling this: Multisampling and Conservative Rasterization1
10:55Consider our two options for handling this: Multisampling and Conservative Rasterization1
10:55Consider our two options for handling this: Multisampling and Conservative Rasterization1
18:09handmade_opengl.cpp: Review our depth peeling for sprite rendering
18:09handmade_opengl.cpp: Review our depth peeling for sprite rendering
18:09handmade_opengl.cpp: Review our depth peeling for sprite rendering
21:44handmade_opengl.cpp: Determine to enable OpenGLChangeToSettings() to perform multisampling only on the front-most depth peel buffer
21:44handmade_opengl.cpp: Determine to enable OpenGLChangeToSettings() to perform multisampling only on the front-most depth peel buffer
21:44handmade_opengl.cpp: Determine to enable OpenGLChangeToSettings() to perform multisampling only on the front-most depth peel buffer
26:20handmade_opengl.cpp: Consider how to perform the composite
26:20handmade_opengl.cpp: Consider how to perform the composite
26:20handmade_opengl.cpp: Consider how to perform the composite
31:02handmade_opengl.cpp: Add ResolveHandle to opengl_framebuffer, and introduce SetDefaultFramebufferTextureParameters() and FramebufferTexImage()
31:02handmade_opengl.cpp: Add ResolveHandle to opengl_framebuffer, and introduce SetDefaultFramebufferTextureParameters() and FramebufferTexImage()
31:02handmade_opengl.cpp: Add ResolveHandle to opengl_framebuffer, and introduce SetDefaultFramebufferTextureParameters() and FramebufferTexImage()
41:02handmade_opengl.cpp: Enable CreateFramebuffer() to create a ResolveFramebuffer for multisampling
41:02handmade_opengl.cpp: Enable CreateFramebuffer() to create a ResolveFramebuffer for multisampling
41:02handmade_opengl.cpp: Enable CreateFramebuffer() to create a ResolveFramebuffer for multisampling
43:27Run the game to make sure that it works okay
43:27Run the game to make sure that it works okay
43:27Run the game to make sure that it works okay
43:38handmade_opengl.cpp: Enable the multisampling path
43:38handmade_opengl.cpp: Enable the multisampling path
43:38handmade_opengl.cpp: Enable the multisampling path
47:29Note that we cannot render from a multisampled texture as if it was a regular texture
47:29Note that we cannot render from a multisampled texture as if it was a regular texture
47:29Note that we cannot render from a multisampled texture as if it was a regular texture
49:00handmade_opengl.cpp: Look into making OpenGLRenderCommands() conditionally bind depending on whether or not we're multisampling
49:00handmade_opengl.cpp: Look into making OpenGLRenderCommands() conditionally bind depending on whether or not we're multisampling
49:00handmade_opengl.cpp: Look into making OpenGLRenderCommands() conditionally bind depending on whether or not we're multisampling
49:54handmade_opengl.cpp: Back out our changes and instead just create two framebuffers: one multisampled, one not
49:54handmade_opengl.cpp: Back out our changes and instead just create two framebuffers: one multisampled, one not
49:54handmade_opengl.cpp: Back out our changes and instead just create two framebuffers: one multisampled, one not
53:13handmade_opengl.cpp: Make OpenGLRenderCommands() set the correct PeelBuffer for multisampling
53:13handmade_opengl.cpp: Make OpenGLRenderCommands() set the correct PeelBuffer for multisampling
53:13handmade_opengl.cpp: Make OpenGLRenderCommands() set the correct PeelBuffer for multisampling
54:38handmade_opengl.cpp: Introduce GetDepthPeelReadBuffer()
54:38handmade_opengl.cpp: Introduce GetDepthPeelReadBuffer()
54:38handmade_opengl.cpp: Introduce GetDepthPeelReadBuffer()
56:23Run the game to see a black screen, as expected
56:23Run the game to see a black screen, as expected
56:23Run the game to see a black screen, as expected
56:43handmade_opengl.cpp: Enable OpenGLRenderCommands() to resolve our framebuffers
56:43handmade_opengl.cpp: Enable OpenGLRenderCommands() to resolve our framebuffers
56:43handmade_opengl.cpp: Enable OpenGLRenderCommands() to resolve our framebuffers
1:00:12Run the game to see that everything appears at first glance to be working, but is a lot slower than we'd like
1:00:12Run the game to see that everything appears at first glance to be working, but is a lot slower than we'd like
1:00:12Run the game to see that everything appears at first glance to be working, but is a lot slower than we'd like
1:03:23Consider using conservative rasterization
1:03:23Consider using conservative rasterization
1:03:23Consider using conservative rasterization
1:05:33Determine to do everything multisampled, consulting the OpenGL documentation for sampler2DMS2,3
1:05:33Determine to do everything multisampled, consulting the OpenGL documentation for sampler2DMS2,3
1:05:33Determine to do everything multisampled, consulting the OpenGL documentation for sampler2DMS2,3
1:14:26When evaluating a given sample from a multisampled buffer, we want to get its corresponding depth sample4
1:14:26When evaluating a given sample from a multisampled buffer, we want to get its corresponding depth sample4
1:14:26When evaluating a given sample from a multisampled buffer, we want to get its corresponding depth sample4
1:17:52Note that conservative rasterization would definitely solve our problem
1:17:52Note that conservative rasterization would definitely solve our problem
1:17:52Note that conservative rasterization would definitely solve our problem
1:19:31Consult the OpenGL Hardware Database to see which cards support GL_NV_conservative_raster5 and GL_INTEL_conservative_rasterization6
1:19:31Consult the OpenGL Hardware Database to see which cards support GL_NV_conservative_raster5 and GL_INTEL_conservative_rasterization6
1:19:31Consult the OpenGL Hardware Database to see which cards support GL_NV_conservative_raster5 and GL_INTEL_conservative_rasterization6
1:20:44Run the game and consider what's causing the slowness
1:20:44Run the game and consider what's causing the slowness
1:20:44Run the game and consider what's causing the slowness
1:22:37handmade_opengl.cpp: Toggle back to non-multisampling, run the game to see that the frame rate is fine, and continue considering the slowness
1:22:37handmade_opengl.cpp: Toggle back to non-multisampling, run the game to see that the frame rate is fine, and continue considering the slowness
1:22:37handmade_opengl.cpp: Toggle back to non-multisampling, run the game to see that the frame rate is fine, and continue considering the slowness
1:24:37handmade_opengl.cpp: Determine to enable the multisampling path to pick the closest depth value7,8
1:24:37handmade_opengl.cpp: Determine to enable the multisampling path to pick the closest depth value7,8
1:24:37handmade_opengl.cpp: Determine to enable the multisampling path to pick the closest depth value7,8
1:30:49handmade_opengl.cpp: Introduce ResolveMultisample()
1:30:49handmade_opengl.cpp: Introduce ResolveMultisample()
1:30:49handmade_opengl.cpp: Introduce ResolveMultisample()
1:38:31handmade_opengl.cpp: Introduce CompileResolveMultisample() shader
1:38:31handmade_opengl.cpp: Introduce CompileResolveMultisample() shader
1:38:31handmade_opengl.cpp: Introduce CompileResolveMultisample() shader
1:45:49Begin to consider the dilemma surrounding the averaging process
1:45:49Begin to consider the dilemma surrounding the averaging process
1:45:49Begin to consider the dilemma surrounding the averaging process
1:47:48handmade_opengl.cpp: Fix compile errors
1:47:48handmade_opengl.cpp: Fix compile errors
1:47:48handmade_opengl.cpp: Fix compile errors
1:48:53Q&A
🗩
1:48:53Q&A
🗩
1:48:53Q&A
🗩
1:49:46flyingsolomon I think it will be useful to bind a key to topmost window as there is a key to full screen, then you will not have to resize your editor for live code editing. Also, since I bound the ` key to -> in my editor I'm a very happy panda, warm recommendations
🗪
1:49:46flyingsolomon I think it will be useful to bind a key to topmost window as there is a key to full screen, then you will not have to resize your editor for live code editing. Also, since I bound the ` key to -> in my editor I'm a very happy panda, warm recommendations
🗪
1:49:46flyingsolomon I think it will be useful to bind a key to topmost window as there is a key to full screen, then you will not have to resize your editor for live code editing. Also, since I bound the ` key to -> in my editor I'm a very happy panda, warm recommendations
🗪
1:50:27ravarix Why s32 for the count, instead of u32?
🗪
1:50:27ravarix Why s32 for the count, instead of u32?
🗪
1:50:27ravarix Why s32 for the count, instead of u32?
🗪
1:51:03dragoonx6 Could you up the bitrate? It's really hard to watch when there's too much movement on the screen. It gets all blurry and pixelated. Not exaggerating when I say it makes my eyes watery
🗪
1:51:03dragoonx6 Could you up the bitrate? It's really hard to watch when there's too much movement on the screen. It gets all blurry and pixelated. Not exaggerating when I say it makes my eyes watery
🗪
1:51:03dragoonx6 Could you up the bitrate? It's really hard to watch when there's too much movement on the screen. It gets all blurry and pixelated. Not exaggerating when I say it makes my eyes watery
🗪
1:52:50Wrap things up with a plug of the episode guide's new search feature9
📖
1:52:50Wrap things up with a plug of the episode guide's new search feature9
📖
1:52:50Wrap things up with a plug of the episode guide's new search feature9
📖