Finishing Win32 Font Glyph Extraction
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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:13@marius_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:13@marius_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:13@marius_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:50@MrMuffles869 Hi there. I'm rather new to HMH. Do you ever talk about your keybindings that help you navigate more easily?
🗪
50:50@MrMuffles869 Hi there. I'm rather new to HMH. Do you ever talk about your keybindings that help you navigate more easily?
🗪
50:50@MrMuffles869 Hi there. I'm rather new to HMH. Do you ever talk about your keybindings that help you navigate more easily?
🗪
51:30@waterlimon Why is arbitrary padding required for the glyph bitmap? Is the correct method used for retrieving the actual glyph size?
🗪
51:30@waterlimon Why is arbitrary padding required for the glyph bitmap? Is the correct method used for retrieving the actual glyph size?
🗪
51:30@waterlimon Why is arbitrary padding required for the glyph bitmap? Is the correct method used for retrieving the actual glyph size?
🗪
51:52@garlandobloom Q: Tell us your NASA secrets
🗪
51:52@garlandobloom Q: Tell us your NASA secrets
🗪
51:52@garlandobloom Q: Tell us your NASA secrets
🗪
52:53@waterlimon "arbitrary" = 2 extra for width/height
🗪
52:53@waterlimon "arbitrary" = 2 extra for width/height
🗪
52:53@waterlimon "arbitrary" = 2 extra for width/height
🗪
54:07@aameen95 Do you think that this stream got wasted?
🗪
54:07@aameen95 Do you think that this stream got wasted?
🗪
54:07@aameen95 Do you think that this stream got wasted?
🗪
56:43@Robrobby Still a better debugger would have lead you to the solution much faster
🗪
56:43@Robrobby Still a better debugger would have lead you to the solution much faster
🗪
56:43@Robrobby Still a better debugger would have lead you to the solution much faster
🗪
57:04@Pseudonym73 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:04@Pseudonym73 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:04@Pseudonym73 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:37@Theup511 Did you turn down a twitch partnership?
🗪
58:37@Theup511 Did you turn down a twitch partnership?
🗪
58:37@Theup511 Did you turn down a twitch partnership?
🗪
1:00:07@TheSizik Have you thought about making a handmade asset viewer?
🗪
1:00:07@TheSizik Have you thought about making a handmade asset viewer?
🗪
1:00:07@TheSizik Have you thought about making a handmade asset viewer?
🗪
1:00:18@garlandobloom Q: Abner always lies and I always tell the truth, you may ask one question
🗪
1:00:18@garlandobloom Q: Abner always lies and I always tell the truth, you may ask one question
🗪
1:00:18@garlandobloom Q: Abner always lies and I always tell the truth, you may ask one question
🗪
1:00:30@Childz Does a better debugger exist?
🗪
1:00:30@Childz Does a better debugger exist?
🗪
1:00:30@Childz Does a better debugger exist?
🗪
1:00:37@Pseudonym73 The reason why I ask is that I've written code that I subsequently really had to write off
🗪
1:00:37@Pseudonym73 The reason why I ask is that I've written code that I subsequently really had to write off
🗪
1:00:37@Pseudonym73 The reason why I ask is that I've written code that I subsequently really had to write off
🗪
1:01:10@SoysauceTheKid I need my Casey emotes though
🗪
1:01:10@SoysauceTheKid I need my Casey emotes though
🗪
1:01:10@SoysauceTheKid I need my Casey emotes though
🗪
1:02:39@abnercoimbre 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:39@abnercoimbre 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:39@abnercoimbre 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:46@Zamar037 The chat wants you to play the Vista video again
🗪
1:03:46@Zamar037 The chat wants you to play the Vista video again
🗪
1:03:46@Zamar037 The chat wants you to play the Vista video again
🗪
1:03:54@dgmtv Should I stop using templates for my containers and adopt void* for ever?
🗪
1:03:54@dgmtv Should I stop using templates for my containers and adopt void* for ever?
🗪
1:03:54@dgmtv 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
🗩