Handmade Hero»Episode Guide
Enabling OpenGL Multisampling
?
?

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:03Recap and set the stage for the day
0:03Recap and set the stage for the day
0:03Recap and set the stage for the day
2:24Run the game to demo the Z-fighting and fringing that we need to eliminate
2:24Run the game to demo the Z-fighting and fringing that we need to eliminate
2:24Run the game to demo the Z-fighting and fringing that we need to eliminate
4:51Consider switching to a different computer with a newer graphics card
4:51Consider switching to a different computer with a newer graphics card
4:51Consider switching to a different computer with a newer graphics card
6:50Determine to enable multisampled antialiasing
6:50Determine to enable multisampled antialiasing
6:50Determine to enable multisampled antialiasing
7:54handmade_opengl.cpp: Disable the cube texturing and colour the sides of the cubes in a gradient
7:54handmade_opengl.cpp: Disable the cube texturing and colour the sides of the cubes in a gradient
7:54handmade_opengl.cpp: Disable the cube texturing and colour the sides of the cubes in a gradient
12:47Run the game to see our visually parsable cubes
12:47Run the game to see our visually parsable cubes
12:47Run the game to see our visually parsable cubes
19:04Run the game to see our green cubes
19:04Run the game to see our green cubes
19:04Run the game to see our green cubes
19:18Blackboard: Fake Cube Lighting
19:18Blackboard: Fake Cube Lighting
19:18Blackboard: Fake Cube Lighting
25:53Run the game to illustrate areas requiring better lighting
25:53Run the game to illustrate areas requiring better lighting
25:53Run the game to illustrate areas requiring better lighting
28:53Blackboard: MSAA (Multisample Antialiasing) + ATC (Alpha to Coverage)
28:53Blackboard: MSAA (Multisample Antialiasing) + ATC (Alpha to Coverage)
28:53Blackboard: MSAA (Multisample Antialiasing) + ATC (Alpha to Coverage)
30:04Blackboard: Aliasing and Apparent Error in Discretizing
30:04Blackboard: Aliasing and Apparent Error in Discretizing
30:04Blackboard: Aliasing and Apparent Error in Discretizing
34:25Blackboard: Our current implementation of antialiasing
34:25Blackboard: Our current implementation of antialiasing
34:25Blackboard: Our current implementation of antialiasing
37:30Blackboard: Multisample antialiasing on graphics cards
37:30Blackboard: Multisample antialiasing on graphics cards
37:30Blackboard: Multisample antialiasing on graphics cards
44:09Blackboard: Typical MSAA pipeline in GPU APIs
44:09Blackboard: Typical MSAA pipeline in GPU APIs
44:09Blackboard: Typical MSAA pipeline in GPU APIs
49:02Blackboard: Alpha to Coverage
49:02Blackboard: Alpha to Coverage
49:02Blackboard: Alpha to Coverage
50:43Blackboard: Where are the samples?
50:43Blackboard: Where are the samples?
50:43Blackboard: Where are the samples?
55:55Blackboard: Alpha to Coverage continued
55:55Blackboard: Alpha to Coverage continued
55:55Blackboard: Alpha to Coverage continued
57:20Research OpenGL's specification alpha to coverage
57:20Research OpenGL's specification alpha to coverage
57:20Research OpenGL's specification alpha to coverage
1:05:29Research glSampleCoverage1
1:05:29Research glSampleCoverage1
1:05:29Research glSampleCoverage1
1:08:16handmade_opengl.cpp: Make OpenGLRenderCommands() enable GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_ALPHA_TO_ONE and GL_MULTISAMPLE
1:08:16handmade_opengl.cpp: Make OpenGLRenderCommands() enable GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_ALPHA_TO_ONE and GL_MULTISAMPLE
1:08:16handmade_opengl.cpp: Make OpenGLRenderCommands() enable GL_SAMPLE_ALPHA_TO_COVERAGE, GL_SAMPLE_ALPHA_TO_ONE and GL_MULTISAMPLE
1:10:32Blackboard: Screen Door Transparency
1:10:32Blackboard: Screen Door Transparency
1:10:32Blackboard: Screen Door Transparency
1:11:57Research how to set up a buffer suitable for multisampling2
1:11:57Research how to set up a buffer suitable for multisampling2
1:11:57Research how to set up a buffer suitable for multisampling2
1:23:37A few words on GPU programming
1:23:37A few words on GPU programming
1:23:37A few words on GPU programming
1:26:41handmade_opengl.cpp: Make OpenGLRenderCommands() call glTexImage2DMultisample()
1:26:41handmade_opengl.cpp: Make OpenGLRenderCommands() call glTexImage2DMultisample()
1:26:41handmade_opengl.cpp: Make OpenGLRenderCommands() call glTexImage2DMultisample()
1:34:07handmade_opengl.cpp: Set up for multisampling, based on glcorearb.h3
1:34:07handmade_opengl.cpp: Set up for multisampling, based on glcorearb.h3
1:34:07handmade_opengl.cpp: Set up for multisampling, based on glcorearb.h3
1:42:20Step in to OpenGLRenderCommands() to find that our graphics card may not support multisampling4
1:42:20Step in to OpenGLRenderCommands() to find that our graphics card may not support multisampling4
1:42:20Step in to OpenGLRenderCommands() to find that our graphics card may not support multisampling4
1:50:46handmade_opengl.cpp: Make OpenGLRenderCommands() pass MaxSampleCount - 1 to glTexImage2DMultisample(), and step in to find that we have 8x multisampling, but that it is not working properly
1:50:46handmade_opengl.cpp: Make OpenGLRenderCommands() pass MaxSampleCount - 1 to glTexImage2DMultisample(), and step in to find that we have 8x multisampling, but that it is not working properly
1:50:46handmade_opengl.cpp: Make OpenGLRenderCommands() pass MaxSampleCount - 1 to glTexImage2DMultisample(), and step in to find that we have 8x multisampling, but that it is not working properly
2:01:34handmade_opengl.cpp: Try passing MaxSampleCount to glTexImage2DMultisample(), and run the game to find that it works
2:01:34handmade_opengl.cpp: Try passing MaxSampleCount to glTexImage2DMultisample(), and run the game to find that it works
2:01:34handmade_opengl.cpp: Try passing MaxSampleCount to glTexImage2DMultisample(), and run the game to find that it works
2:02:30Q&A
🗩
2:02:30Q&A
🗩
2:02:30Q&A
🗩
2:03:27sahfortv Can you check if the status has changed after updating bind texture?
🗪
2:03:27sahfortv Can you check if the status has changed after updating bind texture?
🗪
2:03:27sahfortv Can you check if the status has changed after updating bind texture?
🗪
2:03:53randdalf Did you remember to prefix your glTexImageMultisample2D with a WINAPI) (aka __stdcall prefix)? That's usually the cause of access violations for me
🗪
2:03:53randdalf Did you remember to prefix your glTexImageMultisample2D with a WINAPI) (aka __stdcall prefix)? That's usually the cause of access violations for me
🗪
2:03:53randdalf Did you remember to prefix your glTexImageMultisample2D with a WINAPI) (aka __stdcall prefix)? That's usually the cause of access violations for me
🗪
2:05:20win32_handmade.cpp: Make Win32InitOpenGL call glTexImage2DMultisample()
2:05:20win32_handmade.cpp: Make Win32InitOpenGL call glTexImage2DMultisample()
2:05:20win32_handmade.cpp: Make Win32InitOpenGL call glTexImage2DMultisample()
2:06:37macielda Your glTexParameteri needs to use GL_TEXTURE_2D_MULTISAMPLE instead of GL_TEXTURE_2D
🗪
2:06:37macielda Your glTexParameteri needs to use GL_TEXTURE_2D_MULTISAMPLE instead of GL_TEXTURE_2D
🗪
2:06:37macielda Your glTexParameteri needs to use GL_TEXTURE_2D_MULTISAMPLE instead of GL_TEXTURE_2D
🗪
2:08:36general1337 Is there a way to debug or have a visual example of the multisampling process?
🗪
2:08:36general1337 Is there a way to debug or have a visual example of the multisampling process?
🗪
2:08:36general1337 Is there a way to debug or have a visual example of the multisampling process?
🗪
2:09:03mathk_ Maybe we should use glDebugMessageCallback and glEnable(GL_DEBUG_SYNCHRONOUS) sometime, then we can assert in the callback and are able to see just where we gl error in the debugger
🗪
2:09:03mathk_ Maybe we should use glDebugMessageCallback and glEnable(GL_DEBUG_SYNCHRONOUS) sometime, then we can assert in the callback and are able to see just where we gl error in the debugger
🗪
2:09:03mathk_ Maybe we should use glDebugMessageCallback and glEnable(GL_DEBUG_SYNCHRONOUS) sometime, then we can assert in the callback and are able to see just where we gl error in the debugger
🗪
2:10:07snoringtortoise You mentioned in a previous episode that one of the reasons for moving to 3D was due to performance concerns with the sorting. Would it have been a viable alternative to keep the sorting results in permanent storage and then each frame only re-sort the entities that have moved? Just considering that many entities like trees and traversables don't move
🗪
2:10:07snoringtortoise You mentioned in a previous episode that one of the reasons for moving to 3D was due to performance concerns with the sorting. Would it have been a viable alternative to keep the sorting results in permanent storage and then each frame only re-sort the entities that have moved? Just considering that many entities like trees and traversables don't move
🗪
2:10:07snoringtortoise You mentioned in a previous episode that one of the reasons for moving to 3D was due to performance concerns with the sorting. Would it have been a viable alternative to keep the sorting results in permanent storage and then each frame only re-sort the entities that have moved? Just considering that many entities like trees and traversables don't move
🗪
2:12:29macielda Casey, I have started working on Handmade Vulkan port earlier today, is that okay? I got it to initialize properly and have done some groundwork for outputting rects. My current plan is to work on it this week
🗪
2:12:29macielda Casey, I have started working on Handmade Vulkan port earlier today, is that okay? I got it to initialize properly and have done some groundwork for outputting rects. My current plan is to work on it this week
🗪
2:12:29macielda Casey, I have started working on Handmade Vulkan port earlier today, is that okay? I got it to initialize properly and have done some groundwork for outputting rects. My current plan is to work on it this week
🗪
2:15:33macielda So Alpha to Coverage does order-independent transparency just like that? Any serious limitations you can think of?
🗪
2:15:33macielda So Alpha to Coverage does order-independent transparency just like that? Any serious limitations you can think of?
🗪
2:15:33macielda So Alpha to Coverage does order-independent transparency just like that? Any serious limitations you can think of?
🗪
2:17:50snoringtortoise For those of us who are very interested in engine development, what are some of the more advanced platform features that you would recommend investigating?
🗪
2:17:50snoringtortoise For those of us who are very interested in engine development, what are some of the more advanced platform features that you would recommend investigating?
🗪
2:17:50snoringtortoise For those of us who are very interested in engine development, what are some of the more advanced platform features that you would recommend investigating?
🗪
2:20:17"The only reason that we ever did it is because Won insisted that we do it"α
2:20:17"The only reason that we ever did it is because Won insisted that we do it"α
2:20:17"The only reason that we ever did it is because Won insisted that we do it"α
2:21:26snoringtortoise On the platform side like any debugging features, you mentioned a while ago that 1935's engine was light years ahead in that it is far more advanced
🗪
2:21:26snoringtortoise On the platform side like any debugging features, you mentioned a while ago that 1935's engine was light years ahead in that it is far more advanced
🗪
2:21:26snoringtortoise On the platform side like any debugging features, you mentioned a while ago that 1935's engine was light years ahead in that it is far more advanced
🗪
2:24:51thesizik "Problem exists between Khronos and Casey"?
🗪
2:24:51thesizik "Problem exists between Khronos and Casey"?
🗪
2:24:51thesizik "Problem exists between Khronos and Casey"?
🗪
2:25:19Close everything down with a glimpse into the future
🗩
2:25:19Close everything down with a glimpse into the future
🗩
2:25:19Close everything down with a glimpse into the future
🗩