Handmade Hero»Episode Guide
Defining Font Metadata
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
00:11Recap and plan for the day
00:11Recap and plan for the day
00:11Recap and plan for the day
01:24We still need proper kerning and line spacing
01:24We still need proper kerning and line spacing
01:24We still need proper kerning and line spacing
03:05Review of the current status of our font rendering system
03:05Review of the current status of our font rendering system
03:05Review of the current status of our font rendering system
05:14We already support proportional fonts, but not kerning
05:14We already support proportional fonts, but not kerning
05:14We already support proportional fonts, but not kerning
08:47Keeping track of the previous codepoint
08:47Keeping track of the previous codepoint
08:47Keeping track of the previous codepoint
11:33GetHorizontalAdvanceForPair will tell us the kerning for two codepoints
11:33GetHorizontalAdvanceForPair will tell us the kerning for two codepoints
11:33GetHorizontalAdvanceForPair will tell us the kerning for two codepoints
13:33Kerning will be stored using the same dimensions of the font
13:33Kerning will be stored using the same dimensions of the font
13:33Kerning will be stored using the same dimensions of the font
14:36Reasons to special-case fonts instead of treating them as just a set of bitmaps
14:36Reasons to special-case fonts instead of treating them as just a set of bitmaps
14:36Reasons to special-case fonts instead of treating them as just a set of bitmaps
16:58Pros and cons of not paging in the fonts
16:58Pros and cons of not paging in the fonts
16:58Pros and cons of not paging in the fonts
17:56Let's load fonts dynamically
17:56Let's load fonts dynamically
17:56Let's load fonts dynamically
18:40Finding the best-matching font
18:40Finding the best-matching font
18:40Finding the best-matching font
19:50Calling GetFont
19:50Calling GetFont
19:50Calling GetFont
21:03GetBitmapForGlyph will bypass the asset matching system to retrieve a glyph
21:03GetBitmapForGlyph will bypass the asset matching system to retrieve a glyph
21:03GetBitmapForGlyph will bypass the asset matching system to retrieve a glyph
22:50Fonts will have their own ID type
22:50Fonts will have their own ID type
22:50Fonts will have their own ID type
23:12Implementing GetFont
23:12Implementing GetFont
23:12Implementing GetFont
23:33Defining what goes inside the font struct based on the way we use it
23:33Defining what goes inside the font struct based on the way we use it
23:33Defining what goes inside the font struct based on the way we use it
24:21We have four functions to implement. Let's stub them out
24:21We have four functions to implement. Let's stub them out
24:21We have four functions to implement. Let's stub them out
30:12Testing the hardcoded routines
30:12Testing the hardcoded routines
30:12Testing the hardcoded routines
30:52GetBestMatchFontFrom
30:52GetBestMatchFontFrom
30:52GetBestMatchFontFrom
31:34Editing the asset file font format to include the information we need
31:34Editing the asset file font format to include the information we need
31:34Editing the asset file font format to include the information we need
32:20Filling in the loaded_font struct
32:20Filling in the loaded_font struct
32:20Filling in the loaded_font struct
34:55Guarding against absent codepoints
34:55Guarding against absent codepoints
34:55Guarding against absent codepoints
38:05Building the kerning tables
38:05Building the kerning tables
38:05Building the kerning tables
38:31Introducing a separate asset type id for font glyphs
38:31Introducing a separate asset type id for font glyphs
38:31Introducing a separate asset type id for font glyphs
40:26Deciding what goes inside hha_font
40:26Deciding what goes inside hha_font
40:26Deciding what goes inside hha_font
41:58(aside) Metagenerated containers
41:58(aside) Metagenerated containers
41:58(aside) Metagenerated containers
44:32Be a Jediα
44:32Be a Jediα
44:32Be a Jediα
46:54Implementing LoadFont
46:54Implementing LoadFont
46:54Implementing LoadFont
49:20Moving some more font information out and into the asset file
49:20Moving some more font information out and into the asset file
49:20Moving some more font information out and into the asset file
53:16Computing the size taken by the font data
53:16Computing the size taken by the font data
53:16Computing the size taken by the font data
54:00Leaving the code in a compiling state
54:00Leaving the code in a compiling state
54:00Leaving the code in a compiling state
57:48Try to run, expecting it to explodeβ
57:48Try to run, expecting it to explodeβ
57:48Try to run, expecting it to explodeβ
58:57Q&A
🗩
58:57Q&A
🗩
58:57Q&A
🗩
59:20evraire Did you run the asset builder?
🗪
59:20evraire Did you run the asset builder?
🗪
59:20evraire Did you run the asset builder?
🗪
1:00:28cubercaleb Missed part of the stream, can you give context on why you want the meta-programming thing?
🗪
1:00:28cubercaleb Missed part of the stream, can you give context on why you want the meta-programming thing?
🗪
1:00:28cubercaleb Missed part of the stream, can you give context on why you want the meta-programming thing?
🗪
1:02:36RobotChocolateDino 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:02:36RobotChocolateDino 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:02:36RobotChocolateDino 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:04kknewkles People that follow development of HMH on stream, how will you protect us from spoilers?
🗪
1:04:04kknewkles People that follow development of HMH on stream, how will you protect us from spoilers?
🗪
1:04:04kknewkles People that follow development of HMH on stream, how will you protect us from spoilers?
🗪
1:05:08OMGaGiantRock 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:05:08OMGaGiantRock 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:05:08OMGaGiantRock 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:42Apetradragon Will you have stream later: On various meta programming tricks? Some useful & nifty tips and tricks for developers?
🗪
1:06:42Apetradragon Will you have stream later: On various meta programming tricks? Some useful & nifty tips and tricks for developers?
🗪
1:06:42Apetradragon Will you have stream later: On various meta programming tricks? Some useful & nifty tips and tricks for developers?
🗪
1:07:32ijustwantfood Which Chinese dialect are you thinking of supporting?
🗪
1:07:32ijustwantfood Which Chinese dialect are you thinking of supporting?
🗪
1:07:32ijustwantfood Which Chinese dialect are you thinking of supporting?
🗪
1:08:35ejunkie64 How big do you think the game will be in the end?γ
🗪
1:08:35ejunkie64 How big do you think the game will be in the end?γ
🗪
1:08:35ejunkie64 How big do you think the game will be in the end?γ
🗪
1:08:51OstrovskiVlad How about right-to-left languages?
🗪
1:08:51OstrovskiVlad How about right-to-left languages?
🗪
1:08:51OstrovskiVlad How about right-to-left languages?
🗪
1:10:01We ended the questions right as the stream ended
🗩
1:10:01We ended the questions right as the stream ended
🗩
1:10:01We ended the questions right as the stream ended
🗩