<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Blacking out the display while resizing</title>
		<link>http://www.allegro.cc/forums/view/616674</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 20 Jan 2017 03:44:17 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is there a way to control what the display shows when it&#39;s being resized on Windows?</p><p>Currently, it stretches the contents of the display. I&#39;d prefer to be able to detect that the display is being resized (through an event?) so I can control what it displays (e.g., plain black during the resize).</p><p>I found a similar question here (<a href="https://www.allegro.cc/forums/thread/606559">[AL5] Knowing when a resize event is starting?</a>), and it didn&#39;t seem there was a resolution, but that was back in 2011.</p><p>Is there any way to do this now?</p><p><b>Update:</b> Switching to OpenGL made it so the ALLEGRO_EVENT_DISPLAY_RESIZE event is emitted repeatedly which allowed me to detect a resize in-progress. The follow-up problem is now finding a way to fix this: <a href="https://my.mixtape.moe/rdxqwg.webm">https://my.mixtape.moe/rdxqwg.webm</a> (What I&#39;ve got right now, vs what I&#39;m trying to achieve)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Thu, 05 Jan 2017 11:29:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ALLEGRO_EVENT_DISPLAY_RESIZE is an event fired when resizing.<br />For the control of the window content itself, I don&#39;t know.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 05 Jan 2017 15:32:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>As far as I know, that event is only fired when the user has finished resizing, right? What I&#39;m looking for is something that indicates that the display has started being resized, or is currently being resized, so I can hide its contents while this is occurring instead of having them awkwardly stretch.</p><p>It looks bad when you&#39;re trying to respect the aspect ratio, because it doesn&#39;t respect it while the resize is occurring and I have no way of dealing with that because I can&#39;t detect it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Thu, 05 Jan 2017 15:46:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In Linux you get the resize event as soon as the resizing starts. But the Windows port is a bit strange for some reason. It should not be hard to fix it though. This is where the resize starts:</p><p><a href="https://github.com/liballeg/allegro5/blob/master/src/win/wwindow.c#L915">https://github.com/liballeg/allegro5/blob/master/src/win/wwindow.c#L915</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 05 Jan 2017 20:54:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Blacking out the display is not preferable for everyone. I want the window to display its contents during a resize, not black out. This is typical of most major desktop applications. The contents are redrawn as necessary, not ignored, or blacked out.</p><p>One issue comes from the number of resize events that are emitted during a resize. The question is whether to collect them or deal with them individually. What I do personally is wait a short period of time and then take all the resize events off of the queue at once. There are usually between 3 and 10 resize events in a short period of time because you get one for every mouse move when the window controls are being dragged.</p><p>A further question comes whether you are using Direct3D or OpenGL, as they handle resize events differently.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 06 Jan 2017 02:43:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think how it should work is send a resize event immediately when resizing starts. But then ignore all resize events until the user calls al_acknowledge_resize.</p><p>So that way it is completely up to the user how many resize events they want to handle. They can acknowledge 1000 resize events per second (and for example smoothly redraw the game scene during the resize that way). Or they can only handle one event per second or whatever. If reloading of fonts or similar things are necessary then this way only at most one resize event would be pending if it takes too long.</p><p>I think that&#39;s how it already works in Linux (but not sure, would have to double check).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Fri, 06 Jan 2017 03:07:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There is a note or two in the d3d resize code. I can&#39;t remember where at the moment, but I think they were important. I think there was some kind of issue with the threading in the resize code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 06 Jan 2017 03:31:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/616674/1027539#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Blacking out the display is not preferable for everyone. I want the window to display its contents during a resize, not black out. This is typical of most major desktop applications. The contents are redrawn as necessary, not ignored, or blacked out.</p></div></div><p>It goes without saying that you&#39;re not going to find a default behavior that satisfies literally everyone. I don&#39;t want to change the default behavior, but instead have more control over what happens. All I&#39;m looking for is a way to detect that a resize has either (1) started or (2) is in progress so I can alter drawing accordingly. As it is, I can only detect when the resize has ended. How can I &quot;redraw as necessary&quot; if I can&#39;t detect that the size of the window is changing? The current behavior (just stretching the contents) isn&#39;t exactly typical of the Windows experience.</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/616674/1027539#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>One issue comes from the number of resize events that are emitted during a resize. The question is whether to collect them or deal with them individually. What I do personally is wait a short period of time and then take all the resize events off of the queue at once. There are usually between 3 and 10 resize events in a short period of time because you get one for every mouse move when the window controls are being dragged.</p><p>A further question comes whether you are using Direct3D or OpenGL, as they handle resize events differently.</p></div></div><p>

