[28:22][Continue to enable WritePNG() to handle multiple chunks, prepending rows with the filter value][:"asset system" :"file format"]
[36:59][Thoughts on a more succinct and maintainable specification of the ability to modify rarely modified values, e.g. PNG filter per row][:"file format" :speech]
[38:31][Continue to enable WritePNG() to process rows for multiple chunks][:"asset system" :"file format"]
[41:23][Enable WritePNG() to handle the ADLER32 checksum for multiple chunks, introducing BeginAdler32() and Adler32Append()][:"file format" :hashing]
[48:01][Step through WritePNG() to find that our B and Width fail to line up][:"asset system" :"file format" :run]
[50:11][Fix WritePNG() to correctly detect the end of row][:"asset system" :"file format"]
[50:41][Run hhfont to completion, and check out a glyph in GIMP to see no antialiasing][:admin :"asset system" :"file format" :font]
[52:15][Consult the documentation on CreateFontA() for its ANTIALIASED_QUALITY parameter[ref
[1:11:27][Run our exporter–extractor to find that we produced corrupted .png files][:admin :"asset system" :font]
[1:12:32][Prevent LoadGlyphBitmap() and ExtractFont() from scaling][:font :rendering]
[1:13:11][Run our exporter–extractor successfully on both 512px and 800px high glyphs][:admin :"asset system" :font]
[1:14:00][Make ExtractFont() oversample by 2][:font :rendering]
[1:14:08][Run our exporter–extractor to find that we produced corrupted .png files][:admin :"asset system" :font]
[1:14:20][Step in to WritePNG() to see that the Width and Height are 0, and then on through LoadGlyphBitmap() to see what it does][:"asset system" :font :rendering :run]
[1:16:22][Change LoadGlyphBitmap() to increment the SampleInner][:"asset system" :font :rendering]
[1:16:54][Step back in to WritePNG() to still see a Width and Height of 0][:"asset system" :font :rendering :run]
[1:17:16][Fix LoadGlyphBitmap() to increment the Sample][:"asset system" :font :rendering]
[1:17:33][Step back in to WritePNG() to find more plausible Width and Height values][:"asset system" :font :rendering :run]
[1:17:37][View our glyphs to find that they appear squished horizontally, but antialiased][:admin :"asset system" :font :rendering]
[1:18:11][Fix LoadGlyphBitmap() to increment the Sample by the Scale][:"asset system" :font :rendering]
[1:18:23][Rerun our exporter–extractor and check the antialiasing of our correctly scaled glyphs][:admin :"asset system" :font :rendering]
[1:20:21][Increase the scaling to 4 in ExtractFont()][:font :rendering]
[1:20:39][Rerun our exporter–extractor and check the antialiasing of these ×4 oversampled glyphs][:admin :"asset system" :font :rendering]
[1:21:46][Prevent ExtractFont() from scaling][:font :rendering]
[1:22:00][Rerun our exporter–extractor and compare the antialiasing of our unscaled and oversampled glyphs][:admin :"asset system" :font :rendering]
[1:22:32][Increase the scaling to 8 in ExtractFont()][:font :rendering]
[1:22:45][Rerun our exporter–extractor and compare the antialiasing of our variously oversampled glyphs][:admin :"asset system" :font :rendering]
[1:23:59][Set our Scale amount to 4 in ExtractFont(), and briefly check the CreateFontA() documentation for the switch-over point of antialising[ref
[1:28:54][Continue to binary search the switch-over point of Windows' :font antialiasing][:admin :rendering]
[1:32:13][Note that 354 is the magic value at which Windows stops antialiasing :font glyphs][:admin :rendering]
[1:35:48][Make ExtractFont() oversample if the pixel height is greater than 4][:font :rendering]
[1:36:42][Run our exporter–extractor on various glyph heights and check their antialiasing][:admin :"asset system" :font :rendering]
[1:37:39][Q&A][:speech]
[1:38:15][@vtlmks][Q: Perhaps your certificate for large font antialiasing died]
[1:38:35][@x13pixels][Q: In ExtractFont(), MaxGlyphDim's x value is set using TextMetric.tmOverhang. It seems like tmOverhang should only apply to MaxGlyphDim's y-value?][:font]
[1:39:27][@theomarest][Q: Would this only work for monospace fonts?][:font]
[1:39:34][@centhusiast][Q: What is the difference between the FreeType and TrueType fonts? Do both do the sub-pixel rasterization?][:font]
[1:40:08][@ivereadthesequel][@handmade_hero You wrote in the note 543->544 instead of 353->354. Glasses!][:font :rendering]
[1:40:19][Fix the antialiasing magic value note in ExtractFont()][:font]
[1:40:36][@boonetbe][Q: Did you try the Kakoune editor? Could its behavior be achieved in ~4coder?]
[1:41:48][@glog78][Q: Didn't MSN say something about small fonts too?][:font]
[1:42:51][@teamrandb][Q: But did you not check 500 and it worked?][:font]
[1:43:55][@floorislava][Q: GitHub bug report?]
[1:44:17][Close the "Support writing "large" PNGs" issue[ref
site=GitHub
page="HandmadeHero / cpp / Support writing \"large\" PNGs"
[1:47:36][@mycon_][Q: Are there any plans for a new HandmadeCon?[ref
site="Handmade Hero"
page="Handmade Hero-related Conferences"
url=https://handmadehero.org/conference]]
[1:49:00][@centhusiast][Q: I followed your suggestions and used Roboto and Droid Sans fonts for my desktop app. They look good! Thanks for that. Do you have any other suggestions for a good looking :font?[ref