<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>ALLEGRO 5 - Bitmap Corruption after writing to source image</title>
		<link>http://www.allegro.cc/forums/view/615550</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 16 Jul 2015 21:23:13 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m currently messing around with ALLEGRO 5 on an ARM chip (iMX6).<br />I pretty much seem to have it running but a weird issue has now arisen.</p><p>I found this initially whilst using al_convert_mask_to_alpha() converting magic pink to transparency.</p><p>The issue is that if I have an ALLEGRO_BITMAP and drawing it straight to the display everything&#39;s fine.</p><p>However if I write to this BITMAP using al_convert_mask_to_alpha() or even if I draw another smaller BITMAP onto it, then it appears to corrupt the original image.</p><p>Setting a single pixel on the image doesn&#39;t appear to have any corruption effect..</p><p>Any ideas on how I best investigate this to track down the error?<br />I&#39;m suspicious that maybe it&#39;s a colour depth issue (could it change?) but am struggling where to go from here..!</p><p>EDIT:<br />Okay more information.</p><p>bmp1 is 200x200<br />bmp2 is 200x200<br />bmp3 is 20x20</p><p>Load bmp1 and leave as is - drawn okay on display.<br />Load bmp2 and leave as is - drawn okay on display<br />Load bmp2 and draw bmp3 on it - bmp3 &#39;part&#39; looks fine, rest of bmp2 is corrupt.<br />Now..<br />If I load bmp2, draw bmp3, then draw bmp1 onto it, it looks fine.<br />If I load bmp2, draw bmp3, then draw bmp1 onto it, then draw bmp3 onto it, it looks fine.<br />Aarrgh... Bitmap colour depth issue??</p><p>EDIT2:<br />It appears the smaller bitmap is 24 bit depth, the larger images are 32..<br />Shouldn&#39;t this sort itself out..?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Thu, 16 Jul 2015 20:43:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could also be a bug in OpenGL drivers - but more likely in Allegro. Can you post a minimal program reproducing it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 16 Jul 2015 21:10:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As requested (pardon the hastily stripped down source), also attached the two source images, screenshot showing corruption and allegro.log</p><p>tried with 24bit and 32 bit source images - same issue.<br />Could be OPENGL drivers as I&#39;m using an embedded card using the Vivante GC2000 drivers..</p><p>Thanks.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;signal.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;ctype.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   8</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   9</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">  10</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">  11</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  12</span><span class="p">#include &lt;allegro5/allegro_opengl.h&gt;</span>
