<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Screen Resolution Question</title>
		<link>http://www.allegro.cc/forums/view/613077</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 05 Aug 2013 22:34:04 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m back again! (I promise I really am trying to debug things myself and I really do appreciate the help) I have been doing some reading and realized that creating the screen you are drawing too is a lot more complex because of different monitor sizes and resolutions of people that will be using your program. I am working on a game that I would like to be full screen. I have been using:</p><div class="source-code snippet"><div class="inner"><pre><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> NULL<span class="k2">;</span>
<span class="c">//other allegro stuff</span>
<span class="c">//...</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>
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>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>      
<span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>        <span class="c">//test display object</span>
<span class="k2">{</span>
<a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, <span class="s">"Error"</span>, <span class="s">"Display window could not be shown"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
fout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Display Failed!"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span> cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Display Failed!"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
  <span class="k2">}</span>
</pre></div></div><p>

But I have seen functions like this more commonly on the forums and stuff:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/set_color_depth"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">1024</span>, <span class="n">768</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">{</span>
<a href="http://www.allegro.cc/manual/allegro_message"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"gfx mode with selected color depth is not available"</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

So my questions are:</p><p>What is the difference and is one better?<br />How do I actually make a program work in full screen on any system (and I guess I would work with a widescreen and put black bars if I was on a non widescreen?)</p><p>Thanks, maybe I am missing something easy here and making this way more complicated than it is.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DrazeSwift)</author>
		<pubDate>Sun, 04 Aug 2013 10:29:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>First, use </p><pre>&lt;code&gt;</pre><p> and </p><pre>&lt;/code&gt;</pre><p>. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>In your first example, that is Allegro 5 code.  In the bottom example with the <span class="source-code"><a href="http://www.allegro.cc/manual/set_gfx_mode"><span class="a">set_gfx_mode</span></a><span class="k2">(</span><span class="k2">)</span></span>, that is older Allegro 4 code that you&#39;re seeing.</p><p>You are right though, if you wish to support full screen you will need to add in black bars or pick a resolution like 800x600 and just do window mode.</p><p>I had this same problem when Matthew Leverton helped me with this function which will do what you want.  It basically uses ALLEGRO_TRANSFORM to fit the resolution you wish to the user&#39;s desktop resolution and stretches it up to fit rather than setting a new resolution.  </p><p>This is a copy and paste of the function from my own game... feel free to use it.</p><p>Just pass this function the desktop resolution and the buffer width and height of your screen to be scaled up...</p><pre>a5_scale_screen.c</pre><p>
</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">// Scale Screen:</span>
<span class="number">  2</span><span class="c">//    Sets up transforms in order to fit any resolution</span>
<span class="number">  3</span><span class="c">//    onto an ALLEGRO_FULLSCREEN_WINDOW.</span>
<span class="number">  4</span><span class="c">//</span>
<span class="number">  5</span><span class="c">// (Special thanks to Matthew Leverton for help with this!)</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="p">#include "a5_scale_screen.h"</span>
<span class="number">  8</span>
<span class="number">  9</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">// Use to get mouse position on scaled screen</span>
<span class="number"> 12</span><span class="k1">float</span> scale_x <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 13</span><span class="k1">float</span> scale_y <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 14</span><span class="k1">int</span> offset_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k1">int</span> offset_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="c">// usage: a5_scale_screen(BUFFER_WIDTH, BUFFER_HEIGHT, display_width, display_height);</span>
<span class="number"> 20</span><span class="k1">void</span> a5_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"> 21</span><span class="k2">{</span>
<span class="number"> 22</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"> 23</span>
<span class="number"> 24</span>   <span class="c">// Calculate the horizontal and vertial aspect ratios</span>
<span class="number"> 25</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"> 26</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"> 27</span>
<span class="number"> 28</span>   <span class="c">// The aspect ratio, x-offset and y-offset (in pixels)</span>
<span class="number"> 29</span>   <span class="k1">float</span> ar, ox, oy<span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</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="k2">{</span>
<span class="number"> 32</span>      <span class="c">// 1:1, just reset everything</span>
<span class="number"> 33</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"> 34</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"> 35</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"> 36</span>      scale_x <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 37</span>      scale_y <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 38</span>      offset_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 39</span>      offset_y <span class="k3">=</span> <span class="n">0</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.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"> 42</span>   <span class="k2">}</span>
<span class="number"> 43</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 44</span>      <span class="c">// Choose the smaller aspect ratio</span>
<span class="number"> 45</span>      <span class="k1">if</span><span class="k2">(</span>HAR <span class="k3">&lt;</span> VAR<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 46</span>         <span class="c">// horizontal bars on the top and bottom</span>
<span class="number"> 47</span>         ar <span class="k3">=</span> HAR<span class="k2">;</span>
<span class="number"> 48</span>         ox <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 49</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"> 50</span>      <span class="k2">}</span>
<span class="number"> 51</span>      <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 52</span>         <span class="c">// vertical bars on the left and right</span>
<span class="number"> 53</span>         ar <span class="k3">=</span> VAR<span class="k2">;</span>
<span class="number"> 54</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"> 55</span>         oy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 56</span>      <span class="k2">}</span>
<span class="number"> 57</span>
<span class="number"> 58</span>      <span class="c">// set the global scale/offset so the mouse coords can be inverted</span>
<span class="number"> 59</span>      <span class="c">// use the following code to get the proper mouse position</span>
<span class="number"> 60</span>      <span class="c">// mouse_x = (event.mouse.x - offset_x) / scale_x;</span>
<span class="number"> 61</span>      <span class="c">// mouse_y = (event.mouse.y - offset_y) / scale_y;</span>
<span class="number"> 62</span>      scale_x <span class="k3">=</span> ar<span class="k2">;</span>
<span class="number"> 63</span>      scale_y <span class="k3">=</span> ar<span class="k2">;</span>
<span class="number"> 64</span>      offset_x <span class="k3">=</span> ox<span class="k2">;</span>
<span class="number"> 65</span>      offset_y <span class="k3">=</span> oy<span class="k2">;</span>
<span class="number"> 66</span>
<span class="number"> 67</span>      <span class="c">// set up the transformation to scale and translate</span>
<span class="number"> 68</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"> 69</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"> 70</span>
<span class="number"> 71</span>      <span class="c">// clear out the screen before setting the clipping</span>
<span class="number"> 72</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>, dw, dh<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 73</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"> 74</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"> 75</span>
<span class="number"> 76</span>      <span class="c">// make sure nothing is drawn into the black bars</span>
<span class="number"> 77</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"> 78</span>   <span class="k2">}</span>
<span class="number"> 79</span><span class="k2">}</span>
</div></div><p>