I&#39;m using whichever is the default for the latest version of Allegro 5. I&#39;m detecting the resize via the display&#39;s event source, which only emits a resize event once the resize has completed (ALLEGRO_EVENT_DISPLAY_RESIZE). I can&#39;t find anything in the documentation for detecting that a resize has started or is in progress. At least, not through the typical events.</p><p>According to Elias&#39; responses, it seems this is only possible on Linux, not Windows... Is the final verdict that this cannot be done without modifying Allegro?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Fri, 06 Jan 2017 09:40:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You might be able to accomplish what you want by setting the Background Brush using the HWND Window handle that Allegro gives you. See <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a></span> for details.</p><div class="source-code snippet"><div class="inner"><pre>   HBRUSH brush <span class="k3">=</span> CreateSolidBrush<span class="k2">(</span><a href="http://www.allegro.cc/manual/RGB"><span class="a">RGB</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
   SetClassLongPtr<span class="k2">(</span>hwnd, GCLP_HBRBACKGROUND, <span class="k2">(</span>LONG<span class="k2">)</span>brush<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

But yes, Allegro probably needs to be patched to accomplish what you want.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 06 Jan 2017 10:00:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That certainly blacks out the display, but the problem is detecting the resize in the first place. Am I supposed to detect it somehow through the handle, or am I out of luck?</p><p>(Blacking out the display was never the problem, it was just an example to illustrate why I want to be able to detect this.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Fri, 06 Jan 2017 12:33:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I suppose the question is what kind of drawing control each framework gives you during a resize. If you&#39;re free to run whatever program and respond to the process dynamically then I think it makes sense for Allegro to offer up as much data as is feasible. That said, I think that resizing games is kind of black magic. It seems to rarely work, and generally I stick to full-screen to avoid problems. Am I just old or is it truly black magic to have windowed games?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Fri, 06 Jan 2017 12:55:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Whoever implemented resizing in the Windows port just did it in a way to not allow updates to the window during the resize. And it <i>should</i> get fixed (but not by me, I don&#39;t even have Windows).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Fri, 06 Jan 2017 19:47:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can try messing with <a href="http://liballeg.org/a5docs/trunk/platform.html#al_win_add_window_callback">al_win_add_window_callback</a></p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> al_win_add_window_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="k1">bool</span> <span class="k2">(</span><span class="k3">*</span>callback<span class="k2">)</span><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, UINT message, WPARAM wparam,
   LPARAM lparam, LRESULT <span class="k3">*</span>result, <span class="k1">void</span> <span class="k3">*</span>userdata<span class="k2">)</span>, <span class="k1">void</span> <span class="k3">*</span>userdata<span class="k2">)</span>
</pre></div></div><p>

