<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Strange frame skipping</title>
		<link>http://www.allegro.cc/forums/view/617575</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 10 Oct 2018 01:49:30 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey guys,</p><p>please take a look at the following demonstration code and tell me if you get the same result as I do (tested on Win10):</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="number">  3</span><span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span><span class="k1">bool</span> draw<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">bool</span> quit<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</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">  8</span><span class="k2">{</span>
<span class="number">  9</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"> 10</span>   <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</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"> 13</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a> mouse<span class="k2">;</span>
<span class="number"> 14</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"> 15</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><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"> 16</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">0</span>.<span class="n">01</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</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"> 18</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"> 19</span>
<span class="number"> 20</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span>
<span class="number"> 21</span>   <span class="k2">{</span>
<span class="number"> 22</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>      <span class="k1">if</span> <span class="k2">(</span>event.timer.source<span class="k3">=</span><span class="k3">=</span>timer<span class="k2">)</span>
<span class="number"> 25</span>      <span class="k2">{</span>
<span class="number"> 26</span>         draw<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 27</span>         <span class="k1">if</span> <span class="k2">(</span>delay&gt;0<span class="k2">)</span> delay--<span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>         <a href="http://www.allegro.cc/manual/al_get_mouse_state"><span class="a">al_get_mouse_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouse<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>         <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_mouse_button_down"><span class="a">al_mouse_button_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouse,<span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 31</span>         <span class="k2">{</span>
<span class="number"> 32</span>            draw<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 33</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k3">=</span><span class="n">10</span><span class="k2">;</span>
<span class="number"> 34</span>         <span class="k2">}</span>
<span class="number"> 35</span>         <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_mouse_button_down"><span class="a">al_mouse_button_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouse,<span class="n">2</span><span class="k2">)</span><span class="k2">)</span> quit<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 36</span>      <span class="k2">}</span>
<span class="number"> 37</span>
<span class="number"> 38</span>      <span class="k1">if</span> <span class="k2">(</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="number"> 39</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>         <span class="k1">if</span> <span class="k2">(</span>draw<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">128</span>,<span class="n">0</span><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_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="k2">}</span>
<span class="number"> 45</span>
<span class="number"> 46</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"> 47</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"> 48</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"> 49</span>
<span class="number"> 50</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 51</span><span class="k2">}</span>
</div></div><p>

So what this code should do is to show a green blinking screen if you hold down the left mouse button. When I hold down the left mouse button for some seconds, release it and start all over I get:<br />hold down mouse button - blinking screen<br />hold down mouse button - blinking screen<br />hold down mouse button - no blinking screen<br />hold down mouse button - no blinking screen<br />hold down mouse button - blinking screen<br />hold down mouse button - blinking screen</p><p>Any idea what&#39;s going on here?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Sun, 07 Oct 2018 13:34:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should always redraw on the timer event, and then set redraw to false.</p><p>Easier logic would 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">while</span> <span class="k2">(</span>have_events<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <span class="k1">if</span> <span class="k2">(</span>timer_event<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>      <span class="k1">if</span> <span class="k2">(</span>blink<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  4</span>         green <span class="k3">=</span> <span class="k3">!</span>green<span class="k2">;</span>
<span class="number">  5</span>      <span class="k2">}</span>
<span class="number">  6</span>      redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  7</span>   <span class="k2">}</span>
<span class="number">  8</span>   <span class="k1">if</span> <span class="k2">(</span>mouse_event<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>      blink <span class="k3">=</span> mouse_button_down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>   <span class="k2">}</span>
<span class="number"> 11</span><span class="k2">}</span>
<span class="number"> 12</span><span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>   draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>   redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 07 Oct 2018 13:53:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK, your approach would avoid this effect.</p><p>However, as I understand it (maybe I&#39;m missing something <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> ), using this approach drawing a frame will never be skipped once the timer event occured. But if you run this loop on a slow computer that can&#39;t handle all draw calls you want to have frames skipped until the logic catches up. E.g. an explosion that last only one frame happens but cannot be drawn instantly then the explosion shouldn&#39;t be drawn 10 frames later.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Sun, 07 Oct 2018 15:24:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The approach you used is bad because if you have multiple timer events in the queue, they can skip the draw = 1 call and you don&#39;t turn green. If you get a timer event (a draw timer) then redraw. Process all the remaining events first and limit your logical update call to once per graphic frame. That will slow down gracefully if you get too many timer events, and won&#39;t skip any frames. Or process all your logic at once, thus possibly skipping frames and then redraw.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 08 Oct 2018 00:01:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could also make it without polling the mouse. With events only.</p><p>I have edited your code to add extra color to the flashing effect. Added another timer to the mix.<br />And this will also skip frames when your computer is slow:</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;stdbool.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include "allegro5/allegro.h"</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="k1">enum</span>
<span class="number">   7</span>  <span class="k2">{</span>
<span class="number">   8</span>  MY_DELAY <span class="k3">=</span> <span class="n">10</span>
<span class="number">   9</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="k1">int</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="k1">bool</span> draw  <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  14</span><span class="k1">bool</span> quit  <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  15</span><span class="k1">bool</span> b1    <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</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">  20</span>  <span class="k2">{</span>
<span class="number">  21</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">  22</span>  <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>
<span class="number">  24</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">  25</span>
<span class="number">  26</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">  27</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><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">  28</span>
<span class="number">  29</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> draw_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">  30</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> other_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">3</span>.<span class="n">0</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_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>draw_timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</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>other_timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</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_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>
<span class="number">  37</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span> draw_timer <span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span> other_timer <span class="k2">)</span><span class="k2">;</span>
<span class="number">  39</span>
<span class="number">  40</span>  <span class="k1">while</span><span class="k2">(</span> <span class="k3">!</span>quit <span class="k2">)</span>
<span class="number">  41</span>    <span class="k2">{</span>
<span class="number">  42</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span>    <span class="k1">switch</span><span class="k2">(</span> event.type <span class="k2">)</span>
<span class="number">  45</span>      <span class="k2">{</span>
<span class="number">  46</span>      <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN:
<span class="number">  47</span>        <span class="k1">if</span><span class="k2">(</span> event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k2">)</span>
<span class="number">  48</span>          <span class="k2">{</span>
<span class="number">  49</span>          b1    <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  50</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a> <span class="k3">=</span> MY_DELAY<span class="k2">;</span>
<span class="number">  51</span>          color <span class="k3">=</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">128</span>, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>          <span class="k2">}</span>
<span class="number">  53</span>
<span class="number">  54</span>        <span class="k1">if</span><span class="k2">(</span> event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span> <span class="k2">)</span>
<span class="number">  55</span>          quit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  56</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  57</span>
<span class="number">  58</span>      <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP:
<span class="number">  59</span>        <span class="k1">if</span><span class="k2">(</span> event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k2">)</span>
<span class="number">  60</span>          b1 <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  61</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  62</span>
<span class="number">  63</span>      <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number">  64</span>        <span class="c">// Some other timer to do someting:</span>
<span class="number">  65</span>        <span class="k1">if</span><span class="k2">(</span> event.timer.source <span class="k3">=</span><span class="k3">=</span> other_timer <span class="k2">)</span>
<span class="number">  66</span>          <span class="k2">{</span>
<span class="number">  67</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span> <span class="s">"Other timer ticked! Count = %ld\n"</span>, event.timer.count <span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>          <span class="k2">}</span>
<span class="number">  69</span>
<span class="number">  70</span>        <span class="c">// Handle draw timer:</span>
<span class="number">  71</span>        <span class="k1">if</span><span class="k2">(</span> event.timer.source <span class="k3">=</span><span class="k3">=</span> draw_timer <span class="k2">)</span>
<span class="number">  72</span>          <span class="k2">{</span>
<span class="number">  73</span>          draw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span>          <span class="c">// Handle delay:</span>
<span class="number">  76</span>          <span class="k1">if</span><span class="k2">(</span> b1 <span class="k2">)</span>
<span class="number">  77</span>            <span class="k2">{</span>
<span class="number">  78</span>            <span class="k1">if</span><span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a> <span class="k3">&gt;</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number">  79</span>              delay--<span class="k2">;</span>
<span class="number">  80</span>            <span class="k1">else</span>
<span class="number">  81</span>              <span class="k2">{</span>
<span class="number">  82</span>              <span class="k1">unsigned</span> <span class="k1">char</span> r, g, b<span class="k2">;</span>
<span class="number">  83</span>
<span class="number">  84</span>              <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a> <span class="k3">=</span> MY_DELAY<span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>              <a href="http://www.allegro.cc/manual/al_unmap_rgb"><span class="a">al_unmap_rgb</span></a><span class="k2">(</span> color, <span class="k3">&amp;</span>r, <span class="k3">&amp;</span>g, <span class="k3">&amp;</span>b <span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>
<span class="number">  88</span>              <span class="k1">if</span><span class="k2">(</span> g <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number">  89</span>                color <span class="k3">=</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">128</span>, <span class="n">0</span>, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>              <span class="k1">else</span>
<span class="number">  91</span>                color <span class="k3">=</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">128</span>, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>              <span class="k2">}</span>
<span class="number">  93</span>            <span class="k2">}</span>
<span class="number">  94</span>          <span class="k2">}</span>
<span class="number">  95</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  96</span>
<span class="number">  97</span>      default:
<span class="number">  98</span>        <span class="c">/*</span>
<span class="number">  99</span><span class="c">        // Unhandled events:</span>
<span class="number"> 100</span><span class="c">        printf( "Unhandled event type %d!\n" );</span>
<span class="number"> 101</span><span class="c">        */</span>
<span class="number"> 102</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 103</span>      <span class="k2">}</span>
<span class="number"> 104</span>
<span class="number"> 105</span>    <span class="c">// Draw stuff if we can:</span>
<span class="number"> 106</span>    <span class="k1">if</span><span class="k2">(</span> draw <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> queue <span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 107</span>      <span class="k2">{</span>
<span class="number"> 108</span>      draw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 109</span>
<span class="number"> 110</span>      <span class="k1">if</span><span class="k2">(</span> b1 <span class="k2">)</span>
<span class="number"> 111</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> color <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>      <span class="k1">else</span>
<span class="number"> 113</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"> 114</span>
<span class="number"> 115</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"> 116</span>      <span class="k2">}</span>
<span class="number"> 117</span>   <span class="k2">}</span>
<span class="number"> 118</span>
<span class="number"> 119</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"> 120</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"> 121</span>   <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>draw_timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>   <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span> other_timer <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>
<span class="number"> 124</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 125</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Izual)</author>
		<pubDate>Mon, 08 Oct 2018 00:48:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edgar, I see pros and cons for both approaches. I&#39;m migrating from Allegro 4 where I am used to have frames skipped <a href="https://liballeg.org/stabledocs/en/faq.html#How_can_I_make_my_game_run_at_the_same_speed_on_any_computer_">How_can_I_make_my_game_run_at_the_same_speed_on_any_computer_</a> and when using Allegro 4 this maked sense for me. I&#39;m going to rethink that now working with Allegro 5...</p><p>By the way, I still don&#39;t understand why in my approach the flashing is not visible sometimes event when some frames are skipped. If you modify the example and add one line to indicate frame skipping like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</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>
   <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="k1">if</span> <span class="k2">(</span>draw<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">128</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</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="k2">}</span>
<span class="k1">else</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Frame skipped\n"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
you&#39;ll see that frames are skipped rarely, but the flashing occurs 10 times per second so at a much higher frequency than frames are skipped so that&#39;s the strange thing for me.</p><p>Izul, your approach looks quite similar to what Edgar suggested...</p><p>[EDIT]<br />To make it more clear that something strange is happening, try this 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="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span><span class="k1">bool</span> draw<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">bool</span> quit<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</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">  8</span><span class="k2">{</span>
<span class="number">  9</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"> 10</span>   <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</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"> 12</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a> mouse<span class="k2">;</span>
<span class="number"> 13</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"> 14</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><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"> 15</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">0</span>.<span class="n">01</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</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"> 17</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"> 18</span>
<span class="number"> 19</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span>
<span class="number"> 20</span>   <span class="k2">{</span>
<span class="number"> 21</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>      <span class="k1">if</span> <span class="k2">(</span>event.timer.source<span class="k3">=</span><span class="k3">=</span>timer<span class="k2">)</span>
<span class="number"> 24</span>      <span class="k2">{</span>
<span class="number"> 25</span>         draw<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 26</span>         <span class="k1">if</span> <span class="k2">(</span>delay&gt;0<span class="k2">)</span> delay--<span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>         <a href="http://www.allegro.cc/manual/al_get_mouse_state"><span class="a">al_get_mouse_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouse<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>         <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_mouse_button_down"><span class="a">al_mouse_button_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouse,<span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 30</span>         <span class="k2">{</span>
<span class="number"> 31</span>            draw<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 32</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k3">=</span><span class="n">10</span><span class="k2">;</span>
<span class="number"> 33</span>         <span class="k2">}</span>
<span class="number"> 34</span>
<span class="number"> 35</span>         <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_mouse_button_down"><span class="a">al_mouse_button_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>mouse,<span class="n">2</span><span class="k2">)</span><span class="k2">)</span> quit<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 36</span>      <span class="k2">}</span>
<span class="number"> 37</span>
<span class="number"> 38</span>      <span class="k1">if</span> <span class="k2">(</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="number"> 39</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>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>         <span class="k1">if</span> <span class="k2">(</span>draw<span class="k2">)</span>
<span class="number"> 43</span>         <span class="k2">{</span>
<span class="number"> 44</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">128</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>            <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"D"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>         <span class="k2">}</span>
<span class="number"> 47</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"> 48</span>      <span class="k2">}</span>
<span class="number"> 49</span>      <span class="k1">else</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"FRAME SKIPPED\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>   <span class="k2">}</span>
<span class="number"> 51</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_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"> 54</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"> 55</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 56</span><span class="k2">}</span>
</div></div><p>
What I see is that &quot;D&quot; is printed to the console without blinking screen <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Tue, 09 Oct 2018 11:01:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You have two options - run one graphical frame per logical frame, slowing down gracefully, or run one graphical frame for all logic ticks, skipping frames.</p><p>If there is more than one timer event when delay reaches zero, draw will be set to 1 in the first event, and then set to 0 in the second event, as if it never happened. You&#39;re skipping frames when you don&#39;t need to.</p><p>I ran your latest example. I think it&#39;s probably just a case of unsynced output. I get &#39;D.......D.......D.......&#39; too, and the green flash isn&#39;t visible sometimes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 09 Oct 2018 22:47:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK guys, I think I figured it out by playing around with the ALLEGRO_VSYNC option: Everything is actually drawn, however, sometimes it is not visible on the screen because Vsync is disabled by default. Therefore it may or may not happen that the green screen that should be shown for one frame only is &quot;skipped&quot; by the monitor refreshing.</p><p>In any case, thanks for your input <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><p>[EDIT]</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617575/1039492#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>I think it&#39;s probably just a case of unsynced output</p></div></div><p>OK somebody was faster than me...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Frank Drebin)</author>
		<pubDate>Tue, 09 Oct 2018 23:04:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Aliasing:</p><p><span class="remote-thumbnail"><span class="json">{"name":"alias.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/5\/d54a0a82e57d58d59ccbe5a77e9e25a5.png","w":477,"h":248,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/5\/d54a0a82e57d58d59ccbe5a77e9e25a5"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/d/5/d54a0a82e57d58d59ccbe5a77e9e25a5-240.jpg" alt="alias.png" width="240" height="124" /></span></p><p>Notice how if you look at the red dots, it appears to be a lower frequency.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 10 Oct 2018 01:49:30 +0000</pubDate>
	</item>
</rss>
