<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Funky Lost/Found - Inc Code Sample</title>
		<link>http://www.allegro.cc/forums/view/611924</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 30 Jan 2013 04:10:23 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok so to make a long story short I narrowed down the problem I&#39;ve been having with the lost and <b>found</b> event to something that&#39;s easily built and executed by anybody.</p><p>To test it:<br />Tab-out and back repeatedly until it fails to re-enter correctly. On my computer, it eventually (and simply) does not re-enter after tabbing out. To kill the application I press escape.</p><p>You may have to tab out and in a couple dozen times. Or not. It&#39;s random.</p><p>Now I did figure out which line is causing the trouble. It appears to be:
</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>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>skip_redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 2</span>    <span class="k3">-</span><span class="k3">-</span><span class="k3">&gt;</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>pbitmap<span class="k2">)</span><span class="k2">;</span>
</div></div><p>
So it seems if I target the pbitmap in the render function the reset fails sometimes.</p><p>Try it yourself. This is just what happens on my system.</p><p>Again, the problem is the reset fails.</p><p>I&#39;m using Allegro 5.1.4 on Windows Xp Sp3.</p><p>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;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span>
<span class="number">   4</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="number">   5</span>
<span class="number">   6</span><span class="k1">namespace</span> g
<span class="number">   7</span><span class="k2">{</span>
<span class="number">   8</span>  <span class="k1">float</span> f_fps <span class="k3">=</span> <span class="n">1590</span><span class="k2">;</span>
<span class="number">   9</span><span class="k2">}</span>
<span class="number">  10</span>
<span class="number">  11</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">  12</span><span class="k2">{</span>
<span class="number">  13</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  14</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">  15</span>
<span class="number">  16</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="number">  17</span>  <span class="k2">{</span>
<span class="number">  18</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Could not init Allegro.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  20</span>  <span class="k2">}</span>
<span class="number">  21</span>
<span class="number">  22</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">  23</span>
<span class="number">  24</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<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</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">800</span>, <span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  27</span>  <span class="k2">{</span>
<span class="number">  28</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Could not create display.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  31</span>  <span class="k2">}</span>
<span class="number">  32</span>
<span class="number">  33</span>  <span class="c">//al_add_new_bitmap_flag(ALLEGRO_NO_PRESERVE_TEXTURE);</span>
<span class="number">  34</span>
<span class="number">  35</span>  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">  36</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>queue<span class="k2">)</span>
<span class="number">  37</span>  <span class="k2">{</span>
<span class="number">  38</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Could not create queue.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</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">  40</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  42</span>  <span class="k2">}</span>
<span class="number">  43</span>
<span class="number">  44</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> g::f_fps<span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</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>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</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>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">  47</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>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">  48</span>
<span class="number">  49</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> pbmfront <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>pbitmap <span class="k3">=</span> <span class="k2">:</span><span class="k2">:</span><a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><span class="n">200</span>,<span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>pbitmap<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  52</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">  53</span>    <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</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>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Failed to load image.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  58</span>  <span class="k2">}</span>
<span class="number">  59</span>
<span class="number">  60</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>pbitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>  <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_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">100</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</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>pbmfront<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>
<span class="number">  64</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  65</span>  <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  66</span>  <span class="k1">bool</span> skip_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</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">  69</span>
<span class="number">  70</span>  <span class="k1">do</span> <span class="k2">{</span>
<span class="number">  71</span>
<span class="number">  72</span>    <span class="k1">if</span> <span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>skip_redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  73</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>pbitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</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>pbmfront<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</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><span class="k2">:</span><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">100</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>      <span class="k2">:</span><span class="k2">:</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>pbitmap, <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">  77</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">  78</span>    <span class="k2">}</span>
<span class="number">  79</span>
<span class="number">  80</span>    <span class="k1">do</span> <span class="k2">{</span>
<span class="number">  81</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">  82</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>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>
<span class="number">  84</span>      <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_LOST<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  85</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Lost\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>        skip_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  87</span>      <span class="k2">}</span>
<span class="number">  88</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_FOUND<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  89</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Found\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>        skip_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  91</span>      <span class="k2">}</span>
<span class="number">  92</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_SWITCH_IN<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  93</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Switch In\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>      <span class="k2">}</span>
<span class="number">  95</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_SWITCH_OUT<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  96</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Switch Out\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>        skip_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  98</span>      <span class="k2">}</span>
<span class="number">  99</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 100</span>        redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 101</span>      <span class="k2">}</span>
<span class="number"> 102</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 103</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"User clicked on close.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>        quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 105</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 106</span>      <span class="k2">}</span>
<span class="number"> 107</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 108</span>        <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>          quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 110</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 111</span>        <span class="k2">}</span>
<span class="number"> 112</span>      <span class="k2">}</span>
<span class="number"> 113</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/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>  <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>
<span class="number"> 116</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>pbitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</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"> 118</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</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>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>
<span class="number"> 121</span>  <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k2">)</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>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (fallenlight12)</author>
		<pubDate>Sat, 26 Jan 2013 07:38:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try this:</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;allegro5/allegro.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="number">   5</span><span class="k1">bool</span> halt_main_thread <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">   6</span><span class="k1">bool</span> resume_main_thread <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">void</span> release_callback<span class="k2">(</span><span class="k2">)</span>
