<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>printfdebugging - arcitecture</title>
    <subtitle>Sahil Gautam&#x27;s Blog</subtitle>
    <link rel="self" type="application/atom+xml" href="https://printfdebugging.in/tags/arcitecture/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://printfdebugging.in/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-06-25T00:00:00+00:00</updated>
    <id>https://printfdebugging.in/tags/arcitecture/atom.xml</id>
    <entry xml:lang="en">
        <title>Overview - Build System and the Project Arcitecture</title>
        <published>2026-06-25T00:00:00+00:00</published>
        <updated>2026-06-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/TextEditor/0001-arcitecture/"/>
        <id>https://printfdebugging.in/TextEditor/0001-arcitecture/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/TextEditor/0001-arcitecture/">&lt;h1 id=&quot;the-build-system&quot;&gt;The Build System&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;This project is written in &lt;strong&gt;C&lt;&#x2F;strong&gt;.
&lt;ul&gt;
&lt;li&gt;I choose C because it&#x27;s simple, and you want that when you are trying to do complex things.&lt;&#x2F;li&gt;
&lt;li&gt;The last thing you want is the language coming in your way.&lt;&#x2F;li&gt;
&lt;li&gt;Most of the graphics&#x2F;font libraries are also written in C, so integration becomes easy.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;The build system is &lt;strong&gt;CMake&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;It &quot;just works&quot; on all the platforms, including Windows&lt;&#x2F;li&gt;
&lt;li&gt;It has really good &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;marketplace.visualstudio.com&#x2F;items?itemName=ms-vscode.cmake-tools&quot;&gt;IDE support&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;project-arcitecture&quot;&gt;Project Arcitecture&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;project-structure&quot;&gt;Project Structure&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;The Engine
&lt;ul&gt;
&lt;li&gt;The core functionality (like text rendering, windowing, shader code) is implemented in engine.&lt;&#x2F;li&gt;
&lt;li&gt;The external libraries live in the &lt;code&gt;external&lt;&#x2F;code&gt; directory.&lt;&#x2F;li&gt;
&lt;li&gt;The engine does not store any client state, all these modules are just code bundles with a type and a flat API.&lt;&#x2F;li&gt;
&lt;li&gt;The engine code is neither too generic nor too project specific, that&#x27;s tricky to pull.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;graphics&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; CMakeLists.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; engine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; ├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; assets&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; ├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; CMakeLists.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; ├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; engine.pc.in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; ├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; include&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; └──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; source&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; external&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; ├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; freetype&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; ├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; harfbuzz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;│  &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; └──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; ⋅⋅⋅&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;└──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; projects&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;    ├──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; editor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;    └──&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; game&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;The projects build on top of the engine and contribute back the improvements
&lt;ul&gt;
&lt;li&gt;The text rendering code in the engine implemented by the editor can later be used in a widget toolkit (let&#x27;s say).&lt;&#x2F;li&gt;
&lt;li&gt;The projects manage their own state.&lt;&#x2F;li&gt;
&lt;li&gt;Some engine subsystems (like windowing) handle user events in callbacks.&lt;&#x2F;li&gt;
&lt;li&gt;Those callbacks are bridged to the client code using a &lt;code&gt;struct bridge&lt;&#x2F;code&gt; instance.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;the-bridge-interface&quot;&gt;The Bridge Interface&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span&gt; bridge &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;mouse_move&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;userdata&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span&gt; window &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;window&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; f64 x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; f64 y&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;mouse_scroll&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;userdata&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span&gt; window &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;window&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; f64 x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; f64 y&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    void&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;window_resize&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;userdata&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span&gt; window &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;window&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i32 w&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; i32 h&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;    ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span&gt; editor_state &lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    struct&lt;&#x2F;span&gt;&lt;span&gt; bridge bridge&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    struct&lt;&#x2F;span&gt;&lt;span&gt; window &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;window&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    struct&lt;&#x2F;span&gt;&lt;span&gt; font &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;font&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;    .....&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;The state type and the bridge interface
&lt;ul&gt;
&lt;li&gt;The engine defines &lt;code&gt;struct bridge&lt;&#x2F;code&gt;, so that&#x27;s the common known between the engine and the editor&lt;&#x2F;li&gt;
&lt;li&gt;The editor defines a &lt;code&gt;struct editor_state&lt;&#x2F;code&gt; type with a &lt;code&gt;struct bridge&lt;&#x2F;code&gt; as the first member.&lt;&#x2F;li&gt;
&lt;li&gt;Then we pass the bridge to the engine subsystems when initializing them. They store a pointer to it internally.&lt;&#x2F;li&gt;
&lt;li&gt;Note that this pointer to bridge is also the pointer to our editor state, since it&#x27;s the first member there.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; projects&#x2F;editor&#x2F;source&#x2F;editor.c &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;editor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;bridge &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span&gt; bridge&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;    .mouse_move &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; mouse_move&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;    .mouse_scroll &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; mouse_scroll&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;    .window_resize &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; window_resize&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;struct&lt;&#x2F;span&gt;&lt;span&gt; window window_options &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span&gt;    WINDOW_DEFAULTS&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;    .bridge &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;editor&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;bridge&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt;!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;rc &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt; window_init&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;editor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;window&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; window_options&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    goto&lt;&#x2F;span&gt;&lt;span&gt; cleanup&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;The bridge in action
&lt;ul&gt;
&lt;li&gt;The windowing subsystem then calls the appropriate callback and passes this bridge pointer to those callbacks.&lt;&#x2F;li&gt;
&lt;li&gt;In those callbacks on the editor side, we cast these bridge pointers to &lt;code&gt;struct editor_state *&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;And there we go! The engine doesn&#x27;t know of the &lt;code&gt;editor_state&lt;&#x2F;code&gt; and we got the events out nice and tidy.&lt;&#x2F;li&gt;
&lt;li&gt;We can reuse this in other projects without modifying the engine, or without making them &quot;editor like&quot;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; engine&#x2F;window.c &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;static&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt; __window_mouse_scroll_callback&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;GLFWwindow &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;window&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; f64 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; f64 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    struct&lt;&#x2F;span&gt;&lt;span&gt; window &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;_window &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt; glfwGetWindowUserPointer&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;window&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;    _window&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;bridge&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;mouse_scroll&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;_window&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;bridge&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; _window&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; projects&#x2F;editor&#x2F;source&#x2F;editor.c &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt; mouse_scroll&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;void&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;userdata&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; window &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;window&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; f64 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; f64 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;y&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    struct&lt;&#x2F;span&gt;&lt;span&gt; editor_state &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;editor &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; userdata&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;    ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;That&#x27;s it for now
&lt;ul&gt;
&lt;li&gt;The projects are in their really early stages, so there isn&#x27;t much to talk about them yet.&lt;&#x2F;li&gt;
&lt;li&gt;The purpose of this post is to get started with the devlog process.&lt;&#x2F;li&gt;
&lt;li&gt;These are not intuitive things (atleast not for me).&lt;&#x2F;li&gt;
&lt;li&gt;So with these devlogs, hopefully I can mark the roads I travel, and the milestones I cross.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
</feed>