<span class="number">  13</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="p">#include "header.h"</span>
<span class="number">  16</span><span class="p">#include "font.h"</span>
<span class="number">  17</span><span class="p">#include "button.h"</span>
<span class="number">  18</span>
<span class="number">  19</span><span class="k1">int</span> winsize_x <span class="k3">=</span> <span class="n">640</span><span class="k2">;</span>
<span class="number">  20</span><span class="k1">int</span> winsize_y <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>
<span class="number">  21</span>
<span class="number">  22</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> NULL<span class="k2">;</span>
<span class="number">  23</span>
<span class="number">  24</span><span class="p">#define HZTIMER  30</span>
<span class="number">  25</span>
<span class="number">  26</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bmp1, <span class="k3">*</span>bmp2, <span class="k3">*</span>bmp3<span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="c">// **</span>
<span class="number">  29</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="number">  30</span><span class="k2">{</span>
<span class="number">  31</span>  <span class="k1">int</span>  drawpage<span class="k3">=</span><span class="n">0</span>, <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a><span class="k3">=</span><span class="n">0</span>, <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  32</span>  <span class="k1">char</span> inifile<span class="k2">[</span><span class="n">32</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">0</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/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a>          <span class="k3">*</span>timer      <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  35</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a>    <span class="k3">*</span>eventq     <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  36</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> <span class="k3">*</span>kbdstate   <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  37</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a>    <span class="k3">*</span>mousestate <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  38</span>
<span class="number">  39</span>  <span class="c">// ** allegro initialisation</span>
<span class="number">  40</span>  <span class="k2">{</span>
<span class="number">  41</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> <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to initialise ALLEGRO\n"</span><span class="k2">)</span><span class="k2">;</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number">  42</span>
<span class="number">  43</span>    <span class="c">// input</span>
<span class="number">  44</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="k2">{</span> WHERE<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number">  45</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="k2">{</span> WHERE<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number">  46</span>
<span class="number">  47</span>    <span class="c">// addons</span>
<span class="number">  48</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">  49</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</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">  52</span>  <span class="k2">}</span>
<span class="number">  53</span>
<span class="number">  54</span>  <span class="c">// ** create default path for resources</span>
<span class="number">  55</span>  <span class="k2">{</span>
<span class="number">  56</span>    ALLEGRO_PATH <span class="k3">*</span>path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_standard_path"><span class="a">al_get_standard_path</span></a><span class="k2">(</span>ALLEGRO_RESOURCES_PATH<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>    <a href="http://www.allegro.cc/manual/al_append_path_component"><span class="a">al_append_path_component</span></a><span class="k2">(</span>path, <span class="s">"resources"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>    <a href="http://www.allegro.cc/manual/al_change_directory"><span class="a">al_change_directory</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>path, <span class="s">'/'</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"PATH: %s\n"</span>, <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>path, <span class="s">'/'</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>  <span class="k2">}</span>
<span class="number">  62</span>
<span class="number">  63</span>  <span class="c">// ** setup display</span>
<span class="number">  64</span>  <span class="k2">{</span>
<span class="number">  65</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">  66</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLE_BUFFERS, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLES,        <span class="n">8</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>
<span class="number">  69</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>winsize_x, winsize_y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"OPENGL VERSION %x\n"</span>, <a href="http://www.allegro.cc/manual/al_get_opengl_version"><span class="a">al_get_opengl_version</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</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">"OPENGL VARIANT %x\n"</span>, <a href="http://www.allegro.cc/manual/al_get_opengl_variant"><span class="a">al_get_opengl_variant</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>
<span class="number">  74</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span> display<span class="k2">)</span> <span class="k2">{</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create display %dx%d\n"</span>, winsize_x, winsize_y<span class="k2">)</span><span class="k2">;</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number">  75</span>
<span class="number">  76</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Created Display %dx%d\n"</span>, winsize_x, winsize_y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>    <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>display, <span class="s">"SIMPLE"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>  <span class="k2">}</span>
<span class="number">  80</span>
<span class="number">  81</span>  <span class="c">// clear display</span>
<span class="number">  82</span>  <span class="k2">{</span>
<span class="number">  83</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">  84</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">12</span>,<span class="n">13</span>,<span class="n">18</span><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="number">  87</span>  bmp1  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"200x200.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>  bmp2  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"200x200.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>  bmp3  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"20x20.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>
<span class="number">  91</span>  <span class="c">//al_convert_mask_to_alpha(bmp2, al_map_rgb(255,0,255)); // magic pink is transparent</span>
<span class="number">  92</span>
<span class="number">  93</span>  <span class="c">// cause bug - draw bmp3 onto bmp2</span>
<span class="number">  94</span>  <span class="k2">{</span>
<span class="number">  95</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>bmp2<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>bmp3, <span class="n">50</span>, <span class="n">50</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  97</span>  <span class="k2">}</span>
<span class="number">  98</span>
<span class="number">  99</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"> 100</span>
<span class="number"> 101</span>
<span class="number"> 102</span>  eventq <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"> 103</span>
<span class="number"> 104</span>  <span class="c">// ** loop</span>
<span class="number"> 105</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 106</span>  <span class="k2">{</span>
<span class="number"> 107</span>    <span class="c">// ** draw on display</span>
<span class="number"> 108</span>    <span class="k2">{</span>
<span class="number"> 109</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"> 110</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp1,   <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"> 111</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp2, <span class="n">320</span>,   <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>    <span class="k2">}</span>
<span class="number"> 113</span>
<span class="number"> 114</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"> 115</span>
<span class="number"> 116</span>  <span class="k2">}</span>
<span class="number"> 117</span>
<span class="number"> 118</span>  <span class="c">// ** shutdown</span>
<span class="number"> 119</span>  <span class="k2">{</span>
<span class="number"> 120</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>  <span class="k2">}</span>
<span class="number"> 122</span>
<span class="number"> 123</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 124</span><span class="k2">}</span>
</div></div><p>


EDIT:</p><p>Much more investigation today - I&#39;m now thinking there are driver issues (maybe I need to do something like Trent did for the Raspberry Pi to get Allegro working on this card, but quite frankly that&#39;s beyond me).</p><p>To summarise, it appears that loading a bitmap and displaying on the screen appears to work, but as soon as I read or write access that bitmap (eg with al_get_pixel()), the image reverts to an &#39;old&#39; version that&#39;s cached somewhere... (in the GPU?) from previously (demonstrated by changing the images used).<br />Is there any way I can &#39;invalidate&#39; the bitmap[ stored in the GPU? <br />Must admit this isn&#39;t an area I wanted to investigate and my knowledge of this is pretty much zero.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Thu, 16 Jul 2015 21:23:13 +0000</pubDate>
	</item>
</rss>