<span class="number">   9</span><span class="k2">{</span>
<span class="number">  10</span>  halt_main_thread <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  11</span>  <span class="k1">while</span> <span class="k2">(</span>halt_main_thread<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  12</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">001</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>  <span class="k2">}</span>
<span class="number">  14</span><span class="k2">}</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="k1">void</span> restore_callback<span class="k2">(</span><span class="k2">)</span>
<span class="number">  17</span><span class="k2">{</span>
<span class="number">  18</span>  resume_main_thread <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  19</span>  <span class="k1">while</span> <span class="k2">(</span>resume_main_thread<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  20</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">001</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>  <span class="k2">}</span>
<span class="number">  22</span><span class="k2">}</span>
<span class="number">  23</span>
<span class="number">  24</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="number">  25</span>
<span class="number">  26</span><span class="k1">namespace</span> g
<span class="number">  27</span><span class="k2">{</span>
<span class="number">  28</span>  <span class="k1">float</span> f_fps <span class="k3">=</span> <span class="n">1590</span><span class="k2">;</span>
<span class="number">  29</span><span class="k2">}</span>
<span class="number">  30</span>
<span class="number">  31</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">  32</span><span class="k2">{</span>
<span class="number">  33</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue <span class="k3">=</span> NULL<span class="k2">;</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>
<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"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  37</span>  <span class="k2">{</span>
<span class="number">  38</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Could not init Allegro.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  40</span>  <span class="k2">}</span>
<span class="number">  41</span>
<span class="number">  42</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">  43</span>
<span class="number">  44</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<span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</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">800</span>, <span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  47</span>  <span class="k2">{</span>
<span class="number">  48</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Could not create display.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  51</span>  <span class="k2">}</span>
<span class="number">  52</span>
<span class="number">  53</span>  al_d3d_set_release_callback<span class="k2">(</span>release_callback<span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>  al_d3d_set_restore_callback<span class="k2">(</span>restore_callback<span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>
<span class="number">  56</span>  <span class="c">//al_add_new_bitmap_flag(ALLEGRO_NO_PRESERVE_TEXTURE);</span>
<span class="number">  57</span>
<span class="number">  58</span>  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">  59</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>queue<span class="k2">)</span>
<span class="number">  60</span>  <span class="k2">{</span>
<span class="number">  61</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Could not create queue.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</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">  63</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  65</span>  <span class="k2">}</span>
<span class="number">  66</span>
<span class="number">  67</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> g::f_fps<span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</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>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</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>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">  70</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>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">  71</span>
<span class="number">  72</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> pbmfront <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>pbitmap <span class="k3">=</span> <span class="k2">:</span><span class="k2">:</span><a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><span class="n">200</span>,<span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>pbitmap<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  75</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">  76</span>    <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</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>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stdout,<span class="s">"Failed to load image.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">4</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  81</span>  <span class="k2">}</span>
<span class="number">  82</span>
<span class="number">  83</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>pbitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>  <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_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">100</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</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>pbmfront<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>
<span class="number">  87</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  88</span>  <span class="k1">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  89</span>  <span class="k1">bool</span> skip_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  90</span>
<span class="number">  91</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">  92</span>
<span class="number">  93</span>  <span class="k1">do</span> <span class="k2">{</span>
<span class="number">  94</span>
<span class="number">  95</span>    <span class="k1">if</span> <span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>skip_redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  96</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>pbitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</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>pbmfront<span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</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><span class="k2">:</span><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">100</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>      <span class="k2">:</span><span class="k2">:</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>pbitmap, <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"> 100</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"> 101</span>    <span class="k2">}</span>
<span class="number"> 102</span>
<span class="number"> 103</span>    <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 104</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"> 105</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>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>
<span class="number"> 107</span>      <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_LOST<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 108</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Lost\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>        skip_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 110</span>      <span class="k2">}</span>
<span class="number"> 111</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_FOUND<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 112</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Found\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>        skip_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 114</span>      <span class="k2">}</span>
<span class="number"> 115</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_SWITCH_IN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 116</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Switch In\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>      <span class="k2">}</span>
<span class="number"> 118</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_SWITCH_OUT<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 119</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Display Switch Out\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>        skip_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 121</span>      <span class="k2">}</span>
<span class="number"> 122</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 123</span>        redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 124</span>      <span class="k2">}</span>
<span class="number"> 125</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 126</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"User clicked on close.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>        quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 128</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 129</span>      <span class="k2">}</span>
<span class="number"> 130</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 131</span>        <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 132</span>          quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 133</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 134</span>        <span class="k2">}</span>
<span class="number"> 135</span>      <span class="k2">}</span>
<span class="number"> 136</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/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>
<span class="number"> 138</span>    <span class="k1">if</span> <span class="k2">(</span>halt_main_thread<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 139</span>       halt_main_thread <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 140</span>       <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>resume_main_thread<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 141</span>         <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">001</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>       <span class="k2">}</span>
<span class="number"> 143</span>       resume_main_thread <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 144</span>    <span class="k2">}</span>
<span class="number"> 145</span>
<span class="number"> 146</span>  <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>
<span class="number"> 148</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>pbitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</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"> 150</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</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>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 152</span>
<span class="number"> 153</span>  <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>
<span class="number"> 155</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 156</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 26 Jan 2013 08:48:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well when I tried your code as-is it didn&#39;t get rid of the problem.</p><p>However, enabling NO_PRESERVE and just destroying and recreating did.</p><p>Now...</p><p>In my main application I have made some progress.</p><p>I found out that the problem is occurring in the destroying process that happens immediately after the lost event. Somehow an al_destroy_bitmap() call is failing. This is of course later causing reset to fail.</p><p>Right now, I&#39;m using <b>::al_is_d3d_device_lost()</b> to test if the device is lost in different places. I&#39;ve figured out that those cases where the device is unable to reset correctly happen when the device is lost INSIDE the display routine (bundles all of the rendering for the application). So even if I skip the display routine if the device is lost (which I am currently doing), it can still happen inside. And somehow that&#39;s causing this problem.</p><p>Basically, it looks like even if I use the code that you supplied - that uses callback routines - I&#39;ll still have this problem. I have to dig deeper to find out exactly where it&#39;s happening and if I can do a test when I&#39;m destroying.</p><p>I may have said something wrong, but this is the gist of it. The display is lost inside where I use allegro display routines and somehow it&#39;s choking something that prevents me from destroying a bitmap.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (fallenlight12)</author>
		<pubDate>Mon, 28 Jan 2013 09:12:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve said it about 8 times now and this is the last. You can&#39;t do anything with d3d after returning from the release callback until returning from the restore callback. NOTHING. al_is_d3d_device_lost takes a snapshot of the flag at a given point but it can change in the middle of your function. The ONLY way to do it right is as I said above, and on top of that set a flag that says DON&#39;T TOUCH D3D in the callback. This assumes your program is single threaded, in a multi threaded program it&#39;s slightly more complicated.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 28 Jan 2013 09:23:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Trent I haven&#39;t used the callbacks yet in the main app. I did test them in the skeleton app briefly.</p><p>But I will put them in the main app now.</p><p>Sorry bro if I touched feathers. Look, I&#39;ve had a lot of troubles with this code and this has been a rough ride. I&#39;ve not enjoyed myself. Please don&#39;t get too mad.</p><p>I love the help. I know I might be a tough student, but I&#39;m trying.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (fallenlight12)</author>
		<pubDate>Mon, 28 Jan 2013 09:25:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok ok, I got a little impatient. No worries.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 28 Jan 2013 09:55:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m using the callbacks now in the same way as your sample code.</p><p>But here&#39;s the problem... hail_main_thread is only true when I re-enter the application. Am I doing something wrong? What&#39;s happening is the device is getting lost before I get the lost event. And halt_main_thread is not true so the release_callback() isn&#39;t being called yet. So how am I supposed to prevent allegro functions from being used when the device is lost before it reaches the allegro message pump?</p><p>Well I&#39;m just at a loss. Don&#39;t understand.</p><p>I&#39;m trying to use al_is_d3d_device_lost() but it&#39;s not preventing it. I do use it to skip the main routine for the display, but somehow after that it fubbers. When I put it inside it oddly is somehow not recognized until the display flips.</p><p>As in:</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>b_redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>b_skipredraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>      b_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  3</span>      <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">:</span><span class="k2">:</span><a href="http://www.allegro.cc/manual/al_is_d3d_device_lost"><span class="a">al_is_d3d_device_lost</span></a><span class="k2">(</span>pdisplay<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>        fps_count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Gui._Display<span class="k2">(</span>shp::crect<span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,screenx,screeny<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>          dbg::LOG<span class="k2">(</span><span class="s">"...(Main Thread) display event caused error, exiting main loop.\n"</span>, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number">  9</span>        <span class="k2">}</span>
