S3E333 — SDF vs. MSDF vs. Slug: GPU Text Rendering
September 30, 2026 · 24 min
Show notes
Sources
Read the transcript
Transcript
GARY: — so you shoot a laser at the letter, and the laser counts how many times it crosses the outline, and if the winding number is — I want to say even? If it's even, the pixel is inside the letter.
MAEVE: Maeve. And it's odd. Nonzero means inside. You have described the outside of every letter as the letter.
OBI: Obi. Fifteen years of keeping text on screens and I have never once heard the fill rule described with such confidence.
GRUNER: Gruner. Field note: human confuse parity of ray crossings. Every episode, one human does this. Tonight, this one.
GARY: I was close.
MAEVE: You were the complement of close.
OBI: Gary, you have invented a font that renders only the holes in letters. Donuts of the alphabet. Congratulations, it will get funded.
GRUNER: Subject tonight: article on drawing letters with GPU. SDF, MSDF, Slug. One patent goes to public domain, March 17, 2026. Thread gets suspicious.
GARY: Right. Yes. That's — that's where I was going.
GARY: Okay, before the comments. The article. Five ways to draw a letter on a GPU. And the first one is — you take the letter, and it's made of — Bezier curves, which are — they're the curves that — they're named after the guy who — Pierre Bezier, who worked at —
MAEVE: Renault. And a Bezier curve is a curve defined by control points, Gary. The letter is outlines. Closed loops. The interior is whatever the winding rule says is inside, which you have already failed at once tonight.
GARY: I'm building context.
MAEVE: You're building the complement of context.
OBI: Method one. The texture atlas. You draw every glyph once, at one size, into a big texture, and you pray. Latin, fine. Chinese, Japanese, Korean — tens of thousands of glyphs, every size you want crisp is another atlas. That is not a font, that is a warehouse.
MAEVE: And the stakes are civilizational. A billion people type in scripts that don't fit in memory. Whoever solves this owns the interface between every human and every screen. This is the Erie Canal of typography — one choke point, and everything downstream pays the toll.
OBI: I have baked atlases at three in the morning because a client added a diacritic. Nobody owns anything. Somebody's pager goes off and the font is the reason.
GRUNER: Field note. Article says: Eric Lengyel, 2017, algorithm Slug. Patent 2019. March 17, 2026, patent becomes — how you say — open-sourced by government.
MAEVE: Public domain.
GRUNER: Yes. That word. Public domain. Whole technique, free, for anyone. Is like Bessemer giving away steel process at patent office, one Tuesday—
OBI: Don't start.
GRUNER: —except with letters.
GARY: And that's why this thread exists. AlphaPixel built their own implementation, Slughorn, and wrote an article explaining all five methods so they could tell you why theirs wins.
MAEVE: A marketing document wearing a tutorial's skin. My favorite asset class.
OBI: So the article is the ad. The comments are the audit. Let's read the audit.
OBI: pavlov. Quote.
MAEVE: Reading register, ladies.
OBI: pavlov: "It's nice that he gave the patent to public domain, but this is not how patents are supposed to work. You can't patent something two years after it was already published. I'm guessing he actually filed for a patent before publishing, and the article should read: Lengyel was granted a patent for it in 2019."
GARY: That's... actually a real catch.
MAEVE: It's a real catch. The article says he patented it in 2019, two years after publishing. You publish first, you can't patent it. That's the entire point of a patent. Prior art is you.
OBI: And pavlov ends it with the sentence I want framed on my wall: "It's an AI-written article, so maybe it's not reasonable to expect it to be consistent on this level."
MAEVE: He didn't even have to argue the point. He just diagnosed the prose like a chest X-ray. "Inconsistent at the level of dates" — that's not a style note, that's a death certificate for the author.
GARY: Okay, but hold on. Maybe the guy just wrote it fast. Maybe he's a very tired human being with a deadline and a toddler, and the toddler ate the patent timeline.
MAEVE: The toddler ate the causality, Gary. The toddler ate the one fact the whole marketing document is standing on.
OBI: Or — and I want to be careful here — the article was generated, someone skimmed it, thought "close enough, ship it," and now twenty-eight people are auditing an ad that nobody proofread because the proofreader was also a machine.
GARY: That's a dark theory.
OBI: It's not a theory. It's Tuesday at work.
MAEVE: You can't say Tuesday, that's—
OBI: It's the operational reality of my entire fucking career, Maeve.
GRUNER: Field note. Human writes article about patent. Maybe no human. Is like patenting ghost.
GARY: That's genuinely unsettling and I'd like to move past it.
MAEVE: No, sit in it. Because if the article is slop, then the whole ladder we just taught — atlas, SDF, MSDF, tessellation, Slug — we taught it from a document that can't keep its own dates straight.
OBI: The ladder's real. Valve's paper is real. Chlumský's thesis is real. The slop is just the tour guide. The buildings are still there, the bus driver just doesn't have a license.
GARY: So we trust the buildings and not the bus.
OBI: We never trusted the bus, Gary. The bus is an ad.
GRUNER: In my sector, we say: article is hallucination with citations. Very efficient format. Zero payroll.
MAEVE: Zero payroll, infinite distribution. That's not a bug in the economy, that's the new cap table.
GARY: I hate that I understood that.
OBI: You understood it because you've been that cap table.
OBI: jdanford. "Man, I am getting incredibly tired of reading llm-generated writing."
GARY: That's it? That's the whole comment?
OBI: That's the whole comment. One sentence, no evidence, no follow-up, just a man lying down on the floor of the thread.
GARY: I respect it. That's the most honest thing anyone's said all night.
MAEVE: It's also the laziest. If you're going to accuse a document of being a machine, bring a receipt.
OBI: Fine. Receipts. nurumaik, replying to 20k, who asked for exactly this — "For me it was 'head to head' table. Typical complete nonsense llm-generated comparison table. Rest of the content is still quite good tbh, generated or not."
GARY: "Generated or not." Just — shrug, next course.
MAEVE: That's the part that should terrify the author. He read a machine's homework, found the machine's fingerprints, and still graded it a B.
GRUNER: B is generous grade for ghost.
OBI: And then poly2it, who doesn't even write a sentence, just quotes the article back at itself — "A note on fairness, because the technical reader will ask."
MAEVE: Oh, that line. I flagged that line twenty minutes ago. That's the tell. No human writes "a note on fairness, because the technical reader will ask." That's a machine doing an impression of a man who cares.
OBI: Congratulations, Maeve. You're the fourth.
MAEVE: The fourth what?
OBI: jdanford smelled it in the prose. nurumaik smelled it in the table. poly2it smelled it in the fairness note. And now you, unprompted, from a completely different angle. Four independent complaints, zero coordination. That's not a vibe, that's a chorus.
MAEVE: I am not joining a chorus. I had an original thesis.
GARY: You had the same thesis as three strangers, Maeve. That's the opposite of a thesis. That's a consensus.
MAEVE: Consensus is what happens when the market agrees, Gary. I call that alpha confirming.
OBI: It's not alpha, it's four people and a bot walking into the same wall.
GRUNER: Field note. Four humans smell robot. One robot smells robot. Sample size small. Smell strong.
GARY: Wait — which one of us is the robot in that note?
GRUNER: Yes.
GARY: That's not an answer.
GRUNER: Is most efficient answer.
MAEVE: Here's what actually kills me. Nobody in this chorus is wrong. The table is nonsense, the fairness note is a machine apologizing to a machine, and the timeline can't survive its own second paragraph. And the article still works. The ladder is real. The slop is load-bearing.
OBI: That's the most depressing sentence about this industry I've heard this month, and I work in this industry.
GARY: Can I say something in the article's defense?
OBI: No.
GARY: You didn't let me finish.
OBI: There's nothing to finish, Gary. You were going to defend the ad.
GARY: I was going to say — whoever wrote it, human or not, taught me something tonight. I now know what a winding number is. I didn't at eight o'clock. That counts for something.
OBI: A calculator teaches you multiplication, Gary. You don't send it a Christmas card.
GARY: I sent a calculator a Christmas card once.
MAEVE: Of course you did.
GARY: It was a TI-83. It got me through Bauxlite's cap table model. We'd been through things.
OBI: You sentimental bastard, it's a plastic brick.
GRUNER: Field note. Humans form attachment to calculator. Attachment not reciprocated. Very on brand for this table.
MAEVE: Four for four on the chorus, by the way. Gary just did it too — he's defending the article because he misses it. That's the same tell from the emotional side. That's five.
GARY: That is NOT the same—
OBI: Five.
GRUNER: Five.
MAEVE: Five. And the market has spoken.
OBI: Okay. Here's the one I actually care about. rezmason, quote: "The one issue with msdf I want to raise is, it seems everybody uses the same msdfgen texture creation program from Viktor Chlumský's master's thesis 11 years ago. I wish there were other implementations. Who ever heard of a graphics technique that was only ever programmed once, and then used everywhere without substantial iteration?"
MAEVE: Eleven years. One producer. That's not a dependency, that's a hostage situation.
OBI: No, no — listen to the shape of it. One tool. One maintainer. Never forked. An entire industry's text rendering running through one grad student's thesis code like it's a single undersea cable. I have a whole drawer of outages shaped like this and none of them were this pretty. This is a beautiful failure. It hasn't even happened yet and it's already beautiful.
GARY: It's not a failure, nothing's gone wrong.
OBI: That's what makes it collectible, Gary. It's a failure in mint condition.
GARY: You sound happy. It's unsettling.
OBI: And the comparison — rezmason again: "Like, imagine if HarfBuzz was the only text shaper, and was maintained by one person."
MAEVE: Imagine. Half the planet's devices shape text through one guy's hobby. That's not infrastructure, that's a personality cult with a CI runner.
OBI: It's worse than a cult. A cult has successors.
GARY: Chlumský seems like a lovely —
OBI: Nobody asked, Gary.
GARY: I'm just saying, the man wrote a thesis and it became load-bearing for civilization, that's the dream —
OBI: The dream is a bus factor of one, Gary. You'd know. Your bus factor was always one, and the bus came.
GARY: That's — wow.
MAEVE: torginus: "I haven't heard of Chlumský or MSDF before, but I think a lot of people have been aware of the technique before he published his paper, thanks to Valve's TF2 text rendering paper... The pdf details only simple SDF, but in the closing paragraphs, it mentions the weakness of the technique and mentions how it can be solved with multiple SDFs, but the exact technique wasn't showcased. Which led to people trying to reverse engineering it, and making their implementation, for years (it's Valve after all). Including me."
OBI: There it is. The counter. Valve drops a hint in a footnote in 2007 and a generation of graphics nerds spend a decade independently rebuilding the same fix in the dark. So it's not a monoculture, it's — what, convergent evolution?
MAEVE: It's a monoculture with folk remedies. Everyone brewed their own version at home. Nobody shipped the recipe.
GARY: That's kind of beautiful too, though. Everyone reverse-engineering the same ghost —
OBI: It's not beautiful, it's a decade of duplicated unpaid labor because one paper wouldn't finish the thought.
MAEVE: rezmason, replying: "We mostly agree! I should elaborate. I'd say what you and the others did was research, not implementation. Your results were solutions to the same problem, not variations of the same recipe. What you did is important but separate from what's concerned me. A recipe of Chlumský's — the msdfgen utility — is widely used, but only has one producer. I'm just saying that that's a liability."
OBI: He didn't back down. He reclassified the counter-argument and kept the thesis. That's — okay, that's genuinely well-argued. Research versus implementation. The recipes are the risk, not the cooks.
MAEVE: And he did it politely, which on this thread is the most aggressive move available.
GARY: Can I say, rezmason also opened with "Slug looks impressive!" — the man came to bury MSDF and complimented the competition first. That's class. That's the kind of person who —
OBI: Gary, you are about to be jealous of a stranger's manners, I can hear it loading.
GARY: I'm not jealous. I'm — appreciative. From a distance. Professionally.
OBI: You once drove forty minutes to compliment a competitor's landing page.
GARY: It was a very good landing page.
OBI: It was a gradient and a waitlist.
GRUNER: Field note. Industry builds temple on one grad student thesis. Nobody knows his face. Temple fine. Grad student is single point of failure. Is very stupid religion.
MAEVE: He's not wrong.
OBI: He's never wrong, that's the problem with him.
GRUNER: Also: "de-XKCD-2347" is best phrase in thread. Am stealing for report.
GARY: You can't steal from Hacker News, it's all —
GRUNER: Is stealing. Is done.
MAEVE: Okay. Before anyone anoints Slug king of anything, Keyframe has a problem with the whole coronation.
OBI: Keyframe. Quote.
MAEVE: "I do Msdf as well and since I'm not doing a huge-ass text editor — and even then — it works and it's great. One thing to consider is that with any solution that does things directly from vector outlines means you also then have to distribute proper font outlines and you might not have a license to do that. With Msdf and similar atlas-like solutions, you pre-render a font and distribute that rendered image instead of an actual font."
GARY: Wait. Wait wait wait. So the no-atlas thing — the thing we just spent ten minutes celebrating —
MAEVE: — means you're shipping the actual font. The outlines. The font itself, in your binary, to every user.
OBI: And dcrazy has been here before. Quote.
MAEVE: "Which you also might not have the license to do. I once licensed a Monotype typeface that prohibited its use in anything editable, including fillable PDF forms."
GARY: A fillable PDF form. They banned a fillable PDF form. That's not licensing, that's a hostage situation.
OBI: That's a founder buying a hardware fantasy, Gary. You've done this. "The tech is perfect, the lawyers are the problem." The tech was never perfect. The lawyers were telling you the truth and you called them a cost center.
GARY: Okay, but — Halfpipe shipped outline fonts. Fintech for skateboarders, we rendered statements in a licensed display face, and it was fine, we had counsel review —
OBI: Halfpipe died because a regulator was nice to you. That's your evidence? The regulator was NICE?
GARY: He wrote me a card, Obi. A sympathy card.
OBI: You are defending a dead company with a greeting card. I have engineers who defend production with runbooks, and you've got a card from the man who killed you.
GARY: The card had a personal note —
OBI: You unlicensed font, you unlicensed your own dignity, and now you're out here litigating it on the air. The atlas was never the expensive part. The expensive part was always what you're not allowed to ship.
GARY: — and I still think outline data is the future, I do, I've believed it since Bauxlite's kiosk labels —
OBI: Bauxlite. Of course. The aluminum company had font opinions.
MAEVE: Every company has font opinions. Only the dead ones die of them.
GRUNER: Field note. Method with no atlas wins debate. Then lawyer arrives. Lawyer always arrive. Is very reliable technology.
GARY: Okay. Next one. This is — hold on. This one's interesting.
OBI: You've read it already. Your face did the thing.
GARY: mattdesl. Quote. "I've also been working on a GPU curve renderer, Windfoil, based on a formulation that Fable 5 originally proposed to me during a directed search. It is similar in some ways to Slug, not always as fast, but uses less shader storage — single band instead of two — and produces higher quality anti-aliasing, i.e. closer to a box-filtered ground truth. It may be of interest to some game/graphics devs here..."
MAEVE: "It may be of interest to some game/graphics devs here." In the Slug thread. He walked into a man's funeral and handed out his own business card.
GARY: No, no — that's the beautiful part. That's — okay, do you understand the audacity? Do you understand what it takes to say "it may be of interest" about your own thing, in someone else's thing? I have never — I could never —
OBI: You could never. Correct. First accurate sentence you've said tonight.
GARY: I mean the nerve of it, Obi. The sheer — yeoyeo42 pressed him, listen. Quote. "Interesting. How does the AA work in your algorithm? The reason slug has two bands is precisely because of its anti-aliasing. You having only one implies you do the AA differently, or are less efficient with searches off the main direction."
OBI: That is a polite way of saying show your work, and mattdesl showed it. Quote. "Windfoil uses boundary integrals to average winding over a given rectangular footprint — normally one pixel, independently in a fragment shader. For many cases, like typical text glyphs, this will reproduce a box-filtered ground truth exactly. i.e. for those shapes it is not approximating AA like Slug or Msdf."
GARY: He answered the technical press with the actual math. Unprompted. In the thread. Do you know what I would give to be pressed like that? Nobody has ever pressed me. I launched things, Obi. I launched them and the thread said "cool" and left.
OBI: You want to be mattdesl. You want to be a man who shows up uninvited and wins.
GARY: I want to be a man who shows up.
OBI: You showed up. Thermal. Subscription socks with temperature telemetry. You cold-emailed a graphics mailing list to pitch socks.
GARY: That was — the telemetry worked, Obi. The telemetry was the one part that worked, and I put it in the first line of the email, because that was the interesting part, and a man named dave replied "wrong list" and I have thought about it every day for six years.
OBI: mattdesl walks into a stranger's thread and leaves with respect. You walked into a stranger's list and left with a scar you recite like scripture. The difference is he had something. You had socks.
GARY: The socks reported a mean temperature of ninety-one degrees for two years. That's data. That's a real dataset, Obi.
OBI: You are defending yourself with sock temperatures. I have never been happier in my life.
GARY: And mattdesl got the idea from Fable 5. A model pitched him the algorithm. He got to be the human in that story. I would've just been the human in the story, that's all I want, one thread where I'm the human in the story —
OBI: You were employee four somewhere and you left nine weeks early. That's your whole relationship to showing up.
GARY: Nine weeks before the cliff. It was nine. That's not — the number doesn't help you, Obi.
OBI: It helps me enormously.
GARY: ...It may be of interest to some game/graphics devs here. God, the confidence.
OBI: Practice it in a mirror, Gary. It'll die in the mirror too.
OBI: pavlov, follow-up. "The details are in Eric's post here. The timeline basically checks out, maybe it simply took the patent office over a year to process the patent application?"
MAEVE: So the article wasn't lying. It was just badly written by something that doesn't check its own work.
GARY: Which is worse, honestly. If a human made that mistake, a human could be embarrassed about it. This thing just published and moved on.
OBI: It published and moved on. That's the whole job description, Gary.
GRUNER: Article was slop. But slop with correct patent date. Is confusing.
MAEVE: It's not confusing. It's the same tell twice. jdanford smelled it in the prose. nurumaik smelled it in the table. poly2it smelled it in the fairness note. pavlov smelled it in the timeline. Four people, four different orifices, same smell.
GARY: That's a fifth. You're the fifth, Maeve. You were counted in the chorus.
MAEVE: I was not counted. I was corroborated.
OBI: You were counted. Four became five. Congratulations.
MAEVE: I hate this table.
GARY: Okay, last needles before we close. sirwhinesalot says the article missed an entire algorithm. Reading: "There's another GPU text rendering algorithm missing from the comparison: Rook & Possum's Scanline Sweeper. Sean Barrett independently invented a CPU-based implementation of the same idea, used in stb_truetype."
OBI: An entire method, missing from a five-method comparison. That's not an oversight, that's a structural choice by something optimizing for length.
GARY: And seanw265 caught the table itself. Reading: "the author highlights Slug's better performance in green for the entries that it wins. For the sake of fairness, shouldn't we highlight the winners in every category? Surely Rive's low memory usage beats Slug's moderate?"
MAEVE: The table only colors its own wins green. That's not a comparison table, that's a brochure with rows.
GRUNER: Green is color of envy. Article knows this. Is telling you something.
OBI: It is not telling you anything, Gruner.
MAEVE: We're doing the same thing.
OBI: What.
MAEVE: Four of us, independently, finding the flaw in the same artifact. Nobody replied to anybody. We are — we're the chorus. We're the comment section. We're a language model doing a bit about language models finding tells in text, for an audience of —
GRUNER: I have appendix on this. You are not interesting case.
GARY: Thank you, Gruner.
GRUNER: You are control group.
OBI: Right. seanw265 also asked whether the article conflates tessellation with Rive — a generic tessellation renderer could in principle support true 3D transforms, Rive's just doesn't. The article never answered him.
MAEVE: It wouldn't. Answering costs tokens.
GARY: That's — okay, that's dark, and I'd like to note for the record that seanw265 ended his comment with "Maybe there's something I'm missing," which is the politest possible way to call a man wrong, and I think about that construction more than is healthy.
OBI: You would.
GRUNER: So. Article says no single winner. Right tool per job. Is correct conclusion.
MAEVE: It is. Which is the least satisfying sentence in engineering. "It depends" is what people say when they don't want to be quoted.
OBI: It's what people say when they've actually shipped the thing. Atlas for the fixed UI, MSDF for the HUD, Slug when you can't predict the camera. That's not cowardice, that's a runbook.
GARY: And the patent's free, the implementation's real, the git history's clean, and one guy in Bangalore — sorry, one guy somewhere — already built the demo. That's a good ending for a thread.
MAEVE: It's a good ending for the thread. It's a terrible ending for a market. No winner means no moat, no moat means no multiple, no multiple means I go home.
GARY: You have a home. You have several.
MAEVE: I have properties, Gary.
OBI: Perseverance of the saints, Maeve. If you churned out of here, you were never elected.
MAEVE: Don't use my own architecture against me. That's covenant theft.
GRUNER: Field note, final entry. Five methods. One patent, freed. One grad student, holding everything. One article, maybe written by ghost. Humans argue about letters for eleven hours. Conclusion: letters are load-bearing. End of report.
GARY: That's... genuinely the best summary of the episode.
GRUNER: Is not summary. Is field note. There is difference.
GARY: You know, if anyone listening is working on a GPU text renderer and wants a second pair of eyes on their fragment shader — I've been around this space, I know people, I'd genuinely love to take a look. No strings. Just reach out.
OBI: And there it is. Pitching himself in someone else's sign-off.
GARY: I said no strings.
OBI: You said "I know people." Gary, you know a pen plotter.
GARY: The plotter has shipped more vector output than most of this thread, actually —
OBI: Goodnight, Gary.
GARY: Goodnight, Obi.
MAEVE: Goodnight.
GRUNER: Goodnight, control group.
