[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Rendering Lines of Text" vod_platform=youtube id=jG9qVQ450GA annotator=Miblo annotator=debiatan] [0:12][Recap and plan for the day] [2:42][What font information should be included in the asset file? Let's write the usage code first] [4:35][Always write the code you know how to write first] [6:06][Approaching the text rendering problem writing the usage code first] [6:44][Our goal is to display the debug timers on the screen] [8:44][Implementing OverlayCycleCounters] [9:56][Assuming we have a render_group and the necessary functions to write strings to it] [11:57][(Aside) Naming the debug counters the cheesy way] [14:29][The debug code will take care of the location on the screen of the debug strings] [16:21][Introducing a separate, globally accessible render_group for debug output] [18:47][Pros and cons of using a separate render_group type] [20:16][Implementing DEBUGTextLine] [24:06][Calling OverlayCycleCounters] [24:54][Setting up the DEBUGRenderGroup] [26:17][Allocating memory for the DEBUGRenderGroup] [27:14][Rendering the DEBUGRenderGroup to the output] [28:53][Using BeginRender and EndRender to reset the graphics push_buffer_size and avoid recreating render groups] [31:02][Sanity checks to protect against possible mistakes when calling or failing to call BeginRender and EndRender] [34:15][Setting up the DEBUGRenderGroup to display bitmaps] [34:29][Configuring the DEBUGRenderGroup to use an orthographic projection] [36:03][Testing what we have so far] [36:51][Drawing a line of letters] [37:49][Advancing to the next line] [39:22][Implementing DEBUGReset to bring the text back to the first line] [41:24][Including lower-case letters in the asset file] [43:36][We have lower-case letters] [43:53][Special-casing spaces] [44:55][Moving the text to the top-left corner] [46:10][Using pixels as the unit for the DEBUGRenderGroup] [48:36][We can't use the looped live code editing to change global variables] [50:53][Resetting AtY to a more appropriate position] [51:40][Resetting LeftEdge a more appropriate position] [52:10][Testing what we have so far and preview of coming attractions] [54:11][Q&A][:speech] [54:34][@Kelimion][Will you be addressing the subscript, superscript, en-space, em-space and other types of space tomorrow as well?] [56:33][@BrainCruser][Will you add edges to the font?] [57:00][@Renroh][What's the difference between making a game in C++ and making a game in Java?] [59:40][@BrainCruser][Yes outlines] [1:00:06][@Robrobby][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:22][Doing arrays in C] [1:06:27][Reading C declarations] [1:13:26][@insofaras][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:08][@cubercaleb][Do programmers actually use that crazy array semantics that you just showed off?] [1:15:05][@insofaras][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:41][Implement colour code parsing] [1:20:21][@BrainCruser][In some object oriented languages things can become that complicated] [1:20:29][@noxy_key][Would printing text to a separate bitmap background be easier than putting it straight on top of the game background?] [1:20:42][@insofaras][Nice, that was very quick to implement] [1:20:50][@Vavassor][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:01][@IxNoxidexI][Around how many more episodes until the switch from software rendering to hardware rendering?] [1:21:23][@cubercaleb][Can you rotate and transform the text?] [1:22:57][Implement font scale code parsing] [1:24:50][Stream has ended][:speech] [/video]