<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Seriously severe input delay on AL5.0.10</title>
		<link>http://www.allegro.cc/forums/view/613809</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 03 Feb 2014 08:59:01 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I made this sample program that demonstrates that Allegro has some serious input delay, I tested it on Windows (no other OS nearby now, sorry <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />  )</p><p>You can play &quot;normally&quot; and you will notice that the controls are not tight as they should (for a action game at least), but you can REALLY see the effect if you just press arrow keys in random directions as fast as you can (like if you was making a fighting game input), and then just watch the screen, the longer you made your &quot;combo&quot;, the longer the ship will move on its own.</p><p>EDIT: Fixed a bug in the example code that Elias noticed.</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="c">//libraries</span>
<span class="number">   2</span><span class="p">#include &lt;stdio.h&gt;</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_primitives.h&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="c">//project headers</span>
<span class="number">   7</span><span class="p">#include "gamelogic.h"</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="k1">const</span> <span class="k1">int</span> PLAYFIELD_W <span class="k3">=</span> <span class="n">1280</span><span class="k2">;</span>
<span class="number">  10</span><span class="k1">const</span> <span class="k1">int</span> PLAYFIELD_H <span class="k3">=</span> <span class="n">720</span><span class="k2">;</span>
<span class="number">  11</span><span class="p">#define UPDATE_TIME 1.0/125 //1 second divided by 125 frames per second, this is to guarantee a round milisecond speed</span>
<span class="number">  12</span>
<span class="number">  13</span><a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> keyboardState<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="number">  16</span><span class="k2">{</span>
<span class="number">  17</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_MONITOR_INFO"><span class="a">ALLEGRO_MONITOR_INFO</span></a> monitorInformation<span class="k2">;</span>
<span class="number">  18</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  19</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>events<span class="k2">;</span>
<span class="number">  20</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>updateTimer<span class="k2">;</span>
<span class="number">  21</span>  <span class="k1">int</span> screenWidth<span class="k2">;</span>
<span class="number">  22</span>  <span class="k1">int</span> screenHeight<span class="k2">;</span>
<span class="number">  23</span>  <span class="k1">int</span> counter<span class="k2">;</span>
<span class="number">  24</span>
<span class="number">  25</span>  <span class="c">////////////////////////////</span>
<span class="number">  26</span>  <span class="c">//Setup phase starts here //</span>
<span class="number">  27</span>  <span class="c">////////////////////////////</span>
<span class="number">  28</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> 
<span class="number">  29</span>  <span class="k2">{</span>
<span class="number">  30</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failure loading Allegro\n"</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//should not happen, but who knows...</span>
<span class="number">  31</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  32</span>  <span class="k2">}</span>
<span class="number">  33</span>
<span class="number">  34</span>  <span class="c">//now we create our display</span>
<span class="number">  35</span>  counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  36</span>  <span class="k1">while</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_monitor_info"><span class="a">al_get_monitor_info</span></a><span class="k2">(</span>counter, <span class="k3">&amp;</span>monitorInformation<span class="k2">)</span><span class="k2">)</span> <span class="c">//this function returns false when it fails</span>
<span class="number">  37</span>  <span class="k2">{</span>
<span class="number">  38</span>    <span class="k1">if</span><span class="k2">(</span>monitorInformation.x1 <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> monitorInformation.x2 <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k1">break</span><span class="k2">;</span> <span class="c">//we found what we wanted</span>
<span class="number">  39</span>    <span class="k3">+</span><span class="k3">+</span>counter<span class="k2">;</span>
<span class="number">  40</span>  <span class="k2">}</span>
<span class="number">  41</span>
<span class="number">  42</span>  screenWidth <span class="k3">=</span> monitorInformation.x2 <span class="k3">-</span> monitorInformation.x1<span class="k2">;</span>
<span class="number">  43</span>  screenHeight <span class="k3">=</span> monitorInformation.y2 <span class="k3">-</span> monitorInformation.y1<span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_FULLSCREEN<span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_VSYNC, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</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>screenWidth, screenHeight<span class="k2">)</span><span class="k2">;</span>
<span class="number">  48</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  49</span>  <span class="k2">{</span>
<span class="number">  50</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failure setting up the display\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>    <span class="k1">return</span> <span class="n">2</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><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  55</span>  <span class="k2">{</span>
<span class="number">  56</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failure installing keyboard\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</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">  58</span>    <span class="k1">return</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  59</span>  <span class="k2">}</span>
<span class="number">  60</span>
<span class="number">  61</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  62</span>  <span class="k2">{</span>
<span class="number">  63</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failure loading primitives addon\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</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">  65</span>    <span class="k1">return</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  66</span>  <span class="k2">}</span>
<span class="number">  67</span>
<span class="number">  68</span>  updateTimer <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>UPDATE_TIME<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>
<span class="number">  70</span>  events <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">  71</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>events<span class="k2">)</span>
<span class="number">  72</span>  <span class="k2">{</span>
<span class="number">  73</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Somehow there was a failure creating a event queue, this really should not have happened\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</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">  75</span>    <span class="k1">return</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  76</span>  <span class="k2">}</span>
<span class="number">  77</span>
<span class="number">  78</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>events, <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">  79</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>events, <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>updateTimer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>
<span class="number">  81</span>  <span class="c">///////////////////////////</span>
<span class="number">  82</span>  <span class="c">//Setup phase ended here //</span>
<span class="number">  83</span>  <span class="c">///////////////////////////</span>
<span class="number">  84</span>
<span class="number">  85</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>updateTimer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>
<span class="number">  87</span>  <span class="k1">double</span> playerX <span class="k3">=</span> <span class="n">20</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  88</span>  <span class="k1">double</span> playerY <span class="k3">=</span> <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>PLAYFIELD_H<span class="k3">/</span><span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  91</span>
<span class="number">  92</span>  <span class="k1">while</span><span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>
<span class="number">  93</span>  <span class="k2">{</span>
<span class="number">  94</span>    <span class="k1">static</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">  95</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>events, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>
<span class="number">  97</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="number">  98</span>    <span class="k2">{</span>
<span class="number">  99</span>      <span class="c">//updateGame();</span>
<span class="number"> 100</span>      <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>keyboardState<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>      <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>keyboardState, ALLEGRO_KEY_DOWN<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 102</span>      <span class="k2">{</span>
<span class="number"> 103</span>        playerY<span class="k3">+</span><span class="k3">=</span><span class="n">10</span><span class="k2">;</span>
<span class="number"> 104</span>      <span class="k2">}</span>
<span class="number"> 105</span>      <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>keyboardState, ALLEGRO_KEY_UP<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 106</span>      <span class="k2">{</span>
<span class="number"> 107</span>        playerY<span class="k3">+</span><span class="k3">=</span><span class="k3">-</span><span class="n">10</span><span class="k2">;</span>
<span class="number"> 108</span>      <span class="k2">}</span>
<span class="number"> 109</span>      <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>keyboardState, ALLEGRO_KEY_LEFT<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 110</span>      <span class="k2">{</span>
<span class="number"> 111</span>        playerX<span class="k3">+</span><span class="k3">=</span><span class="k3">-</span><span class="n">10</span><span class="k2">;</span>
<span class="number"> 112</span>      <span class="k2">}</span>
<span class="number"> 113</span>      <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>keyboardState, ALLEGRO_KEY_RIGHT<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 114</span>      <span class="k2">{</span>
<span class="number"> 115</span>        playerX<span class="k3">+</span><span class="k3">=</span><span class="n">10</span><span class="k2">;</span>
<span class="number"> 116</span>      <span class="k2">}</span>
<span class="number"> 117</span>      redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 118</span>    <span class="k2">}</span>
<span class="number"> 119</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_CLOSE<span class="k2">)</span>
<span class="number"> 120</span>    <span class="k2">{</span>
<span class="number"> 121</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 122</span>    <span class="k2">}</span>
<span class="number"> 123</span>
<span class="number"> 124</span>    <span class="k1">if</span><span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>events<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 125</span>    <span class="k2">{</span>
<span class="number"> 126</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 127</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"> 128</span>      <a href="http://www.allegro.cc/manual/al_draw_filled_triangle"><span class="a">al_draw_filled_triangle</span></a><span class="k2">(</span>playerX-10, playerY-10, playerX<span class="k3">+</span><span class="n">10</span>, playerY, playerX-10, playerY<span class="k3">+</span><span class="n">10</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</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"> 130</span>    <span class="k2">}</span>
<span class="number"> 131</span>  <span class="k2">}</span>
<span class="number"> 132</span>
<span class="number"> 133</span>
<span class="number"> 134</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"hello world!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>
<span class="number"> 136</span>  
<span class="number"> 137</span>  <span class="c">///////////////////////////////</span>
<span class="number"> 138</span>  <span class="c">// Cleanup phase starts here //</span>
<span class="number"> 139</span>  <span class="c">///////////////////////////////</span>
<span class="number"> 140</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>updateTimer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</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>events<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</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"> 143</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 144</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Maurício Gomes)</author>
		<pubDate>Wed, 22 Jan 2014 04:14:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should put brackets around the value of UPDATE_TIME, just in case it ever trips you up.</p><p>As for the delay problem, what happens if you attach the keyboard event source to that event queue? (Obviously your existing code would ignore the new events you get, but I wonder if it will cause some voodoo changes inside Allegro.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bruce Perry)</author>
		<pubDate>Wed, 22 Jan 2014 05:42:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I THINK that with your code you&#39;re only checking for input change every time your timer fires up an event, so you&#39;re processing only the last event in the Keyboard state when this happens and not the Keyboard events themselves.</p><p>So basically, what Bruce said....changing your code accordingly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Wed, 22 Jan 2014 12:59:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>pkrcel that was my intention all along.</p><p>But what I got to see instead is a accumulation of keyboard input, that keeps acting on the game even after you let them go.</p><p>Source delving by me and others suggest that is because of misuse of WinAPI, for example every time a key is pressed it calls GetKeyboardState, plus GetKeyState three times. And in WinAPI itself it alread warns that those functions have delays.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Maurício Gomes)</author>
		<pubDate>Thu, 23 Jan 2014 03:44:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have reproduced this delay on my system, and it stems from some odd design choices in the D3D backend as well as keyboard handling. I have created a proof-of-concept set of changes to both to try to eliminate this lag as much as possible. It requires a lot more testing before I feel comfortable committing it to Allegro proper.</p><p>That said, attached is a version of the program in the OP with the changed Allegro alongside it, as well as the patch to Allegro (relative to 5.1) just so you can see what I did. I&#39;m not sure it can get much better than that, but even going as far as I did has basically eliminated the lag for me. See if it does so on your system as well.</p><p>EDIT:</p><p>I should note, when you run speeder.exe you can pass in any argument to cause it to launch in fullscreen, if you want. Also, the allegro5.cfg alongside it can be used to force it into OpenGL mode.</p><p>EDIT2:</p><p>The diff wasn&#39;t quite right. Fixed it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 23 Jan 2014 06:24:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>SiegeLord whatever you did, it worked here. I think I don&#39;t see any delay on this test exe
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Maurício Gomes)</author>
		<pubDate>Thu, 23 Jan 2014 06:47:34 +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/613809/995475#target">Maurício Gomes</a> said:</div><div class="quote"><p> pkrcel that was my intention all along.</p></div></div><p>Yeah, now that I took more time to look at it, I understand the underlying desing...I misunderstood your description of the problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Thu, 23 Jan 2014 13:10:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I like the patch, also the UNICODE part. I think this also will fix <a href="http://sourceforge.net/p/alleg/bugs/376/">http://sourceforge.net/p/alleg/bugs/376/</a> - for example al_set_window_title will work under Windows when the string contains non-ASCII letters.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 23 Jan 2014 19:32:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, so fixing the keyboard is turning out to be very difficult. The issue is that Allegro emits ALLEGRO_EVENT_CHAR for both printable characters and for other keys. The &quot;proper&quot; and fast way of handling input on Windows uses WM_CHAR to do the unicode characters... unfortunately Windows only sends WM_CHAR for printable characters, e.g. it won&#39;t send them for arrow keys and other such non-character keys. It is turning out to be very hard to not send superfluous ALLEGRO_EVENT_CHAR events. E.g. if you use the US-international keyboard you can press Shift+6 followed by an e to get an ê. Using WM_CHAR and my best attempt you will get an extra ALLEGRO_EVENT_CHAR when you do the Shift+6.</p><p>Anyway, the keyboard wasn&#39;t really the major component of this delay, rather it was the display loss checking code. Attached is the patch and binaries of the code that only fixes that (and enables unicode along the way). Please check it to see if it has appreciable input lag (maybe compare it with the binary in my earlier post).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 01 Feb 2014 10:05:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Does ALLEGRO_EVENT_CHAR work correctly for shift+6+e right now?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sat, 01 Feb 2014 15:17:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes. The only issue with the current approach is that it is supposedly laggy (I think I can perceive it, but it&#39;s hard to tell) and I also noted that it doesn&#39;t work with IME... i.e. if you try to enter Chinese characters using IME, the little IME window won&#39;t show up (I haven&#39;t determined what part of my work handles the IME window... if it&#39;s just TranslateMessage, then I could put it in without actually handling WM_CHAR&#39;s).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 02 Feb 2014 05:24:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Great work SiegeLord <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>The lag is not random anymore (random lag is TERRIBLE) and is now 1 frame.</p><p>Not zero yet... but good enough for most games and players I guess.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Maurício Gomes)</author>
		<pubDate>Mon, 03 Feb 2014 04:56:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Out of curiosity, how are you measuring the lag?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 03 Feb 2014 04:57:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just perceptually. I guess I could look at the original timestamp of the MSG structure and compare it to when we emit the Allegro event.</p><p>EDIT: I tried it with this code: <span class="source-code"><a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Lag %ld\n"</span>, GetTickCount<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> GetMessageTime<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span> at the spot where the keyboard events are emitted, and it showed a reduction from as much as 400 ms to 0 ms with an occasional 16 ms.</p><p>EDIT2: Committed the above patch.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 03 Feb 2014 08:59:01 +0000</pubDate>
	</item>
</rss>
