<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro 4.4 RC2 - polygon3d</title>
		<link>http://www.allegro.cc/forums/view/602423</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 08 Dec 2009 21:02:25 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is the possible bug I was talking the last months. May be it only affects to Pascal because I can&#39;t reproduce it in C.</p><p>The problem is &quot;polygon3d&quot; generates a segmentation fault when rendering textured 3D polygons with &quot;POLYTYPE_PTEX&quot; modifier when the polygon is (almost) perpendicular to the screen plane. After some tests I did find it fails with angles  &lt;188, 74, 188&gt;, &lt;196, 53, 128&gt;, &lt;31, 62, 188&gt; and its equivalents (&lt;1212, 330, 1212&gt;, &lt;193, 53, 384&gt;, etc).</p><p>The attached file is the simplest test program I used (included the wrapper units needed). Just change the initial angle values to reproduce the error faster. You can compile it with <a href="http://www.freepascal.org/">Free Pascal</a> (included in several Linux distros). To compile, from the same directory, just execute &quot;fpc -g test&quot; (&quot;-g&quot; generates debug information). Of course you need Allegro installed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Mon, 07 Dec 2009 20:20:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I will perhaps give it a go this evening, but no promise Niunio.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Mon, 07 Dec 2009 20:31:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t think it can be a real allegro bug if you can&#39;t reproduce it in C.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 07 Dec 2009 21:10:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>[edit] I&#39;ve updated the attached file on the first message because I find an error in one of the loops. Anyway, it fails the same way[/edit]</p><p>I tried to reproduce it in C, so I translate my test program to C:</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">/* Testing 3D polygons. */</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span>
