<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Inconsistent bitmap restoration</title>
		<link>http://www.allegro.cc/forums/view/616961</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 03 Aug 2017 10:36:42 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m assuming this is related to the information provided in the description of ALLEGRO_EVENT_DISPLAY_LOST. I&#39;m using Direct3D on Windows 8.1, with Allegro 5.2.2.</p><p>After locking the computer or having the screensaver appear, sometimes bitmaps are replaced by black boxes. Sometimes they aren&#39;t. I assume they&#39;re getting lost and Allegro is unable to restore them. However, sometimes they&#39;ll reappear on their own after locking and unlocking the computer a number of times, or by having the screensaver appear/disappear again. Toggling fullscreen with al_toggle_display_flag almost always seems to restore them as well.</p><p>Why is this? Why does it have trouble restoring them sometimes, only to successfully restore them later? If toggling fullscreen somehow restores them, is there something I can do to make it so however it&#39;s restoring always occurs?</p><p>If this inconsistency is normal, what&#39;s the best approach here? The bitmaps are loaded from the file system with default flags. Do I need to free them, then load them from the file system again? If they still exist in memory somewhere (since they&#39;re restored <i>sometimes</i>, they must be), this seems like an inefficient approach.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Sat, 01 Jul 2017 04:25:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The intention for it is to be consistent, but it appears that there might be some issue. It will be helpful if you turn on logging and see if the logs differ between when the bitmaps succeed in being restored, and when they fail. You can turn on logging by adding this line before <span class="source-code"><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>:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_set_config_value"><span class="a">al_set_config_value</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_system_config"><span class="a">al_get_system_config</span></a><span class="k2">(</span><span class="k2">)</span>, <span class="s">"trace"</span>, <span class="s">"level"</span>, <span class="s">"debug"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

That will produce an <span class="source-code">allegro.log</span> file in the working directory of your program.</p><p>In terms of workarounds, we have this function <span class="source-code">al_set_d3d_device_restore_callback</span> in which you can in principle reload all your bitmaps. It might be useful to pass it a callback and see if it&#39;s called reliably as well.</p><p>Lastly... while we have all sorts of checks against it, try ceasing your drawing code when you receive the ALLEGRO_EVENT_DISPLAY_LOST event (and resume drawing when you get the ALLEGRO_EVENT_DISPLAY_FOUND event) and see if that helps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 03 Jul 2017 21:32:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks a lot for the reply! Here&#39;s what I&#39;ve discovered:</p><p>After enabling logging, I generated two logs. For each log, I locked the computer once, then unlocked it. I&#39;ve included what I believe to be the important portion of each one.</p><p>Here&#39;s what happens when it successfully restores the bitmap:
</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>dtor     D               dtor.c:196  _al_register_destructor          <span class="k2">[</span>   <span class="n">0</span>.<span class="n">06058</span><span class="k2">]</span> added dtor <span class="k1">for</span> bitmap <span class="n">00868AD8</span>, func <span class="n">514F4953</span>
<span class="number">  2</span>d3d      D          d3d_bmp.cpp:539  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">0</span>.<span class="n">10467</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a><span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number">  3</span>d3d      D          d3d_bmp.cpp:545  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">0</span>.<span class="n">10478</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span>video<span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number">  4</span>d3d      D         d3d_disp.cpp:1489 d3d_display_thread_proc          <span class="k2">[</span>   <span class="n">1</span>.<span class="n">21542</span><span class="k2">]</span> D3DERR_DEVICELOST: d3d_display<span class="k3">=</span><span class="n">007AE8A0</span>
<span class="number">  5</span>d3d      E         d3d_disp.cpp:2754 d3d_flush_vertex_cache           <span class="k2">[</span>   <span class="n">2</span>.<span class="n">40279</span><span class="k2">]</span> d3d_flush_vertex_cache: DrawPrimitive failed.
<span class="number">  6</span>d3d      I         d3d_disp.cpp:901  d3d_destroy_display              <span class="k2">[</span>   <span class="n">4</span>.<span class="n">79158</span><span class="k2">]</span> destroying display <span class="n">007AE8A0</span> <span class="k2">(</span>current <span class="n">00000000</span><span class="k2">)</span>
<span class="number">  7</span>bitmap   D        bitmap_type.c:308  _al_convert_to_memory_bitmap     <span class="k2">[</span>   <span class="n">4</span>.<span class="n">79572</span><span class="k2">]</span> converting display bitmap <span class="n">00868AD8</span> to memory bitmap
<span class="number">  8</span>dtor     D               dtor.c:196  _al_register_destructor          <span class="k2">[</span>   <span class="n">4</span>.<span class="n">79577</span><span class="k2">]</span> added dtor <span class="k1">for</span> bitmap <span class="n">03D5D5A0</span>, func <span class="n">514F4953</span>
<span class="number">  9</span>d3d      D          d3d_bmp.cpp:539  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">4</span>.<span class="n">79580</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a><span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number"> 10</span>d3d      D          d3d_bmp.cpp:545  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">4</span>.<span class="n">79581</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span>video<span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number"> 11</span>dtor     D               dtor.c:227  _al_unregister_destructor        <span class="k2">[</span>   <span class="n">4</span>.<span class="n">79673</span><span class="k2">]</span> removed dtor <span class="k1">for</span> bitmap <span class="n">03D5D5A0</span>
<span class="number"> 12</span>d3d      D         d3d_disp.cpp:885  d3d_destroy_display_internals    <span class="k2">[</span>   <span class="n">4</span>.<span class="n">79682</span><span class="k2">]</span> waiting <span class="k1">for</span> display <span class="n">007AE8A0</span><span class="s">'s thread to end</span>
<span class="number"> 13</span><span class="s">d3d      W         d3d_disp.cpp:595  d3d_destroy_device               [   4.80140] d3d_destroy_device: ref count not 0</span>
<span class="number"> 14</span><span class="s">d3d      I         d3d_disp.cpp:1549 d3d_display_thread_proc          [   4.80527] d3d display thread exits</span>
<span class="number"> 15</span><span class="s">dtor     D               dtor.c:227  _al_unregister_destructor        [   4.80667] removed dtor for queue 00864DE0</span>
<span class="number"> 16</span><span class="s">dtor     D               dtor.c:116  _al_run_destructors              [   4.80671] calling dtor for bitmap 00868AD8, func 514F4953</span>
<span class="number"> 17</span><span class="s">dtor     D               dtor.c:227  _al_unregister_destructor        [   4.80672] removed dtor for bitmap 00868AD8</span>
<span class="number"> 18</span><span class="s">dtor     D               dtor.c:116  _al_run_destructors              [   4.80676] calling dtor for timer 007BAB98, func 514F272A</span>
<span class="number"> 19</span><span class="s">dtor     D               dtor.c:227  _al_unregister_destructor        [   4.80677] removed dtor for timer 007BAB98</span>
</div></div><p>

