<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>How to use al_draw_soft_line function</title>
		<link>http://www.allegro.cc/forums/view/615463</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 20 Jun 2015 00:36:14 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m a beginner in Allegro and in programming in general and I have to port a game from Allegro 4.4 to Allegro 5.0. In the earlier version they use <span class="source-code"><a href="http://www.allegro.cc/manual/do_line"><span class="a">do_line</span></a></span> to compare the color of 2 pixel.</p><p>What I found on the internet is that <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_soft_line"><span class="a">al_draw_soft_line</span></a></span> do the same thing. The thing is I don&#39;t understand how to use this function and I can&#39;t find any example to help me on the internet.</p><p>So if anyone can help me on that it&#39;ll be greatly appreciate.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Francis Langlais)</author>
		<pubDate>Wed, 17 Jun 2015 23:21:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This thread has an example on how to use al_draw_soft_line:</p><p><a href="https://www.allegro.cc/forums/thread/615415">https://www.allegro.cc/forums/thread/615415</a></p><p>Basically it&#39;s a function that takes the points in between the line that will be traced, user data and 3 callback functions, of which the last is most useful.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Thu, 18 Jun 2015 02:13:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s another code example of how to use al_draw_soft_line :</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="number">   2</span><span class="p">#include "allegro5/allegro.h"</span>
