<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>One function call cuts my FPS in half</title>
		<link>http://www.allegro.cc/forums/view/614398</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 23 Jun 2014 07:18:57 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am trying to narrow down why my fps is so low. After messing around, I found that my fps drops in half when calling a function. I then went into that function and commented out everything and kept rerunning my program while putting back each line one at a time. Everything was running at 60 fps... until I added one drawing function:</p><p>al_draw_bitmap_region(player.graphic, 0, player.direction, 26, 26, player.x - 13, player.y - 13, NULL);</p><p>This is just a 26x104 bitmap of my player sprite. This drawing function cuts my fps from 60 to 30. However the fps doesn&#39;t drop when I draw a primitive instead. Any thoughts?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sadelbrid)</author>
		<pubDate>Sun, 22 Jun 2014 04:16:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Make sure you load all your graphics after you create your display otherwise they will be memory bitmaps. That&#39;s the major reason a bitmap would draw slowly in A5.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 22 Jun 2014 04:18:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I create my display before anything else. I pulled the player sprite graphic out of the player struct and declared it in my main function. As expected, that didn&#39;t change anything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sadelbrid)</author>
		<pubDate>Sun, 22 Jun 2014 04:33:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>To be 100% sure it&#39;s not a memory bitmap, try calling <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_bitmap_flags"><span class="a">al_get_bitmap_flags</span></a><span class="k2">(</span>player.graphic<span class="k2">)</span> <span class="k3">&amp;</span> ALLEGRO_VIDEO_BITMAP</span> and making sure that&#39;s not zero.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 22 Jun 2014 04:42:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Calling al_get_bitmap_flags(playerSprite) &amp; ALLEGRO_VIDEO_BITMAP returned 1. If that is how you check, it seems that it isn&#39;t a memory bitmap. To be sure, I called al_set_new_bitmap_flags(ALLEGRO_VIDEO_BITMAP) at the beginning of my program.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sadelbrid)</author>
		<pubDate>Sun, 22 Jun 2014 04:53:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you vsyncing?  The draw operation could just be the straw that breaks the camel&#39;s back.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gideon Weems)</author>
		<pubDate>Sun, 22 Jun 2014 06:33:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Show code then, main at least.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 22 Jun 2014 06:40:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is my declaration and my gameloop