<span class="number">   8</span>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>Texture, <span class="k3">*</span>BackBuffer<span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="c">/* Creates a texture to be used by the cube. */</span>
<span class="number">  13</span>   <span class="k1">void</span> CreateTexture <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  14</span>   <span class="k2">{</span>
<span class="number">  15</span>     <span class="k1">int</span> Black, White, Green<span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span>     Black <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="number">  18</span>     White <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a> <span class="k2">(</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="number">  19</span>     Green <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a> <span class="k2">(</span><span class="n">0</span>, <span class="n">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span>     <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>Texture <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a> <span class="k2">(</span><span class="n">32</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  21</span>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_631.html" target="_blank">puts</a> <span class="k2">(</span><span class="s">"Can't create texture."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>     <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a> <span class="k2">(</span>Texture, Black<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>     <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k2">(</span>Texture, <span class="n">0</span>, <span class="n">0</span>, <span class="n">31</span>, <span class="n">31</span>, White<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>     <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k2">(</span>Texture, <span class="n">0</span>, <span class="n">32</span>, <span class="n">32</span>, <span class="n">0</span>, White<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>     <a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a> <span class="k2">(</span>Texture, <span class="n">0</span>, <span class="n">0</span>, <span class="n">31</span>, <span class="n">31</span>, White<span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>     <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a> <span class="k2">(</span>Texture, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"dead"</span>, <span class="n">0</span>,  <span class="n">0</span>, Green, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>     <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a> <span class="k2">(</span>Texture, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"pigs"</span>, <span class="n">0</span>,  <span class="n">8</span>, Green, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>     <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a> <span class="k2">(</span>Texture, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"cant"</span>, <span class="n">0</span>, <span class="n">16</span>, Green, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>     <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a> <span class="k2">(</span>Texture, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"fly."</span>, <span class="n">0</span>, <span class="n">24</span>, Green, <span class="k3">-</span><span class="n">1</span><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="number">  34</span><span class="c">/* This procedure tests the polygon. */</span>
<span class="number">  35</span>  <span class="k1">void</span> DoTest <span class="k2">(</span><span class="k1">int</span> aMode<span class="k2">)</span>
<span class="number">  36</span>  <span class="k2">{</span>
<span class="number">  37</span>    <a href="http://www.allegro.cc/manual/V3D_f" target="_blank"><span class="a">V3D_f</span></a> Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>, VertexR<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  38</span>    <span class="k1">float</span> Ax, Ay, Az,
<span class="number">  39</span>          Rx, Ry, Rz<span class="k2">;</span>
<span class="number">  40</span>    <span class="k1">int</span> Vtx<span class="k2">;</span>
<span class="number">  41</span>    <a href="http://www.allegro.cc/manual/MATRIX_f" target="_blank"><span class="a">MATRIX_f</span></a> Matrix<span class="k2">;</span>
<span class="number">  42</span>
<span class="number">  43</span>  <span class="c">/* Vertex. */</span>
<span class="number">  44</span>    Vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  45</span>    Vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  46</span>    Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.x <span class="k3">=</span>  <span class="n">1</span><span class="k2">;</span>
<span class="number">  47</span>    Vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span>  <span class="n">1</span><span class="k2">;</span>
<span class="number">  48</span>    Vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  49</span>    Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  50</span>    Vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.z <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  51</span>    Vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.z <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  52</span>    Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.z <span class="k3">=</span>  <span class="n">0</span><span class="k2">;</span>
<span class="number">  53</span>  <span class="c">/* Texture mapping. */</span>
<span class="number">  54</span>    Vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.u <span class="k3">=</span>  <span class="n">15</span><span class="k2">;</span>
<span class="number">  55</span>    Vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.u <span class="k3">=</span>   <span class="n">0</span><span class="k2">;</span>
<span class="number">  56</span>    Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.u <span class="k3">=</span>  <span class="n">31</span><span class="k2">;</span>
<span class="number">  57</span>    Vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.v <span class="k3">=</span>   <span class="n">0</span><span class="k2">;</span>
<span class="number">  58</span>    Vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.v <span class="k3">=</span>  <span class="n">31</span><span class="k2">;</span>
<span class="number">  59</span>    Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.v <span class="k3">=</span>  <span class="n">31</span><span class="k2">;</span>
<span class="number">  60</span>    <span class="k1">for</span> <span class="k2">(</span>Vtx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> Vtx<span class="k3">&lt;</span><span class="n">3</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>Vtx<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  61</span>      VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.u <span class="k3">=</span> Vertex<span class="k2">[</span>Vtx<span class="k2">]</span>.u<span class="k2">;</span>
<span class="number">  62</span>      VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.v <span class="k3">=</span> Vertex<span class="k2">[</span>Vtx<span class="k2">]</span>.v<span class="k2">;</span>
<span class="number">  63</span>    <span class="k2">}</span>
<span class="number">  64</span>  <span class="c">/* Angles. */</span>
<span class="number">  65</span>    Ax <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  66</span>    Ay <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  67</span>    Az <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  68</span>    Rx <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</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="n">32</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">8</span><span class="k2">;</span>
<span class="number">  69</span>    Ry <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</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="n">32</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">8</span><span class="k2">;</span>
<span class="number">  70</span>    Rz <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</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="n">32</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">8</span><span class="k2">;</span>
<span class="number">  71</span>  <span class="c">/* Testing. */</span>
<span class="number">  72</span>    <span class="k1">do</span> <span class="k2">{</span>
<span class="number">  73</span>    <span class="c">/* Animation. */</span>
<span class="number">  74</span>      Ax <span class="k3">+</span><span class="k3">=</span> Rx<span class="k2">;</span>
<span class="number">  75</span>      Ay <span class="k3">+</span><span class="k3">=</span> Ry<span class="k2">;</span>
<span class="number">  76</span>      Az <span class="k3">+</span><span class="k3">=</span> Rz<span class="k2">;</span>
<span class="number">  77</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a> <span class="k2">(</span><span class="s">"&lt;%d, %d, %d&gt;\n"</span>, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>Ax, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>Ay, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>Az<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>      <a href="http://www.allegro.cc/manual/get_transformation_matrix_f" target="_blank"><span class="a">get_transformation_matrix_f</span></a> <span class="k2">(</span><span class="k3">&amp;</span>Matrix, <span class="n">1</span>, Ax, Ay, Az, <span class="n">0</span>, <span class="n">0</span>, <span class="k3">-</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>      <span class="k1">for</span> <span class="k2">(</span>Vtx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> Vtx<span class="k3">&lt;</span><span class="n">3</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>Vtx<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  80</span>        <a href="http://www.allegro.cc/manual/apply_matrix_f" target="_blank"><span class="a">apply_matrix_f</span></a> <span class="k2">(</span><span class="k3">&amp;</span>Matrix,
<span class="number">  81</span>                        Vertex <span class="k2">[</span>Vtx<span class="k2">]</span>.x, Vertex <span class="k2">[</span>Vtx<span class="k2">]</span>.y, Vertex <span class="k2">[</span>Vtx<span class="k2">]</span>.z,
<span class="number">  82</span>                        <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.x<span class="k2">)</span>, <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.y<span class="k2">)</span>, <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.z<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>        <a href="http://www.allegro.cc/manual/persp_project_f" target="_blank"><span class="a">persp_project_f</span></a> <span class="k2">(</span>VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.x, VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.y, VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.z,
<span class="number">  84</span>                        <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.x<span class="k2">)</span>, <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span>Vtx<span class="k2">]</span>.y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>      <span class="k2">}</span>
<span class="number">  86</span>    <span class="c">/* Output. */</span>
<span class="number">  87</span>      <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a> <span class="k2">(</span>BackBuffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>      <a href="http://www.allegro.cc/manual/textout_centre_ex" target="_blank"><span class="a">textout_centre_ex</span></a> <span class="k2">(</span>BackBuffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>,
<span class="number">  89</span>          aMode <span class="k3">=</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/POLYTYPE_ATEX" target="_blank"><span class="a">POLYTYPE_ATEX</span></a> ? <span class="s">"POLYTYPE_ATEX"</span> <span class="k2">:</span> <span class="s">"POLYTYPE_PTEX"</span>,
<span class="number">  90</span>          <span class="n">160</span>, <span class="n">1</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a> <span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>      <a href="http://www.allegro.cc/manual/triangle3d_f" target="_blank"><span class="a">triangle3d_f</span></a> <span class="k2">(</span>BackBuffer, aMode, Texture, <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span>, <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span>, <span class="k3">&amp;</span><span class="k2">(</span>VertexR<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>      <a href="http://www.allegro.cc/manual/vsync" target="_blank"><span class="a">vsync</span></a><span class="k2">;</span>
<span class="number">  93</span>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a> <span class="k2">(</span>BackBuffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>    <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>    <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">/* Clear buffer. */</span>
<span class="number">  96</span>  <span class="k2">}</span>
<span class="number">  97</span>
<span class="number">  98</span>
<span class="number">  99</span>
<span class="number"> 100</span><span class="k1">int</span> main <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="c">/* The program starts here. */</span>
<span class="number"> 101</span><span class="k2">{</span>
<span class="number"> 102</span><span class="c">/* You should always do this at the start of Allegro programs. */</span>
<span class="number"> 103</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a> <span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 104</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_631.html" target="_blank">puts</a> <span class="k2">(</span><span class="s">"Can't initialize Allegro!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>    <span class="k1">return</span> EXIT_FAILURE<span class="k2">;</span>
<span class="number"> 106</span>  <span class="k2">}</span>
<span class="number"> 107</span>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>
<span class="number"> 110</span><span class="c">/* Set a graphics mode sized 320x200. */</span>
<span class="number"> 111</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a> <span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">320</span>, <span class="n">200</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 112</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a> <span class="k2">(</span>GFX_SAFE, <span class="n">320</span>, <span class="n">200</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 113</span>      <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a> <span class="k2">(</span>GFX_TEXT, <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="number"> 114</span>    <span class="c">/* Show an error message. */</span>
<span class="number"> 115</span>      <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a> <span class="k2">(</span><span class="s">"Error setting graphics mode"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>      <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>      <span class="k1">return</span> EXIT_FAILURE<span class="k2">;</span>
<span class="number"> 118</span>    <span class="k2">}</span>
<span class="number"> 119</span>  BackBuffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a> <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>  CreateTexture <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>  <a href="http://www.allegro.cc/manual/set_projection_viewport" target="_blank"><span class="a">set_projection_viewport</span></a> <span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>
<span class="number"> 123</span>  DoTest <span class="k2">(</span><a href="http://www.allegro.cc/manual/POLYTYPE_ATEX" target="_blank"><span class="a">POLYTYPE_ATEX</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>  DoTest <span class="k2">(</span><a href="http://www.allegro.cc/manual/POLYTYPE_PTEX" target="_blank"><span class="a">POLYTYPE_PTEX</span></a><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/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a> <span class="k2">(</span>BackBuffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a> <span class="k2">(</span>Texture<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>  <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>  <span class="k1">return</span> EXIT_SUCCESS<span class="k2">;</span>
<span class="number"> 130</span><span class="k2">}</span>
<span class="number"> 131</span>
<span class="number"> 132</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a> <span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

I think it&#39;s a perfect translation of the Pascal program, but I don&#39;t know why it&#39;s so chaotic. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Tue, 08 Dec 2009 02:44:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And so, is the bug also visible in C with your chaotic (;-)) test program ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 08 Dec 2009 03:04:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That code has an array overrun.</p><div class="quote_container"><div class="title">Niunio said:</div><div class="quote"><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/V3D_f" target="_blank"><span class="a">V3D_f</span></a> Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>, VertexR<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>

<span class="k2">[</span>...<span class="k2">]</span>

    Vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.x <span class="k3">=</span>  <span class="n">1</span><span class="k2">;</span>
</pre></div></div></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Tue, 08 Dec 2009 03:07:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ouch ^^
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 08 Dec 2009 03:20:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602423/841416#target">gnolam</a> said:</div><div class="quote"><p>That code has an array overrun.</p></div></div><p>

Duh! <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602423/841415#target">GullRaDriel</a> said:</div><div class="quote"><p>And so, is the bug also visible in C with your chaotic (;-)) test program ?</p></div></div><p>

Once fixed the problem gnolam pointed to it seems to work. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602423/841339#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>I don&#39;t think it can be a real allegro bug if you can&#39;t reproduce it in C.</p></div></div><p>

I&#39;m not sure. If you use Allegro.pas with Allegro 4.4.0 RC1 there is a similar problem with rotate_sprite, and previously with fixed-point maths, but there are no problems with RC2 and I didn&#39;t change my code. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>May be there&#39;s a calling convention issue or something?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Tue, 08 Dec 2009 03:32:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can reproduce the crash in the pascal version. It doesn&#39;t crash under valgrind though, nor does valgrind flag anything strange.</p><p>EDIT: fpc is probably enabling overflow detection in float-&gt;int conversion. The problem is in cscan.h (FUNC_POLY_SCANLINE_PTEX):</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">for</span> <span class="k2">(</span>x <span class="k3">=</span> w <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span> x <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">-</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">long</span> nextu, nextv, du, dv<span class="k2">;</span>
      PIXEL_PTR s<span class="k2">;</span>
      <span class="k1">unsigned</span> <span class="k1">long</span> color<span class="k2">;</span>

      fu <span class="k3">+</span><span class="k3">=</span> dfu<span class="k2">;</span>
      fv <span class="k3">+</span><span class="k3">=</span> dfv<span class="k2">;</span>
      fz <span class="k3">+</span><span class="k3">=</span> dfz<span class="k2">;</span>
      nextu <span class="k3">=</span> fu <span class="k3">*</span> z1<span class="k2">;</span>   <span class="c">// here</span>
      nextv <span class="k3">=</span> fv <span class="k3">*</span> z1<span class="k2">;</span>   <span class="c">// here</span>
      <span class="c">// ...snip...</span>
   <span class="k2">}</span>
</pre></div></div><p>

If I change nextu, nextv to int64_t instead of long, the SIGFPE goes away.</p><p>Next question is if this is the correct fix.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Tue, 08 Dec 2009 04:10:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602423/841437#target">Peter Wang</a> said:</div><div class="quote"><p> fpc is probably enabling overflow detection in float-&gt;int conversion. The problem is in cscan.h (FUNC_POLY_SCANLINE_PTEX):
</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">for</span> <span class="k2">(</span>x <span class="k3">=</span> w <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span> x <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">-</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">long</span> nextu, nextv, du, dv<span class="k2">;</span>
      PIXEL_PTR s<span class="k2">;</span>
      <span class="k1">unsigned</span> <span class="k1">long</span> color<span class="k2">;</span>

      fu <span class="k3">+</span><span class="k3">=</span> dfu<span class="k2">;</span>
      fv <span class="k3">+</span><span class="k3">=</span> dfv<span class="k2">;</span>
      fz <span class="k3">+</span><span class="k3">=</span> dfz<span class="k2">;</span>
      nextu <span class="k3">=</span> fu <span class="k3">*</span> z1<span class="k2">;</span>   <span class="c">// here</span>
      nextv <span class="k3">=</span> fv <span class="k3">*</span> z1<span class="k2">;</span>   <span class="c">// here</span>
      <span class="c">// ...snip...</span>
   <span class="k2">}</span>
</pre></div></div><p>


If I change nextu, nextv to int64_t instead of long, the SIGFPE goes away.</p><p>Next question is if this is the correct fix.
</p></div></div><p>
I confirm this change fixes the problem. Thanks for the tip, Peter. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Pascal is very strict about data typing, but I didn&#39;t know that &quot;strictness&quot; affects also to libraries written and compiled in other languages! <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Tue, 08 Dec 2009 17:23:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If it uses a CPU exception to handle the conversion, yeah it&#39;ll break anything <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 08 Dec 2009 17:42:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A small update:</p><p>I was testing the fix suggested by Peter. It seems to work but should be applied in more functions. I did changed it in all the ones that uses similar code in cscan.h file and now all examples works. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602423/841544#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>If it uses a CPU exception to handle the conversion, yeah it&#39;ll break anything</p></div></div><p> Didn&#39;t know about CPU exception. That explains a lot. Thanks.</p><p>So, next release will have this change, will not?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Tue, 08 Dec 2009 17:56:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>int64_t looks like a better choice than long here - it&#39;s in general only very rare situations where you would want to use long instead of int64_t. But when that code originally was written most likely we didn&#39;t have the fixed-width types yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 08 Dec 2009 21:02:25 +0000</pubDate>
	</item>
</rss>
