[video output=day237 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Displaying an Image with OpenGL" vod_platform=youtube id=YIOpZ9M5pc4 annotator=Miblo]
[1:13][win32_handmade.cpp: Disable PFD_DOUBLEBUFFER]
[2:04][Give it a shot and see our pink window]
[2:33][Recap our current situation]
[5:07][Blackboard: Ways of drawing quads]
[6:47][Blackboard: Using two triangles to draw our quadrilateral textures]
[7:52][win32_handmade.cpp: Explain glVertex nomenclature]
[11:08][Blackboard: Covering the screen with triangles]
[12:03][win32_handmade.cpp: Construct our first OpenGL primitive, a triangle]
[13:00][Run the game and "see" our triangle]
[14:03][Blackboard: Fixed function vs programmable pipelines]
[16:49][Blackboard: Matrix multiplication]
[20:06][Blackboard: Homogeneous coordinates and affine transforms]
[24:35][Blackboard: Model View and Projection matrices]
[26:52][win32_handmade.cpp: Use glLoadIdentity to set the MODELVIEW and PROJECTION matrices to the identity matrix]
[28:59][Run the game and see the same thing we started with]
[29:04][Blackboard: How OpenGL does Clipping]
[35:04][win32_handmade.cpp: Pass glVertex2i the unit cube and then 0.9f]
[36:11][Run the game and see the smaller rectangle]
[36:47][Blackboard: Moving from Clip space to Screen space]
[39:47][Blackboard: Drawing a texture]
[40:34][win32_handmade.cpp: Do glColor3f before the two trianges]
[42:00][Blackboard: Establishing our u,v texture coordinates]
[42:25][win32_handmade.cpp: Set our texture coordinates]
[44:17][win32_handmade.cpp: Use glTexImage2D to submit a texture to the graphics card]
[57:38][win32_handmade.cpp: Use glTexEnvi and glTexParameteri]
[1:00:16][Note that we aren't yet specifying the stride]
[1:01:14][win32_handmade.cpp: Explain these parameters]
[1:04:34][Run the game and see that we actually are there yet]
[1:04:49]["It's all a lie"][quote 354]
[1:06:17][Q&A][:speech]
[1:06:56][@ratchetfreak][You used static instead of local_persist for Init]
[1:07:04][win32_handmade.cpp: Introduce global_variable GLuint BlitTextureHandle]
[1:08:32][@nxsy][Can we verify the vsync somehow?]
[1:09:00][@SoysauceTheKid][Are there any stretching issues when going from u,v coordinates to screen coordinates? If so, how would you fix it?]
[1:09:53][@macielda][The texture name you are binding is always zero after the first iteration]
[1:10:18][@insofaras][I think in old OpenGL you don't even need glGenTextures, you can just pick your own arbitrary ints]
[1:10:31][win32_handmade.cpp: Set GlobalBlitTextureHandle = 1; rather than using glGenTextures]
[1:12:51][@robrobby][Would Texture Filtering (->GL_NEAREST) even occur when image and texture size is the same as it is now?]
[1:13:39][@garryjohanson][In your professional career what GPU library have you preferred, such as OpenGL, DirectX, GLSL, etc.? Which one do you currently use and why?]
[1:14:03][@ChronalDragon][Later on, after we upgrade to more modern OpenGL, will the game render into a framebuffer and then onto the same triangles, or will you just have it render directly to the main window buffer?]
[1:15:25][@macielda][Before you removed the Init variable and inline initialization of the texture you were always passing 0 as the name, by the way]
[1:15:56][@macielda][So there is no way to blit directly to the back buffer anymore?]
[1:17:29][@robrobby][Is there a difference in speed now we use OpenGL to move the buffer to the GPU?]
[1:19:41][@garryjohanson][Is there a way you know of to optimize PCI transfers between CPU and GPU using OpenGL?]
[1:22:39][@sssmcgrath][I dunno if this is applicable to the last question, I literally just got here, but glTexSubImage2D could be faster than glTexImage2D]
[1:23:03][Blackboard: glTexImage2D vs glTexSubImage2D]
[1:29:26][@quartertron][At what point in that chain of gl commands does the card actually get involved? Command dependent? Driver dependent?]
[1:30:02][Wrap it up][:speech]
[/video]