</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><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_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">   2</span><span class="c">//...</span>
<span class="number">   3</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>playerSprite <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">"player.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">   4</span><span class="c">//...</span>
<span class="number">   5</span><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">   6</span>  <span class="k2">{</span>
<span class="number">   7</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">   8</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>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">   9</span>    <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number">  10</span>    <span class="k2">{</span>
<span class="number">  11</span>      <span class="k1">if</span><span class="k2">(</span>ev.timer.source <span class="k3">=</span><span class="k3">=</span> mainTimer<span class="k2">)</span>
<span class="number">  12</span>      <span class="k2">{</span>
<span class="number">  13</span>        draw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  14</span>        <span class="k1">if</span><span class="k2">(</span>inputs<span class="k2">[</span>W<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>player.y <span class="k3">-</span><span class="k3">=</span> player.speed<span class="k2">;</span> player.direction <span class="k3">=</span> UP<span class="k2">;</span> player.imageX <span class="k3">-</span><span class="k3">=</span> <span class="n">32</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  15</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>inputs<span class="k2">[</span>S<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>player.y <span class="k3">+</span><span class="k3">=</span> player.speed<span class="k2">;</span> player.direction <span class="k3">=</span> DOWN<span class="k2">;</span> player.imageX <span class="k3">-</span><span class="k3">=</span> <span class="n">32</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  16</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>inputs<span class="k2">[</span>A<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>player.x <span class="k3">-</span><span class="k3">=</span> player.speed<span class="k2">;</span> player.direction <span class="k3">=</span> LEFT<span class="k2">;</span> player.imageX <span class="k3">-</span><span class="k3">=</span> <span class="n">32</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  17</span>        <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>inputs<span class="k2">[</span>D<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>player.x <span class="k3">+</span><span class="k3">=</span> player.speed<span class="k2">;</span> player.direction <span class="k3">=</span> RIGHT<span class="k2">;</span> player.imageX <span class="k3">-</span><span class="k3">=</span> <span class="n">32</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  18</span>
<span class="number">  19</span>        
<span class="number">  20</span>        <span class="k1">if</span><span class="k2">(</span>player.imageX <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">{</span>player.imageX <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  21</span>
<span class="number">  22</span>        <span class="c">//Bounds checking</span>
<span class="number">  23</span>        <span class="k1">if</span> <span class="k2">(</span>player.x <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>environment<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>player.x <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>environment<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  24</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>player.x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">{</span>player.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  25</span>        <span class="k1">if</span> <span class="k2">(</span>player.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">{</span>player.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  26</span>        <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>player.y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>environment<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>player. y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>environment<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  27</span>      
<span class="number">  28</span>        HitDetect<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>        cloud1x <span class="k3">-</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  30</span>        cloud2x <span class="k3">-</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  31</span>        <span class="k1">if</span><span class="k2">(</span>cloud1x <span class="k3">&lt;</span> <span class="k3">-</span><span class="n">4000</span><span class="k2">)</span><span class="k2">{</span>cloud1x <span class="k3">=</span> <span class="n">4000</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  32</span>        <span class="k1">if</span><span class="k2">(</span>cloud2x <span class="k3">&lt;</span> <span class="k3">-</span><span class="n">4000</span><span class="k2">)</span><span class="k2">{</span>cloud2x <span class="k3">=</span> <span class="n">4000</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  33</span>      <span class="k2">}</span>
<span class="number">  34</span>
<span class="number">  35</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.timer.source <span class="k3">=</span><span class="k3">=</span> waterTimer<span class="k2">)</span>
<span class="number">  36</span>      <span class="k2">{</span>
<span class="number">  37</span>        waterdraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  38</span>        waterUpdateNeeded <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  39</span>        waterX <span class="k3">+</span><span class="k3">=</span> <span class="n">32</span><span class="k2">;</span>
<span class="number">  40</span>        <span class="k1">if</span> <span class="k2">(</span>waterX <span class="k3">&gt;</span> <span class="n">96</span><span class="k2">)</span><span class="k2">{</span>waterX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span> 
<span class="number">  41</span>      <span class="k2">}</span>
<span class="number">  42</span>    <span class="k2">}</span>
<span class="number">  43</span>
<span class="number">  44</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number">  45</span>    <span class="k2">{</span>
<span class="number">  46</span>      <span class="k1">switch</span> <span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  47</span>      <span class="k2">{</span>
<span class="number">  48</span>      <span class="k1">case</span> ALLEGRO_KEY_W:
<span class="number">  49</span>        inputs<span class="k2">[</span>W<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  50</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  51</span>      <span class="k1">case</span> ALLEGRO_KEY_S:
<span class="number">  52</span>        inputs<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  53</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  54</span>      <span class="k1">case</span> ALLEGRO_KEY_A:
<span class="number">  55</span>        inputs<span class="k2">[</span>A<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  56</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  57</span>      <span class="k1">case</span> ALLEGRO_KEY_D:
<span class="number">  58</span>        inputs<span class="k2">[</span>D<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  59</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  60</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number">  61</span>        inputs<span class="k2">[</span>SPACE<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  62</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  63</span>      <span class="k1">case</span> ALLEGRO_KEY_I:
<span class="number">  64</span>        inputs<span class="k2">[</span>I<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  65</span>        inventoryon <span class="k3">=</span> <span class="k3">!</span>inventoryon<span class="k2">;</span>
<span class="number">  66</span>
<span class="number">  67</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  68</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  69</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  70</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  71</span>      <span class="k2">}</span>
<span class="number">  72</span>    <span class="k2">}</span>
<span class="number">  73</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number">  74</span>    <span class="k2">{</span>
<span class="number">  75</span>      <span class="k1">switch</span> <span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  76</span>      <span class="k2">{</span>
<span class="number">  77</span>      <span class="k1">case</span> ALLEGRO_KEY_W:
<span class="number">  78</span>        inputs<span class="k2">[</span>W<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  79</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  80</span>      <span class="k1">case</span> ALLEGRO_KEY_S:
<span class="number">  81</span>        inputs<span class="k2">[</span>S<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  82</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  83</span>      <span class="k1">case</span> ALLEGRO_KEY_A:
<span class="number">  84</span>        inputs<span class="k2">[</span>A<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  85</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  86</span>      <span class="k1">case</span> ALLEGRO_KEY_D:
<span class="number">  87</span>        inputs<span class="k2">[</span>D<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  88</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  89</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number">  90</span>        inputs<span class="k2">[</span>SPACE<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  91</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  92</span>      <span class="k1">case</span> ALLEGRO_KEY_I:
<span class="number">  93</span>        inputs<span class="k2">[</span>I<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  94</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  95</span>      <span class="k2">}</span>
<span class="number">  96</span>    <span class="k2">}</span>
<span class="number">  97</span>
<span class="number">  98</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span>
<span class="number">  99</span>    <span class="k2">{</span>
<span class="number"> 100</span>      maincurser.x <span class="k3">=</span> ev.mouse.x<span class="k2">;</span>
<span class="number"> 101</span>      maincurser.y <span class="k3">=</span> ev.mouse.y<span class="k2">;</span>
<span class="number"> 102</span>    <span class="k2">}</span>
<span class="number"> 103</span>
<span class="number"> 104</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span>
<span class="number"> 105</span>    <span class="k2">{</span>
<span class="number"> 106</span>
<span class="number"> 107</span>    <span class="k2">}</span>
<span class="number"> 108</span>
<span class="number"> 109</span>    <span class="k1">if</span><span class="k2">(</span>draw <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>queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 110</span>    <span class="k2">{</span>
<span class="number"> 111</span>      <span class="c">//-------------------FPS--------------------------</span>
<span class="number"> 112</span>      <span class="k1">double</span> game_time <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 113</span>      <span class="k1">if</span><span class="k2">(</span>game_time <span class="k3">-</span> old_time <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span> 
<span class="number"> 114</span>      <span class="k2">{</span> 
<span class="number"> 115</span>        fps <span class="k3">=</span> frames_done <span class="k3">/</span> <span class="k2">(</span>game_time <span class="k3">-</span> old_time<span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 116</span>        frames_done <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> old_time <span class="k3">=</span> game_time<span class="k2">;</span> 
<span class="number"> 117</span>      <span class="k2">}</span> 
<span class="number"> 118</span>      frames_done<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 119</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> fps <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 120</span>      <span class="c">//--------------------------------------------------</span>
<span class="number"> 121</span>      draw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 122</span>      <span class="c">//Redraw</span>
<span class="number"> 123</span>      RedrawEnvironment<span class="k2">(</span>environment, water, sand, stone, grass, grassSide, sandSide, waterX, tree, player, trees, blocks, waterdraw, waterUpdateNeeded<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>      RedrawOverlay<span class="k2">(</span>overlay, clouds, playerSprite, player, cloud1x, cloud2x, maincurser<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>
<span class="number"> 126</span>      <span class="c">//Draw Camera/HUD</span>
<span class="number"> 127</span>      DrawScreen<span class="k2">(</span>display, player, <a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a>, environment, overlay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>
<span class="number"> 129</span>      <span class="c">//if(inventoryon){DrawInventory(readyBoxes, selficon, display, inventorybox);}</span>
<span class="number"> 130</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>maincurser.graphic, maincurser.x <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>maincurser.graphic<span class="k2">)</span><span class="k3">/</span><span class="n">2</span>, 
<span class="number"> 131</span>        maincurser.y <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>maincurser.graphic<span class="k2">)</span><span class="k3">/</span><span class="n">2</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>
<span class="number"> 133</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"> 134</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_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>
<span class="number"> 135</span>    <span class="k2">}</span>
<span class="number"> 136</span>  <span class="k2">}</span>
</div></div><p>

When I call RedrayOverlay(), that is when the fps drops. RedrawOverlay() looks like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> RedrawOverlay<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k3">&amp;</span>overlay, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k3">&amp;</span>clouds,  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k3">&amp;</span>playerSprite, Player <span class="k3">&amp;</span>player, <span class="k1">int</span> cloud1x, <span class="k1">int</span> cloud2x, Mouse maincurser<span class="k2">)</span>
<span class="k2">{</span>
  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>overlay<span class="k2">)</span><span class="k2">;</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_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</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_bitmap_region"><span class="a">al_draw_bitmap_region</span></a><span class="k2">(</span>playerSprite, <span class="n">0</span>, player.direction, <span class="n">26</span>, <span class="n">26</span>, player.x <span class="k3">-</span> <span class="n">13</span>, player.y <span class="k3">-</span> <span class="n">13</span>, NULL<span class="k2">)</span><span class="k2">;</span>
  <span class="c">//al_draw_filled_circle(player.x, player.y, 3, al_map_rgb_f(1,0,1));</span>
  <span class="c">//al_draw_bitmap_region(clouds, , , WIDTH, HEIGHT, 0, 0, NULL);</span>
  <span class="c">//al_draw_bitmap(clouds, cloud2x, 0, NULL);  </span>
<span class="k2">}</span>
</pre></div></div><p>

The al_draw_bitmap_region() is what makes the frame drop.</p><p>EDIT: After more testing, I found that most my drawing functions drop the frame rate significantly. However, drawing to the screen does not seem to affect it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sadelbrid)</author>
		<pubDate>Sun, 22 Jun 2014 21:45:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Let me guess, the overlay is a <i>memory</i> bitmap? Drawing to memory bitmaps is also relatively slow...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Mon, 23 Jun 2014 01:26:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;s got to be something more going on here. Drawing a single sprite should <b>never</b> drop your fps from 60 to 30 if it is hardware accelerated.</p><p>Are you sure all your bitmaps are loaded after the display is created? Your overlay could be a memory bitmap which would explain the slow drawing to it. There&#39;s got to be some other explanation.</p><p>I don&#39;t mind looking at the rest of your source code if you want to post it. Zip files are best.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 23 Jun 2014 01:26:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay here is my project folder. <br />EDIT: This is updated! Look at this one instead.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sadelbrid)</author>
		<pubDate>Mon, 23 Jun 2014 03:16:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
</p><div class="source-code"><div class="toolbar"><span class="name">main.cpp</span><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"> 57</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>tilemap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><span class="n">125</span>, <span class="n">125</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>environment <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>tilemap<span class="k2">)</span> <span class="k3">*</span> <span class="n">32</span>, <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>tilemap<span class="k2">)</span><span class="k3">*</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>overlay <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>tilemap<span class="k2">)</span> <span class="k3">*</span> <span class="n">32</span>, <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>tilemap<span class="k2">)</span><span class="k3">*</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div></div><p>
32X125 = 3750 + 250 = 4000</p><p>So your overlay texture is 4000 x 4000. That is likely too large of a texture for your graphics card to allocate. Most have a max size of 2048, 4096 if you&#39;re lucky. This means overlay is probably being created as a memory bitmap. Any reason you need a 4000x4000 overlay?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 23 Jun 2014 03:59:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I made an overlay for the hud, player, mobs, and other objects and use environment for things that would not change very often. I made it the same size as environment to avoid some math when drawing. I&#39;ll change it and let you know how it goes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sadelbrid)</author>
		<pubDate>Mon, 23 Jun 2014 04:09:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The general paradigm nowadays is just to blast everything through the video card on every frame. And you can usually get away with it too. But I understand your desire to minimize excess drawing, it&#39;s only natural.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 23 Jun 2014 04:12:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I eliminated the giant 4000x4000 bitmaps and recoded the drawing functions to draw the tiles one at a time and now it&#39;s running at 60 fps! Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (sadelbrid)</author>
		<pubDate>Mon, 23 Jun 2014 05:11:53 +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/614398/1002514#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
So your overlay texture is 4000 x 4000. That is likely too large of a texture for your graphics card to allocate. 
</p></div></div><p>
Though, for modern systems (*not crappy tablets), it shouldn&#39;t be unless perhaps you&#39;re trying to update the entire thing by drawing individual tiles to it (including wasting time drawing off the screen boundaries.) </p><p>That is, it&#39;s a throughput limit, not a hardware specification limitation. </p><p>Any card supporting OpenGL 4.1, for example, is required to support 16,384 x 16,384 as the lowest &quot;maximum texture size&quot; of a card. Which is 16384^2 * 32-bits / 1024 / 1024 / 1024 = 1 GB if uncompressed! <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> There are <a href="https://wiki.gacrc.uga.edu/wiki/GPU_Hardware">some</a> that list 2-D texture size at 64Kx64K! The future is amazing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Mon, 23 Jun 2014 07:18:57 +0000</pubDate>
	</item>
</rss>
