OpenGL VSync and sRGB Extensions
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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: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:35@insofaras Will you be implementing multiple render paths depending on the OpenGL context version or available extensions at runtime?
🗪
1:05:35@insofaras Will you be implementing multiple render paths depending on the OpenGL context version or available extensions at runtime?
🗪
1:05:35@insofaras Will you be implementing multiple render paths depending on the OpenGL context version or available extensions at runtime?
🗪
1:06:08@TheSizik Can you fix the Santa sorting?
🗪
1:06:08@TheSizik Can you fix the Santa sorting?
🗪
1:06:08@TheSizik 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:46@macielda 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:46@macielda 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:46@macielda 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:08@jd96x Is object oriented programming bad in general or for game purposes, and why?
🗪
1:15:08@jd96x Is object oriented programming bad in general or for game purposes, and why?
🗪
1:15:08@jd96x Is object oriented programming bad in general or for game purposes, and why?
🗪
1:15:15@rohit_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:15@rohit_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:15@rohit_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:34@SoysauceTheKid Is there any reason to make the swap interval larger than 1?
🗪
1:15:34@SoysauceTheKid Is there any reason to make the swap interval larger than 1?
🗪
1:15:34@SoysauceTheKid 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:33@m1el 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:33@m1el 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:33@m1el 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:20@ezioauditorerevs 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:20@ezioauditorerevs 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:20@ezioauditorerevs 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:55@elxenoaizd 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:55@elxenoaizd 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:55@elxenoaizd 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:18@QuikliGames 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:18@QuikliGames 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:18@QuikliGames 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:41@Connor_Rentz If VSync is disabled in windows, will there be no VSync at all?
🗪
1:18:41@Connor_Rentz If VSync is disabled in windows, will there be no VSync at all?
🗪
1:18:41@Connor_Rentz If VSync is disabled in windows, will there be no VSync at all?
🗪
1:18:59@ezioauditorerevs The glove in the scene where Krampus is giving it to the kid looks a bit strange with the thumb pointing downwards
🗪
1:18:59@ezioauditorerevs The glove in the scene where Krampus is giving it to the kid looks a bit strange with the thumb pointing downwards
🗪
1:18:59@ezioauditorerevs The glove in the scene where Krampus is giving it to the kid looks a bit strange with the thumb pointing downwards
🗪
1:19:07@Longboolean Why does VSync cause input lag on some machines?
🗪
1:19:07@Longboolean Why does VSync cause input lag on some machines?
🗪
1:19:07@Longboolean Why does VSync cause input lag on some machines?
🗪
1:19:51@ttbjm What are the trade-offs of storing the textures on disk in the same linear colorspace format you are using?
🗪
1:19:51@ttbjm What are the trade-offs of storing the textures on disk in the same linear colorspace format you are using?
🗪
1:19:51@ttbjm What are the trade-offs of storing the textures on disk in the same linear colorspace format you are using?
🗪
1:20:37@CFlickster Any update on when to implement sound effects?
🗪
1:20:37@CFlickster Any update on when to implement sound effects?
🗪
1:20:37@CFlickster Any update on when to implement sound effects?
🗪
1:20:44@garlandobloom What is that bottle full of that Jon posted on twitter?
🗪
1:20:44@garlandobloom What is that bottle full of that Jon posted on twitter?
🗪
1:20:44@garlandobloom What is that bottle full of that Jon posted on twitter?
🗪
1:20:54@Miblo 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:54@Miblo 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:54@Miblo 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:20@stasrgba 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:20@stasrgba 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:20@stasrgba 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:00@insofaras Will you use EXT_swap_tear? (-1 in the SwapInterval call)
🗪
1:24:00@insofaras Will you use EXT_swap_tear? (-1 in the SwapInterval call)
🗪
1:24:00@insofaras Will you use EXT_swap_tear? (-1 in the SwapInterval call)
🗪
1:24:07@macielda Should we wait after SwapBuffers if it returns too fast?
🗪
1:24:07@macielda Should we wait after SwapBuffers if it returns too fast?
🗪
1:24:07@macielda Should we wait after SwapBuffers if it returns too fast?
🗪
1:24:27@Colt_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:27@Colt_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:27@Colt_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:24@Tybereon How do you easily detect if VSync is active?
🗪
1:25:24@Tybereon How do you easily detect if VSync is active?
🗪
1:25:24@Tybereon How do you easily detect if VSync is active?
🗪
1:25:51@macielda 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:51@macielda 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:51@macielda 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
🗩