[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Defining Font Metadata" vod_platform=youtube id=eIi2OYFWfdQ annotator=Miblo annotator=debiatan] [00:11][Recap and plan for the day] [01:24][We still need proper kerning and line spacing] [03:05][Review of the current status of our font rendering system] [05:14][We already support proportional fonts, but not kerning] [08:47][Keeping track of the previous codepoint] [11:33][GetHorizontalAdvanceForPair will tell us the kerning for two codepoints] [13:33][Kerning will be stored using the same dimensions of the font] [14:36][Reasons to special-case fonts instead of treating them as just a set of bitmaps] [16:58][Pros and cons of not paging in the fonts] [17:56][Let's load fonts dynamically] [18:40][Finding the best-matching font] [19:50][Calling GetFont] [21:03][GetBitmapForGlyph will bypass the asset matching system to retrieve a glyph] [22:50][Fonts will have their own ID type] [23:12][Implementing GetFont] [23:33][Defining what goes inside the font struct based on the way we use it] [24:21][We have four functions to implement. Let's stub them out] [30:12][Testing the hardcoded routines] [30:52][GetBestMatchFontFrom] [31:34][Editing the asset file font format to include the information we need] [32:20][Filling in the loaded_font struct] [34:55][Guarding against absent codepoints] [38:05][Building the kerning tables] [38:31][Introducing a separate asset type id for font glyphs] [40:26][Deciding what goes inside hha_font] [41:58][(aside) Metagenerated containers] [44:32][Be a Jedi][quote 177] [46:54][Implementing LoadFont] [49:20][Moving some more font information out and into the asset file] [53:16][Computing the size taken by the font data] [54:00][Leaving the code in a compiling state] [57:48][Try to run, expecting it to explode][quote 178] [58:57][Q&A][:speech] [59:20][@evraire][Did you run the asset builder?] [1:00:28][@cubercaleb][Missed part of the stream, can you give context on why you want the meta-programming thing?] [1:02:36][@RobotChocolateDino][How would you make the font tables more sparse so you don't need to store kerning for pairs that probably wont get drawn, like ww?] [1:04:04][@kknewkles][People that follow development of HMH on stream, how will you protect us from spoilers?] [1:05:08][@OMGaGiantRock][You use CodePointCount < CodePoint, but will this not fail if the first CodePoint <> 0? Or will we now need to include the ASCII control chars to make CodePointCount work?] [1:06:42][@Apetradragon][Will you have stream later: On various meta programming tricks? Some useful & nifty tips and tricks for developers?] [1:07:32][@ijustwantfood][Which Chinese dialect are you thinking of supporting?] [1:08:35][@ejunkie64][How big do you think the game will be in the end?][quote 179] [1:08:51][@OstrovskiVlad][How about right-to-left languages?] [1:10:01][We ended the questions right as the stream ended][:speech] [/video]