[video output=day479 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Large Texture Support" vod_platform=youtube id=wzDx--c5uUo annotator=Miblo]
[0:00][Recap and set the stage for the day][:rendering :speech]
[2:11][Plug Meow Hash[ref
    site="Molly Rocket"
    page="Meow Hash"
    url=https://mollyrocket.com/meowhash]][:research]
[3:59][Try to :run the game but crash in OpenGLManageTextures()][:hardware :rendering]
[4:57][][quote 631]
[5:09][Investigate the crash in OpenGLManageTextures(), to find that a fresh rebuild does not crash][:hardware :rendering :run]
[10:48][:Run the Renderer Test noting that we have adequate throughput][:rendering]
[12:18][:Run the game and note our new absence of support for large textures in our texture array][:"asset system" :rendering]
[14:25][Approaching the problem of handling large textures now that we have a fixed-size texture array][:"asset system" :speech]
[17:03][Consider mipmapping our sprites][:"asset system" :rendering :speech]
[19:33][:Run the Renderer Test and try to see scaling artifacts that could be fixed by mipmaps][:"asset system" :rendering]
[23:21][Set out our strategy for handling large textures][:"asset system"][quote 632]
[26:49][Add a renderer_texture array to render_entry_textured_quads to special-case our :rendering of large textures][:"asset system"]
[35:38][Enable GetCurrentQuads() to handle large textures, adding a stretchy renderer_texture *QuadTextures buffer to game_render_commands, introducing IsSpecialTexture() and stubbing out GetSpecialTextureHandleFor()][:"asset system" :rendering]
[54:29][:Run the Renderer Test and the game successfully][:"asset system" :rendering]
[55:15][Enable LoadBitmap() to handle special large textures, introducing DimensionsRequireSpecialTexture() and SpecialTextureIndexFrom()][:"asset system"]
[1:05:01][Add SpecialTextureHandleCount and NextSpecialTextureHandle to game_assets and enable AllocateGameAssets() to handle special large textures][:"asset system" :memory]
[1:09:18][Enable OpenGLAllocateTexture() to handle special large textures, introducing TextureIndexFrom()][:"asset system" :hardware :memory]
[1:12:37][XOR vs AND NOT][:mathematics][quote 633]
[1:16:02][A few words on demythologising programming and the truth of making mistakes][:experience]
[1:19:30][Continue to enable OpenGLAllocateTexture(), Win32InitOpenGL() and OpenGLBeginFrame() to handle special large textures][:"asset system" :hardware :memory :"platform layer"]
[1:42:54][:Run the game and crash in OpenGLInit()][:"asset system" :hardware :rendering]
[1:44:08][Fix Win32InitOpenGL() to allocate the asset and texture handle arrays before calling OpenGLInit()][:"asset system" :hardware :memory]
[1:44:41][:Run the game nominally correctly, before switching to the cutscene and crashing in OpenGLAllocateTexture()][:"asset system" :hardware :memory]
[1:45:53][Step through LoadBitmap() to see what happens with the large textures][:"asset system" :run]
[1:49:01][Fix DimensionsRequireSpecialTexture() to correctly handle textures that are larger than standard on either axis (rather than both)][:"asset system"]
[1:49:17][:Run the game, switch to the cutscene and hit our Assert(TextureIndex == Texture.Index) in PushQuad()][:"asset system" :rendering]
[1:50:33][Fix PushQuad() to peel off the handle from the texture in stages, first as a u32, then cast down to a u16][:"asset system" :rendering]
[1:51:12][:Run the game and crash in OpenGLEndFrame()][:"asset system" :hardware :rendering]
[1:53:43][Fix GetCurrentQuads() to set the IndexArrayOffset, and change OpenGLEndFrame() to use this offset accordingly][:"asset system" :hardware]
[1:57:44][:Run the game without crashing, but see no cutscene textures][:"asset system" :hardware :rendering]
[2:00:43][Step in to OpenGLEndFrame() and inspect the Texture][:"asset system" :hardware :rendering :run]
[2:01:01][Fix PushQuad() to actually push on special textures][:"asset system"]
[2:02:30][:Run the game, see that the Texture at this point in OpenGLEndFrame() looks a lot better, but that we don't see the cutscene textures in-game][:"asset system"]
[2:03:46][Q&A][:speech]
[2:04:16][@rooctag][Q: Commands-> should be Entry-> on the line where it breaks. Commands was leftover and not updated to Entry]
[2:04:47][Fix OpenGLEndFrame() to set the special Texture from the Entry, rather than from the Commands][:"asset system"]
[2:04:55][:Run the game and still see no cutscene textures][:"asset system"]
[2:06:37][@etisdew][Q: How do you handle attributes and varyings for your GLSL?][:hardware :rendering]
[2:07:54][A few words on the need for a :language that offers the ability to read in material written in another language (e.g. GLSL), and use the types defined in that material directly, noting that [@naysayer88 Jon Blow]'s JAI has this ability][:speech]
[2:09:58][][quote 634]
[2:10:12][@caseyismyhero1337][Q: Casey my man, what are the stats on your glasses?][:trivia]
[2:11:13][Wrap it up][:speech]
[/video]
