<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] al_flip_display() lag?</title>
		<link>http://www.allegro.cc/forums/view/610557</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 03 Jul 2012 06:02:34 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have a problem with lag.  I draw a title screen on an 800x600 screen, window or full screen can be selected via config file.</p><p>In Windowed mode, no problems at all.</p><p>When I switch to full screen (<span class="source-code">ALLEGRO_FULLSCREEN</span>) there is a small lag before the screen is displayed.</p><p>I basically have simple code which draws a bitmap (800x600 jpg) and some ttf text, then flips the display and plays a sound sample...
</p><div class="source-code snippet"><div class="inner"><pre><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>

al_play_sample...
</pre></div></div><p>

...the sound sample plays about 1/4 of the way through before the display is actually shown.</p><p>Like I said, this works perfectly in Windowed mode with no lag at all.</p><p>Is there something perhaps I could check to make sure the display is flipped first?  This concerns me though for other parts of the game later on, running in fullscreen mode, will there be a lag after flips, of just the first one.  I&#39;m not sure what the problem could be, it&#39;s a pretty basic setup.  I&#39;m not doing anything fancy or even loading a lot.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 03:09:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s probably because Allegro has to go through the trouble of destroying and creating a new OS window when going fullscreen (I think so anyways, the source code shows that).</p><p>Maybe ALLEGRO_FULLSCREEN_WINDOW would give better results. There might also maybe be a switched in or expose event or something that you receive when doing that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Mon, 02 Jul 2012 04:33:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sounds like it all happens via a config file, so I doubt he is destroying an existing display. The only thing that comes to mind is vsync, but I don&#39;t think you&#39;d get that behavior.</p><p>Of course, make sure that you create the bitmap after creating the display, but that would affect windowed mode as well. You may want to supply minimal code that illustrates the problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 02 Jul 2012 04:40:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, I run the program, initialize everything.  I am very careful about the order I do things in.  No bitmaps are set until long after the display is set up.  I set VSYNC &amp; FULLSCREEN from a config file (I got that from one of the examples on vsync I think it was).  Once the display is set early in the program it isn&#39;t changed again.  I tested it with vsync set at 0 (system driver), 1 (forced on) and 2 (forced off) and the problem is still there.  But only in Fullscreen mode.  I don&#39;t do anything fancy with other settings (like blenders and such) as I want to be sure the program is running smoothly with normal default settings first.</p><p>It&#39;s puzzling because I wouldn&#39;t think I would be able to hear my sound sample at all until the flip was done, but it plays halfway through before the screen appears.</p><p>I have 10gigs of system memory and an nVidia GT240 video card, so I am not lacking in memory.  CPU is quad core 3Ghz too.</p><p>Like I said, window mode and fullscreen window works.  I like fullscreen window, but then I would have to hack away at some code to make everything display properly when I should be able to simply call a normal fullscreen mode and let the users monitor handle how to do that.</p><p>If I have to I will, but it seems like odd behavior and would be nice to find out why it is doing that.</p><p>Below is my initialization function, I cut out most of it and just commented what is there, but all code I do have was tested and works fine, I always check return values no matter how remote the chance of failing as I like to be safe...</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">void</span> initialize<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_CONFIG"><span class="a">ALLEGRO_CONFIG</span></a> <span class="k3">*</span>config<span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</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">  6</span>   <span class="c">// init everything else here...</span>
<span class="number">  7</span>   
<span class="number">  8</span>   <span class="c">// load config file and set variables, same code as in ex_vsync...</span>
<span class="number">  9</span>   
<span class="number"> 10</span>   <span class="c">// initialize PHYSFS...</span>
<span class="number"> 11</span>   
<span class="number"> 12</span>   <span class="c">// display.vsync set to 2 in config file currently (this is taken from ex_vsync)</span>
<span class="number"> 13</span>   <span class="k1">if</span> <span class="k2">(</span>display.vsync<span class="k2">)</span>
<span class="number"> 14</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, display.vsync, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>   <span class="c">// Force fullscreen mode.</span>
<span class="number"> 17</span>   <span class="k1">if</span> <span class="k2">(</span>display.fullscreen<span class="k2">)</span> <span class="k2">{</span> <span class="c">// enabled in config</span>
<span class="number"> 18</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"> 19</span>      <span class="c">// Set a monitor frequency.</span>
<span class="number"> 20</span>      <span class="k1">if</span> <span class="k2">(</span>display.frequency<span class="k2">)</span>  <span class="c">// from ex_vsync, set to 0 in config</span>
<span class="number"> 21</span>         <a href="http://www.allegro.cc/manual/al_set_new_display_refresh_rate"><span class="a">al_set_new_display_refresh_rate</span></a><span class="k2">(</span>display.frequency<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   <span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span>   <span class="c">// WIDTH = 800, HEIGHT = 600</span>
<span class="number"> 25</span>   display.screen <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>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display.screen<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>      a5_error<span class="k2">(</span>AT, display.screen, <span class="s">"Create display failed."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>      shut_down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>   <span class="k2">}</span>
<span class="number"> 31</span>   display.w <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.screen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>   display.h <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.screen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>   <span class="c">// load and set icon + window title here</span>
<span class="number"> 35</span>   
<span class="number"> 36</span>   <span class="c">// load 4 TTF fonts here</span>
<span class="number"> 37</span>   
<span class="number"> 38</span>   <span class="c">// Create a timer for updating player movement</span>
<span class="number"> 39</span>   <span class="c">// created and enabled here (60), for testing</span>
<span class="number"> 40</span>
<span class="number"> 41</span>   <span class="c">// Create a timer for updating enemy movement</span>
<span class="number"> 42</span>   <span class="c">// created and enabled here (120), for testing</span>
<span class="number"> 43</span>   
<span class="number"> 44</span>   <span class="c">// Create a timer for updating the screen</span>
<span class="number"> 45</span>   <span class="c">// Note: I created the other timers in a similar fashion</span>
<span class="number"> 46</span>   <span class="c">// only with their own variables</span>
<span class="number"> 47</span>   display.redraw_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="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>   <span class="k1">if</span><span class="k2">(</span>display.redraw_timer <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span>      a5_error<span class="k2">(</span>AT, display.screen, <span class="s">"Failed to create redraw timer."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>      shut_down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</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="c">// Create event_queue here</span>
<span class="number"> 55</span>
<span class="number"> 56</span>   <span class="c">// register all event sources here</span>
<span class="number"> 57</span>   
<span class="number"> 58</span>   <span class="c">// 3 timers started here</span>
<span class="number"> 59</span>   
<span class="number"> 60</span>   <span class="c">// Load a small 50x50 enemy bitmap here (for testing)</span>
<span class="number"> 61</span>   
<span class="number"> 62</span>   <span class="c">// Load a small 50x50 player bitmap here (for testing)</span>
<span class="number"> 63</span>   
<span class="number"> 64</span>   <span class="c">// install audio here</span>
<span class="number"> 65</span>   
<span class="number"> 66</span>   <span class="c">// reserve samples here</span>
<span class="number"> 67</span><span class="k2">}</span>
</div></div><p>

My intro where the problem occurs.</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">void</span> intro<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   <span class="k1">int</span> dw <span class="k3">=</span> display.w <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">int</span> dh <span class="k3">=</span> display.h <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE"><span class="a">ALLEGRO_SAMPLE</span></a> <span class="k3">*</span>swamp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_sample"><span class="a">al_load_sample</span></a><span class="k2">(</span><span class="s">"snd/Swamp.wav"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>swamp<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>      a5_error<span class="k2">(</span>AT, display.screen, <span class="s">"Failed to load Swamp.wav"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>      shut_down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>   <span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>background <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"gfx/Latenight.jpg"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>background<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</span>      a5_error<span class="k2">(</span>AT, display.screen, <span class="s">"Failed to load Latenight.jpg"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>      shut_down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>   <span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span>   <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>background, display.offset, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>font_Amaze, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span>.<span class="n">5</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span>, dw, dh-200, ALLEGRO_ALIGN_CENTRE, <span class="s">"Intro Text"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>   <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>font_Bimini, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span>.<span class="n">5</span>,<span class="n">0</span>,<span class="n">1</span><span class="k2">)</span>, dw, dh<span class="k3">+</span><span class="n">50</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"Goes Here"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</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"> 26</span>
<span class="number"> 27</span>   <a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span>swamp, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, ALLEGRO_PLAYMODE_ONCE, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>   wait_for_keypress<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>

The end of the code above is where you get the delay before the screen appears, the sound plays for about 2 or <br />3 seconds before the screen appears, but only in ALLEGRO_FULLSCREEN mode.</p><p>And my main function...</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span>
   <span class="c">// set variables etc for use later here, non of  these effect the intro...</span>

   initialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

   intro<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

No need to show more, this is where it branches off to do the intro mentioned above.</p><p>Edit: not that it matters, but all graphic, font and sound files are loaded from a ZIP file and shut_down() you see simply destroys anything that needs destroying before the game exits.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 05:58:19 +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/610557/959299#target">Neil Roy</a> said:</div><div class="quote"><p>  I like fullscreen window, but then I would have to hack away at some code to make everything display properly when I should be able to simply call a normal fullscreen mode and let the users monitor handle how to do that.
</p></div></div><p>It&#39;s possible that you&#39;d only have to set a transformation on the display to automatically scale up when using a fullscreen window.</p><p>Anyway, does the same behavior exist if you use the OpenGL driver instead of the default D3D one?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 02 Jul 2012 07:53:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just tried it with <span class="source-code"><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="k3">|</span>ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span></span> and there was less of a lag.  It was almost right away, but not quite, still a small one, but much shorter lag.</p><p>I also tried it with lower resolution graphics (bitmaps are half the size) and lower quality sound (I changed the sound from a WAV to an OGG).  They&#39;re MUCH smaller files to load etc... but there&#39;s no difference in lag.</p><p>I have an allegro log file, wish I knew what I was looking at. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Edit: I attached the log file from the default Direct3D run.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 08:47:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What version of Allegro 5 are you using? I think the latest release has a bug in d3d where the reference driver gets used as a fallback, which is extremely slow. It is fixed in svn.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 02 Jul 2012 08:54:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>5.0.7</p><p>Edit: </p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/610557/959303#target">Matthew Leverton</a> said:</div><div class="quote"><p>It&#39;s possible that you&#39;d only have to set a transformation on the display to automatically scale up when using a fullscreen window.</p></div></div><p>

Also, I am not sure how to do this.  I may fiddle around with ALLEGRO_FULLSCREEN_WINDOW and see if I can work something out with it, or just stick to opengl for now, at least until the next stable release comes out.  I don&#39;t compile my own allegro anymore, all the dependencies seem to always give me problems.  No big deal I guess, I&#39;ll be working on this project for a while anyhow.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 08:55:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, I&#39;m pretty sure that has the bug. If it does, it could be the cause. I didn&#39;t see your log there at first. I can&#39;t tell from the log if that&#39;s the problem. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Mon, 02 Jul 2012 09:02:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I attached a log where I set the breakpoint in debug mode to immediately after <span class="source-code"><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>.  I actually had to logoff my machine, couldn&#39;t break out of the program or even for it to shut down, sheesh Microsoft need to fix Task Manager! <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 09:27:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s what I was talking about regarding the transformations:
</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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_image.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="k1">void</span> scale_screen<span class="k2">(</span><span class="k1">int</span> bw, <span class="k1">int</span> bh, <span class="k1">int</span> dw, <span class="k1">int</span> dh<span class="k2">)</span>
<span class="number">   7</span><span class="k2">{</span>
<span class="number">   8</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> t<span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span>  <span class="c">// Calculate the horizontal and vertial aspect ratios</span>
<span class="number">  11</span>  <span class="k1">const</span> <span class="k1">float</span> HAR <span class="k3">=</span> dw<span class="k3">/</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>bw<span class="k2">;</span>
<span class="number">  12</span>  <span class="k1">const</span> <span class="k1">float</span> VAR <span class="k3">=</span> dh<span class="k3">/</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>bh<span class="k2">;</span>  
<span class="number">  13</span>  
<span class="number">  14</span>  <span class="c">// The aspect ratio, x-offset and y-offset (in pixels)</span>
<span class="number">  15</span>  <span class="k1">float</span> ar, ox, oy<span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span>  
<span class="number">  18</span>  <span class="k1">if</span> <span class="k2">(</span>bw <span class="k3">=</span><span class="k3">=</span> dw <span class="k3">&amp;</span><span class="k3">&amp;</span> bh <span class="k3">=</span><span class="k3">=</span> dh<span class="k2">)</span>
<span class="number">  19</span>  <span class="k2">{</span>
<span class="number">  20</span>    <span class="c">// 1:1, just reset everything</span>
<span class="number">  21</span>    <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  23</span>    <a href="http://www.allegro.cc/manual/al_set_clipping_rectangle"><span class="a">al_set_clipping_rectangle</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, bw, bh<span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>  <span class="k2">}</span>
<span class="number">  25</span>  <span class="k1">else</span>
<span class="number">  26</span>  <span class="k2">{</span>
<span class="number">  27</span>    <span class="c">// Choose the smaller aspect ratio    </span>
<span class="number">  28</span>    <span class="k1">if</span> <span class="k2">(</span>HAR <span class="k3">&lt;</span> VAR<span class="k2">)</span>
<span class="number">  29</span>    <span class="k2">{</span>
<span class="number">  30</span>      <span class="c">// horizontal bars on the top and bottom</span>
<span class="number">  31</span>      ar <span class="k3">=</span> HAR<span class="k2">;</span>
<span class="number">  32</span>      ox <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  33</span>      oy <span class="k3">=</span> <span class="k2">(</span>dh <span class="k3">-</span> <span class="k2">(</span>ar <span class="k3">*</span> bh<span class="k2">)</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  34</span>    <span class="k2">}</span>
<span class="number">  35</span>    <span class="k1">else</span>
<span class="number">  36</span>    <span class="k2">{</span>
<span class="number">  37</span>      <span class="c">// vertical bars on the left and right</span>
<span class="number">  38</span>      ar <span class="k3">=</span> VAR<span class="k2">;</span>
<span class="number">  39</span>      ox <span class="k3">=</span> <span class="k2">(</span>dw <span class="k3">-</span> <span class="k2">(</span>ar <span class="k3">*</span> bw<span class="k2">)</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  40</span>      oy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  41</span>    <span class="k2">}</span>
<span class="number">  42</span>
<span class="number">  43</span>    <span class="c">// set up the transformation to scale and translate</span>
<span class="number">  44</span>    <a href="http://www.allegro.cc/manual/al_build_transform"><span class="a">al_build_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t, ox, oy, ar, ar, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>    <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  46</span>
<span class="number">  47</span>    <span class="c">// make sure nothing is drawn into the black bars </span>
<span class="number">  48</span>    <a href="http://www.allegro.cc/manual/al_set_clipping_rectangle"><span class="a">al_set_clipping_rectangle</span></a><span class="k2">(</span>ox, oy, ar <span class="k3">*</span> bw, ar <span class="k3">*</span> bh<span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>  <span class="k2">}</span>
<span class="number">  50</span><span class="k2">}</span>
<span class="number">  51</span>
<span class="number">  52</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  53</span><span class="k2">{</span>
<span class="number">  54</span>  <span class="k1">const</span> <span class="k1">int</span> BUFFER_WIDTH <span class="k3">=</span> <span class="n">400</span>, BUFFER_HEIGHT <span class="k3">=</span> <span class="n">400</span><span class="k2">;</span>
<span class="number">  55</span>  <span class="k1">bool</span> fullscreen <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">;</span>
<span class="number">  58</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">  59</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">  60</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="k2">;</span>
<span class="number">  61</span>
<span class="number">  62</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">  63</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">  64</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</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">  66</span>
<span class="number">  67</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">  68</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>
<span class="number">  70</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_WINDOW<span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</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>BUFFER_WIDTH, BUFFER_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>
<span class="number">  73</span>  bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"test.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span>  scale_screen<span class="k2">(</span>BUFFER_WIDTH, BUFFER_HEIGHT, <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">  76</span>
<span class="number">  77</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>
<span class="number">  78</span>  <span class="k2">{</span>
<span class="number">  79</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><span class="n">0</span>, <span class="n">0</span>, BUFFER_WIDTH, BUFFER_HEIGHT, <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">  80</span>    <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, BUFFER_WIDTH <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</span>, BUFFER_HEIGHT <span class="k3">-</span> <span class="n">0</span>.<span class="n">5</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="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    <span class="k1">if</span> <span class="k2">(</span>bmp<span class="k2">)</span>
<span class="number">  82</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</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">  84</span>
<span class="number">  85</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">  86</span>
<span class="number">  87</span>    <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number">  88</span>    <span class="k2">{</span>
<span class="number">  89</span>      <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span>
<span class="number">  90</span>      <span class="k2">{</span>
<span class="number">  91</span>        <span class="c">// quit</span>
<span class="number">  92</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  93</span>      <span class="k2">}</span>
<span class="number">  94</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_SPACE<span class="k2">)</span>
<span class="number">  95</span>      <span class="k2">{</span>
<span class="number">  96</span>        <span class="c">// toggle fullscreen mode</span>
<span class="number">  97</span>        fullscreen <span class="k3">=</span> <span class="k3">!</span>fullscreen<span class="k2">;</span>
<span class="number">  98</span>        al_set_display_flag<span class="k2">(</span>display, ALLEGRO_FULLSCREEN_WINDOW, fullscreen<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>        scale_screen<span class="k2">(</span>BUFFER_WIDTH, BUFFER_HEIGHT, <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"> 100</span>      <span class="k2">}</span>
<span class="number"> 101</span>    <span class="k2">}</span>
<span class="number"> 102</span>  <span class="k2">}</span>
<span class="number"> 103</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 104</span><span class="k2">}</span>
</div></div><p>

For this demo, you should see a white box with a red outline and test.png (if exists) drawn at (0,0). Press space to toggle windowed mode; escape to exit. </p><p>Adjust <span class="source-code">BUFFER_WIDTH</span> and <span class="source-code">BUFFER_HEIGHT</span> to whatever you like. (It represents the native resolution of the game.)</p><p>If you look at the drawing in the main loop, you&#39;ll see it just draws using the native resolution, regardless of what the display&#39;s resolution is. The call to <span class="source-code">scale_screen<span class="k2">(</span><span class="k2">)</span></span> sets everything up so that it gets drawn stretched to the max with black bars in full screen mode.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 02 Jul 2012 09:45:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I check the docs and started looking at anything I could find on transformations.  Looked at ex_transform, started to play around with it.</p><p>It took me a while of fiddling around with the number to figure it out, but I managed to come up with this (before reading your post). <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><div class="source-code snippet"><div class="inner"><pre>   display.w <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.screen<span class="k2">)</span><span class="k2">;</span>
   display.h <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.screen<span class="k2">)</span><span class="k2">;</span>

   display.scale <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>display.h <span class="k3">/</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>HEIGHT<span class="k2">;</span>
   display.move <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span>display.w <span class="k3">-</span> <span class="k2">(</span>WIDTH<span class="k3">*</span>display.scale<span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/al_scale_transform"><span class="a">al_scale_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, display.scale, display.scale<span class="k2">)</span><span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, display.move, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I placed that after I create the display and it works great!</p><p>For certain screens I added:</p><div class="source-code snippet"><div class="inner"><pre>   <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span><span class="k3">-</span>display.move, <span class="n">0</span>, <span class="k3">-</span><span class="n">1</span>, HEIGHT, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</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>
   <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>WIDTH, <span class="n">0</span>, WIDTH<span class="k3">+</span>display.move, HEIGHT,
                            <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</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>
</pre></div></div><p>

That puts a black box on each side.</p><p>I&#39;m not sure if there is a better way, but this works, I am quite pleased, I didn&#39;t think I would be able to grasp how to do a transform.</p><p>I can plug this into any other program as it is quite portable, just set WIDTH and HEIGHT to the resolution you want.  I think I should probably put some sort of checks in there but it&#39;s too late for me to think, my brain is already about to explode. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><p>EDIT:  Hmmm, I may use the code you posted instead, look prettier. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 11:00:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your code is fine, but it only works if bars are on the left/right. That&#39;s the more usual case, but if you have a widescreen game and want to draw it on a 4:3 monitor, you&#39;ll need bars across the top and bottom.</p><p>The clipping rectangle is important because otherwise something may overlap into the black bar area that normally would be automatically clipped by the size of the monitor.</p><p>Some options that may be useful:
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// sampling for primitives</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_SAMPLE_BUFFERS, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</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_SAMPLES, <span class="n">4</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>

<span class="c">// linear filter when scaling bitmaps up</span>
<a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MAG_LINEAR <span class="k3">|</span> ALLEGRO_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
The bitmap flag could be enable/disabled on a per bitmap basis.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 02 Jul 2012 11:17:33 +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/610557/959310#target">Trent Gamblin</a> said:</div><div class="quote"><p> where the reference driver gets used as a fallback, which is extremely slow.
</p></div></div><p>OMG that might explain why it suddenly turned dirty fast on my ancient hardware &gt;&lt;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Mon, 02 Jul 2012 12:07:55 +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/610557/959326#target">Matthew Leverton</a> said:</div><div class="quote"><p>Your code is fine, but it only works if bars are on the left/right. That&#39;s the more usual case, but if you have a widescreen game and want to draw it on a 4:3 monitor, you&#39;ll need bars across the top and bottom.</p></div></div><p>

Yeah, I noticed that about your code, part of why I liked yours better.  I never thought of that and even though this game isn&#39;t widescreen, I would like to have that option for future games.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>The clipping rectangle is important because otherwise something may overlap into the black bar area that normally would be automatically clipped by the size of the monitor.</p></div></div><p>

Yeah, good point.  I seen your clipping rectangle code, I didn&#39;t know about that function.  This is my first large A5 project.  Another good reason to use your code. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Still, I am proud of the fact that I managed to figure out some solution on my own first.  I was up until 2am working on this, brings back memories of when I used to program in the &#39;90s with Allegro 2 until the wee hours of the morning.  Been a while.  I&#39;m really liking Allegro 5 now though, took me a while to unlearn some A4 stuff. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Thanks a lot for all your help.  It&#39;s much appreciated.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 20:57: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/610557/959371#target">Neil Roy</a> said:</div><div class="quote"><p> Still, I am proud of the fact that I managed to figure out some solution on my own first</p></div></div><p>That&#39;s the best way to learn. Unfortunately, it seems like programmers have gone from figuring things out from documentation to searching Google to just asking somebody for the code. <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 02 Jul 2012 21:18:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was just talking with my wife (probably boring her to death, <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />) about programming, part of the fun is in figuring out how to do it on your own first, at least for me.  I don&#39;t think I have enjoyed myself so much as I did last night working on t his project.  I&#39;m rewriting my Deluxe Pacman game from scratch, creating a version 2.  I have quite a few people around the world that like it, so I want to remake it using Allegro 5, adding in Low resolution and High resolution sounds and graphics as well so low end systems can run it.  It&#39;s been fun.  I actually was floored the other day when I got a donation for my old game for $100. Making a total donations for it at $175... lets see, after 13 years of work, that means I work for 13 bucks a year! LMAO <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />  Well, it&#39;s better than the 5 it used to be. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>I took your function and made a header for it.  I&#39;ll use it in future games.  I have attached it in case anyone else wants to plug it into theirs.  Did you program that function?  I wanted to give proper credit in it but wasn&#39;t sure who to credit.</p><p>Anyhow, zip contains the .c and .h header.  It would make a good example program (if it isn&#39;t already) and even tutorial.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 02 Jul 2012 21:50:29 +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/610557/959373#target">Matthew Leverton</a> said:</div><div class="quote"><p>  it seems like programmers have gone from figuring things out from documentation to searching Google to just asking somebody for the code.</p></div></div><p>I&#39;ve been sucking on the Google tit myself, it&#39;s easier to search Google than to CTRL-F some pdf and if I&#39;m lucky, get one specific example that invariably differs from my problem.  But usually my problem is so specific that a programming forum doesn&#39;t know the answer off the top of their head, so they have to Google or whatever themselves if they want to help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 03 Jul 2012 00:03:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve been using Google, but just to search the allegro manual, it&#39;s the first thing to come up when I enter an A5 function name, so it&#39;s just faster. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 03 Jul 2012 00:47:16 +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/610557/959375#target">Neil Roy</a> said:</div><div class="quote"><p> Did you program that function? I wanted to give proper credit in it but wasn&#39;t sure who to credit.</p></div></div><p>I did, but there&#39;s no need to give credit. There&#39;s pretty much only one reasonable way to do it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Tue, 03 Jul 2012 06:02:34 +0000</pubDate>
	</item>
</rss>
