<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Shader Puzzle aka Reverse Engineering cool effect</title>
		<link>http://www.allegro.cc/forums/view/617493</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 11 Jul 2018 04:03:57 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I recently came across a <a href="https://www.allegro.cc/files/attachment/610651">cool demo by SilverTES</a> but sadly there is no source file with it, only a static exe and the shader source. I tried to recreate the effect using the latest code he posted in that thread, but all it does is draw an expanding white circle. The shockwave effect doesn&#39;t work with my source code. Funny thing is, they&#39;re using the same shader, so in theory only the parameters being passed to the shader are different.</p><p>Here&#39;s the code I tried :
</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="c">// -----------------------------------------------------------------------</span>
<span class="number">   2</span><span class="c">// --- Includes ---</span>
<span class="number">   3</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   8</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  11</span><span class="c">// --- Global variables ---</span>
<span class="number">  12</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  13</span>
<span class="number">  14</span><a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> keyState<span class="k2">;</span>
<span class="number">  15</span><a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a> mouseState<span class="k2">;</span>
<span class="number">  16</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span> windowDisplay<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> windowBuffer<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span> eventQueue<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span><a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span> framerateTimer<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span><span class="k1">int</span> framerate<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="c">// User data</span>
<span class="number">  24</span>ALLEGRO_SHADER <span class="k3">*</span> myShader<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> myShaderVertFileName<span class="k2">(</span><span class="s">"myShaderVert.glsl"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> myShaderFragFileName<span class="k2">(</span><span class="s">"myShaderFrag.glsl"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> myImage<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> myImageFileName<span class="k2">(</span><span class="s">"bg0.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span><span class="c">// Window setting</span>
<span class="number">  31</span><span class="k1">int</span> screenW<span class="k2">(</span><span class="n">640</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span><span class="k1">int</span> screenH<span class="k2">(</span><span class="n">360</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span><span class="k1">int</span> zoom<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span><span class="c">// Absolute mouse position</span>
<span class="number">  35</span><span class="k1">int</span> mouseXi<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span><span class="k1">int</span> mouseYi<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span><span class="c">// Relative mouse position</span>
<span class="number">  38</span><span class="k1">float</span> mouseXf<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span><span class="k1">float</span> mouseYf<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span><span class="c">// Window  position in the desktop</span>
<span class="number">  41</span><span class="k1">int</span> xWindow<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span><span class="k1">int</span> yWindow<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  45</span><span class="c">// --- Global Methods ---</span>
<span class="number">  46</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  47</span>
<span class="number">  48</span><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> M&gt;
<span class="number">  49</span><span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a> <span class="k2">(</span><span class="k1">int</span> error, M msg<span class="k2">)</span>
<span class="number">  50</span><span class="k2">{</span>
<span class="number">  51</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> msg<span class="k2">;</span>
<span class="number">  52</span>
<span class="number">  53</span>    <span class="k1">return</span> error<span class="k2">;</span>
<span class="number">  54</span><span class="k2">}</span>
<span class="number">  55</span>
<span class="number">  56</span><span class="k1">void</span> setFramerate<span class="k2">(</span><span class="k1">int</span> fps<span class="k2">)</span>
<span class="number">  57</span><span class="k2">{</span>
<span class="number">  58</span>    eventQueue <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">  59</span>    framerate <span class="k3">=</span> fps<span class="k2">;</span>
<span class="number">  60</span>    framerateTimer <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">000</span><span class="k3">/</span>framerate<span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>
<span class="number">  62</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>eventQueue,<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>framerateTimer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>framerateTimer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span><span class="k2">}</span>
<span class="number">  65</span>
<span class="number">  66</span><span class="k1">void</span> drawGrid<span class="k2">(</span><span class="k1">int</span> screenW, <span class="k1">int</span> screenH,
<span class="number">  67</span>              <span class="k1">int</span> sizeX, <span class="k1">int</span> sizeY,
<span class="number">  68</span>              <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span>
<span class="number">  69</span><span class="k2">{</span>
<span class="number">  70</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span>screenW<span class="k3">/</span>sizeX<span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  71</span>    <span class="k2">{</span>
<span class="number">  72</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>i<span class="k3">*</span>sizeX<span class="k3">+</span>.<span class="n">5</span>, .<span class="n">5</span>, i<span class="k3">*</span>sizeX<span class="k3">+</span>.<span class="n">5</span>, screenH<span class="k3">+</span>.<span class="n">5</span>, color,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>    <span class="k2">}</span>
<span class="number">  74</span>
<span class="number">  75</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span>screenH<span class="k3">/</span>sizeY<span class="k2">)</span><span class="k3">+</span><span class="n">1</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  76</span>    <span class="k2">{</span>
<span class="number">  77</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>.<span class="n">5</span>, i<span class="k3">*</span>sizeY<span class="k3">+</span>.<span class="n">5</span>, screenW<span class="k3">+</span>.<span class="n">5</span>, i<span class="k3">*</span>sizeY<span class="k3">+</span>.<span class="n">5</span>, color,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>    <span class="k2">}</span>
<span class="number">  79</span><span class="k2">}</span>
<span class="number">  80</span>
<span class="number">  81</span>ALLEGRO_SHADER<span class="k3">*</span> create_shader<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> fileNameVert, <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> fileNameFrag <span class="k2">)</span>
<span class="number">  82</span><span class="k2">{</span>
<span class="number">  83</span>    ALLEGRO_SHADER<span class="k3">*</span> shader <span class="k3">=</span> al_create_shader<span class="k2">(</span>ALLEGRO_SHADER_GLSL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span><span class="c">//    if(!al_attach_shader_source(shader,</span>
<span class="number">  85</span><span class="c">//                                ALLEGRO_VERTEX_SHADER,</span>
<span class="number">  86</span><span class="c">//                                al_get_default_shader_source(ALLEGRO_SHADER_GLSL, ALLEGRO_VERTEX_SHADER)))</span>
<span class="number">  87</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>al_attach_shader_source_file<span class="k2">(</span>shader, ALLEGRO_VERTEX_SHADER, fileNameVert<span class="k2">)</span><span class="k2">)</span>
<span class="number">  88</span>    <span class="k2">{</span>
<span class="number">  89</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>        <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  91</span>    <span class="k2">}</span>
<span class="number">  92</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>al_attach_shader_source_file<span class="k2">(</span>shader, ALLEGRO_PIXEL_SHADER, fileNameFrag<span class="k2">)</span><span class="k2">)</span>
<span class="number">  93</span>    <span class="k2">{</span>
<span class="number">  94</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>        <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  96</span>    <span class="k2">}</span>
<span class="number">  97</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>al_build_shader<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span>
<span class="number">  98</span>    <span class="k2">{</span>
<span class="number">  99</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>        <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number"> 101</span>    <span class="k2">}</span>
<span class="number"> 102</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" &gt;&gt;&gt; "</span><span class="k3">&lt;</span><span class="k3">&lt;</span> al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" \n"</span><span class="k2">;</span>
<span class="number"> 103</span>
<span class="number"> 104</span>    <span class="k1">return</span> shader<span class="k2">;</span>
<span class="number"> 105</span><span class="k2">}</span>
<span class="number"> 106</span>
<span class="number"> 107</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 108</span><span class="c">// ---- INIT ---</span>
<span class="number"> 109</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 110</span><span class="k1">int</span> init<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 111</span><span class="k2">{</span>
<span class="number"> 112</span><span class="c">// Init Allegro 5</span>
<span class="number"> 113</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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"> 114</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Init ALLEGRO_5 ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>
<span class="number"> 116</span><span class="c">// Init &amp; Install : Modules &amp; Addon</span>
<span class="number"> 117</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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"> 118</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Install Keyboard ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>
<span class="number"> 120</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 121</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Install Keyboard ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>
<span class="number"> 123</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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"> 124</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Init Image addon ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>
<span class="number"> 126</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 127</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Init Primitives addon ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>
<span class="number"> 129</span><span class="c">// Settings</span>
<span class="number"> 130</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_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</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"> 132</span>    <span class="c">//al_set_new_display_flags(ALLEGRO_PROGRAMMABLE_PIPELINE | ALLEGRO_OPENGL);</span>
<span class="number"> 133</span>
<span class="number"> 134</span>    setFramerate<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>
<span class="number"> 136</span><span class="c">// Create All</span>
<span class="number"> 137</span>    windowDisplay <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>screenW<span class="k3">*</span>zoom, screenH<span class="k3">*</span>zoom<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>windowDisplay<span class="k2">)</span>
<span class="number"> 139</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Create display ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>
<span class="number"> 141</span>    windowBuffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>screenW, screenH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>windowDisplay<span class="k2">)</span>
<span class="number"> 143</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Create Buffer ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 144</span>
<span class="number"> 145</span>    <a href="http://www.allegro.cc/manual/al_show_mouse_cursor"><span class="a">al_show_mouse_cursor</span></a><span class="k2">(</span>windowDisplay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 146</span>
<span class="number"> 147</span>    myImage <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>myImageFileName<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>
<span class="number"> 149</span>
<span class="number"> 150</span>    myShader <span class="k3">=</span> create_shader<span class="k2">(</span>myShaderVertFileName,myShaderFragFileName<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>
<span class="number"> 152</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>myShader<span class="k2">)</span>
<span class="number"> 153</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">" Error in create myShader !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>
<span class="number"> 155</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- init OK !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span><span class="k2">}</span>
<span class="number"> 157</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 158</span><span class="c">// --- DONE ---</span>
<span class="number"> 159</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 160</span><span class="k1">int</span> done<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 161</span><span class="k2">{</span>
<span class="number"> 162</span><span class="c">// Destroy All</span>
<span class="number"> 163</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>myImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>    <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>eventQueue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 165</span>    <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>framerateTimer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>    al_destroy_shader<span class="k2">(</span>myShader<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>windowBuffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 168</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>windowDisplay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>
<span class="number"> 170</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- done OK !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 171</span><span class="k2">}</span>
<span class="number"> 172</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 173</span><span class="c">// --- RUN ---</span>
<span class="number"> 174</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 175</span><span class="k1">int</span> run<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 176</span><span class="k2">{</span>
<span class="number"> 177</span>
<span class="number"> 178</span>    <span class="k1">bool</span> quit<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 179</span>
<span class="number"> 180</span>    <span class="k1">float</span> centerX<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>    <span class="k1">float</span> centerY<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>    <span class="k1">float</span> radius<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>    <span class="k1">float</span> maxRadius<span class="k2">(</span><span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>    <span class="k1">float</span> speed<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 185</span>
<span class="number"> 186</span>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span>
<span class="number"> 187</span>    <span class="k2">{</span>
<span class="number"> 188</span>    <span class="c">// --- Update ---</span>
<span class="number"> 189</span>
<span class="number"> 190</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"> 191</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>eventQueue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>
<span class="number"> 193</span>        <span class="c">// Keyboard Input !</span>
<span class="number"> 194</span>        <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>keyState<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>keyState, ALLEGRO_KEY_ESCAPE<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 196</span>            quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 197</span>
<span class="number"> 198</span>        <span class="c">// Mouse Input !</span>
<span class="number"> 199</span>        <a href="http://www.allegro.cc/manual/al_get_mouse_state"><span class="a">al_get_mouse_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouseState<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>        <a href="http://www.allegro.cc/manual/al_get_window_position"><span class="a">al_get_window_position</span></a> <span class="k2">(</span>windowDisplay, <span class="k3">&amp;</span>xWindow, <span class="k3">&amp;</span>yWindow<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>        <a href="http://www.allegro.cc/manual/al_get_mouse_cursor_position"><span class="a">al_get_mouse_cursor_position</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouseXi, <span class="k3">&amp;</span>mouseYi<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>        mouseXf <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">(</span>mouseXi-xWindow<span class="k2">)</span><span class="k3">-</span><span class="n">2</span><span class="k2">)</span><span class="k3">/</span>zoom<span class="k2">;</span>
<span class="number"> 203</span>        mouseYf <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">(</span>mouseYi-yWindow<span class="k2">)</span><span class="k3">-</span><span class="n">24</span><span class="k2">)</span><span class="k3">/</span>zoom<span class="k2">;</span>
<span class="number"> 204</span>
<span class="number"> 205</span>        <span class="k1">if</span> <span class="k2">(</span>mouseState.buttons <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 206</span>        <span class="k2">{</span>
<span class="number"> 207</span>            centerX <span class="k3">=</span> mouseXf<span class="k2">;</span>
<span class="number"> 208</span>            centerY <span class="k3">=</span> mouseYf<span class="k2">;</span>
<span class="number"> 209</span>            radius <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 210</span>            speed <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 211</span>        <span class="k2">}</span>
<span class="number"> 212</span>
<span class="number"> 213</span>        <span class="c">// ShockWave Update !</span>
<span class="number"> 214</span>        radius <span class="k3">+</span><span class="k3">=</span> speed<span class="k2">;</span>
<span class="number"> 215</span>        <span class="k1">if</span> <span class="k2">(</span>radius <span class="k3">&gt;</span> maxRadius<span class="k2">)</span>
<span class="number"> 216</span>        <span class="k2">{</span>
<span class="number"> 217</span>            radius <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 218</span>            speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 219</span>        <span class="k2">}</span>
<span class="number"> 220</span>
<span class="number"> 221</span>    <span class="c">// --- Render ---</span>
<span class="number"> 222</span>
<span class="number"> 223</span>        <span class="c">// clear windowbuffer !</span>
<span class="number"> 224</span>        <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>windowBuffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</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">25</span>,<span class="n">40</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 226</span>
<span class="number"> 227</span>        <span class="c">// Begin drawing !</span>
<span class="number"> 228</span>
<span class="number"> 229</span>        <span class="c">// Use shader here before blit buffer to display !!</span>
<span class="number"> 230</span>        al_use_shader<span class="k2">(</span>myShader<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>        al_set_shader_sampler<span class="k2">(</span><span class="s">"texture"</span>, myImage, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>
<span class="number"> 233</span>        <span class="k1">float</span> center<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> centerX, centerY <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 234</span>        <span class="k1">float</span> shockParams<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">10</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">8</span>, <span class="n">0</span>.<span class="n">1</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 235</span>
<span class="number"> 236</span>        al_set_shader_float<span class="k2">(</span><span class="s">"time"</span>, radius<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 237</span>        al_set_shader_float_vector<span class="k2">(</span><span class="s">"center"</span>, <span class="n">2</span>, <span class="k3">&amp;</span>center<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>        al_set_shader_float_vector<span class="k2">(</span><span class="s">"shockParams"</span>, <span class="n">3</span>, <span class="k3">&amp;</span>shockParams<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 239</span>
<span class="number"> 240</span>        <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>myImage, <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="number"> 241</span>
<span class="number"> 242</span>        al_use_shader<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 243</span>
<span class="number"> 244</span>        drawGrid<span class="k2">(</span>screenW, screenH,<span class="n">32</span>,<span class="n">32</span>,<a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">45</span>,<span class="n">80</span>,<span class="n">50</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>        <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 246</span>                          screenW-.5, screenH-.5,
<span class="number"> 247</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">250</span>,<span class="n">120</span>,<span class="n">180</span><span class="k2">)</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 248</span>
<span class="number"> 249</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span><span class="n">0</span>, mouseYf, screenW, mouseYf, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">10</span>,<span class="n">100</span>,<span class="n">155</span>,<span class="n">50</span><span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>mouseXf, <span class="n">0</span>, mouseXf, screenH, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">10</span>,<span class="n">100</span>,<span class="n">155</span>,<span class="n">50</span><span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 251</span>
<span class="number"> 252</span>        <a href="http://www.allegro.cc/manual/al_draw_circle"><span class="a">al_draw_circle</span></a><span class="k2">(</span>centerX, centerY, radius, <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">250</span>,<span class="n">200</span>,<span class="n">210</span>,<span class="n">50</span><span class="k2">)</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 253</span>
<span class="number"> 254</span>
<span class="number"> 255</span>        <span class="c">/// End drawing !</span>
<span class="number"> 256</span>
<span class="number"> 257</span>        <span class="c">// Blit buffer to display !</span>
<span class="number"> 258</span>        <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>windowDisplay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 259</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"> 260</span>
<span class="number"> 261</span>
<span class="number"> 262</span>        <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>windowBuffer,
<span class="number"> 263</span>                              <span class="n">0</span>, <span class="n">0</span>, screenW, screenH,
<span class="number"> 264</span>                              <span class="n">0</span>, <span class="n">0</span>, screenW<span class="k3">*</span>zoom, screenH<span class="k3">*</span>zoom,
<span class="number"> 265</span>                              <span class="n">0</span><span class="k2">)</span>,
<span class="number"> 266</span>
<span class="number"> 267</span>
<span class="number"> 268</span>        <span class="c">// Flip display !</span>
<span class="number"> 269</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"> 270</span>
<span class="number"> 271</span>
<span class="number"> 272</span>    <span class="k2">}</span>
<span class="number"> 273</span>
<span class="number"> 274</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- run OK !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 275</span><span class="k2">}</span>
<span class="number"> 276</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 277</span><span class="c">// --- MAIN ---</span>
<span class="number"> 278</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 279</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 280</span><span class="k2">{</span>
<span class="number"> 281</span>    <span class="k1">if</span> <span class="k2">(</span>init<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 282</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>, <span class="s">"Error in init() \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 283</span>    <span class="k1">if</span> <span class="k2">(</span>run<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 284</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>, <span class="s">"Error in run() \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 285</span>    <span class="k1">if</span> <span class="k2">(</span>done<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 286</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>, <span class="s">"Error in done() \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 287</span>
<span class="number"> 288</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- Terminated normally ! \n"</span><span class="k2">)</span><span class="k2">;</span><span class="k2">;</span>
<span class="number"> 289</span><span class="k2">}</span>
</div></div><p>

Cookies and kudos to anyone who can help me figure this out.</p><p>EDIT<br />Changing the following code makes it expand and contract but the warping effect is not there.
</p><div class="source-code snippet"><div class="inner"><pre>        <span class="c">// ShockWave Update !</span>
        radius <span class="k3">+</span><span class="k3">=</span> speed<span class="k2">;</span>
        <span class="k1">if</span> <span class="k2">(</span>radius <span class="k3">&gt;</span> maxRadius<span class="k2">)</span>
        <span class="k2">{</span>
            speed <span class="k3">=</span> <span class="k3">-</span>speed<span class="k2">;</span>
        <span class="k2">}</span>
        <span class="k1">if</span> <span class="k2">(</span>radius <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
           radius <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
            speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
        <span class="k2">}</span>
</pre></div></div><p>

The thread I&#39;m referring to is here :<br /><a href="https://www.allegro.cc/forums/thread/616619">https://www.allegro.cc/forums/thread/616619</a></p><p>The effect looks like this (it&#39;s much better in action) :<br /><span class="remote-thumbnail"><span class="json">{"name":"611636","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/b\/5b16fa0b17cf7c563ee357a125b319d1.png","w":1283,"h":751,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/b\/5b16fa0b17cf7c563ee357a125b319d1"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/b/5b16fa0b17cf7c563ee357a125b319d1-240.jpg" alt="611636" width="240" height="140" /></span><br />Here&#39;s what it looks like without the effect :<br /><span class="remote-thumbnail"><span class="json">{"name":"611637","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/d\/ede05318fcbe9830c6d3dcee46ebcabc.png","w":1283,"h":751,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/d\/ede05318fcbe9830c6d3dcee46ebcabc"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/d/ede05318fcbe9830c6d3dcee46ebcabc-240.jpg" alt="611637" width="240" height="140" /></span></p><p>It&#39;s a spherical distortion of some sort. Here&#39;s the vertex shader SilverTES used. (You can download them above) :
</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>
<span class="number">  5</span>uniform sampler2D tex<span class="k2">;</span> <span class="c">// 0</span>
<span class="number">  6</span>uniform vec2 center<span class="k2">;</span> <span class="c">// Mouse position</span>
<span class="number">  7</span>uniform <span class="k1">float</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">;</span> <span class="c">// effect elapsed time</span>
<span class="number">  8</span>uniform vec3 shockParams<span class="k2">;</span> <span class="c">// 10.0, 0.8, 0.1</span>
<span class="number">  9</span>
<span class="number"> 10</span>uniform vec2 surface<span class="k2">;</span> <span class="c">// texture resolution</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>    vec2 uv <span class="k3">=</span> gl_TexCoord<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.xy<span class="k2">;</span>
<span class="number"> 15</span>    vec2 texCoord <span class="k3">=</span> uv<span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="c">//float square = min(surface.x,surface.y);</span>
<span class="number"> 18</span>    <span class="c">//vec2 position = vec2(center.x/square, center.y/square);</span>
<span class="number"> 19</span>
<span class="number"> 20</span>    vec2 position <span class="k3">=</span> center<span class="k3">/</span>surface<span class="k2">;</span>
<span class="number"> 21</span>    <span class="k1">float</span> dist <span class="k3">=</span> distance<span class="k2">(</span>uv, position<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    <span class="c">//float dist = distance(vec2(uv.x,uv.y), vec2(position.x,position.y));</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>dist <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a> <span class="k3">+</span> shockParams.z<span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>dist <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a> <span class="k3">-</span> shockParams.z<span class="k2">)</span><span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 26</span>    <span class="k2">{</span>
<span class="number"> 27</span>        <span class="k1">float</span> diff <span class="k3">=</span> <span class="k2">(</span>dist <span class="k3">-</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>        <span class="k1">float</span> powDiff <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span> <span class="k3">-</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_618.html" target="_blank">pow</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>diff<span class="k3">*</span>shockParams.x<span class="k2">)</span>, shockParams.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>        <span class="k1">float</span> diffTime <span class="k3">=</span> diff  <span class="k3">*</span> powDiff<span class="k2">;</span>
<span class="number"> 30</span>        vec2 diffUV <span class="k3">=</span> normalize<span class="k2">(</span>uv <span class="k3">-</span> position<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>        texCoord <span class="k3">=</span> uv <span class="k3">+</span> <span class="k2">(</span>diffUV <span class="k3">*</span> diffTime<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    <span class="k2">}</span>
<span class="number"> 33</span>
<span class="number"> 34</span>    gl_FragColor <span class="k3">=</span> texture2D<span class="k2">(</span>tex, texCoord<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span><span class="k2">}</span>
</div></div><p>

<b>UPDATE</b><br />I&#39;m getting closer. I&#39;ve managed to get a distortion bubble.<br /><span class="remote-thumbnail"><span class="json">{"name":"611638","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/2\/e205247580d716406ac7105ae4f79673.png","w":803,"h":634,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/e\/2\/e205247580d716406ac7105ae4f79673"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/e/2/e205247580d716406ac7105ae4f79673-240.jpg" alt="611638" width="240" height="189" /></span></p><p>Here&#39;s the new code - I redid most of it.
</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="c">// -----------------------------------------------------------------------</span>
<span class="number">   2</span><span class="c">// --- Includes ---</span>
<span class="number">   3</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   8</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   9</span><span class="p">#include &lt;allegro5/allegro_opengl.h&gt;</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="p">#include &lt;cmath&gt;</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  14</span><span class="c">// --- Global variables ---</span>
<span class="number">  15</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  16</span>
<span class="number">  17</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span> d<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> windowBuffer<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>
<span class="number">  20</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> q<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span><a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span> t<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span>
<span class="number">  24</span>ALLEGRO_SHADER <span class="k3">*</span> myShader<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> myShaderVertFileName<span class="k2">(</span><span class="s">"myShaderVert.glsl"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> myShaderFragFileName<span class="k2">(</span><span class="s">"myShaderFrag.glsl"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> myImage<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> myImageFileName<span class="k2">(</span><span class="s">"bg0.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span><span class="c">// Window setting</span>
<span class="number">  31</span><span class="k1">int</span> screenW<span class="k2">(</span><span class="n">800</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span><span class="k1">int</span> screenH<span class="k2">(</span><span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  35</span><span class="c">// --- Global Methods ---</span>
<span class="number">  36</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> M&gt;
<span class="number">  39</span><span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a> <span class="k2">(</span><span class="k1">int</span> error, M msg<span class="k2">)</span>
<span class="number">  40</span><span class="k2">{</span>
<span class="number">  41</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> msg<span class="k2">;</span>
<span class="number">  42</span>
<span class="number">  43</span>    <span class="k1">return</span> error<span class="k2">;</span>
<span class="number">  44</span><span class="k2">}</span>
<span class="number">  45</span>
<span class="number">  46</span><span class="k1">void</span> drawGrid<span class="k2">(</span><span class="k1">int</span> screenW, <span class="k1">int</span> screenH,
<span class="number">  47</span>              <span class="k1">int</span> sizeX, <span class="k1">int</span> sizeY,
<span class="number">  48</span>              <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span>
<span class="number">  49</span><span class="k2">{</span>
<span class="number">  50</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span>screenW<span class="k3">/</span>sizeX<span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  51</span>    <span class="k2">{</span>
<span class="number">  52</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>i<span class="k3">*</span>sizeX<span class="k3">+</span>.<span class="n">5</span>, .<span class="n">5</span>, i<span class="k3">*</span>sizeX<span class="k3">+</span>.<span class="n">5</span>, screenH<span class="k3">+</span>.<span class="n">5</span>, color,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>    <span class="k2">}</span>
<span class="number">  54</span>
<span class="number">  55</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="k2">(</span>screenH<span class="k3">/</span>sizeY<span class="k2">)</span><span class="k3">+</span><span class="n">1</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  56</span>    <span class="k2">{</span>
<span class="number">  57</span>        <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>.<span class="n">5</span>, i<span class="k3">*</span>sizeY<span class="k3">+</span>.<span class="n">5</span>, screenW<span class="k3">+</span>.<span class="n">5</span>, i<span class="k3">*</span>sizeY<span class="k3">+</span>.<span class="n">5</span>, color,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>    <span class="k2">}</span>
<span class="number">  59</span><span class="k2">}</span>
<span class="number">  60</span>
<span class="number">  61</span>ALLEGRO_SHADER<span class="k3">*</span> create_shader<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> fileNameVert, <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> fileNameFrag <span class="k2">)</span>
<span class="number">  62</span><span class="k2">{</span>
<span class="number">  63</span>    ALLEGRO_SHADER<span class="k3">*</span> shader <span class="k3">=</span> al_create_shader<span class="k2">(</span>ALLEGRO_SHADER_GLSL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span><span class="c">//    if(!al_attach_shader_source(shader,</span>
<span class="number">  65</span><span class="c">//                                ALLEGRO_VERTEX_SHADER,</span>
<span class="number">  66</span><span class="c">//                                al_get_default_shader_source(ALLEGRO_SHADER_GLSL, ALLEGRO_VERTEX_SHADER)))</span>
<span class="number">  67</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>al_attach_shader_source_file<span class="k2">(</span>shader, ALLEGRO_VERTEX_SHADER, fileNameVert<span class="k2">)</span><span class="k2">)</span>
<span class="number">  68</span>    <span class="k2">{</span>
<span class="number">  69</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>        <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  71</span>    <span class="k2">}</span>
<span class="number">  72</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>al_attach_shader_source_file<span class="k2">(</span>shader, ALLEGRO_PIXEL_SHADER, fileNameFrag<span class="k2">)</span><span class="k2">)</span>
<span class="number">  73</span>    <span class="k2">{</span>
<span class="number">  74</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>        <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  76</span>    <span class="k2">}</span>
<span class="number">  77</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>al_build_shader<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span>
<span class="number">  78</span>    <span class="k2">{</span>
<span class="number">  79</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>        <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  81</span>    <span class="k2">}</span>
<span class="number">  82</span>    std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" &gt;&gt;&gt; "</span><span class="k3">&lt;</span><span class="k3">&lt;</span> al_get_shader_log<span class="k2">(</span>shader<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" \n"</span><span class="k2">;</span>
<span class="number">  83</span>
<span class="number">  84</span>    <span class="k1">return</span> shader<span class="k2">;</span>
<span class="number">  85</span><span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  88</span><span class="c">// ---- INIT ---</span>
<span class="number">  89</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number">  90</span><span class="k1">int</span> init<span class="k2">(</span><span class="k2">)</span>
<span class="number">  91</span><span class="k2">{</span>
<span class="number">  92</span><span class="c">// Init Allegro 5</span>
<span class="number">  93</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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">  94</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Init ALLEGRO_5 ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span><span class="c">// Init &amp; Install : Modules &amp; Addon</span>
<span class="number">  97</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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">  98</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Install Keyboard ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>
<span class="number"> 100</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 101</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Install Keyboard ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>
<span class="number"> 103</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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"> 104</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Init Image addon ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 107</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Init Primitives addon ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>
<span class="number"> 109</span><span class="c">// Settings</span>
<span class="number"> 110</span><span class="c">///    al_set_new_display_flags(ALLEGRO_PROGRAMMABLE_PIPELINE | ALLEGRO_OPENGL | ALLEGRO_WINDOWED);</span>
<span class="number"> 111</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="k3">|</span> ALLEGRO_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>
<span class="number"> 113</span><span class="c">// Create All</span>
<span class="number"> 114</span>    d <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>screenW, screenH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>d<span class="k2">)</span>
<span class="number"> 116</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Create display ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>
<span class="number"> 118</span>    windowBuffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>screenW, screenH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>    myImage <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>screenW, screenH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>windowBuffer<span class="k2">)</span>
<span class="number"> 121</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">"Unable to Create Buffer ! \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>
<span class="number"> 123</span>    q <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"> 124</span>    t <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"> 125</span>        
<span class="number"> 126</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>q , <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>d<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</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>q , <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</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>q , <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>t<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</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>q , <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"> 130</span>        
<span class="number"> 131</span>    <a href="http://www.allegro.cc/manual/al_show_mouse_cursor"><span class="a">al_show_mouse_cursor</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>
<span class="number"> 133</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> image <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>myImageFileName<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>myImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>    <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD , ALLEGRO_ONE , ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>    <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>image , <span class="n">0</span> , <span class="n">0</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>image<span class="k2">)</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>image<span class="k2">)</span> , <span class="n">0</span> , <span class="n">0</span> , screenW , screenH , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>    <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD , ALLEGRO_ONE , ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>
<span class="number"> 140</span>    myShader <span class="k3">=</span> create_shader<span class="k2">(</span>myShaderVertFileName,myShaderFragFileName<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>
<span class="number"> 142</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>myShader<span class="k2">)</span>
<span class="number"> 143</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>,<span class="s">" Error in create myShader !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 144</span>
<span class="number"> 145</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- init OK !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 146</span><span class="k2">}</span>
<span class="number"> 147</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 148</span><span class="c">// --- DONE ---</span>
<span class="number"> 149</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 150</span><span class="k1">int</span> done<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 151</span><span class="k2">{</span>
<span class="number"> 152</span>   <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- done OK !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span><span class="k2">}</span>
<span class="number"> 156</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 157</span><span class="c">// --- RUN ---</span>
<span class="number"> 158</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 159</span><span class="k1">int</span> run<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 160</span><span class="k2">{</span>
<span class="number"> 161</span>
<span class="number"> 162</span>    <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 163</span>    <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 164</span>
<span class="number"> 165</span>    <span class="k1">float</span> radius<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>    <span class="k1">float</span> maxRadius<span class="k2">(</span><span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>    <span class="k1">float</span> speed<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 168</span>    <span class="k1">float</span> dt <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 169</span>
<span class="number"> 170</span>    <span class="k1">int</span> mx <span class="k3">=</span> <span class="n">0</span> , my <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 171</span>    
<span class="number"> 172</span>    <span class="k1">bool</span> warp <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 173</span>    
<span class="number"> 174</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>    
<span class="number"> 176</span>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span>
<span class="number"> 177</span>    <span class="k2">{</span>
<span class="number"> 178</span>    <span class="c">// --- Update ---</span>
<span class="number"> 179</span>
<span class="number"> 180</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 181</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>q, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>
<span class="number"> 183</span>        <span class="c">// Keyboard Input !</span>
<span class="number"> 184</span>        <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">&amp;</span><span class="k3">&amp;</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 185</span>            quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 186</span>        <span class="k2">}</span>
<span class="number"> 187</span>        <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 188</span>            quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 189</span>        <span class="k2">}</span>
<span class="number"> 190</span>        <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 191</span>            mx <span class="k3">=</span> ev.mouse.x<span class="k2">;</span>
<span class="number"> 192</span>            my <span class="k3">=</span> ev.mouse.y<span class="k2">;</span>
<span class="number"> 193</span>        <span class="k2">}</span>
<span class="number"> 194</span>        <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN <span class="k3">&amp;</span><span class="k3">&amp;</span> ev.mouse.button <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 195</span>           <span class="c">// Mouse Input !</span>
<span class="number"> 196</span>            warp <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 197</span>            radius <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 198</span>            speed <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 199</span>        <span class="k2">}</span>
<span class="number"> 200</span>
<span class="number"> 201</span>        <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 202</span>            redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 203</span>           <span class="c">// ShockWave Update !</span>
<span class="number"> 204</span>           radius <span class="k3">+</span><span class="k3">=</span> speed<span class="k2">;</span>
<span class="number"> 205</span>           <span class="k1">if</span> <span class="k2">(</span>radius <span class="k3">&gt;</span> maxRadius<span class="k2">)</span>
<span class="number"> 206</span>           <span class="k2">{</span>
<span class="number"> 207</span>               speed <span class="k3">=</span> <span class="k3">-</span>speed<span class="k2">;</span>
<span class="number"> 208</span>           <span class="k2">}</span>
<span class="number"> 209</span>           <span class="k1">if</span> <span class="k2">(</span>radius <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 210</span>              radius <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 211</span>               speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 212</span>               warp <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 213</span>           <span class="k2">}</span>
<span class="number"> 214</span>
<span class="number"> 215</span>           dt <span class="k3">=</span> <span class="n">2</span>.<span class="n">0</span><span class="k3">*</span>M_PI<span class="k3">*</span><span class="k2">(</span>radius<span class="k3">/</span>maxRadius<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>        <span class="k2">}</span>
<span class="number"> 217</span>        
<span class="number"> 218</span>         <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 219</span>            redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 220</span>            <span class="c">// --- Render ---</span>
<span class="number"> 221</span>
<span class="number"> 222</span>            <span class="c">// clear windowbuffer !</span>
<span class="number"> 223</span>            <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>windowBuffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 224</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">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>
<span class="number"> 226</span>            <span class="c">// Begin drawing !</span>
<span class="number"> 227</span>
<span class="number"> 228</span>            <span class="c">// Use shader here before blit buffer to display !!</span>
<span class="number"> 229</span>            al_use_shader<span class="k2">(</span>myShader<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>            al_set_shader_sampler<span class="k2">(</span><span class="s">"tex"</span>, myImage, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>
<span class="number"> 232</span>            <span class="k1">int</span> tw <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 233</span>            <span class="k1">int</span> th <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 234</span>            <a href="http://www.allegro.cc/manual/al_get_opengl_texture_size"><span class="a">al_get_opengl_texture_size</span></a><span class="k2">(</span>myImage , <span class="k3">&amp;</span>tw , <span class="k3">&amp;</span>th<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 235</span>
<span class="number"> 236</span>            <span class="k1">float</span> dim<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</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>myImage<span class="k2">)</span> , <span class="k2">(</span><span class="k1">float</span><span class="k2">)</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>myImage<span class="k2">)</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 237</span>
<span class="number"> 238</span>            <span class="k1">float</span> ms<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>mx,<span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span>screenH <span class="k3">-</span> my<span class="k2">)</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 239</span>
<span class="number"> 240</span>            <span class="k1">float</span> r <span class="k3">=</span> radius<span class="k2">;</span>
<span class="number"> 241</span>            
<span class="number"> 242</span>            al_set_shader_bool<span class="k2">(</span><span class="s">"warp"</span> , warp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 243</span>            al_set_shader_float<span class="k2">(</span><span class="s">"radius"</span>, r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 244</span>            al_set_shader_float<span class="k2">(</span><span class="s">"dt"</span>, dt<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>            al_set_shader_float_vector<span class="k2">(</span><span class="s">"mouse"</span> , <span class="n">2</span> , <span class="k3">&amp;</span>ms<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> , <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>            al_set_shader_float_vector<span class="k2">(</span><span class="s">"dim"</span>, <span class="n">2</span>, <span class="k3">&amp;</span>dim<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>
<span class="number"> 248</span>            <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>myImage, <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="number"> 249</span>
<span class="number"> 250</span>            al_use_shader<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 251</span>
<span class="number"> 252</span>            drawGrid<span class="k2">(</span>screenW, screenH,<span class="n">32</span>,<span class="n">32</span>,<a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">45</span>,<span class="n">80</span>,<span class="n">50</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 253</span>                     <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>,
<span class="number"> 254</span>                     screenW-.5, screenH-.5,
<span class="number"> 255</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">250</span>,<span class="n">120</span>,<span class="n">180</span><span class="k2">)</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 256</span>
<span class="number"> 257</span>
<span class="number"> 258</span>
<span class="number"> 259</span>            <span class="c">/// End drawing !</span>
<span class="number"> 260</span>
<span class="number"> 261</span>            <span class="c">// Blit buffer to display !</span>
<span class="number"> 262</span>            <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 263</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"> 264</span>            
<span class="number"> 265</span>            
<span class="number"> 266</span>            <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>windowBuffer , <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="number"> 267</span>
<span class="number"> 268</span>            <span class="c">// Flip display !</span>
<span class="number"> 269</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"> 270</span>         <span class="k2">}</span>
<span class="number"> 271</span>      
<span class="number"> 272</span>
<span class="number"> 273</span>    <span class="k2">}</span>
<span class="number"> 274</span>
<span class="number"> 275</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- run OK !\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 276</span><span class="k2">}</span>
<span class="number"> 277</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 278</span><span class="c">// --- MAIN ---</span>
<span class="number"> 279</span><span class="c">// -----------------------------------------------------------------------</span>
<span class="number"> 280</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 281</span><span class="k2">{</span>
<span class="number"> 282</span>    <span class="k1">if</span> <span class="k2">(</span>init<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 283</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>, <span class="s">"Error in init() \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 284</span>    <span class="k1">if</span> <span class="k2">(</span>run<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 285</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>, <span class="s">"Error in run() \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 286</span>    <span class="k1">if</span> <span class="k2">(</span>done<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 287</span>        <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">1</span>, <span class="s">"Error in done() \n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 288</span>
<span class="number"> 289</span>    <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_542.html" target="_blank">log</a><span class="k2">(</span><span class="n">0</span>,<span class="s">"--- Terminated normally ! \n"</span><span class="k2">)</span><span class="k2">;</span><span class="k2">;</span>
<span class="number"> 290</span><span class="k2">}</span>
</div></div><p>

And here&#39;s the vertex shader :
</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">#version 110</span>
<span class="number">  2</span>
<span class="number">  3</span>
<span class="number">  4</span>
<span class="number">  5</span>uniform sampler2D tex<span class="k2">;</span> <span class="c">// 0</span>
<span class="number">  6</span>uniform <span class="k1">float</span> dt<span class="k2">;</span>
<span class="number">  7</span>uniform vec2 mouse<span class="k2">;</span> <span class="c">// Mouse position</span>
<span class="number">  8</span>uniform vec2 dim<span class="k2">;</span>
<span class="number">  9</span>uniform <span class="k1">float</span> radius<span class="k2">;</span>
<span class="number"> 10</span>uniform <span class="k1">bool</span> warp<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>   vec2 uv <span class="k3">=</span> gl_TexCoord<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.xy<span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">if</span> <span class="k2">(</span>warp<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>   <span class="c">///   gl_FragColor = texture2D(tex , uv);</span>
<span class="number"> 17</span>
<span class="number"> 18</span>      vec2 uvP <span class="k3">=</span> vec2<span class="k2">(</span>uv.x<span class="k3">*</span>dim.x , uv.y<span class="k3">*</span>dim.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>      
<span class="number"> 20</span>      vec2 dist <span class="k3">=</span> mouse <span class="k3">-</span> uvP<span class="k2">;</span>
<span class="number"> 21</span>      <span class="k1">float</span> theta <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_49.html" target="_blank">atan</a><span class="k2">(</span>dist.y , dist.x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   <span class="c">///   dist += (dist / (1.0 + (1.0 + cos(dist*dt/300.0))/2.0));</span>
<span class="number"> 23</span>      <span class="k1">float</span> d <span class="k3">=</span> distance<span class="k2">(</span>dist , vec2<span class="k2">(</span><span class="n">0</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"> 24</span>
<span class="number"> 25</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>d <span class="k3">&lt;</span> <span class="k2">(</span>radius <span class="k3">+</span> <span class="n">50</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>d <span class="k3">&gt;</span> <span class="k2">(</span>radius <span class="k3">-</span> <span class="n">50</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 26</span>         <span class="k1">float</span> diff <span class="k3">=</span> d <span class="k3">-</span> radius<span class="k2">;</span>
<span class="number"> 27</span>         diff <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span><span class="k2">(</span>diff <span class="k3">+</span> <span class="n">50</span>.<span class="n">0</span><span class="k2">)</span><span class="k3">*</span><span class="n">3</span>.<span class="n">14159265</span><span class="k3">*</span><span class="n">2</span>.<span class="n">0</span><span class="k3">/</span><span class="n">100</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>         dist <span class="k3">/</span><span class="k3">=</span> diff<span class="k2">;</span>
<span class="number"> 29</span>         uv <span class="k3">=</span> uv <span class="k3">+</span> vec2<span class="k2">(</span>dist.x<span class="k3">/</span>dim.x , dist.y<span class="k3">/</span>dim.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>      <span class="k2">}</span>
<span class="number"> 31</span>
<span class="number"> 32</span>
<span class="number"> 33</span>   <span class="c">///   dist /= (1.0 + (1.0 + cos(dist*dt/300.0))/2.0);</span>
<span class="number"> 34</span>   <span class="k2">}</span>
<span class="number"> 35</span>   gl_FragColor <span class="k3">=</span> texture2D<span class="k2">(</span>tex , uv<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span><span class="c">//   dist = dist*(1.0f + .25*sin(dt));</span>
<span class="number"> 37</span><span class="c">//   float theta = atan(mouse.y - uv.y , mouse.x - uv.x);</span>
<span class="number"> 38</span><span class="c">//   uv = uv + dist*vec2(cos(theta) , sin(theta));</span>
<span class="number"> 39</span><span class="k2">}</span>
<span class="number"> 40</span>
<span class="number"> 41</span>
<span class="number"> 42</span><span class="c">/**</span>
<span class="number"> 43</span><span class="c">void main()</span>
<span class="number"> 44</span><span class="c">{</span>
<span class="number"> 45</span><span class="c">    vec2 uv = gl_TexCoord[0].xy;</span>
<span class="number"> 46</span><span class="c"></span>
<span class="number"> 47</span><span class="c">    vec2 texPixel = vec2(uv.x*dim.x , uv.y*dim.y);</span>
<span class="number"> 48</span><span class="c"></span>
<span class="number"> 49</span><span class="c">    vec2 position = center/surface;</span>
<span class="number"> 50</span><span class="c">    </span>
<span class="number"> 51</span><span class="c">    position = vec2(position.x*dim.x , position.y*dim.y);</span>
<span class="number"> 52</span><span class="c"></span>
<span class="number"> 53</span><span class="c">    float dist = distance(texPixel, position);</span>
<span class="number"> 54</span><span class="c">    </span>
<span class="number"> 55</span><span class="c">    vec2 diff = position - texPixel;</span>
<span class="number"> 56</span><span class="c">    float theta = atan(diff.y , diff.x);</span>
<span class="number"> 57</span><span class="c">    </span>
<span class="number"> 58</span><span class="c">    texPixel = uv + vec2(dist*cos(theta) , dist*sin(theta));</span>
<span class="number"> 59</span><span class="c">    texPixel = vec2(texPixel.x/dim.x , texPixel.y/dim.y);</span>
<span class="number"> 60</span><span class="c">    if ((dist &lt;= (radius + shockParams.z)) &amp;&amp; (dist &gt;= (radius - shockParams.z)) )</span>
<span class="number"> 61</span><span class="c">    {</span>
<span class="number"> 62</span><span class="c">        float diff = (dist - radius);</span>
<span class="number"> 63</span><span class="c">        float powDiff = 1.0 - pow(abs(diff*shockParams.x), shockParams.y);</span>
<span class="number"> 64</span><span class="c">        float diffTime = diff  * powDiff;</span>
<span class="number"> 65</span><span class="c">        vec2 diffUV = normalize(uv - position);</span>
<span class="number"> 66</span><span class="c">        texCoord = uv + (diffUV * diffTime);</span>
<span class="number"> 67</span><span class="c">    }</span>
<span class="number"> 68</span><span class="c">    gl_FragColor = texture2D(tex, texPixel);</span>
<span class="number"> 69</span><span class="c">}</span>
<span class="number"> 70</span><span class="c"></span>
<span class="number"> 71</span><span class="c">//*/</span>
</div></div><p>

<b>EDIT</b><br />This looks almost like the same effect!!!<br /><span class="remote-thumbnail"><span class="json">{"name":"611639","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/1\/81db4a0d1f992cdaa742ef43a27b3c5b.png","w":805,"h":636,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/1\/81db4a0d1f992cdaa742ef43a27b3c5b"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/1/81db4a0d1f992cdaa742ef43a27b3c5b-240.jpg" alt="611639" width="240" height="189" /></span></p><p>Download a zip of the source and image and executables here !</p><p><a href="https://www.allegro.cc/files/attachment/611640">SilverTES_example.zip</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 10 Jul 2018 14:08:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This might be a very good example on the usage of the shaders and the programable pipeline in allegro. Nice job!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Rodolfo Lam)</author>
		<pubDate>Wed, 11 Jul 2018 04:03:57 +0000</pubDate>
	</item>
</rss>
