<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro 5.1.5 and resizing problems</title>
		<link>http://www.allegro.cc/forums/view/612025</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 15 Feb 2013 00:36:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi, I&#39;m just struggling with the upgrade of allegro 5.1.3 -&gt; 5.1.5.<br />When I run the game, it works until I resize the window.<br />At that point</p><p>a) Fonts are working<br />b) Primitives are working (gui)<br />c) Everything else is black, it seems like all bitmaps are lost.</p><p>I went through the changelog of 5.1.4 and 5.1.5 and I didn&#39;t find any clue, do you have any suggestion?</p><p>Edit:<br />I tried it in debug mode, and checked, that acknowledge resize is still called, but strange thing happened, everything turned to be white instead of black in debug mode <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /><br />I also found out, that newly loaded bitmaps (after the resize) work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kovarex)</author>
		<pubDate>Sun, 10 Feb 2013 17:53:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just upgraded to 5.1.5 to try this out. My game uses a bunch of fonts and dynamic resizing and I&#39;m not seeing any problems. :/</p><p>-Try using OpenGL.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Mon, 11 Feb 2013 07:46:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Did you do an initial clear on all your bitmaps? Or are they all resources you loaded in that were working before the resize?</p><p>I&#39;m not seeing this behaviour with the latest git + <a href="https://www.allegro.cc/forums/thread/611833/976540#target">Peter&#39;s patch</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 11 Feb 2013 07:56:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I did incorporate the patch (sorry that I didn&#39;t mention it in the first post), works the same with or without it.</p><p>When I switch to OPENGL it works.</p><p>(But I need to use d3d on windows, for obvious (performance) reasons)</p><p>Edit: Isn&#39;t it strange, that d3d_resize_display was never called when I resized? (only d3d_acknowledge_resize).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kovarex)</author>
		<pubDate>Tue, 12 Feb 2013 02:10:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is there any way you could show some pertaining code?</p><p>-Init<br />-Addon init<br />-Display init<br />-Major events
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 12 Feb 2013 05:14:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is the init of allegro:</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="k1">if</span> <span class="k2">(</span>global-&gt;graphicsSettings-&gt;getFullScreen<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  2</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_FULLSCREEN_WINDOW<span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>  <span class="k1">else</span>
<span class="number">  4</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_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</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_VSYNC, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">if</span> <span class="k2">(</span>global-&gt;graphicsSettings-&gt;getMultisamplingLevel<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="number">  7</span>  <span class="k2">{</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MIN_LINEAR <span class="k3">|</span> ALLEGRO_MAG_LINEAR <span class="k3">|</span> ALLEGRO_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</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"> 10</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, global-&gt;graphicsSettings-&gt;getMultisamplingLevel<span class="k2">(</span><span class="k2">)</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k2">}</span>
<span class="number"> 12</span>  <span class="k1">else</span>
<span class="number"> 13</span>  <span class="k2">{</span>
<span class="number"> 14</span>    <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</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">0</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</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">0</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  this-&gt;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>width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>this-&gt;display<span class="k2">)</span>
<span class="number"> 22</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to create display!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 24</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to initialize al_init_image_addon!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>  this-&gt;temporaryIcon <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="k2">(</span>global-&gt;resourcePath <span class="k3">/</span> <span class="s">"factorio-icon.png"</span><span class="k2">)</span>.string<span class="k2">(</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>this-&gt;temporaryIcon<span class="k2">)</span>
<span class="number"> 28</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to load window icon!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>  <a href="http://www.allegro.cc/manual/al_set_display_icon"><span class="a">al_set_display_icon</span></a><span class="k2">(</span>this-&gt;display, this-&gt;temporaryIcon<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 32</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to initialize the keyboard!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 34</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to initialize the mouse!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</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"> 36</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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"> 37</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to initialize the ttf addon!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 39</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"failed to load primitives addon!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_audio"><span class="a">al_install_audio</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 41</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to install audio!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_acodec_addon"><span class="a">al_init_acodec_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 43</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to initialize audio codecs!"</span><span class="k2">)</span><span class="k2">;</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_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span><span class="n">50</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 45</span>    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span><span class="s">"Failed to reserve samples!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>  this-&gt;loadAllegroFonts<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

 This is the part of the atlas bitmap creation (those are the bitmaps that get corrupted)<br />At this stage:<br />new bitmap format flags = 2<br />New bitmap flags  = 1024<br />These values are the same for the 5.1.3 and 5.1.5 version.
</p><div class="source-code snippet"><div class="inner"><pre> this-&gt;atlas <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>this-&gt;width, this-&gt;height<span class="k2">)</span><span class="k2">;</span>
  <span class="k1">if</span> <span class="k2">(</span>this-&gt;atlas <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
    <span class="k1">throw</span> std::runtime_error<span class="k2">(</span>ssprintf<span class="k2">(</span><span class="s">"Couldn't create atlas bitmap (size %uX%u)."</span>
                                      <span class="s">"Probably not enough of video memory."</span>, this-&gt;width, this-&gt;height<span class="k2">)</span><span class="k2">)</span><span class="k2">;</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>this-&gt;atlas<span class="k2">)</span><span class="k2">;</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_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

When I resize the display al_acknowledge_resize-&gt;d3d_acknowledge_resize is called (not al_resize_display)</p><p>I tried to mimic the change in the peters patch, and added this line to the <br />d3d_acknowledge_resize function, but it didn&#39;t help.
</p><div class="source-code snippet"><div class="inner"><pre> _al_d3d_prepare_bitmaps_for_reset<span class="k2">(</span>disp<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Edit: I did some debugging, _al_d3d_refresh_texture_memory is called, it obviously goes through all my bitmaps and sub-bitmaps</p><p>Edit: My fight with the bug continues.<br />I found out, that even in 5.1.3 I have the same problem, when I stop using the window icon. Yes you heard me right, I stop using window Icon and resizing now starts to mess all my bitmaps.<br />I found out, that this has something to do with the fact, that I used subitmap of my atlas bitmap for the windows icon, and that the fact, that I used it changed the state of the bitmap.</p><p>Properties :lock_x, lock_y, lock_w, lock_h and lock_flags had all value -842150451 when I didn&#39;t use the bitmap from the atlas as window icon.<br />When I use it, it changes these values and the resize works correctly.</p><p>So I tried to turn the using of the window icon off and call this function on the atlas after it is filled with images:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>atlas.atlas, <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>atlas.atlas<span class="k2">)</span>, 
ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

and really strange thing happened, the atlas did survive the resize, but <b>just once</b>!<br />When I tried to resize again, it was lost again.<br />So I tried to call this function after every resize, but it didn&#39;t help, second resize did kill it.</p><p>This is all magic for me now ... computers ... zeros and ones, nobody really can understand it.</p><p>Edit: So I investigated more, and went deep into the drawing routine, and found out, what exactly happens there, seems, like calling this on all of my atlas bitmaps saves them from being lost:</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// MAGIC, when removed, atlas is lost on resize</span>
<a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>atlas, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>atlas<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

In other words, atlas needs to have lock flags, but can&#39;t be locked to make it work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kovarex)</author>
		<pubDate>Fri, 15 Feb 2013 00:36:22 +0000</pubDate>
	</item>
</rss>