and the header file I use...</p><pre>a5_scale_screen.h</pre><p>
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#ifndef _a5_scale_screen_h_</span>
<span class="p">#define _a5_scale_screen_h_</span>

<span class="p">#include &lt;allegro5/allegro.h&gt;</span>

<span class="k1">extern</span> <span class="k1">float</span> scale_x<span class="k2">;</span>
<span class="k1">extern</span> <span class="k1">float</span> scale_y<span class="k2">;</span>
<span class="k1">extern</span> <span class="k1">int</span> offset_x<span class="k2">;</span>
<span class="k1">extern</span> <span class="k1">int</span> offset_y<span class="k2">;</span>

<span class="c">// usage: a5_scale_screen(BUFFER_WIDTH, BUFFER_HEIGHT, display_width, display_height);</span>
<span class="k1">void</span> a5_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="k2">;</span>

<span class="p">#endif</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 04 Aug 2013 10:41:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The simplest approach is to create a buffer that&#39;s larger than a typical screen size, render everything to this buffer, then scale it to match the screen size of the end user. A good resolution to go with for wide-screen, scalable rendering is 2560x1440, since this scales nicely to 1280x720 (720p) and 1920x1080 (1080p) so long as you don&#39;t use any really thin lines in your scaling or such, plus it also assures that your game will run OK and look spectacular in the future when 1440p becomes the standard.</p><p>If you want to continue to support standard 4:3 aspect and/or 16:10 resolutions like 1680x1050, you have two options: Scale you wide-screen game to fit in such resolutions with black bars around the outer edges, or design your UI to work with multiple aspect ratios, which is a lot trickier to accomplish since you won&#39;t be able to rely on full-screen background images for UI layouts and everything UI related will need to be capable of floating into logical positions, but ensures your game can fill the full screen at any aspect ratio. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Sun, 04 Aug 2013 15:25:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Fixed the code sorry about that!</p><p>So I would create a buffer of 2560x1440 draw to that call</p><p>a5_scale_screen(2560, 1440, ?, ?);</p><p>How would you find out the current resolution that the user is using? because that is what you are passing in for the 3rd and 4th ints right? and it will scale according to that? Thanks for posting the source, I found it helpful!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DrazeSwift)</author>
		<pubDate>Mon, 05 Aug 2013 03:12:38 +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/613077/988405#target">DrazeSwift</a> said:</div><div class="quote"><p>
So I would create a buffer of 2560x1440 draw to that calla5_scale_screen(2560, 1440, ?, ?);How would you find out the current resolution that the user is using? because that is what you are passing in for the 3rd and 4th ints right? and it will scale according to that? Thanks for posting the source, I found it helpful!
</p></div></div><p>

That resolution for a buffer seems a tad large to me.  Don&#39;t forget the memory that will be required to render to that and the possible speed requirements needed.  You&#39;ll have to think of your target audience and what system requirements they will need to run this.  Do you wish to support people with older systems or only newer etc...</p><p>Anyhow, here you go...
</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">#define WIDTH 800</span>
<span class="number">  2</span>   <span class="p">#define HEIGHT 600</span>
<span class="number">  3</span>
<span class="number">  4</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="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</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_SINGLE_BUFFER, <span class="n">1</span>, ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</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">  8</span>
<span class="number">  9</span>   <span class="c">// Allegro picks the desktop resolution automatically with </span>
<span class="number"> 10</span>   <span class="c">// ALLEGRO_FULLSCREEN_WINDOW flag set.</span>
<span class="number"> 11</span>   myscreen <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"> 12</span>
<span class="number"> 13</span>   <span class="k1">int</span> desktop_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>myscreen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">int</span> desktop_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>myscreen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>   a5_scale_screen<span class="k2">(</span>WIDTH, HEIGHT, desktop_w, desktop_h<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Edit: changed it to look like my code that I know works.  Alter as needed <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Mon, 05 Aug 2013 22:34:04 +0000</pubDate>
	</item>
</rss>
