Handmade Hero»Episode Guide
Rendering Lines of Text
?
?

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:12Recap and plan for the day
0:12Recap and plan for the day
0:12Recap and plan for the day
2:42What font information should be included in the asset file? Let's write the usage code first
2:42What font information should be included in the asset file? Let's write the usage code first
2:42What font information should be included in the asset file? Let's write the usage code first
4:35Always write the code you know how to write first
4:35Always write the code you know how to write first
4:35Always write the code you know how to write first
6:06Approaching the text rendering problem writing the usage code first
6:06Approaching the text rendering problem writing the usage code first
6:06Approaching the text rendering problem writing the usage code first
6:44Our goal is to display the debug timers on the screen
6:44Our goal is to display the debug timers on the screen
6:44Our goal is to display the debug timers on the screen
8:44Implementing OverlayCycleCounters
8:44Implementing OverlayCycleCounters
8:44Implementing OverlayCycleCounters
9:56Assuming we have a render_group and the necessary functions to write strings to it
9:56Assuming we have a render_group and the necessary functions to write strings to it
9:56Assuming we have a render_group and the necessary functions to write strings to it
11:57(Aside) Naming the debug counters the cheesy way
11:57(Aside) Naming the debug counters the cheesy way
11:57(Aside) Naming the debug counters the cheesy way
14:29The debug code will take care of the location on the screen of the debug strings
14:29The debug code will take care of the location on the screen of the debug strings
14:29The debug code will take care of the location on the screen of the debug strings
16:21Introducing a separate, globally accessible render_group for debug output
16:21Introducing a separate, globally accessible render_group for debug output
16:21Introducing a separate, globally accessible render_group for debug output
18:47Pros and cons of using a separate render_group type
18:47Pros and cons of using a separate render_group type
18:47Pros and cons of using a separate render_group type
20:16Implementing DEBUGTextLine
20:16Implementing DEBUGTextLine
20:16Implementing DEBUGTextLine
24:06Calling OverlayCycleCounters
24:06Calling OverlayCycleCounters
24:06Calling OverlayCycleCounters
24:54Setting up the DEBUGRenderGroup
24:54Setting up the DEBUGRenderGroup
24:54Setting up the DEBUGRenderGroup
26:17Allocating memory for the DEBUGRenderGroup
26:17Allocating memory for the DEBUGRenderGroup
26:17Allocating memory for the DEBUGRenderGroup
27:14Rendering the DEBUGRenderGroup to the output
27:14Rendering the DEBUGRenderGroup to the output
27:14Rendering the DEBUGRenderGroup to the output
28:53Using BeginRender and EndRender to reset the graphics push_buffer_size and avoid recreating render groups
28:53Using BeginRender and EndRender to reset the graphics push_buffer_size and avoid recreating render groups
28:53Using BeginRender and EndRender to reset the graphics push_buffer_size and avoid recreating render groups
31:02Sanity checks to protect against possible mistakes when calling or failing to call BeginRender and EndRender
31:02Sanity checks to protect against possible mistakes when calling or failing to call BeginRender and EndRender
31:02Sanity checks to protect against possible mistakes when calling or failing to call BeginRender and EndRender
34:15Setting up the DEBUGRenderGroup to display bitmaps
34:15Setting up the DEBUGRenderGroup to display bitmaps
34:15Setting up the DEBUGRenderGroup to display bitmaps
34:29Configuring the DEBUGRenderGroup to use an orthographic projection
34:29Configuring the DEBUGRenderGroup to use an orthographic projection
34:29Configuring the DEBUGRenderGroup to use an orthographic projection
36:03Testing what we have so far
36:03Testing what we have so far
36:03Testing what we have so far
36:51Drawing a line of letters
36:51Drawing a line of letters
36:51Drawing a line of letters
37:49Advancing to the next line
37:49Advancing to the next line
37:49Advancing to the next line
39:22Implementing DEBUGReset to bring the text back to the first line
39:22Implementing DEBUGReset to bring the text back to the first line
39:22Implementing DEBUGReset to bring the text back to the first line
41:24Including lower-case letters in the asset file
41:24Including lower-case letters in the asset file
41:24Including lower-case letters in the asset file
43:36We have lower-case letters
43:36We have lower-case letters
43:36We have lower-case letters
43:53Special-casing spaces
43:53Special-casing spaces
43:53Special-casing spaces
44:55Moving the text to the top-left corner
44:55Moving the text to the top-left corner
44:55Moving the text to the top-left corner
46:10Using pixels as the unit for the DEBUGRenderGroup
46:10Using pixels as the unit for the DEBUGRenderGroup
46:10Using pixels as the unit for the DEBUGRenderGroup
48:36We can't use the looped live code editing to change global variables
48:36We can't use the looped live code editing to change global variables
48:36We can't use the looped live code editing to change global variables
50:53Resetting AtY to a more appropriate position
50:53Resetting AtY to a more appropriate position
50:53Resetting AtY to a more appropriate position
51:40Resetting LeftEdge a more appropriate position
51:40Resetting LeftEdge a more appropriate position
51:40Resetting LeftEdge a more appropriate position
52:10Testing what we have so far and preview of coming attractions
52:10Testing what we have so far and preview of coming attractions
52:10Testing what we have so far and preview of coming attractions
54:11Q&A
🗩
54:11Q&A
🗩
54:11Q&A
🗩
54:34Kelimion Will you be addressing the subscript, superscript, en-space, em-space and other types of space tomorrow as well?
🗪
54:34Kelimion Will you be addressing the subscript, superscript, en-space, em-space and other types of space tomorrow as well?
🗪
54:34Kelimion Will you be addressing the subscript, superscript, en-space, em-space and other types of space tomorrow as well?
🗪
56:33BrainCruser Will you add edges to the font?
🗪
56:33BrainCruser Will you add edges to the font?
🗪
56:33BrainCruser Will you add edges to the font?
🗪
57:00Renroh What's the difference between making a game in C++ and making a game in Java?
🗪
57:00Renroh What's the difference between making a game in C++ and making a game in Java?
🗪
57:00Renroh What's the difference between making a game in C++ and making a game in Java?
🗪
59:40BrainCruser Yes outlines
🗪
59:40BrainCruser Yes outlines
🗪
59:40BrainCruser Yes outlines
🗪
1:00:06Robrobby Hi Casey, question on the array you typed and pulled out again: u32 char[ ][ 2 ] <-- Is this an array with pairs of u32's? I would have expected u32[ [ ], [ ] ]
🗪
1:00:06Robrobby Hi Casey, question on the array you typed and pulled out again: u32 char[ ][ 2 ] <-- Is this an array with pairs of u32's? I would have expected u32[ [ ], [ ] ]
🗪
1:00:06Robrobby Hi Casey, question on the array you typed and pulled out again: u32 char[ ][ 2 ] <-- Is this an array with pairs of u32's? I would have expected u32[ [ ], [ ] ]
🗪
1:00:22Doing arrays in C
1:00:22Doing arrays in C
1:00:22Doing arrays in C
1:06:27Reading C declarations
1:06:27Reading C declarations
1:06:27Reading C declarations
1:13:26insofaras Will you implement colored text, and would the color info be embedded in the text itself like Quake used to use ^1 for red?
🗪
1:13:26insofaras Will you implement colored text, and would the color info be embedded in the text itself like Quake used to use ^1 for red?
🗪
1:13:26insofaras Will you implement colored text, and would the color info be embedded in the text itself like Quake used to use ^1 for red?
🗪
1:14:08cubercaleb Do programmers actually use that crazy array semantics that you just showed off?
🗪
1:14:08cubercaleb Do programmers actually use that crazy array semantics that you just showed off?
🗪
1:14:08cubercaleb Do programmers actually use that crazy array semantics that you just showed off?
🗪
1:15:05insofaras You didn't answer the bit about how if the color info would be embedded in the text as control codes or not
🗪
1:15:05insofaras You didn't answer the bit about how if the color info would be embedded in the text as control codes or not
🗪
1:15:05insofaras You didn't answer the bit about how if the color info would be embedded in the text as control codes or not
🗪
1:16:41Implement colour code parsing
1:16:41Implement colour code parsing
1:16:41Implement colour code parsing
1:20:21BrainCruser In some object oriented languages things can become that complicated
🗪
1:20:21BrainCruser In some object oriented languages things can become that complicated
🗪
1:20:21BrainCruser In some object oriented languages things can become that complicated
🗪
1:20:29noxy_key Would printing text to a separate bitmap background be easier than putting it straight on top of the game background?
🗪
1:20:29noxy_key Would printing text to a separate bitmap background be easier than putting it straight on top of the game background?
🗪
1:20:29noxy_key Would printing text to a separate bitmap background be easier than putting it straight on top of the game background?
🗪
1:20:42insofaras Nice, that was very quick to implement
🗪
1:20:42insofaras Nice, that was very quick to implement
🗪
1:20:42insofaras Nice, that was very quick to implement
🗪
1:20:50Vavassor How about a 2D array of function pointers? Might have been why a few of those variants didn't compile because it thought you were declaring a function pointer array (*Foo)
🗪
1:20:50Vavassor How about a 2D array of function pointers? Might have been why a few of those variants didn't compile because it thought you were declaring a function pointer array (*Foo)
🗪
1:20:50Vavassor How about a 2D array of function pointers? Might have been why a few of those variants didn't compile because it thought you were declaring a function pointer array (*Foo)
🗪
1:21:01IxNoxidexI Around how many more episodes until the switch from software rendering to hardware rendering?
🗪
1:21:01IxNoxidexI Around how many more episodes until the switch from software rendering to hardware rendering?
🗪
1:21:01IxNoxidexI Around how many more episodes until the switch from software rendering to hardware rendering?
🗪
1:21:23cubercaleb Can you rotate and transform the text?
🗪
1:21:23cubercaleb Can you rotate and transform the text?
🗪
1:21:23cubercaleb Can you rotate and transform the text?
🗪
1:22:57Implement font scale code parsing
1:22:57Implement font scale code parsing
1:22:57Implement font scale code parsing
1:24:50Stream has ended
🗩
1:24:50Stream has ended
🗩
1:24:50Stream has ended
🗩