[video output=day507 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="LRU Texture Handle Reuse" vod_platform=youtube id=N882oz3Kv2A annotator=Miblo]
[0:00][Set the stage for an unannounced day mopping up issues[ref
    site=GitHub
    page="HandmadeHero / cpp"
    url=https://github.com/HandmadeHero/cpp/issues]][:speech]
[1:47][Watch the cutscene for incorrect :rendering][:run]
[5:51][Watch the cutscene for a second time, considering that we have a texture transfer problem][:rendering :run]
[6:57][Refamiliarise ourselves with the texture transfer code][:hardware :rendering :research]
[14:50][Consult docs.GL on glTexImage3D[ref
    site=docs.GL
    page=glTexImage3D
    url=http://docs.gl/gl3/glTexImage3D] and glPixelStore[ref
    site=docs.GL
    page=glPixelStore
    url=http://docs.gl/gl3/glPixelStore]][:hardware :rendering :research]
[18:44][Consider instrumenting OpenGLManageTextures() and watch the cutscene to see our :rendering artifacts at different places][:hardware :rendering :run]
[21:54][Watch the cutscene under NSight][:hardware :rendering :run]
[24:36][Capture a frame during our glitch and inspect the textures][:hardware :rendering :run]
[28:48][Investigate whether or not we are properly reserving our texture transfer :memory][:hardware :rendering :research]
[37:45][Circular buffer usage cases][:blackboard :memory]
[42:05][Fix our circular buffer usage in BeginTextureOp(), replacing TransferMemoryUsedCount with TransferMemoryLastUsed in renderer_texture_queue][:memory :rendering]
[51:04][Watch the cutscene to see no texture transfer errors first time round][:hardware :memory :rendering :run]
[54:52][Find that the cutscene is busted second time round][:hardware :memory :rendering :run]
[56:40][Address the "Check z coordinates of cutscene" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Check z coordinates of cutscene"
    url=https://github.com/HandmadeHero/cpp/issues/39]][:research]
[59:09][Make RenderCutsceneAtTime() start the cutscene at scene 6]
[1:00:17][Increase the Z of scene 6's fourth layer from -3.0 to -2.9]
[1:00:33][See fearful tears appear, and close that issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Check z coordinates of cutscene"
    url=https://github.com/HandmadeHero/cpp/issues/39]][:admin :run]
[1:01:29][Texture handle recycling][:"asset system" :memory :research]
[1:06:29][Implement least-recently-used (LRU) texture handle recycling in GetBitmap()][:"asset system" :memory]
[1:24:34][Initialise our LRU texture handle lists in AllocateGameAssets(), and introduce AcquireTextureHandle()][:"asset system" :memory]
[1:39:56][Watch the cutscene to find that our new LRU texture handle recycling has solved our problem][:"asset system" :memory :run]
[1:46:26][Close the "Add texture handle recycling to asset system" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Add texture handle recycling to asset system"
    url=https://github.com/HandmadeHero/cpp/issues/79]][:admin :"asset system" :memory]
[1:47:00][Fix S32FromZ() to use the Ignored pointer[ref
    site=GitHub
    page="HandmadeHero / cpp / S32FromZ unused variable by mistake (minor)"
    url=https://github.com/HandmadeHero/cpp/issues/40]]
[1:48:11][Close the "S32FromZ unused variable by mistake (minor)" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / S32FromZ unused variable by mistake (minor)"
    url=https://github.com/HandmadeHero/cpp/issues/40]]
[1:48:42]["Sign extension bug" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Sign extension bug"
    url=https://github.com/HandmadeHero/cpp/issues/50]][:language :research]
[1:52:25][Step in to Win32ProcessPendingMessages() to see the sign extension occurring in the disassembly][:asm :language :run]
[1:53:00][Prevent IsDown in Win32ProcessPendingMessages() from being sign extended][:language]
[1:53:20][Step in to Win32ProcessPendingMessages() to see that sign extension no longer occurs][:asm :language :run]
[1:56:23][Close the "Sign extension bug" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Sign extension bug"
    url=https://github.com/HandmadeHero/cpp/issues/50]][:admin :language]
[1:56:58]["Can still call OpenGL.DebugLightBufferTexIndex / OpenGL.DebugLightBufferIndex in release mode" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Can still call OpenGL.DebugLightBufferTexIndex / OpenGL.DebugLightBufferIndex in release mode"
    url=https://github.com/HandmadeHero/cpp/issues/71]][:research]
[1:57:52][Remove DebugLightBufferIndex and DebugLightBufferTexIndex from the open_gl struct]
[1:58:17][Close that issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Can still call OpenGL.DebugLightBufferTexIndex / OpenGL.DebugLightBufferIndex in release mode"
    url=https://github.com/HandmadeHero/cpp/issues/71]][:admin]
[1:58:54]["Avoid hard dependency on OpenGL 4.2 (glTexStorage3D)" issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Avoid hard dependency on OpenGL 4.2 (glTexStorage3D)"
    url=https://github.com/HandmadeHero/cpp/issues/77]][:api :research]
[1:59:34][Make OpenGLInit() pass 0 as the level to the glTexImage3D() call][:api :hardware :rendering]
[2:00:08][Find that that works][:api :hardware :rendering :run]
[2:00:48][Close that issue[ref
    site=GitHub
    page="HandmadeHero / cpp / Avoid hard dependency on OpenGL 4.2 (glTexStorage3D)"
    url=https://github.com/HandmadeHero/cpp/issues/77]][:admin :api :hardware :rendering]
[2:02:02][Q&A][:speech]
[2:02:54][@davechat][Q: Does ~4coder support indenting of shader code yet?]
[2:04:19][@bryanwwag][Q: Personally I've only ever used LRU caches. Have you ever used LFU, and has it worked well?][:memory]
[2:05:03][@bryanwwag][(least frequently used)[ref
    site=Wikipedia
    page="Cache replacement policies"
    url=https://en.wikipedia.org/wiki/Cache_replacement_policies#Least-frequently_used_(LFU)]][:memory]
[2:11:05][@bryanwwag][LFU has more overhead than LRU. More accounting, but statistically it supposedly converges to the same expected values][:memory]
[2:12:26][Custom emotes][:art :speech]
[2:14:07][@mint_spider][Q: Owl of Shame emote, Pig Hat emote for starters]
[2:14:58][@thebirkisreal][Q: Go look at the Handmade Network discord's emotes]
[2:15:02][@garryjohanson][Q: [@naysayer88 Jon Blow]'s face]
[2:15:17][@se5a1][Lemongrab]
[2:15:57][Wrap it up][:speech]
[/video]
