<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Joaquin Cabrera — Game Engine Dev</title><link>https://cabranca.github.io/posts/</link><description>Recent content in Posts on Joaquin Cabrera — Game Engine Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://cabranca.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Batch Rendering</title><link>https://cabranca.github.io/posts/03-batch-rendering/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://cabranca.github.io/posts/03-batch-rendering/</guid><description>&lt;div class="lang-switcher"&gt;
&lt;button class="lang-btn" onclick="toggleLang()"&gt;
&lt;span class="lang-label-en"&gt;Ver en español&lt;/span&gt;
&lt;span class="lang-label-es"&gt;Switch to English&lt;/span&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;div class="lang-en"&gt;The first renderer worked. It opened a window, drew a quad with a texture, and that was honestly enough to feel good about for a day. Then I started thinking about what it would take to draw a hundred quads — and realized I had a problem.&lt;/div&gt;
&lt;div class="lang-es"&gt;El primer renderer funcionaba. Abría una ventana, dibujaba un quad con textura, y con eso era suficiente para sentirse bien por un día. Después empecé a pensar en lo que haría falta para dibujar cien quads — y me di cuenta de que tenía un problema.&lt;/div&gt;
&lt;hr&gt;
&lt;div class="lang-en"&gt;&lt;h2 id="the-cost-of-one-draw-call-per-object"&gt;The cost of one draw call per object&lt;/h2&gt;
&lt;p&gt;Every draw call has overhead. When you tell the GPU to draw something, the driver has to validate state, pack commands, and synchronize with the GPU — and that work happens every single time you call it. For a handful of objects you&amp;rsquo;ll never notice. For a 2D scene with hundreds of sprites animating at once, calling &lt;code&gt;glDrawElements&lt;/code&gt; per sprite is a fast way to tank your framerate.&lt;/p&gt;</description></item><item><title>The Engine Foundation</title><link>https://cabranca.github.io/posts/02-the-engine-foundation/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://cabranca.github.io/posts/02-the-engine-foundation/</guid><description>&lt;div class="lang-switcher"&gt;
&lt;button class="lang-btn" onclick="toggleLang()"&gt;
&lt;span class="lang-label-en"&gt;Ver en español&lt;/span&gt;
&lt;span class="lang-label-es"&gt;Switch to English&lt;/span&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;div class="lang-en"&gt;From the beginning, the goal was clear: I wanted to learn how to build an engine, not just how to render a triangle. That distinction matters more than it sounds.&lt;/div&gt;
&lt;div class="lang-es"&gt;Desde el principio, el objetivo era claro: quería aprender a construir un motor, no solo a renderizar un triángulo. Esa distinción importa más de lo que parece.&lt;/div&gt;
&lt;hr&gt;
&lt;div class="lang-en"&gt;&lt;h2 id="a-proper-engine-not-just-a-triangle"&gt;A proper engine, not just a triangle&lt;/h2&gt;
&lt;p&gt;Having worked with OpenGL and SDL2 before, I wasn&amp;rsquo;t starting from zero. I knew how to open a window, send vertices to the GPU, and get something on screen. What I didn&amp;rsquo;t know was how to turn that knowledge into an actual engine — something with architecture, a lifecycle, and a surface clean enough for someone to build a game on top of.&lt;/p&gt;</description></item><item><title>Why I Built a Game Engine</title><link>https://cabranca.github.io/posts/01-why-i-built-a-game-engine/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid>https://cabranca.github.io/posts/01-why-i-built-a-game-engine/</guid><description>&lt;div class="lang-switcher"&gt;
&lt;button class="lang-btn" onclick="toggleLang()"&gt;
&lt;span class="lang-label-en"&gt;Ver en español&lt;/span&gt;
&lt;span class="lang-label-es"&gt;Switch to English&lt;/span&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;div class="lang-en"&gt;&lt;p&gt;There is a question I&amp;rsquo;ve been asked more than once since starting this project: &lt;em&gt;why would you build a game engine when Unity, Unreal, and Godot already exist?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The short answer is that I wasn&amp;rsquo;t trying to replace them. The longer answer is the whole reason this series exists.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="lang-es"&gt;&lt;p&gt;Hay una pregunta que me han hecho más de una vez desde que empecé este proyecto: &lt;em&gt;¿por qué construirías un motor de videojuegos cuando Unity, Unreal y Godot ya existen?&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>