OpenGL VSync and sRGB Extensions
?
?

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
z Toggle filter mode V Revert filter to original state

Menu toggling

q Quotes r References f Filter 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

Credits Menu

Enter Open URL (in new tab)
0:08Reminder: The source code is not in the public domain yet
0:08Reminder: The source code is not in the public domain yet
0:08Reminder: The source code is not in the public domain yet
0:57On the possibility of vomitingα
0:57On the possibility of vomitingα
0:57On the possibility of vomitingα
1:39Recap and set the stage for the day
1:39Recap and set the stage for the day
1:39Recap and set the stage for the day
2:53win32_handmade.cpp: Make Win32DisplayBufferInWindow take SortMemory
2:53win32_handmade.cpp: Make Win32DisplayBufferInWindow take SortMemory
2:53win32_handmade.cpp: Make Win32DisplayBufferInWindow take SortMemory
5:04handmade_render.cpp: Make SortEntries take that SortMemory and continue cleaning up compile errors
5:04handmade_render.cpp: Make SortEntries take that SortMemory and continue cleaning up compile errors
5:04handmade_render.cpp: Make SortEntries take that SortMemory and continue cleaning up compile errors
7:13handmade_render.cpp: Rename RenderGroupToOutput to TiledCommandsRender and make it take game_render_commands *Commands
7:13handmade_render.cpp: Rename RenderGroupToOutput to TiledCommandsRender and make it take game_render_commands *Commands
7:13handmade_render.cpp: Rename RenderGroupToOutput to TiledCommandsRender and make it take game_render_commands *Commands
8:39handmade_render.cpp: Pull tile_render_work in from handmade_render_group.h
8:39handmade_render.cpp: Pull tile_render_work in from handmade_render_group.h
8:39handmade_render.cpp: Pull tile_render_work in from handmade_render_group.h
9:09handmade_render.cpp: Rename RenderGroupToOutput to RenderCommandsToBitmap
9:09handmade_render.cpp: Rename RenderGroupToOutput to RenderCommandsToBitmap
9:09handmade_render.cpp: Rename RenderGroupToOutput to RenderCommandsToBitmap
9:54handmade_render.cpp: Consider using the AddEntry call directly
9:54handmade_render.cpp: Consider using the AddEntry call directly
9:54handmade_render.cpp: Consider using the AddEntry call directly
11:16win32.handmade.cpp: Make platform_api available to the renderer
11:16win32.handmade.cpp: Make platform_api available to the renderer
11:16win32.handmade.cpp: Make platform_api available to the renderer
12:11win32_handmade.cpp: Continue cleaning up compile errors
12:11win32_handmade.cpp: Continue cleaning up compile errors
12:11win32_handmade.cpp: Continue cleaning up compile errors
21:29handmade_platform.h: typedef u64 umm
21:29handmade_platform.h: typedef u64 umm
21:29handmade_platform.h: typedef u64 umm
22:48handmade_render.cpp: Move DrawRectangleQuickly in from handmade_optimized.cpp
22:48handmade_render.cpp: Move DrawRectangleQuickly in from handmade_optimized.cpp
22:48handmade_render.cpp: Move DrawRectangleQuickly in from handmade_optimized.cpp
23:43build.bat: Remove the handmade_optimized.cpp build
23:43build.bat: Remove the handmade_optimized.cpp build
23:43build.bat: Remove the handmade_optimized.cpp build
25:03Build and run and crash in PushRenderElement
25:03Build and run and crash in PushRenderElement
25:03Build and run and crash in PushRenderElement
25:52win32_handmade.cpp: Correctly allocate memory for the PushBuffer
25:52win32_handmade.cpp: Correctly allocate memory for the PushBuffer
25:52win32_handmade.cpp: Correctly allocate memory for the PushBuffer
26:29Build and run successfully the first time!
26:29Build and run successfully the first time!
26:29Build and run successfully the first time!
27:25"Everything just worked"β
27:25"Everything just worked"β
27:25"Everything just worked"β
28:08win32_handmade.cpp: Introduce GlobalUseSoftwareRendering to enable us to switch between software and hardware rendering
28:08win32_handmade.cpp: Introduce GlobalUseSoftwareRendering to enable us to switch between software and hardware rendering
28:08win32_handmade.cpp: Introduce GlobalUseSoftwareRendering to enable us to switch between software and hardware rendering
29:42Run the game and toggle between the renderers
29:42Run the game and toggle between the renderers
29:42Run the game and toggle between the renderers
33:28Blackboard: VSync
33:28Blackboard: VSync
33:28Blackboard: VSync
36:47Blackboard: glSwapInterval
36:47Blackboard: glSwapInterval
36:47Blackboard: glSwapInterval
38:58Internet: docs.GL [see Resources]
38:58Internet: docs.GL [see Resources]
38:58Internet: docs.GL [see Resources]
39:32Internet: WGL_EXT_swap_control [see Resources]
39:32Internet: WGL_EXT_swap_control [see Resources]
39:32Internet: WGL_EXT_swap_control [see Resources]
40:47handmade_opengl.cpp: Try calling wglSwapInterval(0)
40:47handmade_opengl.cpp: Try calling wglSwapInterval(0)
40:47handmade_opengl.cpp: Try calling wglSwapInterval(0)
41:20win32_handmade.cpp: Call wglGetProcAddress to get wglSwapIntervalEXT
41:20win32_handmade.cpp: Call wglGetProcAddress to get wglSwapIntervalEXT
41:20win32_handmade.cpp: Call wglGetProcAddress to get wglSwapIntervalEXT
43:20win32_handmade.cpp: typedef BOOL WINAPI wgl_swap_interval_ext
43:20win32_handmade.cpp: typedef BOOL WINAPI wgl_swap_interval_ext
43:20win32_handmade.cpp: typedef BOOL WINAPI wgl_swap_interval_ext
44:52Run the game and see that we're now running at a locked 60 FPS
44:52Run the game and see that we're now running at a locked 60 FPS
44:52Run the game and see that we're now running at a locked 60 FPS
45:52win32_handmade.cpp: Note that we are not done yet
45:52win32_handmade.cpp: Note that we are not done yet
45:52win32_handmade.cpp: Note that we are not done yet
48:37Run the game and note that our hardware renderer doesn't understand the fact that we're using sRGB
48:37Run the game and note that our hardware renderer doesn't understand the fact that we're using sRGB
48:37Run the game and note that our hardware renderer doesn't understand the fact that we're using sRGB
50:06Internet: ARB_framebuffer_sRGB [see Resources]
50:06Internet: ARB_framebuffer_sRGB [see Resources]
50:06Internet: ARB_framebuffer_sRGB [see Resources]
53:09handmade_render.cpp: Look at how our software renderer does gamma correction
53:09handmade_render.cpp: Look at how our software renderer does gamma correction
53:09handmade_render.cpp: Look at how our software renderer does gamma correction
56:45win32_handmade.cpp: Conditionally use SRGB8_ALPHA8_EXT if the necessary extension is present
56:45win32_handmade.cpp: Conditionally use SRGB8_ALPHA8_EXT if the necessary extension is present
56:45win32_handmade.cpp: Conditionally use SRGB8_ALPHA8_EXT if the necessary extension is present
58:34win32_handmade.cpp: Turn on GL_FRAMEBUFFER_SRGB
58:34win32_handmade.cpp: Turn on GL_FRAMEBUFFER_SRGB
58:34win32_handmade.cpp: Turn on GL_FRAMEBUFFER_SRGB
59:55win32_handmade.cpp: #define the GL_ extensions we want
59:55win32_handmade.cpp: #define the GL_ extensions we want
59:55win32_handmade.cpp: #define the GL_ extensions we want
1:01:40Blackboard: ARB - "Architecture Review Board"
1:01:40Blackboard: ARB - "Architecture Review Board"
1:01:40Blackboard: ARB - "Architecture Review Board"
1:02:46win32_handmade.cpp: Comment out the checks to see if the extensions are available
1:02:46win32_handmade.cpp: Comment out the checks to see if the extensions are available
1:02:46win32_handmade.cpp: Comment out the checks to see if the extensions are available
1:03:34Run the game and find that we have actual sRGB rendering happening
1:03:34Run the game and find that we have actual sRGB rendering happening
1:03:34Run the game and find that we have actual sRGB rendering happening
1:04:35Q&A
🗩
1:04:35Q&A
🗩
1:04:35Q&A
🗩
1:05:35insofaras Will you be implementing multiple render paths depending on the OpenGL context version or available extensions at runtime?
🗪
1:05:35insofaras Will you be implementing multiple render paths depending on the OpenGL context version or available extensions at runtime?
🗪
1:05:35insofaras Will you be implementing multiple render paths depending on the OpenGL context version or available extensions at runtime?
🗪
1:06:08TheSizik Can you fix the Santa sorting?
🗪
1:06:08TheSizik Can you fix the Santa sorting?
🗪
1:06:08TheSizik Can you fix the Santa sorting?
🗪
1:06:20handmade_cutscene.cpp: Fix the Santa sorting
1:06:20handmade_cutscene.cpp: Fix the Santa sorting
1:06:20handmade_cutscene.cpp: Fix the Santa sorting
1:09:46macielda Your maximum frame time is about 2-3ms without VSync enabled, but with it enabled I see it stays at 16ms most of the time, but sometimes goes to 17ms. Does that mean it will skip a frame? Is that a problem with VSync?
🗪
1:09:46macielda Your maximum frame time is about 2-3ms without VSync enabled, but with it enabled I see it stays at 16ms most of the time, but sometimes goes to 17ms. Does that mean it will skip a frame? Is that a problem with VSync?
🗪
1:09:46macielda Your maximum frame time is about 2-3ms without VSync enabled, but with it enabled I see it stays at 16ms most of the time, but sometimes goes to 17ms. Does that mean it will skip a frame? Is that a problem with VSync?
🗪
1:10:16Blackboard: SwapBuffers
1:10:16Blackboard: SwapBuffers
1:10:16Blackboard: SwapBuffers
1:15:08jd96x Is object oriented programming bad in general or for game purposes, and why?
🗪
1:15:08jd96x Is object oriented programming bad in general or for game purposes, and why?
🗪
1:15:08jd96x Is object oriented programming bad in general or for game purposes, and why?
🗪
1:15:15rohit_n I believe you do an strstr of GL_EXTENSIONS, then check if the end of the extension is null, a space or tab to see if it exists
🗪
1:15:15rohit_n I believe you do an strstr of GL_EXTENSIONS, then check if the end of the extension is null, a space or tab to see if it exists
🗪
1:15:15rohit_n I believe you do an strstr of GL_EXTENSIONS, then check if the end of the extension is null, a space or tab to see if it exists
🗪
1:15:34SoysauceTheKid Is there any reason to make the swap interval larger than 1?
🗪
1:15:34SoysauceTheKid Is there any reason to make the swap interval larger than 1?
🗪
1:15:34SoysauceTheKid Is there any reason to make the swap interval larger than 1?
🗪
1:15:54Blackboard: Swap interval
1:15:54Blackboard: Swap interval
1:15:54Blackboard: Swap interval
1:16:33m1el Is there an asynchronous way to do VSync? I mean, a way to "ask" OpenGL if it has displayed the frame or how much time you have to wait until the frame is going to be displayed
🗪
1:16:33m1el Is there an asynchronous way to do VSync? I mean, a way to "ask" OpenGL if it has displayed the frame or how much time you have to wait until the frame is going to be displayed
🗪
1:16:33m1el Is there an asynchronous way to do VSync? I mean, a way to "ask" OpenGL if it has displayed the frame or how much time you have to wait until the frame is going to be displayed
🗪
1:17:20ezioauditorerevs How would you allow the game to run at a non-60 FPS rate and not speed up / slow down the animation speed?
🗪
1:17:20ezioauditorerevs How would you allow the game to run at a non-60 FPS rate and not speed up / slow down the animation speed?
🗪
1:17:20ezioauditorerevs How would you allow the game to run at a non-60 FPS rate and not speed up / slow down the animation speed?
🗪
1:17:55elxenoaizd Apologies if you explained this before. Since rotation is stored in the upper 3x3 part of the transform matrix, and Scale is stored in the 0,0, 1,1, 2,2 diagonal, how do the play well together? I mean, wouldn't changing the rotation or scale affect the other?
🗪
1:17:55elxenoaizd Apologies if you explained this before. Since rotation is stored in the upper 3x3 part of the transform matrix, and Scale is stored in the 0,0, 1,1, 2,2 diagonal, how do the play well together? I mean, wouldn't changing the rotation or scale affect the other?
🗪
1:17:55elxenoaizd Apologies if you explained this before. Since rotation is stored in the upper 3x3 part of the transform matrix, and Scale is stored in the 0,0, 1,1, 2,2 diagonal, how do the play well together? I mean, wouldn't changing the rotation or scale affect the other?
🗪
1:18:18QuikliGames You mentioned 120hz. How do you handle skipping every other VSync event? Do you just detect the monitor refresh rate and if 120hz swap twice in a row?
🗪
1:18:18QuikliGames You mentioned 120hz. How do you handle skipping every other VSync event? Do you just detect the monitor refresh rate and if 120hz swap twice in a row?
🗪
1:18:18QuikliGames You mentioned 120hz. How do you handle skipping every other VSync event? Do you just detect the monitor refresh rate and if 120hz swap twice in a row?
🗪
1:18:41Connor_Rentz If VSync is disabled in windows, will there be no VSync at all?
🗪
1:18:41Connor_Rentz If VSync is disabled in windows, will there be no VSync at all?
🗪
1:18:41Connor_Rentz If VSync is disabled in windows, will there be no VSync at all?
🗪
1:18:59ezioauditorerevs The glove in the scene where Krampus is giving it to the kid looks a bit strange with the thumb pointing downwards
🗪
1:18:59ezioauditorerevs The glove in the scene where Krampus is giving it to the kid looks a bit strange with the thumb pointing downwards
🗪
1:18:59ezioauditorerevs The glove in the scene where Krampus is giving it to the kid looks a bit strange with the thumb pointing downwards
🗪
1:19:07Longboolean Why does VSync cause input lag on some machines?
🗪
1:19:07Longboolean Why does VSync cause input lag on some machines?
🗪
1:19:07Longboolean Why does VSync cause input lag on some machines?
🗪
1:19:51ttbjm What are the trade-offs of storing the textures on disk in the same linear colorspace format you are using?
🗪
1:19:51ttbjm What are the trade-offs of storing the textures on disk in the same linear colorspace format you are using?
🗪
1:19:51ttbjm What are the trade-offs of storing the textures on disk in the same linear colorspace format you are using?
🗪
1:20:37CFlickster Any update on when to implement sound effects?
🗪
1:20:37CFlickster Any update on when to implement sound effects?
🗪
1:20:37CFlickster Any update on when to implement sound effects?
🗪
1:20:44garlandobloom What is that bottle full of that Jon posted on twitter?
🗪
1:20:44garlandobloom What is that bottle full of that Jon posted on twitter?
🗪
1:20:44garlandobloom What is that bottle full of that Jon posted on twitter?
🗪
1:20:54Miblo We're still fading from / to the desktop. Did you have to reimplement that? Is it being hardware rendered? Is the fade here to stay?
🗪
1:20:54Miblo We're still fading from / to the desktop. Did you have to reimplement that? Is it being hardware rendered? Is the fade here to stay?
🗪
1:20:54Miblo We're still fading from / to the desktop. Did you have to reimplement that? Is it being hardware rendered? Is the fade here to stay?
🗪
1:21:20stasrgba With WglSwapInterval() do we still have to do Sleep at the end of the frame? Could you also comment on glFinish / glFlush and how they're used?
🗪
1:21:20stasrgba With WglSwapInterval() do we still have to do Sleep at the end of the frame? Could you also comment on glFinish / glFlush and how they're used?
🗪
1:21:20stasrgba With WglSwapInterval() do we still have to do Sleep at the end of the frame? Could you also comment on glFinish / glFlush and how they're used?
🗪
1:24:00insofaras Will you use EXT_swap_tear? (-1 in the SwapInterval call)
🗪
1:24:00insofaras Will you use EXT_swap_tear? (-1 in the SwapInterval call)
🗪
1:24:00insofaras Will you use EXT_swap_tear? (-1 in the SwapInterval call)
🗪
1:24:07macielda Should we wait after SwapBuffers if it returns too fast?
🗪
1:24:07macielda Should we wait after SwapBuffers if it returns too fast?
🗪
1:24:07macielda Should we wait after SwapBuffers if it returns too fast?
🗪
1:24:27Colt_Zero Would it be better to minimize or maximize how much you do per frame? Like, would it be better to make your program take any time that it would be waiting for VSync, and instead focus it on performing more computations, even potentially computing things ahead of time?
🗪
1:24:27Colt_Zero Would it be better to minimize or maximize how much you do per frame? Like, would it be better to make your program take any time that it would be waiting for VSync, and instead focus it on performing more computations, even potentially computing things ahead of time?
🗪
1:24:27Colt_Zero Would it be better to minimize or maximize how much you do per frame? Like, would it be better to make your program take any time that it would be waiting for VSync, and instead focus it on performing more computations, even potentially computing things ahead of time?
🗪
1:25:24Tybereon How do you easily detect if VSync is active?
🗪
1:25:24Tybereon How do you easily detect if VSync is active?
🗪
1:25:24Tybereon How do you easily detect if VSync is active?
🗪
1:25:51macielda How do I VSync and prevent tearing with a dual-monitor setup? Is it any different than a single-monitor setup? [see Resources]
🗪
1:25:51macielda How do I VSync and prevent tearing with a dual-monitor setup? Is it any different than a single-monitor setup? [see Resources]
🗪
1:25:51macielda How do I VSync and prevent tearing with a dual-monitor setup? Is it any different than a single-monitor setup? [see Resources]
🗪
1:27:23Conclude
🗩
1:27:23Conclude
🗩
1:27:23Conclude
🗩