<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Screen Update framework (criticism needed)</title>
		<link>http://www.allegro.cc/forums/view/550119</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 05 Dec 2005 03:54:23 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So, im working on a general purpose framework for 2d allegro games; right know i&#39;ve got the screen update part ready.</p><p>We have <b>gfx.c</b>:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/*</span></td></tr><tr><td class="number">2</td><td><span class="c">  Name: gfx.c</span></td></tr><tr><td class="number">3</td><td><span class="c">  Copyright: 2005 FMC</span></td></tr><tr><td class="number">4</td><td><span class="c">  Author: Fabio Maria Carlucci</span></td></tr><tr><td class="number">5</td><td><span class="c">  Date: 03/12/05 15.23</span></td></tr><tr><td class="number">6</td><td><span class="c">  Description: graphical routines related (update, gfx loading, ...) </span></td></tr><tr><td class="number">7</td><td><span class="c">*/</span></td></tr><tr><td class="number">8</td><td><span class="p">#include "game_includes.h"</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="k1">static</span> <span class="k1">int</span> iPage, iMode, iHasSetup <span class="k3">=</span> <span class="n">0</span>, iX, iY, iFatalError, iColours<span class="k2">;</span></td></tr><tr><td class="number">11</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bDbuf, <span class="k3">*</span>vPages<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>, <span class="k3">*</span>bDraw<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">int</span> gfx_setup<span class="k2">(</span><span class="k1">int</span> mode, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> cols<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">14</td><td>    iPage <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    iMode <span class="k3">=</span> mode<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    iHasSetup <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    iX <span class="k3">=</span> x<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    iY <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    iFatalError <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    iColours <span class="k3">=</span> cols<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>    </td></tr><tr><td class="number">22</td><td>    <span class="k1">return</span> GM_OK<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>    </td></tr><tr><td class="number">25</td><td><span class="k1">int</span> gfx_start<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">26</td><td>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>iHasSetup<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">27</td><td>        P_ERROR<span class="k2">(</span><span class="s">"You must first setup for gfx!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>        <span class="k1">return</span> GM_FAIL<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>        </td></tr><tr><td class="number">31</td><td>    <span class="k1">int</span> iOk<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>iColours<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> S_FULL<span class="k2">)</span></td></tr><tr><td class="number">34</td><td>        iOk <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT, iX, iY, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">36</td><td>        iOk <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, iX, iY, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>        </td></tr><tr><td class="number">38</td><td>    <span class="k1">if</span><span class="k2">(</span>iOk<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">39</td><td>        iMode <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>        P_ERROR<span class="k2">(</span><span class="s">"\nCan't init selected video mode"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>        iFatalError <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> <span class="c">//fatal error triggered</span></td></tr><tr><td class="number">42</td><td>        <span class="k1">return</span> GM_FAIL<span class="k2">;</span></td></tr><tr><td class="number">43</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">44</td><td>    </td></tr><tr><td class="number">45</td><td>    bDraw <span class="k3">=</span> <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a><span class="k2">;</span> <span class="c">//by default the screen is the "drawable" surface</span></td></tr><tr><td class="number">46</td><td>    </td></tr><tr><td class="number">47</td><td>    <span class="c">//if triple buffering is enabled</span></td></tr><tr><td class="number">48</td><td>    <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> TRIPLE_BUF<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">49</td><td>        <span class="c">/* triple buffering setup */</span></td></tr><tr><td class="number">50</td><td>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_CAN_TRIPLE_BUFFER<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">51</td><td>         <a href="http://www.allegro.cc/manual/enable_triple_buffer" target="_blank"><span class="a">enable_triple_buffer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_CAN_TRIPLE_BUFFER<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">53</td><td>            P_ERROR<span class="k2">(</span><span class="s">"\nCan't do triple buffering... will try page flipping"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>            iMode <span class="k3">-</span><span class="k3">=</span> TRIPLE_BUF<span class="k2">;</span></td></tr><tr><td class="number">55</td><td>            iMode <span class="k3">+</span><span class="k3">=</span> PAGE_FLIP<span class="k2">;</span></td></tr><tr><td class="number">56</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">57</td><td>        <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">58</td><td>          vPages<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>iX, iY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>          vPages<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>iX, iY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>          vPages<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>iX, iY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">62</td><td>        bDraw <span class="k3">=</span> vPages<span class="k2">[</span>iPage<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">64</td><td>    <span class="c">//if page flipping is enabled</span></td></tr><tr><td class="number">65</td><td>    <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> PAGE_FLIP<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">66</td><td>        vPages<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>iX, iY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td>      vPages<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>iX, iY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>      bDraw <span class="k3">=</span> vPages<span class="k2">[</span>iPage<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">70</td><td>    <span class="c">//if double buffering is enabled</span></td></tr><tr><td class="number">71</td><td>    <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> DOUBLE_BUF<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">72</td><td>        bDbuf <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>iX, iY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bDbuf<span class="k2">)</span><span class="k2">{</span> <span class="c">//if it can't init the double buffer say so and try a workaround</span></td></tr><tr><td class="number">74</td><td>            iMode <span class="k3">-</span><span class="k3">=</span> DOUBLE_BUF<span class="k2">;</span></td></tr><tr><td class="number">75</td><td>            P_ERROR<span class="k2">(</span><span class="s">"\nCan't create double buffer!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>            <span class="k2">}</span></td></tr><tr><td class="number">77</td><td>        <span class="k1">else</span></td></tr><tr><td class="number">78</td><td>            bDraw <span class="k3">=</span> bDbuf<span class="k2">;</span> <span class="c">//double buffer can be the drawable bitmap even if page flipping or triple buf are enabled</span></td></tr><tr><td class="number">79</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">80</td><td>        </td></tr><tr><td class="number">81</td><td>    <span class="k1">return</span> GM_OK<span class="k2">;</span></td></tr><tr><td class="number">82</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">83</td><td>    </td></tr><tr><td class="number">84</td><td><span class="k1">int</span> gfx_update<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">85</td><td>    <span class="k1">if</span><span class="k2">(</span>iFatalError<span class="k2">)</span><span class="k1">return</span> GM_FAIL<span class="k2">;</span></td></tr><tr><td class="number">86</td><td>    </td></tr><tr><td class="number">87</td><td>    <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> TRIPLE_BUF<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">88</td><td>        <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> DOUBLE_BUF<span class="k2">)</span><a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bDbuf, vPages<span class="k2">[</span>iPage<span class="k2">]</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, screen-&gt;w, screen-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>        </td></tr><tr><td class="number">90</td><td>        <span class="k1">do</span> <span class="k2">{</span></td></tr><tr><td class="number">91</td><td>      <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/poll_scroll" target="_blank"><span class="a">poll_scroll</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">92</td><td>&#160;</td></tr><tr><td class="number">93</td><td>      <a href="http://www.allegro.cc/manual/request_video_bitmap" target="_blank"><span class="a">request_video_bitmap</span></a><span class="k2">(</span>vPages<span class="k2">[</span>iPage<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td>      iPage <span class="k3">=</span> <span class="k2">(</span>iPage<span class="k3">+</span><span class="n">1</span><span class="k2">)</span>%<span class="n">3</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td>      <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> DOUBLE_BUF<span class="k2">)</span><span class="k2">)</span>bDraw <span class="k3">=</span> vPages<span class="k2">[</span>iPage<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">96</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">97</td><td>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> PAGE_FLIP<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">98</td><td>        <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> DOUBLE_BUF<span class="k2">)</span><a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bDbuf, vPages<span class="k2">[</span>iPage<span class="k2">]</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, screen-&gt;w, screen-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>        </td></tr><tr><td class="number">100</td><td>        <a href="http://www.allegro.cc/manual/show_video_bitmap" target="_blank"><span class="a">show_video_bitmap</span></a><span class="k2">(</span>vPages<span class="k2">[</span>iPage<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>      iPage <span class="k3">=</span> <span class="n">1</span><span class="k3">-</span>iPage<span class="k2">;</span></td></tr><tr><td class="number">102</td><td>      <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> DOUBLE_BUF<span class="k2">)</span><span class="k2">)</span>bDraw <span class="k3">=</span> vPages<span class="k2">[</span>iPage<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">104</td><td>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> DOUBLE_BUF<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">105</td><td>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bDbuf, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, screen-&gt;w, screen-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">107</td><td>    </td></tr><tr><td class="number">108</td><td>    <span class="k1">return</span> GM_OK<span class="k2">;</span></td></tr><tr><td class="number">109</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">110</td><td>    </td></tr><tr><td class="number">111</td><td><span class="k1">int</span> gfx_end<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">112</td><td>    <span class="k1">if</span><span class="k2">(</span>iFatalError<span class="k2">)</span><span class="k1">return</span> GM_FAIL<span class="k2">;</span></td></tr><tr><td class="number">113</td><td>    </td></tr><tr><td class="number">114</td><td>    <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> DOUBLE_BUF<span class="k2">)</span><a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bDbuf<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">115</td><td>    </td></tr><tr><td class="number">116</td><td>    <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> PAGE_FLIP<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">117</td><td>        <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>vPages<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">118</td><td>        <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>vPages<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">119</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">120</td><td>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>iMode <span class="k3">&amp;</span> TRIPLE_BUF<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">121</td><td>        <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>vPages<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>        <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>vPages<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">123</td><td>        <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>vPages<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">124</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">125</td><td>    </td></tr><tr><td class="number">126</td><td>    </td></tr><tr><td class="number">127</td><td>    <span class="k1">return</span> GM_OK<span class="k2">;</span></td></tr><tr><td class="number">128</td><td>    <span class="k2">}</span></td></tr></tbody></table></div></div><p>