Try intercepting WM_SIZING messages and repainting if you get one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 07 Jan 2017 01:50:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If all you want is to &quot;black out&quot; the display while resizing, surely something like the following would work:</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;iostream&gt;</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">using</span> std::cout<span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  10</span>
<span class="number">  11</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  12</span>
<span class="number">  13</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Error: failed to initialize Allegro 5\n"</span><span class="k2">;</span>
<span class="number">  14</span>
<span class="number">  15</span>    <span class="k1">return</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  16</span>  <span class="k2">}</span>
<span class="number">  17</span>
<span class="number">  18</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  19</span>
<span class="number">  20</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Error: failed to initialize image addon\n"</span><span class="k2">;</span>
<span class="number">  21</span>
<span class="number">  22</span>    <span class="k1">return</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  23</span>  <span class="k2">}</span>
<span class="number">  24</span>
<span class="number">  25</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  26</span>
<span class="number">  27</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Error: failed to initialize primitives addon\n"</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span>    <span class="k1">return</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  30</span>  <span class="k2">}</span>
<span class="number">  31</span>
<span class="number">  32</span>  <span class="c">// Allow the display window the be resizable.</span>
<span class="number">  33</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span>  <span class="c">// Create events.</span>
<span class="number">  36</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">  37</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">400</span>, <span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</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">  39</span>
<span class="number">  40</span>  <span class="c">// Register events with the event queue.</span>
<span class="number">  41</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">  42</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">  43</span>
<span class="number">  44</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">  45</span>
<span class="number">  46</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  47</span>  <span class="k1">bool</span> running <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</span>  <span class="c">// This will be used to "black out" the display.</span>
<span class="number">  50</span>  <span class="k1">bool</span> display_black <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  51</span>
<span class="number">  52</span>  <span class="c">// Do main game loop.</span>
<span class="number">  53</span>  <span class="k1">while</span> <span class="k2">(</span>running<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  54</span>
<span class="number">  55</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>
<span class="number">  59</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  60</span>
<span class="number">  61</span>      <span class="c">// The window was closed; end the game.</span>
<span class="number">  62</span>      running <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  63</span>    <span class="k2">}</span>
<span class="number">  64</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_RESIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  65</span>
<span class="number">  66</span>      <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>      <span class="c">// Change the display to black.</span>
<span class="number">  69</span>      display_black <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  70</span>    <span class="k2">}</span>
<span class="number">  71</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  72</span>
<span class="number">  73</span>      <span class="c">// Update stuff here.</span>
<span class="number">  74</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  75</span>    <span class="k2">}</span>
<span class="number">  76</span>
<span class="number">  77</span>    <span class="k1">if</span> <span class="k2">(</span>render <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">  78</span>
<span class="number">  79</span>      <span class="c">// Render stuff here.</span>
<span class="number">  80</span>
<span class="number">  81</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>      <span class="k1">if</span> <span class="k2">(</span>display_black<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  84</span>
<span class="number">  85</span>        <span class="c">// Clear display to black color.</span>
<span class="number">  86</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">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>
<span class="number">  88</span>        <span class="k1">static</span> <span class="k1">unsigned</span> ticks <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>        <span class="k3">+</span><span class="k3">+</span>ticks<span class="k2">;</span>
<span class="number">  91</span>
<span class="number">  92</span>        <span class="k1">if</span> <span class="k2">(</span>ticks <span class="k3">&gt;</span> <span class="n">30</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  93</span>
<span class="number">  94</span>          <span class="c">// Keep the display black for half a second as a "cool down" period.</span>
<span class="number">  95</span>
<span class="number">  96</span>          display_black <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span>          ticks <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  99</span>        <span class="k2">}</span>
<span class="number"> 100</span>      <span class="k2">}</span>
<span class="number"> 101</span>      <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 102</span>
<span class="number"> 103</span>        <span class="c">// Clear display to red color.</span>
<span class="number"> 104</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">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>      <span class="k2">}</span>
<span class="number"> 106</span>
<span class="number"> 107</span>      <span class="c">// Update display.</span>
<span class="number"> 108</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"> 109</span>    <span class="k2">}</span>
<span class="number"> 110</span>  <span class="k2">}</span>
<span class="number"> 111</span>
<span class="number"> 112</span>  <span class="c">// Destroy events.</span>
<span class="number"> 113</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"> 114</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"> 115</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"> 116</span><span class="k2">}</span>
</div></div><p>

<a href="https://vid.me/xikk">Here</a> is a video of it in action.</p><p>[EDIT]<br />Not sure how this behaves on Windows.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Sat, 07 Jan 2017 04:36:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That doesn&#39;t work on Windows with Direct3D. D3D stretches the contents of the context onto the screen during a resize, which means it depends on whatever you were displaying when the resize started. You don&#39;t get a resize event until WM_EXITSIZEMOVE is triggered, so you can&#39;t acknowledge it and redraw in the interim. That&#39;s why I suggested the background brush, or monitoring WM_ENTERSIZEMOVE and WM_SIZING yourself.</p><p><b>EDIT</b>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> al_win_add_window_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="k1">bool</span> <span class="k2">(</span><span class="k3">*</span>callback<span class="k2">)</span><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, UINT message, WPARAM wparam,
   LPARAM lparam, LRESULT <span class="k3">*</span>result, <span class="k1">void</span> <span class="k3">*</span>userdata<span class="k2">)</span>, <span class="k1">void</span> <span class="k3">*</span>userdata<span class="k2">)</span>