Here&#39;s what happens when it doesn&#39;t:
</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>dtor     D               dtor.c:196  _al_register_destructor          <span class="k2">[</span>   <span class="n">0</span>.<span class="n">06982</span><span class="k2">]</span> added dtor <span class="k1">for</span> bitmap <span class="n">00BC8C38</span>, func <span class="n">514F4953</span>
<span class="number"> 2</span>d3d      D          d3d_bmp.cpp:539  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">0</span>.<span class="n">11221</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a><span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number"> 3</span>d3d      D          d3d_bmp.cpp:545  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">0</span>.<span class="n">11236</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span>video<span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number"> 4</span>d3d      D         d3d_disp.cpp:1489 d3d_display_thread_proc          <span class="k2">[</span>   <span class="n">1</span>.<span class="n">09119</span><span class="k2">]</span> D3DERR_DEVICELOST: d3d_display<span class="k3">=</span><span class="n">00B0E8A0</span>
</div></div><p>

It seems the device is lost, and then... Nothing.</p><p>Here&#39;s one more log where it failed to restore the bitmap after the first lock/unlock, but successfully restored it after the third lock/unlock:
</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>dtor     D               dtor.c:196  _al_register_destructor          <span class="k2">[</span>   <span class="n">0</span>.<span class="n">04357</span><span class="k2">]</span> added dtor <span class="k1">for</span> bitmap <span class="n">00D38638</span>, func <span class="n">575A4953</span>
<span class="number"> 2</span>d3d      D          d3d_bmp.cpp:539  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">0</span>.<span class="n">08589</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a><span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number"> 3</span>d3d      D          d3d_bmp.cpp:545  _al_d3d_sync_bitmap              <span class="k2">[</span>   <span class="n">0</span>.<span class="n">08600</span><span class="k2">]</span> _al_d3d_sync_bitmap <span class="k2">(</span>video<span class="k2">)</span> ref count <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span>
<span class="number"> 4</span>d3d      D         d3d_disp.cpp:1489 d3d_display_thread_proc          <span class="k2">[</span>   <span class="n">0</span>.<span class="n">86039</span><span class="k2">]</span> D3DERR_DEVICELOST: d3d_display<span class="k3">=</span><span class="n">00C7AD38</span>
<span class="number"> 5</span>d3d      D         d3d_disp.cpp:1489 d3d_display_thread_proc          <span class="k2">[</span>   <span class="n">2</span>.<span class="n">77492</span><span class="k2">]</span> D3DERR_DEVICELOST: d3d_display<span class="k3">=</span><span class="n">00C7AD38</span>
<span class="number"> 6</span>d3d      D         d3d_disp.cpp:1489 d3d_display_thread_proc          <span class="k2">[</span>   <span class="n">4</span>.<span class="n">76360</span><span class="k2">]</span> D3DERR_DEVICELOST: d3d_display<span class="k3">=</span><span class="n">00C7AD38</span>
<span class="number"> 7</span>d3d      E         d3d_disp.cpp:2754 d3d_flush_vertex_cache           <span class="k2">[</span>   <span class="n">5</span>.<span class="n">78573</span><span class="k2">]</span> d3d_flush_vertex_cache: DrawPrimitive failed.
</div></div><p>

