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: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 feature
9📖
1:52:50Wrap things up with a plug of the episode guide's new search feature
9📖
1:52:50Wrap things up with a plug of the episode guide's new search feature
9📖