<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[Performance] Load a bitmap screen vs Draw a screen</title>
		<link>http://www.allegro.cc/forums/view/616948</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 24 Jun 2017 11:29:00 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi everyone!</p><p>I&#39;m making my game, but now I have to decide whether to load a bitmap for the background/maps or to draw it entirely. Any different in performance of both?<br />(Screen picture is in the attachment)<br />So far I redraw everything each frame:
</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 W 855 /* 855 == 19 * 45 */</span>
<span class="number">  2</span><span class="p">#define H 665 /* 665 == 19 * 35 */</span>
<span class="number">  3</span><span class="p">#define TSIZE 19</span>
<span class="number">  4</span><span class="p">#define WW WTW * TSIZE</span>
<span class="number">  5</span><span class="p">#define WH WTH * TSIZE</span>
<span class="number">  6</span><span class="p">#define WTW 30 /* wall width */</span>
<span class="number">  7</span><span class="p">#define WTH 30 /* wall height */</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">void</span> draw_grid<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>  <span class="k1">float</span> offset <span class="k3">=</span> <span class="n">0</span>.<span class="n">5</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="c">// horizon lines</span>
<span class="number"> 12</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> TSIZE<span class="k2">;</span> i <span class="k3">&lt;</span> WH<span class="k2">;</span> i <span class="k3">+</span><span class="k3">=</span> TSIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span><span class="n">0</span> <span class="k3">+</span> offset, i <span class="k3">+</span> offset, WW <span class="k3">-</span> <span class="n">1</span> <span class="k3">+</span> offset, i <span class="k3">+</span> offset,
<span class="number"> 14</span>      color_grid, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  <span class="k2">}</span>
<span class="number"> 16</span>  <span class="c">// vertical lines</span>
<span class="number"> 17</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> TSIZE<span class="k2">;</span> i <span class="k3">&lt;</span> WW<span class="k2">;</span> i <span class="k3">+</span><span class="k3">=</span> TSIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 18</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>i <span class="k3">+</span> offset, <span class="n">0</span> <span class="k3">+</span> offset, i <span class="k3">+</span> offset, WH <span class="k3">-</span> <span class="n">1</span> <span class="k3">+</span> offset,
<span class="number"> 19</span>      color_grid, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k2">}</span>
<span class="number"> 21</span><span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">void</span> draw_wall<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>  <span class="k1">float</span> tx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 25</span>  <span class="c">// horizon top wall</span>
<span class="number"> 26</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> WTW<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>wall, tx, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>    tx <span class="k3">+</span><span class="k3">=</span> TSIZE<span class="k2">;</span>
<span class="number"> 29</span>  <span class="k2">}</span>
<span class="number"> 30</span>  <span class="c">// vertical walls</span>
<span class="number"> 31</span>  <span class="k1">float</span> ty <span class="k3">=</span> TSIZE<span class="k2">;</span>
<span class="number"> 32</span>  tx <span class="k3">=</span> WTW <span class="k3">*</span> TSIZE <span class="k3">-</span> TSIZE<span class="k2">;</span>
<span class="number"> 33</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span> i <span class="k3">&lt;</span> WTH<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 34</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>wall, <span class="n">0</span>, ty, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>wall, tx, ty, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>    ty <span class="k3">+</span><span class="k3">=</span> TSIZE<span class="k2">;</span>
<span class="number"> 37</span>  <span class="k2">}</span>
<span class="number"> 38</span>  <span class="c">// horizon bot wall</span>
<span class="number"> 39</span>  tx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 40</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> WTW<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 41</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>wall, tx, ty, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>    tx <span class="k3">+</span><span class="k3">=</span> TSIZE<span class="k2">;</span>
<span class="number"> 43</span>  <span class="k2">}</span>
<span class="number"> 44</span><span class="k2">}</span>
<span class="number"> 45</span>
<span class="number"> 46</span><span class="k1">void</span> draw_GUI<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 47</span>  <span class="c">// lines-----</span>
<span class="number"> 48</span>  <span class="k1">float</span> line_thickness <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 49</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>WW <span class="k3">+</span> TSIZE <span class="k3">/</span> <span class="n">2</span>, TSIZE, W <span class="k3">-</span> TSIZE <span class="k3">/</span> <span class="n">2</span>, TSIZE,
<span class="number"> 50</span>    color_food, line_thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>WW <span class="k3">+</span> TSIZE <span class="k3">/</span> <span class="n">2</span>, TSIZE, WW <span class="k3">+</span> TSIZE <span class="k3">/</span> <span class="n">2</span>, TSIZE <span class="k3">*</span> <span class="n">9</span>,
<span class="number"> 52</span>    color_food, line_thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>W <span class="k3">-</span> TSIZE <span class="k3">/</span> <span class="n">2</span>, TSIZE, W <span class="k3">-</span> TSIZE <span class="k3">/</span> <span class="n">2</span>, TSIZE <span class="k3">*</span> <span class="n">9</span>,
<span class="number"> 54</span>    color_food, line_thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>  <span class="c">// mode and score</span>
<span class="number"> 56</span>  <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color_red, WW <span class="k3">+</span> <span class="k2">(</span>W <span class="k3">-</span> WW<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, TSIZE,
<span class="number"> 57</span>    ALLEGRO_ALIGN_CENTRE, <span class="s">"MODE"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>  <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color_red, WW <span class="k3">+</span> <span class="k2">(</span>W <span class="k3">-</span> WW<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, TSIZE <span class="k3">*</span> <span class="n">3</span>,
<span class="number"> 59</span>    ALLEGRO_ALIGN_CENTRE, <span class="s">"%s"</span>, mode_name<span class="k2">[</span>mode<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>  <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color_red, WW <span class="k3">+</span> TSIZE, TSIZE <span class="k3">*</span> <span class="n">5</span>,
<span class="number"> 61</span>    ALLEGRO_ALIGN_LEFT, <span class="s">"%d"</span>, score<span class="k2">[</span>mode<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>  <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color_food, WW <span class="k3">+</span> TSIZE <span class="k3">*</span> <span class="n">4</span>, TSIZE <span class="k3">*</span> <span class="n">5</span>,
<span class="number"> 63</span>    ALLEGRO_ALIGN_LEFT, <span class="s">"- SCORE"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span>  <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color_red, WW <span class="k3">+</span> TSIZE, TSIZE <span class="k3">*</span> <span class="n">7</span>,
<span class="number"> 65</span>    ALLEGRO_ALIGN_LEFT, <span class="s">"%d"</span>, hscore<span class="k2">[</span>mode<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>  <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color_food, WW <span class="k3">+</span> TSIZE <span class="k3">*</span> <span class="n">4</span>, TSIZE <span class="k3">*</span> <span class="n">7</span>,
<span class="number"> 67</span>    ALLEGRO_ALIGN_LEFT, <span class="s">"- HIGHEST"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 68</span>  <span class="c">// line-----</span>
<span class="number"> 69</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>WW <span class="k3">+</span> <span class="n">8</span>, TSIZE <span class="k3">*</span> <span class="n">9</span>, W <span class="k3">-</span> <span class="n">8</span>, TSIZE <span class="k3">*</span> <span class="n">9</span>,
<span class="number"> 70</span>    color_food, line_thickness<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 71</span>  <span class="c">// menu</span>
<span class="number"> 72</span>  <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, color_red, WW <span class="k3">+</span> <span class="k2">(</span>W <span class="k3">-</span> WW<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, TSIZE <span class="k3">*</span> <span class="n">9</span>,
<span class="number"> 73</span>    ALLEGRO_ALIGN_CENTRE, <span class="s">"MENU"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 74</span><span class="k2">}</span>
<span class="number"> 75</span>
<span class="number"> 76</span>
<span class="number"> 77</span>    <span class="k1">if</span> <span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>evque<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 78</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span>color_background<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 79</span>      draw_grid<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_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>food, foodx, foody, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 81</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>head, headx, heady, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 82</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> tail_len<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 83</span>        <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>tail, tailx<span class="k2">[</span>i<span class="k2">]</span>, taily<span class="k2">[</span>i<span class="k2">]</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 84</span>      <span class="k2">}</span>
<span class="number"> 85</span>      draw_wall<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 86</span>      draw_GUI<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 87</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"> 88</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 89</span>    <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Anatta)</author>
		<pubDate>Tue, 20 Jun 2017 08:57:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Have you finished the game? You shouldn&#39;t optimize until it is finished, as you can&#39;t get an actual profile information.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Tue, 20 Jun 2017 13:31:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, I haven&#39;t finished it yet. Thank for the advice, I&#39;ll continue to redraw everything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Anatta)</author>
		<pubDate>Tue, 20 Jun 2017 15:07:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I would decide how you want to do it now.  I have heard the &quot;don&#39;t optimize now&quot; line, but that is not true.  Unless you wish to totally rewrite your code later on, you should decide which way to go with now.</p><p>For the type of game you have, I don&#39;t think you have to worry about optimization.  You may wish to go with bitmaps which you load if you want to change the graphics later on and have something different.</p><p>You could also draw them ahead of time just once, then just blit that premade bitmap.</p><p>If this is how you want your game to look in the end, than it looks like drawing it each time will be fine.  If it is turn based especially.  If it gets too complicated you may wish to change that.</p><p>You could also only update the parts of the screen that change.</p><p>Take some time and maybe write up a design document on how you want the game to end up like.  Plan it all out.  This actually saves you A LOT of headaches later on believe it or not.  You will know where you will need speed and what to be concerned with.</p><p>For my own games I tend to plan it out and then t he first thing I program is a level editor, this way I know what will be in the levels and can actually have levels created to test the main game with.  I have also given out my level editors with my game, which is a bonus.  Depends on your game though.  But waiting until you are done to optimize it and finding out you done something wrong and have to recode large sections is not fun.  And this is not just my opinion, I have seen professionals online who advise against waiting until you&#39;re done to optimize it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sat, 24 Jun 2017 11:29:00 +0000</pubDate>
	</item>
</rss>
