[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Extracting Asset Tiles from Gridded PNGs" vod_platform=youtube id=rWrHfGfzoOE annotator=Miblo] [0:04][Recap and set the stage for the day][:speech] [1:57][Dive into implementing UpdateAssetPackageFromPNG(), adding an Errors stream to asset_source_file][:"asset loading" :"error handling"] [9:52][Introduce MakeReadStream()][:memory] [11:09][Note the flexibility of having the first Contents buffer within the stream struct, rather than making everything go through a stream_chunk][:"data structure" :memory :speech] [12:42][Fix compile errors][:"asset loading"] [14:17][A few words on :memory arenas][:speech] [15:53][Set up to enable UpdateAssetPackageFromPNG() to break assets up into tiles][:"asset loading"] [18:17][Note the need to handle non-tiled assets, with a mention of mom's misremembrance of Krampus as "Krumpus"[ref site=GitHub page="HandmadeHero / cpp / Issues" url=https://github.com/HandmadeHero/cpp/issues/]][:"asset loading" :speech :trivia] [19:43][Introduce ProcessTiledImport() to split up assets into 1024×1024 tiles, for UpdateAssetPackageFromPNG() to call][:"asset loading"] [31:10][Note the need to invalidate the texture :memory, determining first to load the stuff in before switching to fixed size blocks][:"asset loading" :speech] [33:44][Consider resizing our title_screen.png down to fit into one of our fixed blocks, with some general thoughts on texture :memory][:speech] [40:23][Consult the Steam Hardware and & Software Survey[ref site=Valve page="Steam Hardware & Software Survey" url=https://store.steampowered.com/hwsurvey] for VRAM availability statistics][:research] [44:16][Enable ProcessTiledImport() to load the asset-tile into a provisional bitmap][:"asset loading"] [47:25][Texture Borders, for sub-pixel :rendering][:"asset loading" :blackboard] [51:33][Where the 1-pixel border approach falls down: Mipmapping][:blackboard :rendering] [54:14][Border thickening][:blackboard :drawing :rendering] [59:14][Make ProcessTiledImport() enforce an 8-pixel border, and warn about encroachments into this border][:"asset loading" :"error handling"] [1:08:01][Set up to store our tiles in the pack file][:"asset loading" :speech] [1:10:15][Make ProcessTiledImport() write our tiles into Bitmap->Memory][:"asset loading"] [1:13:09][Consider writing our tiles into a backing store before compacting down into the .hha file][:"asset loading" :speech] [1:18:03][Introduce WriteAssetBitmap()][:"asset loading"] [1:23:45][Change ProcessTiledImport() to load our tiles into a provisional bitmap before writing out to the .hha file][:"asset loading"] [1:43:03][Fix compile errors and stub out ReserveAsset(), ReserveData(), WriteAssetData() and WriteAsset()] [1:47:33][Q&A][:speech] [1:48:11][@sratke][Q: Will you rewrite the software rasterizer with SSE4?][:isa] [1:50:05][@hark85][I don't have AVX512][:isa] [1:50:51][@frostyninja][Q: You still haven't bounded HashValue in CheckForAssetChanges(). Thought I’d mention][:"asset loading"] [1:51:06][Make CheckForAssetChanges() bound the HashValue][:"asset loading"] [1:52:37][@json__bourne][Q: How long until Microsoft tries to force win32 to become obsolete, and what comes after win32 for games?] [1:53:27][Trying to play PUBG with Anna and Matt][:rant :speech] [2:01:57][@centhusiast][Q: If I remember correctly, stb_lib was used in one of the episodes. Was it for loading PNG assets?[ref site=GitHub page="nothings/stb/stb_truetype.h" url=https://github.com/nothings/stb/blob/master/stb_truetype.h]][:library] [2:04:21][@sopvop][Q: Since you already have deflate decoder implemented in PNG reader, will you implement deflate compressor for asset files?] [2:04:33][@frostyninja][Q: Speaking of stupid driver distribution, Sony only have DualShock 3 drivers for PC packaged with their PS Now software. Ridiculous] [2:05:03][@frostyninja][Q: Spent ages struggling with getting that damned controller to work] [2:05:07][@ivereadthesequel][Q: My poor friend said when Windows last updated for her it took four hours] [2:05:14][@toolegit2quit_][Q: Do you think Linux will take over? Seems unlikely. Also remember when the PlayStation 3 had Linux support?] [2:06:15][@thestalkingwolf][Q: What would it take to make it more designer friendly to develop on an Ubuntu or Fedora platform first?] [2:08:37][@puremouron][Q: MSVC does a terrible job with mod,[ref site="Compiler Explorer" page="x86-64 MSVC 19 2015 U3" url=https://godbolt.org/g/KDHstB] clang seems to do better[ref site="Compiler Explorer" page="x86-64 clang 6.0.0" url=https://godbolt.org/g/kgY6AM]] [2:09:19][@enemymouse][Q: Are you going to support more complex languages. Coding your own HarfBuzz text shaping equivalent?][:language] [2:09:54][@frostyninja][Q: Sixaxis / PS3 controller] [2:10:21][@ivereadthesequel][Q: So is our plan to infiltrate Microsoft and make Handmade Windows?] [2:11:32][@frostyninja][Q: Yeah they need a handshake thingy. You get past that with the driver though. That's exactly why I struggled with it. Writing a rawinput thingy for controllers] [2:11:47][@frostyninja][Q: Cant enable the controller through userland win32, sadly] [2:12:38][Brief continuation of the PUBG story][:speech] [2:13:10][@toolegit2quit_][Q: Isn't a big part of the issue that the operating system would need a lot of traction. If Jonathan or someone like you build an OS it would need a very significant amount of traction to incentivize game developers to build for that platform] [2:15:08][That's it, with a mention of the new site[ref site="Handmade Hero" page="Watch" url=https://handmadehero.org/watch] and a glimpse into the future][:speech] [/video]