I added the callback as you suggested, and when the bitmap is restored successfully, it gets called twice. When it is not restored, it only gets called once.</p><p>Finally, I tried suspending the drawing until the display is found as you suggested (by setting a flag to false when ALLEGRO_EVENT_DISPLAY_LOST shows up, and to true when ALLEGRO_EVENT_DISPLAY_FOUND, and only drawing when it&#39;s true). The same issue came up.</p><p>If you want to see the code, let me know and I&#39;ll post it. In case it&#39;s relevant, I&#39;m using Visual Studio 2015 with the Allegro nuget package.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Tue, 04 Jul 2017 02:46:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s very interesting, thanks. I&#39;ll take a look at this soon as I&#39;ve been looking into this system recently.</p><p>EDIT: Still working on it, no luck so far.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 05 Jul 2017 10:47:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Were you able to reproduce it, at least? If there&#39;s any other useful information I can provide, please let me know.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Tue, 11 Jul 2017 04:37:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I may need to get your source after all. I fixed one device loss issue, but it doesn&#39;t look like yours. In particular, I&#39;m trying to get these lines to happen for me: </p><pre>d3d D d3d_bmp.cpp:539 _al_d3d_sync_bitmap [ 0.10467] _al_d3d_sync_bitmap (system) ref count == 1</pre><p>. I saw those before, but I can&#39;t seem to get them again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Fri, 14 Jul 2017 10:20:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry for delayed response! Here&#39;s the code:</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;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro_direct3d.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> callback<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>
<span class="number">  8</span>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Called!\n"</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</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> argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="c">// Enable logging.</span>
<span class="number"> 15</span>  <a href="http://www.allegro.cc/manual/al_set_config_value"><span class="a">al_set_config_value</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_system_config"><span class="a">al_get_system_config</span></a><span class="k2">(</span><span class="k2">)</span>, <span class="s">"trace"</span>, <span class="s">"level"</span>, <span class="s">"debug"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>  <span class="c">// Initialize Allegro.</span>
<span class="number"> 18</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="number"> 19</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"> 20</span>
<span class="number"> 21</span>  <span class="c">// Set callback.</span>
<span class="number"> 22</span>  <span class="c">//al_set_d3d_device_restore_callback(callback);</span>
<span class="number"> 23</span>
<span class="number"> 24</span>  <span class="c">// Create resources.</span>
<span class="number"> 25</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> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> event_queue <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"> 27</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> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bitmap <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">"allegro_logo.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>
<span class="number"> 30</span>  <span class="c">// Register event sources.</span>
<span class="number"> 31</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>  <span class="c">// Run main loop.</span>
<span class="number"> 35</span>  <span class="k1">bool</span> loop <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 36</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 37</span>  <span class="k1">bool</span> allow_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 38</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>  <span class="k1">while</span> <span class="k2">(</span>loop<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 41</span>
<span class="number"> 42</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number"> 43</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>
<span class="number"> 45</span>    <span class="k1">switch</span> <span class="k2">(</span>ev.type<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 46</span>
<span class="number"> 47</span>    <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 48</span>      redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 49</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 50</span>
<span class="number"> 51</span>    <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 52</span>      loop <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 53</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 54</span>
<span class="number"> 55</span>    <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_LOST:
<span class="number"> 56</span>      allow_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 57</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 58</span>
<span class="number"> 59</span>    <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_FOUND:
<span class="number"> 60</span>      allow_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 61</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 62</span>
<span class="number"> 63</span>    <span class="k2">}</span>
<span class="number"> 64</span>    
<span class="number"> 65</span>    <span class="k1">if</span> <span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> allow_redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 66</span>    
<span class="number"> 67</span>      <span class="c">// Redraw.</span>
<span class="number"> 68</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 69</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">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 70</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bitmap, <span class="n">100</span>, <span class="n">100</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 71</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"> 72</span>  
<span class="number"> 73</span>    <span class="k2">}</span>
<span class="number"> 74</span>
<span class="number"> 75</span>  <span class="k2">}</span>
<span class="number"> 76</span>
<span class="number"> 77</span>  <span class="c">// Free resources.</span>
<span class="number"> 78</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"> 79</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 80</span>
<span class="number"> 81</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 82</span><span class="k2">}</span>
</div></div><p>