<span class="number"> 10</span>        <span class="k1">if</span><span class="k2">(</span><span class="k2">:</span><span class="k2">:</span><a href="http://www.allegro.cc/manual/al_is_d3d_device_lost"><span class="a">al_is_d3d_device_lost</span></a><span class="k2">(</span>pdisplay<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>          dbg::LOG<span class="k2">(</span><span class="s">"...(Main Thread) Device is lost inside display routines.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>        <span class="k2">}</span>
<span class="number"> 13</span>      <span class="k2">}</span>
<span class="number"> 14</span>    <span class="k2">}</span>
</div></div><p>

Can lock this thread. If I need anymore help and Trend has ignored me or something then I&#39;ll ask him. I&#39;ve made too many threads already. This is going on and on and on. I&#39;ll shutup. Thanks.</p><p>Just.... this has been one of the worst time I&#39;ve had programming. I&#39;ve been programming for a long time. I&#39;m 35 and so it has been more than 15 years off and on. And I&#39;m just baffled at this. Maybe I need to learn more about direct 3d. But I&#39;m already hating direct3d. Anyway, whatever. Don&#39;t like hitting my head against the wall.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (fallenlight12)</author>
		<pubDate>Mon, 28 Jan 2013 11:36:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m having a bit of a hard time understanding the problem. You&#39;re talking about al_d3d_device_is_lost and message pumps and events, and I swear I&#39;ve said more than once that those are useless for what you&#39;re trying to do.</p><p>I&#39;m here to help, I&#39;m not going anywhere. Maybe an explanation of what is happening behind the scenes will help (you can look at the code yourself in src/win/d3d_disp.cpp):</p><p>1) Allegro receives device lost from d3d. It sends the LOST event which is mostly useless.<br />2) It waits for d3d to tell it to reset the device<br />3) It calls your release callback if you&#39;ve set one<br />4) It releases all bitmaps including ones with NO_PRESERVE (I may have told you different before)<br />5) It then resets the device<br />6) It recreates ALL textures but only restores the content of ones without NO_PRESERVE<br />7) It emits the FOUND event<br />8) it then calls your restore callback if you&#39;ve set one</p><p>So with that said, do you have an example that doesn&#39;t work that I can test? The one you posted here worked at least enough that I couldn&#39;t get it to fail, so something that&#39;s more reproducible would be good but if that&#39;s all you&#39;ve got...</p><p>And I apologize if I gave you any wrong information before... I want to fix this though so stick with it <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 28 Jan 2013 12:56:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well first off the sample I posted in the OP fails on my machine about once every ~10 times. When I press alt-tab to re-enter it fails. I can still see the console window except it doesn&#39;t have focus. I press escape to exit.</p><p>As I said, the line that causes it to fail is the line that targets pbitmap. That&#39;s the line that will get executed first after the display is found and the timer sets b_redraw to true. If I remove that line, I get no failures.</p><p>The sample you posted in your first reply didn&#39;t get rid of it. The only change your sample adds is that when it fails to re-enter it goes into a hard loop and won&#39;t respond to me pressing ESC.</p><p>I&#39;m using WinXP Sp3 with Direct 9.0c and the Allegro 5.1.4 binaries here:<br /><a href="https://www.allegro.cc/forums/thread/611248/969351#target">https://www.allegro.cc/forums/thread/611248/969351#target</a></p><p>I&#39;m using Microsoft Visual C++ 2010 Express to build the project. And no I&#39;m not running any other code alongside the sample I gave in the OP. I just use a #ifdef...#endif in main.cpp to run the sample exclusively.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (fallenlight12)</author>
		<pubDate>Tue, 29 Jan 2013 09:34:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Again, I fixed a number of issues with d3d lost devices in 5.1.5. Please test using that version or git.</p><p>edit: I tested your program with the current git version of Allegro (should be the same as 5.1.5 in this respect). No problems alt-tabbing in and out about 30 times or so.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Tue, 29 Jan 2013 13:54:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Peter, have you tested on older versions? I&#39;m just wondering if this is an allegro ~5.1.4 problem or it&#39;s a problem on my system (hardware/software). Right now I am in a fog and just don&#39;t know.</p><p>Where can I get 5.1.5? Rather, how long will it be before a binary is released? I tried building sources a month ago but was only partially successful. Right now, I just wait until the binaries are availabe and use those. I do have the allegro source to look at, though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (fallenlight12)</author>
		<pubDate>Wed, 30 Jan 2013 01:36:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t test 5.1.4 because I&#39;d just be hitting the same bugs that I fixed in 5.1.5. I&#39;m attaching the executed I tested with yesterday if you want to see if its fixed for you.</p><p>Milan might pop up with 5.1.5 binaries some time, or not. The only hard part about building Allegro is getting the dependencies, and Milan provided them <a href="https://www.allegro.cc/forums/revision/970499">here</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Wed, 30 Jan 2013 04:10:23 +0000</pubDate>
	</item>
</rss>