<b>gfx.h</b>:
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//gfx.h</span>

<span class="k1">extern</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bDraw<span class="k2">;</span>

<span class="k1">int</span> gfx_setup<span class="k2">(</span><span class="k1">int</span> mode, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> cols<span class="k2">)</span><span class="k2">;</span>    
<span class="k1">int</span> gfx_start<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">int</span> gfx_update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">int</span> gfx_end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

<b>game_includes.h</b> (this is game specific, now i just show the most simple case)
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//game related includes</span>

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

<span class="p">#include "global_defs.h"</span>
<span class="p">#include "gfx.h"</span>
</pre></div></div><p>

<b>global_defs.h</b>
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//global definitions go here</span>

<span class="p">#define DOUBLE_BUF  1</span>
<span class="p">#define TRIPLE_BUF  2</span>
<span class="p">#define PAGE_FLIP   4</span>

<span class="p">#define S_WINDOWED  8</span>
<span class="p">#define S_FULL     16</span>

<span class="c">//function returns</span>
<span class="p">#define GM_OK    0</span>
<span class="p">#define GM_FAIL -1</span>
</pre></div></div><p>


---------------<br />As you can see there are 4 functions to call:<br /><b>int gfx_setup(int mode, int x, int y, int cols);</b><br />This has to be called as a first thing, <b>x,y</b> set the resolution, <b>cols</b> the color depth, <b>mode</b> specifies if windowed or not and which screen update mode to use, parameters are a mix of (DOUBLE_BUF, TRIPLE_BUF, PAGE_FLIP, S_WINDOWED, S_FULL)</p><p><b>int gfx_start();</b><br />has to be called to actually start the graphic mode</p><p><b>int gfx_update();</b><br />must be called every game cycle</p><p><b>int gfx_end();</b><br />must be called before exiting, frees memory</p><p>The use is very simple, you do all the drawing to <b>bDraw</b> (regardless of the update mode you selected) and then just call <b>gfx_update();</b></p><p>A very simple program(with no error checking) that moves a rectangle across the screen would look like:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include "game_includes.h"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="c">//</span></td></tr><tr><td class="number">6</td><td>    gfx_setup<span class="k2">(</span>PAGE_FLIP <span class="k3">+</span> DOUBLE_BUF <span class="k3">+</span> S_FULL, <span class="n">640</span>, <span class="n">480</span>, <span class="n">16</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    gfx_start<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    </td></tr><tr><td class="number">9</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    <span class="k1">int</span> k<span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">12</td><td>        <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>bDraw, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">10</span>,<span class="n">10</span>,<span class="n">10</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>        <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>bDraw, <span class="n">40</span> <span class="k3">+</span> k<span class="k3">/</span><span class="n">2</span>, <span class="n">40</span>, <span class="n">120</span> <span class="k3">+</span> k<span class="k3">/</span><span class="n">2</span>, <span class="n">120</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">190</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        k <span class="k3">=</span> <span class="k2">(</span>k<span class="k3">+</span><span class="n">1</span><span class="k2">)</span>%<span class="n">800</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        </td></tr><tr><td class="number">16</td><td>        gfx_update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">18</td><td>    gfx_end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    </td></tr><tr><td class="number">20</td><td>    </td></tr><tr><td class="number">21</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">23</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>
As you can see you can combine Page flipping with double buffering, usefull if you need to use some transparencies in your game (so do not have to read from video memory)</p><p>It should work correctly and anyone can use but what i&#39;d like are some critics, mainly about things that should/could be done in a cleaner and/or more efficient way. Thanks.</p><p>[EDIT]Attached a working example with source and binary (4.2 dll needed)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (FMC)</author>
		<pubDate>Sun, 04 Dec 2005 22:43:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Looks ok, I guess, but have you looked at Chris Barry&#39;s screen update mechanism (which is Allegro 4.3&#39;s screen update mechanism, basically)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Sun, 04 Dec 2005 22:48:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I knew he had done something similar but i wanted to make something on my own, so i didn&#39;t check his code <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (FMC)</author>
		<pubDate>Sun, 04 Dec 2005 22:51:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s ok, altough it&#39;s a bit limited, but I guess you just started working on it.<br />So far I have two things to say:
</p><ul><li><p>gfx_setup() doesn&#39;t do enough checks, passing, i.e., 0 as second argument made the program crash</p></li><li><p>I think your framework should hide calls like allegro_init() and install_keyboard()</p></li></ul><p>

That&#39;s it <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Marco Radaelli)</author>
		<pubDate>Mon, 05 Dec 2005 03:54:23 +0000</pubDate>
	</item>
</rss>
