Handmade Hero»Episode Guide
Finishing Win32 Font Glyph Extraction
?
?

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:15Recap and plan for today
0:15Recap and plan for today
0:15Recap and plan for today
1:16First, let's solve two small problems with the code introduced during the previous episode's Q&A
1:16First, let's solve two small problems with the code introduced during the previous episode's Q&A
1:16First, let's solve two small problems with the code introduced during the previous episode's Q&A
2:31Back to fonts
2:31Back to fonts
2:31Back to fonts
3:11Getting antialiased fonts through Windows
3:11Getting antialiased fonts through Windows
3:11Getting antialiased fonts through Windows
3:39Maybe creating a color CompatibleDC will get us AA. No, that doesn't help
3:39Maybe creating a color CompatibleDC will get us AA. No, that doesn't help
3:39Maybe creating a color CompatibleDC will get us AA. No, that doesn't help
5:20Using CreateDIBSection to have more control over the bitmap we create
5:20Using CreateDIBSection to have more control over the bitmap we create
5:20Using CreateDIBSection to have more control over the bitmap we create
10:06Initializing the BITMAPINFO passed to CreateDIBSection
10:06Initializing the BITMAPINFO passed to CreateDIBSection
10:06Initializing the BITMAPINFO passed to CreateDIBSection
13:45Yes, that worked!
13:45Yes, that worked!
13:45Yes, that worked!
14:21Get the contents of the bitmap directly, without issuing an OS call for each pixel
14:21Get the contents of the bitmap directly, without issuing an OS call for each pixel
14:21Get the contents of the bitmap directly, without issuing an OS call for each pixel
21:30Our pixel pointer shows only zeros. Why is that?
21:30Our pixel pointer shows only zeros. Why is that?
21:30Our pixel pointer shows only zeros. Why is that?
29:57(aside) On Handmade Hero we want to understand our code
29:57(aside) On Handmade Hero we want to understand our code
29:57(aside) On Handmade Hero we want to understand our code
31:18Wiping out the bitmap to see if that change is visible through our pixel pointer
31:18Wiping out the bitmap to see if that change is visible through our pixel pointer
31:18Wiping out the bitmap to see if that change is visible through our pixel pointer
32:32This bitmap is a lieα
32:32This bitmap is a lieα
32:32This bitmap is a lieα
33:00Shrinking the bitmap to see it more easily inside the debugger's memory watch window
33:00Shrinking the bitmap to see it more easily inside the debugger's memory watch window
33:00Shrinking the bitmap to see it more easily inside the debugger's memory watch window
34:12The bitmap goes bottom-up!
34:12The bitmap goes bottom-up!
34:12The bitmap goes bottom-up!
36:44Accessing pixels directly instead of through GetPixel
36:44Accessing pixels directly instead of through GetPixel
36:44Accessing pixels directly instead of through GetPixel
41:40Removing the debug black background
41:40Removing the debug black background
41:40Removing the debug black background
42:14Reintroducing the 1-pixel apron around the glyphs
42:14Reintroducing the 1-pixel apron around the glyphs
42:14Reintroducing the 1-pixel apron around the glyphs
47:26Testing today's changes
47:26Testing today's changes
47:26Testing today's changes
48:12Checking our results against Wordpad's font rendering
48:12Checking our results against Wordpad's font rendering
48:12Checking our results against Wordpad's font rendering
49:23Q&A
🗩
49:23Q&A
🗩
49:23Q&A
🗩
50:13marius_av You should have passed GetDC(0) to CreateCompatibleBitmap, not CreateCompatibleDC. But that's fine, you would still have to use a different method to access bitmap data efficiently
🗪
50:13marius_av You should have passed GetDC(0) to CreateCompatibleBitmap, not CreateCompatibleDC. But that's fine, you would still have to use a different method to access bitmap data efficiently
🗪
50:13marius_av You should have passed GetDC(0) to CreateCompatibleBitmap, not CreateCompatibleDC. But that's fine, you would still have to use a different method to access bitmap data efficiently
🗪
50:50MrMuffles869 Hi there. I'm rather new to HMH. Do you ever talk about your keybindings that help you navigate more easily?
🗪
50:50MrMuffles869 Hi there. I'm rather new to HMH. Do you ever talk about your keybindings that help you navigate more easily?
🗪
50:50MrMuffles869 Hi there. I'm rather new to HMH. Do you ever talk about your keybindings that help you navigate more easily?
🗪
51:30waterlimon Why is arbitrary padding required for the glyph bitmap? Is the correct method used for retrieving the actual glyph size?
🗪
51:30waterlimon Why is arbitrary padding required for the glyph bitmap? Is the correct method used for retrieving the actual glyph size?
🗪
51:30waterlimon Why is arbitrary padding required for the glyph bitmap? Is the correct method used for retrieving the actual glyph size?
🗪
51:52garlandobloom Q: Tell us your NASA secrets
🗪
51:52garlandobloom Q: Tell us your NASA secrets
🗪
51:52garlandobloom Q: Tell us your NASA secrets
🗪
52:53waterlimon "arbitrary" = 2 extra for width/height
🗪
52:53waterlimon "arbitrary" = 2 extra for width/height
🗪
52:53waterlimon "arbitrary" = 2 extra for width/height
🗪
54:07aameen95 Do you think that this stream got wasted?
🗪
54:07aameen95 Do you think that this stream got wasted?
🗪
54:07aameen95 Do you think that this stream got wasted?
🗪
56:43Robrobby Still a better debugger would have lead you to the solution much faster
🗪
56:43Robrobby Still a better debugger would have lead you to the solution much faster
🗪
56:43Robrobby Still a better debugger would have lead you to the solution much faster
🗪
57:04Pseudonym73 Just to clarify, it's okay to delete code that you don't understand and replace it with code that you do understand, as an alternative to trying to understand code that you don't understand?
🗪
57:04Pseudonym73 Just to clarify, it's okay to delete code that you don't understand and replace it with code that you do understand, as an alternative to trying to understand code that you don't understand?
🗪
57:04Pseudonym73 Just to clarify, it's okay to delete code that you don't understand and replace it with code that you do understand, as an alternative to trying to understand code that you don't understand?
🗪
58:37Theup511 Did you turn down a twitch partnership?
🗪
58:37Theup511 Did you turn down a twitch partnership?
🗪
58:37Theup511 Did you turn down a twitch partnership?
🗪
1:00:07TheSizik Have you thought about making a handmade asset viewer?
🗪
1:00:07TheSizik Have you thought about making a handmade asset viewer?
🗪
1:00:07TheSizik Have you thought about making a handmade asset viewer?
🗪
1:00:18garlandobloom Q: Abner always lies and I always tell the truth, you may ask one question
🗪
1:00:18garlandobloom Q: Abner always lies and I always tell the truth, you may ask one question
🗪
1:00:18garlandobloom Q: Abner always lies and I always tell the truth, you may ask one question
🗪
1:00:30Childz Does a better debugger exist?
🗪
1:00:30Childz Does a better debugger exist?
🗪
1:00:30Childz Does a better debugger exist?
🗪
1:00:37Pseudonym73 The reason why I ask is that I've written code that I subsequently really had to write off
🗪
1:00:37Pseudonym73 The reason why I ask is that I've written code that I subsequently really had to write off
🗪
1:00:37Pseudonym73 The reason why I ask is that I've written code that I subsequently really had to write off
🗪
1:01:10SoysauceTheKid I need my Casey emotes though
🗪
1:01:10SoysauceTheKid I need my Casey emotes though
🗪
1:01:10SoysauceTheKid I need my Casey emotes though
🗪
1:02:39abnercoimbre Q: We're out of questions, but you made my life difficult tonight XD. You know I'm under NDAs like you. YOU KNOW HOW IT IS, BRO
🗪
1:02:39abnercoimbre Q: We're out of questions, but you made my life difficult tonight XD. You know I'm under NDAs like you. YOU KNOW HOW IT IS, BRO
🗪
1:02:39abnercoimbre Q: We're out of questions, but you made my life difficult tonight XD. You know I'm under NDAs like you. YOU KNOW HOW IT IS, BRO
🗪
1:03:46Zamar037 The chat wants you to play the Vista video again
🗪
1:03:46Zamar037 The chat wants you to play the Vista video again
🗪
1:03:46Zamar037 The chat wants you to play the Vista video again
🗪
1:03:54dgmtv Should I stop using templates for my containers and adopt void* for ever?
🗪
1:03:54dgmtv Should I stop using templates for my containers and adopt void* for ever?
🗪
1:03:54dgmtv Should I stop using templates for my containers and adopt void* for ever?
🗪
1:06:02Wind this down
🗩
1:06:02Wind this down
🗩
1:06:02Wind this down
🗩