</pre></div></div><p>
</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">bool</span> WinProcCallback<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> d , UINT msg , WPARAM wparam , LPARAM lparam ,
                     LRESULT<span class="k3">*</span> result , <span class="k1">void</span><span class="k3">*</span> userdata<span class="k2">)</span> <span class="k2">{</span>
   <span class="k1">if</span> <span class="k2">(</span>msg <span class="k3">=</span><span class="k3">=</span> WM_SIZING<span class="k2">)</span> <span class="k2">{</span>
      RECT r <span class="k3">=</span> <span class="k3">*</span>lparam<span class="k2">;</span>
      <span class="k1">int</span> w <span class="k3">=</span> r.right <span class="k3">-</span> r.left<span class="k2">;</span>
      <span class="k1">int</span> h <span class="k3">=</span> r.bottom <span class="k3">-</span> r.top<span class="k2">;</span>
      <a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>d , w , h<span class="k2">)</span><span class="k2">;</span>
      <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
   <span class="k2">}</span>
   <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

</p><div class="source-code snippet"><div class="inner"><pre>HWND hwnd <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
al_win_add_window_callback<span class="k2">(</span>display , WinProcCallback , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

You still have to acknowledge resize events, but this way the window should resize each time it gets a WM_SIZING event. Untested. It might enter an endless loop.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 07 Jan 2017 05:34:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/616674/1027568#target">Quote</a>:</div><div class="quote"><p>That doesn&#39;t work on Windows with Direct3D.</p></div></div><p>

Ah, gotcha. Is it possible to tell Allegro 5 to use OpenGL on Windows though?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Sat, 07 Jan 2017 10:03:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yessirree Bob.</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 07 Jan 2017 10:42:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Fantastic, thanks.</p><p>Why not force the use of OpenGL then on Windows and use code similar to what I posted to achieve xsquid&#39;s desired outcome? That would work, wouldn&#39;t it?</p><p>[EDIT]<br />Seems to work on Windows 10.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Sat, 07 Jan 2017 23:52:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try moving the mouse quickly from a small window to a big window when you&#39;re dragging it. That way you can see the in-between frames.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 08 Jan 2017 03:58:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/616674/1027589#target">Eric Johnson</a> said:</div><div class="quote"><p>Why not force the use of OpenGL then on Windows and use code similar to what I posted to achieve xsquid&#39;s desired outcome? That would work, wouldn&#39;t it?</p></div></div><p>

Yes! As you mentioned, it does seem to work if the ALLEGRO_OPENGL flag is set, because a nice stream of ALLEGRO_EVENT_DISPLAY_RESIZE events is generated. But then you encounter the problem that (I think) Edgar Reynaldo is describing. If you resize the display quickly, it looks jittery (look at the bottom; the main grey rectangle should be filling the display vertically):</p><p><span class="remote-thumbnail"><span class="json">{"name":"jOt7ysWqT.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/3\/a31cdfe9b949195cd1f18c186bbdb426.png","w":813,"h":490,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/3\/a31cdfe9b949195cd1f18c186bbdb426"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/a/3/a31cdfe9b949195cd1f18c186bbdb426-240.jpg" alt="jOt7ysWqT.png" width="240" height="144" /></span></p><p>Here&#39;s the code used in the program in the screenshot:</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_primitives.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;algorithm&gt;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> draw_rect<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> disp<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>
<span class="number">  8</span>  <span class="k1">float</span> w <span class="k3">=</span> <span class="k2">(</span>std::min<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>disp<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>disp<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>  <span class="k1">float</span> x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>disp<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span> <span class="k3">-</span> w <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 10</span>  <span class="k1">float</span> y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>disp<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span> <span class="k3">-</span> w <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 11</span>  <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> w, <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">192</span>, <span class="n">192</span>, <span class="n">192</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>
<span class="number"> 17</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"> 18</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</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"> 21</span>
<span class="number"> 22</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>    <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</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">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>    draw_rect<span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</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"> 27</span>  <span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k2">}</span>
</div></div><p>

I haven&#39;t tested it, but I think Edgar&#39;s brush method would solve this for simply filling the display with black. But, since that was an example situation, I&#39;m looking for something a bit more versatile as well. There are many programs/games that can resize without the ugly jitter-- Is there something I did wrong with my code above that causes it? I tried the same concept using an event queue, but it didn&#39;t fix it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Mon, 09 Jan 2017 08:04:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/616674/1027629#target">xsquid</a> said:</div><div class="quote"><p><span class="source-code"> <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> w, <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">192</span>, <span class="n">192</span>, <span class="n">192</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span></p></div></div><p>

That should be y + h there where it says y + w.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Jan 2017 08:57:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/616674/1027631#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>That should be y + h there where it says y + w.</p></div></div><p>
It&#39;s supposed to be a square, where &quot;w&quot;, while perhaps misleadingly named, is the smaller of the width/height. I&#39;m trying to keep the aspect ratio. It should fill the display vertically, and it does, the issue now is simply that when you resize quickly there&#39;s some lag/jitter and some ugly lines before it&#39;s finally drawn properly. In other words, it&#39;s not smooth. </p><p>The screenshot is one of the &quot;between frames&quot; which I&#39;m trying to find a way to avoid as much as possible. A lot of applications resize smoothly, but Allegro displays on Windows don&#39;t seem to. I&#39;d like for it to be redrawn <i>immediately</i> after the resize occurs, but it&#39;s as if it&#39;s lagging behind a little bit.</p><p>For comparison, when using Direct3D, while I didn&#39;t want the stretching, the stretching itself was very smooth. I&#39;m trying to accomplish that degree of smooth redrawing but with control over what exactly is drawn...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Mon, 09 Jan 2017 09:01:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try acknowledging WM_SIZING messages in a window callback process. If the w or h is different, call al_resize_display. If they are the same, stop.</p><p>Use 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> oldh <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="k1">int</span> oldw <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>msg <span class="k3">=</span><span class="k3">=</span> WM_SIZING<span class="k2">)</span> <span class="k2">{</span>
   Rect r <span class="k3">=</span> <span class="k3">*</span>lparam<span class="k2">;</span>
   <span class="k1">if</span> <span class="k2">(</span>oldh <span class="k3">!</span><span class="k3">=</span> r.bottom <span class="k3">-</span> r.top <span class="k3">|</span><span class="k3">|</span> oldw <span class="k3">!</span><span class="k3">=</span> r.right <span class="k3">-</span> r.left<span class="k2">)</span> <span class="k2">{</span>
      <a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>display , r.right <span class="k3">-</span> r.left , r.bottom <span class="k3">-</span> r.top<span class="k2">)</span><span class="k2">;</span>
   <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Jan 2017 09:58:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, I have this now:</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="number">  2</span><span class="k1">void</span> draw_rect<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> disp<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>
<span class="number">  4</span>  <span class="k1">float</span> w <span class="k3">=</span> <span class="k2">(</span>std::min<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>disp<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>disp<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">float</span> x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>disp<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span> <span class="k3">-</span> w <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">float</span> y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>disp<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span> <span class="k3">-</span> w <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number">  7</span>  <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> w, <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">192</span>, <span class="n">192</span>, <span class="n">192</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k2">}</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">bool</span> WinProcCallback<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> d, UINT msg, WPARAM wparam, LPARAM lparam, LRESULT<span class="k3">*</span> result, <span class="k1">void</span><span class="k3">*</span> userdata<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>
<span class="number"> 13</span>  <span class="k1">int</span> oldh <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">int</span> oldw <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>d<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  <span class="k1">if</span> <span class="k2">(</span>msg <span class="k3">=</span><span class="k3">=</span> WM_SIZING<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>    RECT r <span class="k3">=</span> <span class="k3">*</span><span class="k2">(</span>RECT<span class="k3">*</span><span class="k2">)</span>lparam<span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">if</span> <span class="k2">(</span>oldh <span class="k3">!</span><span class="k3">=</span> r.bottom <span class="k3">-</span> r.top <span class="k3">|</span><span class="k3">|</span> oldw <span class="k3">!</span><span class="k3">=</span> r.right <span class="k3">-</span> r.left<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 18</span>      <a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>d, r.right <span class="k3">-</span> r.left, r.bottom <span class="k3">-</span> r.top<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>      <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 20</span>    <span class="k2">}</span>
<span class="number"> 21</span>  <span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>  <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span><span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 28</span>
<span class="number"> 29</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"> 30</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</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"> 34</span>
<span class="number"> 35</span>  HWND hwnd <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>  al_win_add_window_callback<span class="k2">(</span>display, WinProcCallback, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 39</span>    <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</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_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">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>    draw_rect<span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</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"> 43</span>  <span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span><span class="k2">}</span>
</div></div><p>

... But it crashes on resize with a read access violation. The crash occurs when al_resize_display is called; it doesn&#39;t occur when it&#39;s commented out.</p><p><b>Edit:</b> For the record, here&#39;s a comparison video of what it looks like (the last example, since this example throws an error) vs what I&#39;d like to achieve: <a href="https://my.mixtape.moe/rdxqwg.webm">https://my.mixtape.moe/rdxqwg.webm</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Wed, 11 Jan 2017 03:15:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s probably crashing the stack, posting WM_SIZING every time a resize is called.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 11 Jan 2017 21:12:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I took some time to continue experimenting with it, and I don&#39;t think that&#39;s what&#39;s happening. It crashes right away on the first call when I step through it using a debugger, and I modified the function to only ever call it once, and it still crashes.</p><p>I&#39;ll keep playing with it to see if I can get it working, but I have no idea what&#39;s causing it at this point.</p><p><b>Update #1:</b> I&#39;ve noticed it doesn&#39;t like it when I use any Allegro functions inside of the callback function (drawing or display functions; it might be limited to things that try to modify the backbuffer). Outside is fine. Is that relevant?</p><p><b>Update #2:</b> Yeah, it seems to throw a read access violation error if I try to do anything with the display&#39;s backbuffer inside of the callback function (or use any function that touches it).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Tue, 17 Jan 2017 05:02:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If I had to guess I&#39;d say that the callback is likely in a different thread than the main thread that you use with Allegro. That likely means that you cannot use Allegro within the callback because Allegro uses thread-local globals for a lot of state. It&#39;s probably a bad practice anyway. Unfortunately, that probably complicates things somewhat. A sensible approach may be to trigger a user-defined event if that is allowed, but I&#39;m not sure if you&#39;ll need to somehow lock the queue... /guesses
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Tue, 17 Jan 2017 06:02:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/616674/1027781#target">bamccaig</a> said:</div><div class="quote"><p>If I had to guess I&#39;d say that the callback is likely in a different thread than the main thread that you use with Allegro. That likely means that you cannot use Allegro within the callback because Allegro uses thread-local globals for a lot of state. It&#39;s probably a bad practice anyway. Unfortunately, that probably complicates things somewhat. A sensible approach may be to trigger a user-defined event if that is allowed, but I&#39;m not sure if you&#39;ll need to somehow lock the queue... /guesses</p></div></div><p>

Tsk, I thought it might be something like that.</p><p>Would using a user-defined event make much of a difference compared to just using the ALLEGRO_EVENT_DISPLAY_RESIZE event? One thing I tried was redrawing and flipping the display immediately whenever this event occurs, but it doesn&#39;t seem to help (the end result looks just as laggy). If I&#39;m totally on the wrong track with this concept, though, let me know...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Tue, 17 Jan 2017 06:13:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, instead of calling al_resize_display inside of the window callback, call it in main. Set a shared variable named resize to true inside the callback, and then monitor it in main. If it&#39;s set, call al_resize_display. A mutex would probably be good and you need to store the values of the new dimensions. Allegro provides them for you with the <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_MUTEX"><span class="a">ALLEGRO_MUTEX</span></a></span> class. If <span class="source-code"><a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a></span> triggers a WM_SIZING message, you&#39;ll probably get stuck inside an infinite loop. You may need to check if the display has already been resized to the proper size. If so, don&#39;t call al_resize_display.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 17 Jan 2017 06:41:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Based on the recommendations, here is the new 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_primitives.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;allegro5/allegro_windows.h&gt;</span>
<span class="number">  5</span><span class="p">#include &lt;algorithm&gt;</span>
<span class="number">  6</span><span class="p">#include &lt;Windows.h&gt;</span>
<span class="number">  7</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">static</span> <a href="http://www.allegro.cc/manual/ALLEGRO_MUTEX"><span class="a">ALLEGRO_MUTEX</span></a><span class="k3">*</span> mutex<span class="k2">;</span>
<span class="number"> 10</span><span class="k1">static</span> <span class="k1">bool</span> resize<span class="k2">;</span>
<span class="number"> 11</span><span class="k1">static</span> <span class="k1">int</span> neww, newh<span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">bool</span> WinProcCallback<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> d, UINT msg, WPARAM wparam, LPARAM lparam, LRESULT<span class="k3">*</span> result, <span class="k1">void</span><span class="k3">*</span> userdata<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="k1">if</span> <span class="k2">(</span>msg <span class="k3">=</span><span class="k3">=</span> WM_SIZING<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="k1">int</span> oldh <span class="k3">=</span> neww<span class="k2">;</span>
<span class="number"> 18</span>    <span class="k1">int</span> oldw <span class="k3">=</span> newh<span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>    RECT r <span class="k3">=</span> <span class="k3">*</span><span class="k2">(</span>RECT<span class="k3">*</span><span class="k2">)</span>lparam<span class="k2">;</span>
<span class="number"> 21</span>    <span class="k1">int</span> rw <span class="k3">=</span> <span class="k2">(</span>r.right <span class="k3">-</span> r.left<span class="k2">)</span> <span class="k3">-</span> <span class="n">21</span><span class="k2">;</span>
<span class="number"> 22</span>    <span class="k1">int</span> rh <span class="k3">=</span> <span class="k2">(</span>r.bottom <span class="k3">-</span> r.top<span class="k2">)</span> <span class="k3">-</span> <span class="n">42</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>    <span class="c">//al_lock_mutex(mutex);</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    <span class="k1">if</span> <span class="k2">(</span>oldh <span class="k3">!</span><span class="k3">=</span> rh <span class="k3">|</span><span class="k3">|</span> oldw <span class="k3">!</span><span class="k3">=</span> rw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>
<span class="number"> 28</span>      neww <span class="k3">=</span> rw<span class="k2">;</span>
<span class="number"> 29</span>      newh <span class="k3">=</span> rh<span class="k2">;</span>
<span class="number"> 30</span>      resize <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>    <span class="k2">}</span>
<span class="number"> 33</span>    <span class="c">//al_unlock_mutex(mutex);</span>
<span class="number"> 34</span>
<span class="number"> 35</span>    <span class="c">// Return true, so Allegro knows it doesn't need to do anything for this event.</span>
<span class="number"> 36</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span>  <span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</span>  <span class="c">// Return false, so Allegro will handle the event on its own.</span>
<span class="number"> 41</span>  <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 42</span>
<span class="number"> 43</span><span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 46</span>
<span class="number"> 47</span>  <span class="c">// Initialize Allegro and required add-ons.</span>
<span class="number"> 48</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"> 49</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>
<span class="number"> 51</span>  <span class="c">// Set display flags and create the display.</span>
<span class="number"> 52</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</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"> 54</span>
<span class="number"> 55</span>  <span class="c">// Create mutex.</span>
<span class="number"> 56</span>  mutex <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_mutex"><span class="a">al_create_mutex</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>
<span class="number"> 58</span>  <span class="c">// Add callback function.</span>
<span class="number"> 59</span>  al_win_add_window_callback<span class="k2">(</span>display, WinProcCallback, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>
<span class="number"> 61</span>  <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 62</span>
<span class="number"> 63</span>    <span class="c">//al_lock_mutex(mutex);</span>
<span class="number"> 64</span>    <span class="k1">if</span> <span class="k2">(</span>resize<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 65</span>      <a href="http://www.allegro.cc/manual/al_resize_display"><span class="a">al_resize_display</span></a><span class="k2">(</span>display, neww, newh<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>      <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>      resize <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 68</span>    <span class="k2">}</span>
<span class="number"> 69</span>    <span class="c">//al_unlock_mutex(mutex);</span>
<span class="number"> 70</span>
<span class="number"> 71</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">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 72</span>
<span class="number"> 73</span>    <span class="k1">float</span> w <span class="k3">=</span> <span class="k2">(</span>std::min<span class="k2">)</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 74</span>    <span class="k1">float</span> x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span> <span class="k3">-</span> w <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 75</span>    <span class="k1">float</span> y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span> <span class="k3">-</span> w <span class="k3">/</span> <span class="n">2</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 76</span>    <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x, y, x <span class="k3">+</span> w, y <span class="k3">+</span> w, <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">192</span>, <span class="n">192</span>, <span class="n">192</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 77</span>
<span class="number"> 78</span>    <a href="http://www.allegro.cc/manual/al_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"> 79</span>
<span class="number"> 80</span>  <span class="k2">}</span>
<span class="number"> 81</span>
<span class="number"> 82</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 83</span>
<span class="number"> 84</span><span class="k2">}</span>
</div></div><p>

I&#39;ve commented-out the mutex stuff for now because it would randomly cause the display to lock up (I&#39;m not sure why, sorry, this is my first doing this sort of thing; I&#39;m going to keep trying to figure it out on my own).</p><p><s>With the mutex or not, though, it almost looks worse now. That is, it&#39;s much more jittery. When I resize it, it will jump to a size larger than I&#39;ve dragged, jitter between that and size it should be as I move the mouse, and then snaps to where it should be when I release the mouse...</s></p><p><b>Update #1:</b> The problem was I wasn&#39;t accounting for the window borders; I wasn&#39;t aware that that counted for the sizing values. Unfortunately, the outcome seems identical to how it was before; the contents of the display still lag behind a little bit showing white lines at the edges.</p><p>Maybe I&#39;m not calling al_resize_display and al_acknowledge_resize in the right spot? Other than that I have no idea. Somehow I need to be able to redraw everything at the new size <i>before</i> the window itself is resized (e.g., resizing the buffer, drawing, then resizing the display) to avoid seeing what I assume is junk data at the edges before it&#39;s overwritten. I wonder if I can accomplish this by drawing to a different bitmap first instead of drawing directly to the backbuffer, but this is starting to get really hacky.</p><p>Is it unreasonable to not want to see junk data when resizing the window? Is there something else people normally do when working with resizable windows (aside from simply <i>not</i> doing that)?</p><p>I&#39;m starting to think I might have to switch to another library to accomplish this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Wed, 18 Jan 2017 01:56:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t call al_acknowledge_resize without a corresponding ALLEGRO_EVENT_DISPLAY_RESIZE. </p><p>I&#39;ll try to experiment with this later this week. Maybe this weekend. Did you try setting the background brush? If it matches your background, you probably won&#39;t even be able to notice it&#39;s resizing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 18 Jan 2017 09:05:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/616674/1027848#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Don&#39;t call al_acknowledge_resize without a corresponding ALLEGRO_EVENT_DISPLAY_RESIZE.</p><p>I&#39;ll try to experiment with this later this week. Maybe this weekend. Did you try setting the background brush? If it matches your background, you probably won&#39;t even be able to notice it&#39;s resizing.</p></div></div><p>

Noted, I&#39;ll rewrite the test code to use an event queue.</p><p>I&#39;ve tried setting the background brush, and you&#39;re absolutely right, it helps! The edges don&#39;t look ugly anymore. Doing this is a solution to the example problem of blacking out the display, but it doesn&#39;t work if I want to continue drawing while the resize is taking place (it&#39;s just a black box until I stop moving the mouse).</p><p>Maybe this is my fault; as usual I&#39;ll update this post once/if I figure out how to solve it...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (xsquid)</author>
		<pubDate>Fri, 20 Jan 2017 03:44:17 +0000</pubDate>
	</item>
</rss>