And some extra information, in case it might be helpful:</p><p>- I&#39;m using C++ (obviously) rather than plain C, if that makes a difference.<br />- Compiled for x86 in Debug mode with Visual Studio 2015 on Windows 8.1 64-bit.<br />- I tested it out on another computer to see if the logs differed; they were the same.</p><p>&quot;allegro_logo.png&quot; is <a href="https://i.imgur.com/LTmiFnE.png">this image</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Tue, 18 Jul 2017 13:35:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I tried your code, but I just can&#39;t get it to reproduce your issue. I think the best I can do at this point is describe how I&#39;d approach fixing this if I could:</p><p>1. First, I&#39;d turn on the debug runtime for DirectX using the DirectX Control Panel (not sure where I got it), it&#39;ll look like this:</p><p><span class="remote-thumbnail"><span class="json">{"name":"610974","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/8\/f8ac8a265d1f9dedd969b80211cc8e5f.png","w":401,"h":531,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/f\/8\/f8ac8a265d1f9dedd969b80211cc8e5f"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/f/8/f8ac8a265d1f9dedd969b80211cc8e5f-240.jpg" alt="610974" width="240" height="317" /></span></p><p>2. Running your program in the debugger in MSVC will now print various logs, that may be useful.</p><p>3. Stepping through Allegro&#39;s code is essential. The Nuget package comes with debug symbols, you&#39;re just going to need to download Allegro&#39;s source and point the debugger to it (see <a href="https://msdn.microsoft.com/en-us/library/ms241613.aspx">https://msdn.microsoft.com/en-us/library/ms241613.aspx</a>). What to look at here will depend on what errors #1 returns.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 23 Jul 2017 09:06:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I opened up the DirectX Control Panel, and all of the debugging options are greyed-out. After doing some research, I found that apparently the debug version isn&#39;t available in Windows 8.1 (or Windows 7 post-KB2370838). Support for old versions of DirectX <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx">was dropped</a>. It seems like it&#39;s possible to get around this by modifying a registry key in Windows 7, but I&#39;m out of luck on 8.1.</p><p>I&#39;ll probably set up a VM to do this, but I&#39;m definitely not looking forward to installing everything... <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Mon, 24 Jul 2017 15:23:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe I can try doing this with Win10 in a VM as well (I have Win7 as my real Windows).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Tue, 25 Jul 2017 06:09:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All right, I got everything set up. The following is shown in the debug output log when it fails to restore the bitmap after a lock/unlock:
</p><div class="source-code snippet"><div class="inner"><pre>Direct3D9: <span class="k2">(</span>ERROR<span class="k2">)</span> <span class="k2">:</span>Lost due to display uniqueness change
Direct3D9: <span class="k2">:</span>DoneExclusiveMode
Direct3D9: <span class="k2">(</span>INFO<span class="k2">)</span> <span class="k2">:</span>Using FF to VS converter

Direct3D9: <span class="k2">(</span>INFO<span class="k2">)</span> <span class="k2">:</span>Using FF to PS converter
</pre></div></div><p>

Before (and after that), it&#39;s continuously spamming <span class="source-code">Ignoring redundant SetSamplerState</span>, but I doubt that that&#39;s important. </p><p>I wanted to see if it wrote anything different when it managed to restore the bitmap successfully, but I can&#39;t get it to do so in the VM. It never restores the bitmap, and presents the same output with each lock/unlock.</p><p>I&#39;m sorry to say I wasn&#39;t able to figure out how to get step 3 working. <s>The page you linked said I can specify the source files under &quot;Common Properties / Debug Source Files&quot;, but &quot;Common Properties&quot; doesn&#39;t exist in VS2015</s> Found it, I&#39;m an idiot. I just need to specify the source directory, right (&quot;allegro5-master\src&quot;)? I did that, but it&#39;s not letting me &quot;Step Into&quot; Allegro functions...</p><p>Do I need to worry about specifying .pdb files? When it asks for &quot;allegro.pdb&quot; I tried selecting &quot;packages\Allegro.5.2.2.1\build\native\v141\win32\lib\allegro-debug.pdb&quot;, but that&#39;s not what it&#39;s looking for.</p><p>Pardon my ignorance-- I want to help, but this is not a familiar process.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Sun, 30 Jul 2017 11:31:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You want to link to Allegro&#39;s debug versions, which will automatically pick-up the pdb files.</p><p>EDIT: Actually, it&#39;s pretty great that you got it failing on a different Windows version. I&#39;ve been trying this on my virtual Windows 10 to no avail.</p><p>Yes, that redundant sampler state thing is harmless... but is that really all the errors it shows? What does the log look like when it succeeds to restore things?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 03 Aug 2017 10:36:42 +0000</pubDate>
	</item>
</rss>
