Credits Menu

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?