<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Memory bitmaps fail in Allegro-4.9.8</title>
		<link>http://www.allegro.cc/forums/view/599145</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 09 Feb 2009 03:35:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Today I downloaded Revision 11566 from the <a href="http://www.strangesoft.net/allegro/4.9.8/11566">snapshot</a>. The build went smooth so I installed it and rebuilt my game linking to it instead of 4.7.1. Aside from having to change my fshook calls to match the API changes everything worked fine until it got to the point in my code where I am using a memory bitmap.</p><p>When I use this code:
</p><div class="source-code snippet"><div class="inner"><pre>  al_set_new_bitmap_flags<span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span><span class="k2">;</span>
  fimage <span class="k3">=</span> al_iio_load<span class="k2">(</span>fn<span class="k2">)</span><span class="k2">;</span>
  ...
</pre></div></div><p>
my program crashes at &quot;fimage = al_iio_load(fn).&quot;</p><p>If I comment out &quot;al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP)&quot; the program runs. I looked in the examples and found &quot;ex_membpm&quot; so I tried it and sure enough it crashes. I tried &quot;ex_membmp&quot; in 4.9.7.1 just to be sure and it works there.</p><p>Bottom line is memory bitmaps do not work in the current SVN version.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sat, 07 Feb 2009 07:27:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What system are you testing this on?</p><p>Incidentally, everything works fine on my system (Linux).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 07 Feb 2009 08:03:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Windows</p><p>I&#39;ve been trying other snapshots to see if I can pinpoint where the problem came up but so far all have the same issue.</p><p>Edit: I got the oldest snapshot available (11398) and it still crashes on memory bitmaps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sat, 07 Feb 2009 08:08:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I hear ginseng helps with that... or maybe a <a href="http://en.wikipedia.org/wiki/Memory_Game">memory game</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Sat, 07 Feb 2009 09:20:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Memory bitmaps work fine for me with the latest svn and I haven&#39;t noticed them not working in my game, which I&#39;ve kept up to date with Allegro. Maybe you can pinpoint the problem a little further so we can fix it? A backtrace might be helpful.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 07 Feb 2009 10:21:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I built the debug version and got this when I ran &quot;ex_membmp:&quot;<br /><span class="source-code">Assert failed at <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="n">696</span> of C:\Programming\Libraries\allegro-4.9\src\pixels.c</span><br />I&#39;m currently looking into how to use gdb to see if I can get more information.</p><p>Edit: gdb doesn&#39;t produce a backtrace when I run &quot;ex_membmp&quot; through it, it just shows the same error I quoted above.</p><p>Edit2: I&#39;ve looked deep into the source and I think the issue is with this function:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">static</span> ALLEGRO_BITMAP <span class="k3">*</span>_al_create_memory_bitmap<span class="k2">(</span><span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>   ALLEGRO_BITMAP <span class="k3">*</span>bitmap<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>   <span class="k1">int</span> pitch<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>   <span class="k1">int</span> format <span class="k3">=</span> al_get_new_bitmap_format<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>   </td></tr><tr><td class="number">7</td><td>   <span class="c">/* Pick an appropriate format if the user is vague */</span></td></tr><tr><td class="number">8</td><td>   <span class="k1">switch</span> <span class="k2">(</span>format<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_NO_ALPHA:</td></tr><tr><td class="number">10</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_32_NO_ALPHA:</td></tr><tr><td class="number">11</td><td>         format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_XRGB_8888<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA:</td></tr><tr><td class="number">14</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_32_WITH_ALPHA:</td></tr><tr><td class="number">15</td><td>         format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_ARGB_8888<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_15_NO_ALPHA:</td></tr><tr><td class="number">18</td><td>         format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_RGB_555<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_16_NO_ALPHA:</td></tr><tr><td class="number">21</td><td>         format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_RGB_565<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_16_WITH_ALPHA:</td></tr><tr><td class="number">24</td><td>         format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_ARGB_4444<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_24_NO_ALPHA:</td></tr><tr><td class="number">27</td><td>         format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_RGB_888<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_15_WITH_ALPHA:</td></tr><tr><td class="number">30</td><td>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_24_WITH_ALPHA:</td></tr><tr><td class="number">31</td><td>         <span class="c">/* We don't support any 24 or 15 bit formats with alpha. */</span></td></tr><tr><td class="number">32</td><td>         <span class="k1">return</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>      default:</td></tr><tr><td class="number">34</td><td>         <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td>   bitmap <span class="k3">=</span> _AL_MALLOC<span class="k2">(</span><span class="k1">sizeof</span> <span class="k3">*</span>bitmap<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>bitmap, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span><span class="k3">*</span>bitmap<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>   bitmap-&gt;size <span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k3">*</span>bitmap<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td>   pitch <span class="k3">=</span> w <span class="k3">*</span> al_get_pixel_size<span class="k2">(</span>format<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td>   bitmap-&gt;vt <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">44</td><td>   bitmap-&gt;format <span class="k3">=</span> format<span class="k2">;</span></td></tr><tr><td class="number">45</td><td>   bitmap-&gt;flags <span class="k3">=</span> al_get_new_bitmap_flags<span class="k2">(</span><span class="k2">)</span> <span class="k3">|</span> ALLEGRO_MEMORY_BITMAP<span class="k2">;</span></td></tr><tr><td class="number">46</td><td>   bitmap-&gt;w <span class="k3">=</span> w<span class="k2">;</span></td></tr><tr><td class="number">47</td><td>   bitmap-&gt;h <span class="k3">=</span> h<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>   bitmap-&gt;pitch <span class="k3">=</span> pitch<span class="k2">;</span></td></tr><tr><td class="number">49</td><td>   bitmap-&gt;display <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">50</td><td>   bitmap-&gt;locked <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>   bitmap-&gt;cl <span class="k3">=</span> bitmap-&gt;ct <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>   bitmap-&gt;cr <span class="k3">=</span> w<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>   bitmap-&gt;cb <span class="k3">=</span> h<span class="k2">;</span></td></tr><tr><td class="number">54</td><td>   bitmap-&gt;parent <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">55</td><td>   bitmap-&gt;xofs <span class="k3">=</span> bitmap-&gt;yofs <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>   <span class="c">// FIXME: Of course, we do need to handle all the possible different formats,</span></td></tr><tr><td class="number">57</td><td>   <span class="c">// this will easily fill up its own file of 1000 lines, but for now,</span></td></tr><tr><td class="number">58</td><td>   <span class="c">// RGBA with 8-bit per component is hardcoded.</span></td></tr><tr><td class="number">59</td><td>   bitmap-&gt;memory <span class="k3">=</span> _AL_MALLOC<span class="k2">(</span>pitch <span class="k3">*</span> h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>   <span class="k1">return</span> bitmap<span class="k2">;</span></td></tr><tr><td class="number">61</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Particularly, when format is &quot;ALLEGRO_PIXEL_FORMAT_ANY&quot; (which it is by default from what I can tell) a detailed pixel format is not selected. There should be case for &quot;ALLEGRO_PIXEL_FORMAT_ANY&quot; although I don&#39;t really know what should go there.</p><p>Edit3: I set the pixel format to ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA before the memory bitmaps in my program and the crash is gone so I believe I am right about where the bug lies.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sun, 08 Feb 2009 08:02:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for tracking that down. It should be fixed in SVN, if that was all that was wrong.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sun, 08 Feb 2009 08:58:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Works fine now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sun, 08 Feb 2009 09:18:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">SVN log said:</div><div class="quote"><p>
Added ALLEGRO_PIXEL_FORMAT_ANY.<br />Warning: Adding a new pixel format is a painfull process. There&#39;s a lot of places to update<br />and it&#39;s possible I&#39;ve missed some.
</p></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sun, 08 Feb 2009 09:30:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I see, when ALLEGRO_PIXEL_FORMAT_ANY was added, the default pixel format was changed from ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA. Is there a reason the default is to not use alpha? I think it breaks continuity a little. When I load an image with an alpha channel as a display bitmap the alpha channel is enabled there, but when I switch to memory bitmaps suddenly I have to force the alpha channel with an extra function call.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sun, 08 Feb 2009 22:18:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I agree, we should have a format with alpha as default - but probably there&#39;s some good reason it was changed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sun, 08 Feb 2009 22:24:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ALLEGRO_PIXEL_FORMAT_ANY is not ALLEGRO_PIXEL_FORMAT_ANY_NO_ALPHA.</p><p>See &lt;<a href="http://www.allegro.cc/forums/thread/598599">http://www.allegro.cc/forums/thread/598599</a>&gt;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sun, 08 Feb 2009 22:27:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, so ALLEGRO_PIXEL_FORMAT_ANY should still create a bitmap with alpha for memory bitmaps - only if no alpha is available (as can happen when creating the &quot;screen&quot; bitmap) it will not fail because of that and use a bitmap without alpha.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sun, 08 Feb 2009 22:33:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In regards to creating new bitmaps ALLEGRO_PIXEL_FORMAT_ANY and ALLEGRO_PIXEL_FORMAT_ANY_NO_ALPHA are identical.
</p><div class="quote_container"><div class="title">bitmap_new.c said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY:
      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_NO_ALPHA:
      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ANY_32_NO_ALPHA:
         format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_XRGB_8888<span class="k2">;</span>
         <span class="k1">break</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>

Edit: what Elias said.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sun, 08 Feb 2009 22:37:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re right, I put it in the wrong place. Fixed again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sun, 08 Feb 2009 23:36:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But will ALLEGRO_PIXEL_FORMAT_ARGB_8888 fail in places where ALLEGRO_PIXEL_FORMAT_XRGB_8888 does not? If so, then the decision is conditional.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 09 Feb 2009 00:22:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Probably not for normal bitmaps. The only issue is display backbuffers, which in many cases cannot have alpha in them. The D3D code chooses smartly in both cases (at least it&#39;s supposed to).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 09 Feb 2009 03:35:48 +0000</pubDate>
	</item>
</rss>
