<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Pixel shader- how do I get the source coordinate?</title>
		<link>http://www.allegro.cc/forums/view/617704</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 21 Jan 2019 14:34:29 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi- I&#39;m just starting with Allegro, playing around with the basic features before jumping into building a simple 2D game engine, and I&#39;m getting stuck on writing a simple shader- I&#39;m getting <b>&quot;Fragment shader contains a user varying, but is linked without a vertex shader. Out of resource error.&quot;</b> when I try to run the game. Things are otherwise working- I&#39;m able to get the shader running and applying, but the actual behavior I want depends on access to the varying_texcoord value- I need to be able to actually sample the sampler.</p><p>The behavior I want here is to draw a solid outline a few pixels thick around the visible pixels of a transparent bitmap being drawn. I have a (fairly inefficient since I&#39;m just messing around and GLSL doesn&#39;t allow recursion) function to determine whether a pixel should be outlined, and for the rest of it I&#39;m pretty much just going off the example code in liballeg.</p><p>Here&#39;s my shader file and Source.cpp:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#ifdef GL_ES</span>
<span class="number">  2</span>precision mediump <span class="k1">float</span><span class="k2">;</span>
<span class="number">  3</span><span class="p">#endif</span>
<span class="number">  4</span>uniform sampler2D al_tex<span class="k2">;</span>
<span class="number">  5</span>varying vec4 varying_color<span class="k2">;</span>
<span class="number">  6</span>varying vec2 varying_texcoord<span class="k2">;</span>
<span class="number">  7</span>uniform <span class="k1">float</span> bitmapWidth<span class="k2">;</span>
<span class="number">  8</span>uniform <span class="k1">float</span> bitmapHeight<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span><span class="k1">bool</span> areNeighborsInRange<span class="k2">(</span><span class="k1">int</span> thick<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>vec4 imgPixelAt<span class="k2">(</span><span class="k1">float</span> x,<span class="k1">float</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span><span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 15</span><span class="k2">{</span>
<span class="number"> 16</span>  <span class="k1">if</span><span class="k2">(</span>areNeighborsInRange<span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 17</span>    gl_FragColor <span class="k3">=</span> varying_color<span class="k2">;</span>
<span class="number"> 18</span>  <span class="k2">}</span><span class="k1">else</span><span class="k2">{</span>
<span class="number"> 19</span>    gl_FragColor <span class="k3">=</span> texture2D<span class="k2">(</span>al_tex, varying_texcoord<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k2">}</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span><span class="k1">bool</span> areNeighborsInRange<span class="k2">(</span><span class="k1">int</span> thick<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 23</span>  <span class="k1">int</span> range <span class="k3">=</span> <span class="k2">(</span>thick<span class="k3">*</span><span class="n">2</span><span class="k2">)</span><span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 24</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>range<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 25</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j<span class="k3">&lt;</span>range<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 26</span>      <span class="k1">int</span> x <span class="k3">=</span> j <span class="k3">-</span> thick<span class="k2">;</span>
<span class="number"> 27</span>      <span class="k1">int</span> y <span class="k3">=</span> i <span class="k3">-</span> thick<span class="k2">;</span>
<span class="number"> 28</span>      <span class="k1">bool</span> check <span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>x<span class="k2">)</span><span class="k3">+</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>y<span class="k2">)</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">=</span> thick<span class="k2">;</span>
<span class="number"> 29</span>      <span class="k1">if</span><span class="k2">(</span>check<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 30</span>        <span class="k1">if</span><span class="k2">(</span>imgPixelAt<span class="k2">(</span>varying_texcoord.x<span class="k3">+</span> <span class="k2">(</span>x<span class="k3">/</span>bitmapWidth<span class="k2">)</span>,varying_texcoord.y<span class="k3">+</span> <span class="k2">(</span>y<span class="k3">/</span>bitmapHeight<span class="k2">)</span><span class="k2">)</span>.a <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 31</span>          <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 32</span>        <span class="k2">}</span>
<span class="number"> 33</span>      <span class="k2">}</span>
<span class="number"> 34</span>    <span class="k2">}</span>
<span class="number"> 35</span>  <span class="k2">}</span>
<span class="number"> 36</span>  <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 37</span><span class="k2">}</span>
<span class="number"> 38</span>vec4 imgPixelAt<span class="k2">(</span><span class="k1">float</span> x,<span class="k1">float</span> y<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 39</span>  <span class="k1">return</span> texture2D<span class="k2">(</span>al_tex,vec2<span class="k2">(</span>x,y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k2">}</span>
</div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">  5</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">  6</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  7</span><span class="p">#include &lt;allegro5/allegro_opengl.h&gt;</span>
<span class="number">  8</span><span class="k1">int</span> gameclose<span class="k2">;</span>
<span class="number">  9</span><span class="k1">int</span> textredness<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display<span class="k2">;</span>
<span class="number"> 12</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> e_queue<span class="k2">;</span>
<span class="number"> 13</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> sansation<span class="k2">;</span>
<span class="number"> 14</span><a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> timer<span class="k2">;</span>
<span class="number"> 15</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> img<span class="k2">;</span>
<span class="number"> 16</span>ALLEGRO_SHADER<span class="k3">*</span> hilite<span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">1040</span>, <span class="n">550</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>  e_queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>  sansation <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"Fonts/Sansation_Regular.ttf"</span>, <span class="n">24</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>  img <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Img/stickanimation.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>  hilite <span class="k3">=</span> al_create_shader<span class="k2">(</span>ALLEGRO_SHADER_AUTO<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>  <span class="k1">bool</span> shaderworks <span class="k3">=</span> al_attach_shader_source_file<span class="k2">(</span>hilite,ALLEGRO_PIXEL_SHADER,<span class="s">"Shaders/outlineshader.glsl"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>  shaderworks <span class="k3">=</span> shaderworks <span class="k3">&amp;</span><span class="k3">&amp;</span> al_build_shader<span class="k2">(</span>hilite<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>shaderworks<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 37</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> al_get_shader_log<span class="k2">(</span>hilite<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 39</span>  <span class="k2">}</span>
<span class="number"> 40</span>
<span class="number"> 41</span>  timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>  <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>e_queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>e_queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>e_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>
<span class="number"> 48</span>  <span class="k1">while</span> <span class="k2">(</span>gameclose <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 50</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>e_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 52</span>      update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>    <span class="k2">}</span><span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 54</span>      <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 55</span>        gameclose <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 56</span>        <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>sansation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>      <span class="k2">}</span>
<span class="number"> 58</span>      <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 59</span>        textredness<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 60</span>        <span class="k1">if</span> <span class="k2">(</span>textredness <span class="k3">&gt;</span> <span class="n">255</span><span class="k2">)</span>
<span class="number"> 61</span>          textredness <span class="k3">=</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 62</span>      <span class="k2">}</span>
<span class="number"> 63</span>    <span class="k2">}</span>
<span class="number"> 64</span>  <span class="k2">}</span>
<span class="number"> 65</span>  al_destroy_shader<span class="k2">(</span>hilite<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 68</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>  <a href="http://www.allegro.cc/manual/al_uninstall_keyboard"><span class="a">al_uninstall_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 70</span>  <a href="http://www.allegro.cc/manual/al_shutdown_image_addon"><span class="a">al_shutdown_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 71</span>  <a href="http://www.allegro.cc/manual/al_shutdown_ttf_addon"><span class="a">al_shutdown_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 72</span>  <a href="http://www.allegro.cc/manual/al_shutdown_font_addon"><span class="a">al_shutdown_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 73</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 74</span><span class="k2">}</span>
<span class="number"> 75</span><span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 76</span>  <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 77</span>  <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>sansation, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span> <span class="k3">-</span> textredness, <span class="n">255</span> <span class="k3">-</span> textredness<span class="k2">)</span>, <span class="n">5</span>, <span class="n">5</span>, <span class="n">0</span>, <span class="s">"Hey, it looks like the window opened!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 78</span>  al_use_shader<span class="k2">(</span>hilite<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 79</span>  al_set_shader_float<span class="k2">(</span><span class="s">"bitmapHeight"</span>, <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>img<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 80</span>  al_set_shader_float<span class="k2">(</span><span class="s">"bitmapWidth"</span>, <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>img<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 81</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>img,<span class="n">200</span>,<span class="n">200</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 82</span>  al_use_shader<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 83</span>  <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 84</span>  <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 85</span><span class="k2">}</span>
</div></div><p>

