Handmade Hero»Episode Guide
Multiple OpenGL Render Targets
?
?

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:32Recap and set the stage for the day
0:32Recap and set the stage for the day
0:32Recap and set the stage for the day
2:27Determine to enable the OpenGL renderer to work with multiple render targets like the software renderer
2:27Determine to enable the OpenGL renderer to work with multiple render targets like the software renderer
2:27Determine to enable the OpenGL renderer to work with multiple render targets like the software renderer
4:34Our two tasks: 1) Talking about render targets to OpenGL; 2) Using those render targets as textures
4:34Our two tasks: 1) Talking about render targets to OpenGL; 2) Using those render targets as textures
4:34Our two tasks: 1) Talking about render targets to OpenGL; 2) Using those render targets as textures
6:43Consult docs.GL in order to learn how to get multiple render targets1
6:43Consult docs.GL in order to learn how to get multiple render targets1
6:43Consult docs.GL in order to learn how to get multiple render targets1
10:03handmade_opengl.cpp: Make OpenGLRenderCommands() prepare the render targets, based on the software renderer's RenderCommandsToBitmap()
10:03handmade_opengl.cpp: Make OpenGLRenderCommands() prepare the render targets, based on the software renderer's RenderCommandsToBitmap()
10:03handmade_opengl.cpp: Make OpenGLRenderCommands() prepare the render targets, based on the software renderer's RenderCommandsToBitmap()
15:39handmade_opengl.cpp: Make OpenGLRenderCommands() bind the correct framebuffer2
15:39handmade_opengl.cpp: Make OpenGLRenderCommands() bind the correct framebuffer2
15:39handmade_opengl.cpp: Make OpenGLRenderCommands() bind the correct framebuffer2
20:31Compile and note that glGenFramebuffers() and glBindFramebuffer() are not available
20:31Compile and note that glGenFramebuffers() and glBindFramebuffer() are not available
20:31Compile and note that glGenFramebuffers() and glBindFramebuffer() are not available
21:24handmade_opengl.cpp: Add GL_ARB_framebuffer_object to the opengl_info struct3
21:24handmade_opengl.cpp: Add GL_ARB_framebuffer_object to the opengl_info struct3
21:24handmade_opengl.cpp: Add GL_ARB_framebuffer_object to the opengl_info struct3
24:37win32_handmade.cpp: typedef the OpenGL calls that we need4
24:37win32_handmade.cpp: typedef the OpenGL calls that we need4
24:37win32_handmade.cpp: typedef the OpenGL calls that we need4
27:28win32_handmade.cpp: Load these OpenGL calls into memory
27:28win32_handmade.cpp: Load these OpenGL calls into memory
27:28win32_handmade.cpp: Load these OpenGL calls into memory
28:29handmade_opengl.cpp: #define GL_FRAMEBUFFER5
28:29handmade_opengl.cpp: #define GL_FRAMEBUFFER5
28:29handmade_opengl.cpp: #define GL_FRAMEBUFFER5
30:25Run the game and see that we run, but super slowly when the layered alpha blend is due to happen
30:25Run the game and see that we run, but super slowly when the layered alpha blend is due to happen
30:25Run the game and see that we run, but super slowly when the layered alpha blend is due to happen
31:14handmade_opengl.cpp: Make OpenGLRenderCommands() check that we have glBindFramebuffer()
31:14handmade_opengl.cpp: Make OpenGLRenderCommands() check that we have glBindFramebuffer()
31:14handmade_opengl.cpp: Make OpenGLRenderCommands() check that we have glBindFramebuffer()
34:30win32_handmade.cpp: Make Win32InitOpenGL() check whether it ought to load the OpenGL extensions
34:30win32_handmade.cpp: Make Win32InitOpenGL() check whether it ought to load the OpenGL extensions
34:30win32_handmade.cpp: Make Win32InitOpenGL() check whether it ought to load the OpenGL extensions
35:23handmade_opengl.cpp: Make OpenGLRenderCommands() call glFramebufferTexture2D() to attach a texture image to our framebuffer object6
35:23handmade_opengl.cpp: Make OpenGLRenderCommands() call glFramebufferTexture2D() to attach a texture image to our framebuffer object6
35:23handmade_opengl.cpp: Make OpenGLRenderCommands() call glFramebufferTexture2D() to attach a texture image to our framebuffer object6
39:04handmade_opengl.cpp: Make OpenGLRenderCommands() generate our textures
39:04handmade_opengl.cpp: Make OpenGLRenderCommands() generate our textures
39:04handmade_opengl.cpp: Make OpenGLRenderCommands() generate our textures
43:36handmade_opengl.cpp: #define GL_COLOR_ATTACHMENT07
43:36handmade_opengl.cpp: #define GL_COLOR_ATTACHMENT07
43:36handmade_opengl.cpp: #define GL_COLOR_ATTACHMENT07
44:20Run the game and see what we're doing
44:20Run the game and see what we're doing
44:20Run the game and see what we're doing
44:56handmade_opengl.cpp: Make OpenGLRenderCommands() blend the render targets in the RenderGroupEntryType_render_entry_blend_render_target case
44:56handmade_opengl.cpp: Make OpenGLRenderCommands() blend the render targets in the RenderGroupEntryType_render_entry_blend_render_target case
44:56handmade_opengl.cpp: Make OpenGLRenderCommands() blend the render targets in the RenderGroupEntryType_render_entry_blend_render_target case
48:16handmade_opengl.cpp: Make glBlendFunc() use non-premultiplied alpha8
48:16handmade_opengl.cpp: Make glBlendFunc() use non-premultiplied alpha8
48:16handmade_opengl.cpp: Make glBlendFunc() use non-premultiplied alpha8
49:12Run the game, see that we are blending with white and investigate why
49:12Run the game, see that we are blending with white and investigate why
49:12Run the game, see that we are blending with white and investigate why
52:45handmade_opengl.cpp: Make OpenGLRenderCommands() call glCheckFramebufferStatus()
52:45handmade_opengl.cpp: Make OpenGLRenderCommands() call glCheckFramebufferStatus()
52:45handmade_opengl.cpp: Make OpenGLRenderCommands() call glCheckFramebufferStatus()
55:29Debugger: Run the game to see if we are getting a valid framebuffer, and investigate what's happening
55:29Debugger: Run the game to see if we are getting a valid framebuffer, and investigate what's happening
55:29Debugger: Run the game to see if we are getting a valid framebuffer, and investigate what's happening
57:56handmade_opengl.cpp: Make OpenGLRenderCommands() store the TextureHandle
57:56handmade_opengl.cpp: Make OpenGLRenderCommands() store the TextureHandle
57:56handmade_opengl.cpp: Make OpenGLRenderCommands() store the TextureHandle
58:27Run the game and see that the alpha blending now works beautifully
58:27Run the game and see that the alpha blending now works beautifully
58:27Run the game and see that the alpha blending now works beautifully
58:46Q&A
🗩
58:46Q&A
🗩
58:46Q&A
🗩
1:02:22the_any_key What are the biggest challenges you have faced with the game thus far?
🗪
1:02:22the_any_key What are the biggest challenges you have faced with the game thus far?
🗪
1:02:22the_any_key What are the biggest challenges you have faced with the game thus far?
🗪
1:04:12pragmascrypt Does AZDO work across NVIDIA, AMD and Intel
🗪
1:04:12pragmascrypt Does AZDO work across NVIDIA, AMD and Intel
🗪
1:04:12pragmascrypt Does AZDO work across NVIDIA, AMD and Intel
🗪
1:05:42roam00010011 Compare the Handmade Hero engine complexity vs 1935
🗪
1:05:42roam00010011 Compare the Handmade Hero engine complexity vs 1935
🗪
1:05:42roam00010011 Compare the Handmade Hero engine complexity vs 1935
🗪
1:06:08eltrufas For catching up to the previous episodes, do you recommend going through all the videos, or to try to understand the current codebase?
🗪
1:06:08eltrufas For catching up to the previous episodes, do you recommend going through all the videos, or to try to understand the current codebase?
🗪
1:06:08eltrufas For catching up to the previous episodes, do you recommend going through all the videos, or to try to understand the current codebase?
🗪
1:09:02That's the end of it
🗩
1:09:02That's the end of it
🗩
1:09:02That's the end of it
🗩