<span class="number">   3</span><span class="p">#include "allegro5/allegro_primitives.h"</span>
<span class="number">   4</span>
<span class="number">   5</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   6</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> buffer <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">void</span> FirstFunction<span class="k2">(</span>uintptr_t state , <span class="k1">int</span> x , <span class="k1">int</span> y , <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v1 , <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v2<span class="k2">)</span><span class="k2">;</span>
<span class="number">   9</span><span class="k1">void</span> StepFunction<span class="k2">(</span>uintptr_t state , <span class="k1">int</span> step<span class="k2">)</span><span class="k2">;</span>
<span class="number">  10</span><span class="k1">void</span> DrawFunction<span class="k2">(</span>uintptr_t state , <span class="k1">int</span> x , <span class="k1">int</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="p">#include &lt;cstdlib&gt;</span>
<span class="number">  13</span><span class="p">#include &lt;cstdio&gt;</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  16</span>   
<span class="number">  17</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argc<span class="k2">;</span>
<span class="number">  18</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argv<span class="k2">;</span>
<span class="number">  19</span>   
<span class="number">  20</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="k2">{</span><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  21</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="k2">{</span><span class="k1">return</span> <span class="n">2</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  22</span>   
<span class="number">  23</span>   <span class="k1">int</span> w <span class="k3">=</span> <span class="n">400</span><span class="k2">;</span>
<span class="number">  24</span>   <span class="k1">int</span> h <span class="k3">=</span> <span class="n">400</span><span class="k2">;</span>
<span class="number">  25</span>   
<span class="number">  26</span>   display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>w,h<span class="k2">)</span><span class="k2">;</span><span class="c">// sorry, you need a target bitmap to draw with al_draw_soft_line</span>
<span class="number">  27</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">3</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  28</span>   
<span class="number">  29</span>   buffer <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>w,h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>buffer<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="n">4</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  31</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>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</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_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>   
<span class="number">  34</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>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</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_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">255</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">  36</span>   <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>buffer , <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">  37</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">  38</span>   
<span class="number">  39</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">  40</span>   
<span class="number">  41</span><span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">10</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  42</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> v1<span class="k2">;</span>
<span class="number">  43</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> v2<span class="k2">;</span>
<span class="number">  44</span>   
<span class="number">  45</span>   v1.x <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span><span class="k1">unsigned</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k3">/</span>RAND_MAX<span class="k2">)</span><span class="k3">*</span>w<span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>   v1.y <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span><span class="k1">unsigned</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k3">/</span>RAND_MAX<span class="k2">)</span><span class="k3">*</span>h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>   v1.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  48</span>   v2.x <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span><span class="k1">unsigned</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k3">/</span>RAND_MAX<span class="k2">)</span><span class="k3">*</span>w<span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>   v2.y <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span><span class="k1">unsigned</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k3">/</span>RAND_MAX<span class="k2">)</span><span class="k3">*</span>h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>   v2.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  51</span>
<span class="number">  52</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>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>   <a href="http://www.allegro.cc/manual/al_draw_soft_line"><span class="a">al_draw_soft_line</span></a><span class="k2">(</span><span class="k3">&amp;</span>v1 , <span class="k3">&amp;</span>v2 , <span class="k2">(</span>uintptr_t<span class="k2">)</span>NULL , FirstFunction , StepFunction , DrawFunction<span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span><span class="k2">}</span>
<span class="number">  56</span><a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">2</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span><span class="c">//void al_draw_soft_line(ALLEGRO_VERTEX* v1, ALLEGRO_VERTEX* v2, uintptr_t state,</span>
<span class="number">  59</span><span class="c">//   void (*first)(uintptr_t, int, int, ALLEGRO_VERTEX*, ALLEGRO_VERTEX*),</span>
<span class="number">  60</span><span class="c">//   void (*step)(uintptr_t, int),</span>
<span class="number">  61</span><span class="c">//   void (*draw)(uintptr_t, int, int))</span>
<span class="number">  62</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  63</span><span class="k2">}</span>
<span class="number">  64</span>
<span class="number">  65</span>
<span class="number">  66</span>
<span class="number">  67</span><span class="k1">void</span> FirstFunction<span class="k2">(</span>uintptr_t state , <span class="k1">int</span> x , <span class="k1">int</span> y , <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v1 , <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a><span class="k3">*</span> v2<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  68</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>state<span class="k2">;</span>
<span class="number">  69</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>x<span class="k2">;</span>
<span class="number">  70</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>y<span class="k2">;</span>
<span class="number">  71</span>   
<span class="number">  72</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Drawing a line from v1 (%f,%f,%f) to v2 (%f,%f,%f)\n"</span> , v1-&gt;x , v1-&gt;y , v1-&gt;z , v2-&gt;x , v2-&gt;y , v2-&gt;z<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>   <span class="k1">return</span><span class="k2">;</span>
<span class="number">  74</span><span class="k2">}</span>
<span class="number">  75</span>
<span class="number">  76</span>
<span class="number">  77</span>
<span class="number">  78</span><span class="k1">void</span> StepFunction<span class="k2">(</span>uintptr_t state , <span class="k1">int</span> step<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  79</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>state<span class="k2">;</span>
<span class="number">  80</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>step<span class="k2">;</span>
<span class="number">  81</span>   <span class="k1">return</span><span class="k2">;</span>
<span class="number">  82</span><span class="k2">}</span>
<span class="number">  83</span>
<span class="number">  84</span>
<span class="number">  85</span>
<span class="number">  86</span><span class="k1">void</span> DrawFunction<span class="k2">(</span>uintptr_t state , <span class="k1">int</span> x , <span class="k1">int</span> y<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>state<span class="k2">;</span>
<span class="number">  88</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Pixel drawn at %i , %i\n"</span> , x , y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span><span class="c">//   al_set_target_bitmap(buffer);</span>
<span class="number">  91</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>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>   <a href="http://www.allegro.cc/manual/al_put_pixel"><span class="a">al_put_pixel</span></a><span class="k2">(</span>x,y,<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">255</span>,<span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span><span class="c">///   al_clear_to_color(al_map_rgba(rand()%255 , rand()%255 , rand()%255 , 255));</span>
<span class="number">  94</span>
<span class="number">  95</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>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>   <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>buffer , <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">  97</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">  98</span>   <span class="k1">return</span><span class="k2">;</span>
<span class="number">  99</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 18 Jun 2015 10:06:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you guys, one last question : </p><p>The I have read about the uintptr_t type and I was wondering if I could (and if so how) use the <span class="source-code">uintptr_t state</span> parameter to pass a int array.</p><p>As of now my do_line looks like this :<br /><span class="source-code"><a href="http://www.allegro.cc/manual/do_line"><span class="a">do_line</span></a><span class="k2">(</span>NULL, robX, robY, sensX, sensY, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> collidedData, CheckPixel<span class="k2">)</span><span class="k2">;</span></span></p><p>and I need the <span class="source-code"><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> collidedData</span> in my step part. collideData is define as <span class="source-code"><span class="k1">int</span> collideData<span class="k2">[</span><span class="n">5</span><span class="k2">]</span><span class="k2">;</span></span></p><p>so should I use it like this:</p><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_soft_line"><span class="a">al_draw_soft_line</span></a><span class="k2">(</span><span class="k3">&amp;</span>v1, <span class="k3">&amp;</span>v2, <span class="k2">(</span>uintptr_t<span class="k2">)</span> collideData, First, CheckPixel, Draw<span class="k2">)</span><span class="k2">;</span></span></p><p>and then in <span class="source-code">CheckPixel</span> do <span class="source-code"><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>collideData</span>?</p><p>Or should I Put my CheckPixel function inside my draw?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Francis Langlais)</author>
		<pubDate>Thu, 18 Jun 2015 18:36:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&quot;An unsigned integer type with the property that any valid pointer to void can be converted to this type, then converted back to pointer to void, and the result will compare equal to the original pointer&quot;</p><p>So yes you can do this, but technically you need to cast the array to void * first, then to uintptr_t, and then back to void * in the callback function. However, normally, it will work with a direct cast to intptr_t.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Thu, 18 Jun 2015 20:35:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Uhm, what&#39;s the need for uintptr_t then? Why not just use void* for the state member?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 19 Jun 2015 21:28:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The use is that uintptr_t can also be passed an integer. For example, intptr_t and uintptr_t are used when you want a function to be able to take a parameter that is either a pointer or an integer, for more flexibility.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Sat, 20 Jun 2015 00:36:14 +0000</pubDate>
	</item>
</rss>