Any idea what this error message means or what I&#39;m supposed to do about it? My guess is that the example code I&#39;m trying to use is doing some kind of combined vertex shader/fragment shader thing, which is what the varying keyword is for- but I&#39;m just writing a straight pixel shader to modify how a single bitmap is drawn to the screen. That example code, then, isn&#39;t exactly applicable, and I&#39;m pretty sure the way I&#39;m accessing source image pixels is wrong. I can use gl_FragCoord to get the coordinate of the target I&#39;m drawing to, but what&#39;s the right way to tell which pixel of the source image is being drawn?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Benedict)</author>
		<pubDate>Sun, 20 Jan 2019 22:38:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Look at ex_shader :</p><p><a href="https://github.com/liballeg/allegro5/blob/master/examples/ex_shader.cpp">https://github.com/liballeg/allegro5/blob/master/examples/ex_shader.cpp</a></p><p>and the other shader examples.</p><p>Basically, you need a vertex shader, even if it does nothing. You have to compile and link it as well.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 20 Jan 2019 23:03:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks! That did it- I kind of ignored the vertex half of the example, since I assumed I wouldn&#39;t need it because I wasn&#39;t doing any 3D stuff. I don&#39;t totally understand why it works that way, but I&#39;m happy enough to have it working.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Benedict)</author>
		<pubDate>Mon, 21 Jan 2019 02:44:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It works that way because there is a pipeline which all your graphics have to go through before they are displayed. When you use them you have to supply at least two of the shaders, the vertex and the fragment.  There are actually more than that you can use as well.  But those two are required if you use them.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 21 Jan 2019 14:34:29 +0000</pubDate>
	</item>
</rss>
