Handmade Hero»Episode Guide
Precise Font Alignment
?
?

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)
0:14Recap and plan for today
0:14Recap and plan for today
0:14Recap and plan for today
1:46Review of last episode
1:46Review of last episode
1:46Review of last episode
2:15The first line should start one line down from the top of the screen
2:15The first line should start one line down from the top of the screen
2:15The first line should start one line down from the top of the screen
4:47We want to be able to access the LineAdvance information without having to load the font
4:47We want to be able to access the LineAdvance information without having to load the font
4:47We want to be able to access the LineAdvance information without having to load the font
5:38The placement is not correct yet
5:38The placement is not correct yet
5:38The placement is not correct yet
7:15The zero Y is at the center of the screen, not the edge
7:15The zero Y is at the center of the screen, not the edge
7:15The zero Y is at the center of the screen, not the edge
7:39Testing multiple sizes inside a word
7:39Testing multiple sizes inside a word
7:39Testing multiple sizes inside a word
8:54We don't have the necessary information to do kerning between characters of different sizes
8:54We don't have the necessary information to do kerning between characters of different sizes
8:54We don't have the necessary information to do kerning between characters of different sizes
9:26(Blackboard) Explanation of the problem
9:26(Blackboard) Explanation of the problem
9:26(Blackboard) Explanation of the problem
12:24Our Kerning tables don't specify the initial horizontal offset in the absence of a preceding glyph
12:24Our Kerning tables don't specify the initial horizontal offset in the absence of a preceding glyph
12:24Our Kerning tables don't specify the initial horizontal offset in the absence of a preceding glyph
13:50Special-casing the kerning for the null glyph in the asset packer
13:50Special-casing the kerning for the null glyph in the asset packer
13:50Special-casing the kerning for the null glyph in the asset packer
15:02Fix the variable shadowingα
15:02Fix the variable shadowingα
15:02Fix the variable shadowingα
15:13Still not lining up with the left edge and upper edges
15:13Still not lining up with the left edge and upper edges
15:13Still not lining up with the left edge and upper edges
15:51Lining up with the top edge by looking at the ascenders and descenders of the font
15:51Lining up with the top edge by looking at the ascenders and descenders of the font
15:51Lining up with the top edge by looking at the ascenders and descenders of the font
21:51The characters still don't line up with the top edge, but it's because the font includes glyphs taller than the ones we are displaying
21:51The characters still don't line up with the top edge, but it's because the font includes glyphs taller than the ones we are displaying
21:51The characters still don't line up with the top edge, but it's because the font includes glyphs taller than the ones we are displaying
23:46Aligning the text with the left edge. Baking the leading space into the kerning
23:46Aligning the text with the left edge. Baking the leading space into the kerning
23:46Aligning the text with the left edge. Baking the leading space into the kerning
25:55Processing the characters before the fonts to have access to the necessary information
25:55Processing the characters before the fonts to have access to the necessary information
25:55Processing the characters before the fonts to have access to the necessary information
30:38Compare kerningβ
30:38Compare kerningβ
30:38Compare kerningβ
32:03The ABC's A was already included in the horizontal advance
32:03The ABC's A was already included in the horizontal advance
32:03The ABC's A was already included in the horizontal advance
33:05The kerning is still not quite right
33:05The kerning is still not quite right
33:05The kerning is still not quite right
33:45Using our own measurement of the width of the character instead of the ABC's B
33:45Using our own measurement of the width of the character instead of the ABC's B
33:45Using our own measurement of the width of the character instead of the ABC's B
35:46Debugging some more
35:46Debugging some more
35:46Debugging some more
40:49Checking the documentation of the ABCs
40:49Checking the documentation of the ABCs
40:49Checking the documentation of the ABCs
43:42(Blackboard) Thinking some more about the problem
43:42(Blackboard) Thinking some more about the problem
43:42(Blackboard) Thinking some more about the problem
45:04In order to be able to flush-align all characters to the left, the prestep of the current character should be applied to the next character!
45:04In order to be able to flush-align all characters to the left, the prestep of the current character should be applied to the next character!
45:04In order to be able to flush-align all characters to the left, the prestep of the current character should be applied to the next character!
47:45Subtracting our kerning adjustment from the previous character
47:45Subtracting our kerning adjustment from the previous character
47:45Subtracting our kerning adjustment from the previous character
49:45No kerning for characters following the null codepoint
49:45No kerning for characters following the null codepoint
49:45No kerning for characters following the null codepoint
50:57Is it even possible to match Windows' kerning exactly?
50:57Is it even possible to match Windows' kerning exactly?
50:57Is it even possible to match Windows' kerning exactly?
51:30We'll have to compress the font ranges to support kerning for other languages
51:30We'll have to compress the font ranges to support kerning for other languages
51:30We'll have to compress the font ranges to support kerning for other languages
55:51Q&A
🗩
55:51Q&A
🗩
55:51Q&A
🗩
57:01Miblo The more I see the kerning in Notepad, compared to yours, the more awful it looks to me
🗪
57:01Miblo The more I see the kerning in Notepad, compared to yours, the more awful it looks to me
🗪
57:01Miblo The more I see the kerning in Notepad, compared to yours, the more awful it looks to me
🗪
57:24Pseudonym73 I realise that this is uncharted territory, but it seems to me that font rendering is taking more time than the rest of the renderer. Is that normal?
🗪
57:24Pseudonym73 I realise that this is uncharted territory, but it seems to me that font rendering is taking more time than the rest of the renderer. Is that normal?
🗪
57:24Pseudonym73 I realise that this is uncharted territory, but it seems to me that font rendering is taking more time than the rest of the renderer. Is that normal?
🗪
1:00:29dmitsuki Isn't Japanese evenly spaced?
🗪
1:00:29dmitsuki Isn't Japanese evenly spaced?
🗪
1:00:29dmitsuki Isn't Japanese evenly spaced?
🗪
1:00:52abnercoimbre Migraine :(. Glad to at least catch the Q&A
🗪
1:00:52abnercoimbre Migraine :(. Glad to at least catch the Q&A
🗪
1:00:52abnercoimbre Migraine :(. Glad to at least catch the Q&A
🗪
1:01:09Robrobby I was testing kerning in Notepad, Word, Wordpad... No kerning there? Where do you have seen kerning in Windows?
🗪
1:01:09Robrobby I was testing kerning in Notepad, Word, Wordpad... No kerning there? Where do you have seen kerning in Windows?
🗪
1:01:09Robrobby I was testing kerning in Notepad, Word, Wordpad... No kerning there? Where do you have seen kerning in Windows?
🗪
1:01:26TheSizik Don't forget the boilerplate
🗪
1:01:26TheSizik Don't forget the boilerplate
🗪
1:01:26TheSizik Don't forget the boilerplate
🗪
1:01:32dmitsuki John Carmack programmed low level graphics and got a Ferrari. Font rendering guy never got anything. When are we going to go back to programming cool superstar things?
🗪
1:01:32dmitsuki John Carmack programmed low level graphics and got a Ferrari. Font rendering guy never got anything. When are we going to go back to programming cool superstar things?
🗪
1:01:32dmitsuki John Carmack programmed low level graphics and got a Ferrari. Font rendering guy never got anything. When are we going to go back to programming cool superstar things?
🗪
1:02:44NexMetu I'm in my second year at uni for programming, and I still have problems getting my head around single things. My question is how long did it take you to have a good understanding of programming in general?
🗪
1:02:44NexMetu I'm in my second year at uni for programming, and I still have problems getting my head around single things. My question is how long did it take you to have a good understanding of programming in general?
🗪
1:02:44NexMetu I'm in my second year at uni for programming, and I still have problems getting my head around single things. My question is how long did it take you to have a good understanding of programming in general?
🗪
1:03:11Pseudonym73 Fair enough. Maybe it just seems like progress is slower for some definition of "progress"
🗪
1:03:11Pseudonym73 Fair enough. Maybe it just seems like progress is slower for some definition of "progress"
🗪
1:03:11Pseudonym73 Fair enough. Maybe it just seems like progress is slower for some definition of "progress"
🗪
1:03:42graeme7 I'm confused why the font rendering relies so much on windows. Isn't all this stuff stored in the font files, or is that harder without Windows text metrics and such? Or, to put it another way, how would what we did today be different if we were using stb_truetype?
🗪
1:03:42graeme7 I'm confused why the font rendering relies so much on windows. Isn't all this stuff stored in the font files, or is that harder without Windows text metrics and such? Or, to put it another way, how would what we did today be different if we were using stb_truetype?
🗪
1:03:42graeme7 I'm confused why the font rendering relies so much on windows. Isn't all this stuff stored in the font files, or is that harder without Windows text metrics and such? Or, to put it another way, how would what we did today be different if we were using stb_truetype?
🗪
1:04:18Robrobby On the MSDN entry "Uniscribe Glossary" ABC Values is better explained how Windows understands it
🗪
1:04:18Robrobby On the MSDN entry "Uniscribe Glossary" ABC Values is better explained how Windows understands it
🗪
1:04:18Robrobby On the MSDN entry "Uniscribe Glossary" ABC Values is better explained how Windows understands it
🗪
1:07:00Ignore the documentation and just do GetCharWidth32
1:07:00Ignore the documentation and just do GetCharWidth32
1:07:00Ignore the documentation and just do GetCharWidth32
1:08:13See how that kerning looks
1:08:13See how that kerning looks
1:08:13See how that kerning looks
1:10:10Danyguag Do you use the graphics card at all when rendering?
🗪
1:10:10Danyguag Do you use the graphics card at all when rendering?
🗪
1:10:10Danyguag Do you use the graphics card at all when rendering?
🗪
1:10:26Childz I'm sure this has been answered so feel free to ignore if true. What are the features of C++ that you use that keep you from using just plain old C?
🗪
1:10:26Childz I'm sure this has been answered so feel free to ignore if true. What are the features of C++ that you use that keep you from using just plain old C?
🗪
1:10:26Childz I'm sure this has been answered so feel free to ignore if true. What are the features of C++ that you use that keep you from using just plain old C?
🗪
1:10:52Robrobby When you say Windows uses kerning, why is every letter never overlapping in the space of the followed letter? In your code I see the letters overlapping. Did I understand kerning wrong?
🗪
1:10:52Robrobby When you say Windows uses kerning, why is every letter never overlapping in the space of the followed letter? In your code I see the letters overlapping. Did I understand kerning wrong?
🗪
1:10:52Robrobby When you say Windows uses kerning, why is every letter never overlapping in the space of the followed letter? In your code I see the letters overlapping. Did I understand kerning wrong?
🗪
1:11:36dmitsuki O-oh yeah, well, John Carmack also got to make Rocketships, so he wins
🗪
1:11:36dmitsuki O-oh yeah, well, John Carmack also got to make Rocketships, so he wins
🗪
1:11:36dmitsuki O-oh yeah, well, John Carmack also got to make Rocketships, so he wins
🗪
1:12:03cubercaleb Are you saying Adobe has better programmers than Id?
🗪
1:12:03cubercaleb Are you saying Adobe has better programmers than Id?
🗪
1:12:03cubercaleb Are you saying Adobe has better programmers than Id?
🗪
1:13:01dmitsuki Why didn't we use bitmap fonts and used TTF? Bitmap fonts are cross platform, are they not?
🗪
1:13:01dmitsuki Why didn't we use bitmap fonts and used TTF? Bitmap fonts are cross platform, are they not?
🗪
1:13:01dmitsuki Why didn't we use bitmap fonts and used TTF? Bitmap fonts are cross platform, are they not?
🗪
1:13:36GameDeve When I render on a GPU, is there a way without copying the render result back to RAM?
🗪
1:13:36GameDeve When I render on a GPU, is there a way without copying the render result back to RAM?
🗪
1:13:36GameDeve When I render on a GPU, is there a way without copying the render result back to RAM?
🗪
1:14:04jooda12 Japanese isn't evenly spaced. Some characters like 「 and 」 rely on kerning
🗪
1:14:04jooda12 Japanese isn't evenly spaced. Some characters like 「 and 」 rely on kerning
🗪
1:14:04jooda12 Japanese isn't evenly spaced. Some characters like 「 and 」 rely on kerning
🗪
1:14:57Danyguag How do you render to the GPU?
🗪
1:14:57Danyguag How do you render to the GPU?
🗪
1:14:57Danyguag How do you render to the GPU?
🗪
1:15:27guit4rfreak Favorite font for reading?
🗪
1:15:27guit4rfreak Favorite font for reading?
🗪
1:15:27guit4rfreak Favorite font for reading?
🗪
1:15:44GameDeve To display the result
🗪
1:15:44GameDeve To display the result
🗪
1:15:44GameDeve To display the result
🗪
1:16:34gasto5 I almost got a headache when you said alignment is not the same as kerning, please expound
🗪
1:16:34gasto5 I almost got a headache when you said alignment is not the same as kerning, please expound
🗪
1:16:34gasto5 I almost got a headache when you said alignment is not the same as kerning, please expound
🗪
1:16:51Blackboard: Spacing vs. Kerning
1:16:51Blackboard: Spacing vs. Kerning
1:16:51Blackboard: Spacing vs. Kerning
1:20:14cubercaleb Would you rather have a CPU with more cores than a GPU, or enough clock cycles to outperform the GPU with software rendering?
🗪
1:20:14cubercaleb Would you rather have a CPU with more cores than a GPU, or enough clock cycles to outperform the GPU with software rendering?
🗪
1:20:14cubercaleb Would you rather have a CPU with more cores than a GPU, or enough clock cycles to outperform the GPU with software rendering?
🗪
1:20:32jooda12 You can look here1, 3. Tsumegumi for Japanese kerning
🗪
1:20:32jooda12 You can look here1, 3. Tsumegumi for Japanese kerning
🗪
1:20:32jooda12 You can look here1, 3. Tsumegumi for Japanese kerning
🗪
1:22:23Robrobby When thinking Adobe has a market value of over 40billion, why no great programmer wants to do a better Photoshop?
🗪
1:22:23Robrobby When thinking Adobe has a market value of over 40billion, why no great programmer wants to do a better Photoshop?
🗪
1:22:23Robrobby When thinking Adobe has a market value of over 40billion, why no great programmer wants to do a better Photoshop?
🗪
1:24:40dmitsuki There are actually a lot of people competing with Photoshop, and you are using one of those products on stream right now...
🗪
1:24:40dmitsuki There are actually a lot of people competing with Photoshop, and you are using one of those products on stream right now...
🗪
1:24:40dmitsuki There are actually a lot of people competing with Photoshop, and you are using one of those products on stream right now...
🗪
1:26:01Wind it down
🗩
1:26:01Wind it down
🗩
1:26:01Wind it down
🗩