<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>al_draw_filled_rectangle v. slow compared to al_draw_filled_rectangle</title>
		<link>http://www.allegro.cc/forums/view/614155</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 15 Apr 2014 17:52:18 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve been adding a minimap to my Isometric game, I first did this by drawing each cell as a simple square using al_draw_filled_rectangle. I then switched to using two al_draw_filled_rectangle calls to draw a diamond shape instead..</p><p>The problem I am having is there is a huge FPS difference between the two.. drawing squares results in a sold 60-70 FPS.. drawing two rectangles drops this down to just under 30!</p><p>Is this purely because I am making twice as many draw calls? How can I improve this code to be faster?</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">void</span> CEngine::DrawDiamond<span class="k2">(</span> <span class="k1">int</span> nCornerTopLeftXPx, 
<span class="number">  2</span>                                <span class="k1">int</span> nCornerTopLeftYPx,
<span class="number">  3</span>                                <span class="k1">int</span> nCornerBottomRightXPx,
<span class="number">  4</span>                                <span class="k1">int</span> nCornerBottomRightYPx,
<span class="number">  5</span>                                <span class="k1">int</span> nLineWidth,
<span class="number">  6</span>                                <span class="k1">const</span> RGBValue<span class="k3">&amp;</span> rCol,
<span class="number">  7</span>                                <span class="k1">bool</span> fFilled <span class="c">/*= false*/</span>,
<span class="number">  8</span>                                <span class="k1">int</span> nBlendingPercentage <span class="c">/*= 100*/</span>  <span class="k2">)</span>
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>    <span class="c">// Leftmost X, mid Y</span>
<span class="number"> 11</span>    <span class="k1">int</span> nPos1X <span class="k3">=</span> nCornerTopLeftXPx<span class="k2">;</span>
<span class="number"> 12</span>    <span class="k1">int</span> nPos1Y <span class="k3">=</span> <span class="k2">(</span> nCornerBottomRightYPx <span class="k3">+</span> nCornerTopLeftYPx <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"> 13</span>
<span class="number"> 14</span>    <span class="c">// Topmost Y, mid X</span>
<span class="number"> 15</span>    <span class="k1">int</span> nPos2X <span class="k3">=</span> <span class="k2">(</span> nCornerBottomRightXPx <span class="k3">+</span> nCornerTopLeftXPx <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"> 16</span>    <span class="k1">int</span> nPos2Y <span class="k3">=</span> nCornerTopLeftYPx<span class="k2">;</span>
<span class="number"> 17</span>    
<span class="number"> 18</span>    <span class="c">// Rightmost X, mid Y</span>
<span class="number"> 19</span>    <span class="k1">int</span> nPos3X <span class="k3">=</span> nCornerBottomRightXPx<span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">int</span> nPos3Y <span class="k3">=</span> <span class="k2">(</span> nCornerBottomRightYPx <span class="k3">+</span> nCornerTopLeftYPx <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"> 21</span>    
<span class="number"> 22</span>    <span class="c">// Bottommost Y, mid X</span>
<span class="number"> 23</span>    <span class="k1">int</span> nPos4X <span class="k3">=</span> nPos2X<span class="k2">;</span>
<span class="number"> 24</span>    <span class="k1">int</span> nPos4Y <span class="k3">=</span> nCornerBottomRightYPx<span class="k2">;</span>
<span class="number"> 25</span>    
<span class="number"> 26</span>  
<span class="number"> 27</span>    DrawTriangle<span class="k2">(</span> nPos1X,
<span class="number"> 28</span>                  nPos1Y,
<span class="number"> 29</span>                  nPos2X,
<span class="number"> 30</span>                  nPos2Y,
<span class="number"> 31</span>                  nPos3X,
<span class="number"> 32</span>                  nPos3Y,
<span class="number"> 33</span>                  nLineWidth,
<span class="number"> 34</span>                  rCol,
<span class="number"> 35</span>                  fFilled,
<span class="number"> 36</span>                  nBlendingPercentage <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span>    DrawTriangle<span class="k2">(</span> nPos1X,
<span class="number"> 39</span>                  nPos1Y,
<span class="number"> 40</span>                  nPos4X,
<span class="number"> 41</span>                  nPos4Y,
<span class="number"> 42</span>                  nPos3X,
<span class="number"> 43</span>                  nPos3Y,
<span class="number"> 44</span>                  nLineWidth,
<span class="number"> 45</span>                  rCol,
<span class="number"> 46</span>                  fFilled,
<span class="number"> 47</span>                  nBlendingPercentage <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span><span class="k2">}</span>
<span class="number"> 50</span>
<span class="number"> 51</span><span class="k1">void</span> CEngine::DrawRectangle<span class="k2">(</span> <span class="k1">int</span> nStartX, 
<span class="number"> 52</span>                                  <span class="k1">int</span> nStartY,
<span class="number"> 53</span>                                  <span class="k1">int</span> nEndX,
<span class="number"> 54</span>                                  <span class="k1">int</span> nEndY,
<span class="number"> 55</span>                                  <span class="k1">int</span> nLineWidth,
<span class="number"> 56</span>                                  <span class="k1">const</span> RGBValue<span class="k3">&amp;</span> rCol,
<span class="number"> 57</span>                                  <span class="k1">bool</span> fFilled <span class="c">/*= false*/</span>,
<span class="number"> 58</span>                                  <span class="k1">int</span> nBlendingPercentage <span class="c">/*= 100 */</span> <span class="k2">)</span>
<span class="number"> 59</span><span class="k2">{</span>
<span class="number"> 60</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> col<span class="k2">;</span>
<span class="number"> 61</span>
<span class="number"> 62</span>    <span class="k1">if</span><span class="k2">(</span> nBlendingPercentage <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">100</span> <span class="k2">)</span>
<span class="number"> 63</span>    <span class="k2">{</span>
<span class="number"> 64</span>        col <span class="k3">=</span> MakeColourFromRGB<span class="k2">(</span> rCol <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>    <span class="k2">}</span>
<span class="number"> 66</span>    <span class="k1">else</span>
<span class="number"> 67</span>    <span class="k2">{</span>
<span class="number"> 68</span>        col <span class="k3">=</span> MakeColourFromRGB<span class="k2">(</span> rCol, nBlendingPercentage <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>    <span class="k2">}</span>
<span class="number"> 70</span>
<span class="number"> 71</span>    <span class="k1">if</span><span class="k2">(</span> fFilled <span class="k2">)</span>
<span class="number"> 72</span>    <span class="k2">{</span>
<span class="number"> 73</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span> nStartX, nStartY, nEndX, nEndY, col <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 74</span>    <span class="k2">}</span>
<span class="number"> 75</span>    <span class="k1">else</span>
<span class="number"> 76</span>    <span class="k2">{</span>
<span class="number"> 77</span>        <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span> nStartX, nStartY, nEndX, nEndY, col, nLineWidth <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>

For those interested in how the map is looking here is a WIP shot:</p><p><span class="remote-thumbnail"><span class="json">{"name":"mapwip.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/9\/99eea73c7016c301ba7731a646e0b2a6.png","w":768,"h":576,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/9\/9\/99eea73c7016c301ba7731a646e0b2a6"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/9/9/99eea73c7016c301ba7731a646e0b2a6-240.jpg" alt="mapwip.png" width="240" height="180" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ionising)</author>
		<pubDate>Mon, 14 Apr 2014 20:37:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m just guessing, but I&#39;d say you aren&#39;t getting hardware acceleration.  Drawing lines is pretty easy even for software, but filling areas takes thousands of memory accesses.  Show the code that sets the screen mode please.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Mon, 14 Apr 2014 21:02:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm I tried using the non-fill method (al_draw_triangle) and it was even worse performance wise ~8FPS!</p><p><span class="remote-thumbnail"><span class="json">{"name":"mapviewwipnonfilled.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/9\/d9e4a4492860f78f469f01ae2beeb73f.png","w":768,"h":576,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/9\/d9e4a4492860f78f469f01ae2beeb73f"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/d/9/d9e4a4492860f78f469f01ae2beeb73f-240.jpg" alt="mapviewwipnonfilled.png" width="240" height="180" /></span></p><p>This is the screen setting code, I&#39;m afraid it&#39;s part of my engine so there is plenty of extra logic in there, but I&#39;ve tried to cut it down to the essentials for clarity...</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>    <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span> <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> 
<span class="number">   2</span>    <span class="k2">{</span>
<span class="number">   3</span>        GetLogger<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>LogError<span class="k2">(</span> <span class="s">"al_init failed"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">   4</span>        <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">   5</span>    <span class="k2">}</span>
<span class="number">   6</span>
<span class="number">   7</span>    <span class="c">//</span>
<span class="number">   8</span>    <span class="c">//  Initialise the display</span>
<span class="number">   9</span>    <span class="c">//</span>
<span class="number">  10</span>
<span class="number">  11</span>    m_nGFXWidth <span class="k3">=</span> rConfig.m_nGraphicsWidth<span class="k2">;</span>
<span class="number">  12</span>    m_nGFXHeight <span class="k3">=</span> rConfig.m_nGraphicsHeight<span class="k2">;</span>
<span class="number">  13</span>
<span class="number">  14</span>    <span class="c">// Check the values are not too low or high</span>
<span class="number">  15</span>
<span class="number">  16</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY_MODE"><span class="a">ALLEGRO_DISPLAY_MODE</span></a> disp_data_minimum<span class="k2">;</span>
<span class="number">  17</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY_MODE"><span class="a">ALLEGRO_DISPLAY_MODE</span></a> disp_data_maximum<span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span>    <a href="http://www.allegro.cc/manual/al_get_display_mode"><span class="a">al_get_display_mode</span></a><span class="k2">(</span> <span class="n">0</span>, <span class="k3">&amp;</span>disp_data_minimum <span class="k2">)</span><span class="k2">;</span>       <span class="c">// First mode</span>
<span class="number">  20</span>    <a href="http://www.allegro.cc/manual/al_get_display_mode"><span class="a">al_get_display_mode</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/al_get_num_display_modes"><span class="a">al_get_num_display_modes</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span>, <span class="k3">&amp;</span>disp_data_maximum <span class="k2">)</span><span class="k2">;</span>      <span class="c">// Last mode (zero index)</span>
<span class="number">  21</span>
<span class="number">  22</span>    <span class="k1">if</span><span class="k2">(</span>    m_nGFXWidth <span class="k3">&lt;</span> <span class="k1">static_cast</span><span class="k3">&lt;</span> <span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">&gt;</span><span class="k2">(</span> disp_data_minimum.width <span class="k2">)</span>
<span class="number">  23</span>        <span class="k3">|</span><span class="k3">|</span> m_nGFXHeight <span class="k3">&lt;</span> <span class="k1">static_cast</span><span class="k3">&lt;</span> <span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">&gt;</span><span class="k2">(</span> disp_data_minimum.height <span class="k2">)</span> <span class="k2">)</span>
<span class="number">  24</span>    <span class="k2">{</span>
<span class="number">  25</span>        std::string strWarningMessage<span class="k2">;</span>
<span class="number">  26</span>        utls::FormatString<span class="k2">(</span> strWarningMessage, 
<span class="number">  27</span>                            <span class="s">"The supplied resolution (%ux%u) appears to be too low and not supported on this system."</span>, 
<span class="number">  28</span>                            m_nGFXWidth, 
<span class="number">  29</span>                            m_nGFXHeight <span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>
<span class="number">  31</span>        GetLogger<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>LogWarning<span class="k2">(</span> strWarningMessage <span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>        
<span class="number">  33</span>        <span class="c">// Attempt to continue</span>
<span class="number">  34</span>    <span class="k2">}</span>
<span class="number">  35</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>    m_nGFXWidth <span class="k3">&gt;</span> <span class="k1">static_cast</span><span class="k3">&lt;</span> <span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">&gt;</span><span class="k2">(</span> disp_data_maximum.width <span class="k2">)</span>
<span class="number">  36</span>             <span class="k3">|</span><span class="k3">|</span> m_nGFXHeight <span class="k3">&gt;</span> <span class="k1">static_cast</span><span class="k3">&lt;</span> <span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">&gt;</span><span class="k2">(</span> disp_data_maximum.height <span class="k2">)</span> <span class="k2">)</span>
<span class="number">  37</span>    <span class="k2">{</span>
<span class="number">  38</span>        std::string strWarningMessage<span class="k2">;</span>
<span class="number">  39</span>        utls::FormatString<span class="k2">(</span> strWarningMessage, 
<span class="number">  40</span>                            <span class="s">"The supplied resolution (%ux%u) appears to be too high and not supported on this system."</span>, 
<span class="number">  41</span>                            m_nGFXWidth, 
<span class="number">  42</span>                            m_nGFXHeight <span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span>        GetLogger<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>LogWarning<span class="k2">(</span> strWarningMessage <span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>        <span class="c">// Attempt to continue</span>
<span class="number">  47</span>    <span class="k2">}</span>
<span class="number">  48</span>
<span class="number">  49</span>    m_fShowSepiaOverlay <span class="k3">=</span> rConfig.fShowSepiaOverlay<span class="k2">;</span>
<span class="number">  50</span>
<span class="number">  51</span>    <span class="c">// Enumerate display modes</span>
<span class="number">  52</span>
<span class="number">  53</span>    <span class="k1">if</span><span class="k2">(</span> rConfig.fFullscreen <span class="k2">)</span>
<span class="number">  54</span>    <span class="k2">{</span>
<span class="number">  55</span>        <span class="k1">size_t</span> nTotalModes <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_num_display_modes"><span class="a">al_get_num_display_modes</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span> 
<span class="number">  57</span>        <span class="k1">bool</span> fRequestedModeFoundInSupportedModes <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  58</span>
<span class="number">  59</span>        std::vector<span class="k3">&lt;</span> std::string <span class="k3">&gt;</span> vecModes<span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>        <span class="k1">for</span><span class="k2">(</span> <span class="k1">size_t</span> nMode <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> nMode <span class="k3">&lt;</span> nTotalModes <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>nMode <span class="k2">)</span>
<span class="number">  62</span>        <span class="k2">{</span>
<span class="number">  63</span>            <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY_MODE"><span class="a">ALLEGRO_DISPLAY_MODE</span></a> disp_data<span class="k2">;</span>
<span class="number">  64</span>            <a href="http://www.allegro.cc/manual/al_get_display_mode"><span class="a">al_get_display_mode</span></a><span class="k2">(</span> nMode, <span class="k3">&amp;</span>disp_data <span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>
<span class="number">  66</span>            <span class="k1">if</span><span class="k2">(</span>    disp_data.width <span class="k3">=</span><span class="k3">=</span> <span class="k1">static_cast</span><span class="k3">&lt;</span> <span class="k1">int</span> <span class="k3">&gt;</span><span class="k2">(</span> m_nGFXWidth <span class="k2">)</span>
<span class="number">  67</span>                <span class="k3">&amp;</span><span class="k3">&amp;</span> disp_data.height <span class="k3">=</span><span class="k3">=</span> <span class="k1">static_cast</span><span class="k3">&lt;</span> <span class="k1">int</span> <span class="k3">&gt;</span><span class="k2">(</span> m_nGFXHeight <span class="k2">)</span> <span class="k2">)</span>
<span class="number">  68</span>            <span class="k2">{</span>
<span class="number">  69</span>                fRequestedModeFoundInSupportedModes <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  70</span>            <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>            std::string strModeBufer<span class="k2">;</span>
<span class="number">  73</span>            utls::FormatString<span class="k2">(</span> strModeBufer, 
<span class="number">  74</span>                                <span class="s">"Mode %u: %ux%u Format %u Refresh Rate %u"</span>,
<span class="number">  75</span>                                nMode,
<span class="number">  76</span>                                disp_data.width,
<span class="number">  77</span>                                disp_data.height,
<span class="number">  78</span>                                disp_data.format,
<span class="number">  79</span>                                disp_data.refresh_rate <span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>
<span class="number">  81</span>            vecModes.push_back<span class="k2">(</span> strModeBufer <span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>        <span class="k2">}</span>
<span class="number">  83</span>
<span class="number">  84</span>        <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span> fRequestedModeFoundInSupportedModes <span class="k2">)</span>
<span class="number">  85</span>        <span class="k2">{</span>
<span class="number">  86</span>            std::string strWarningMessage<span class="k2">;</span>
<span class="number">  87</span>            utls::FormatString<span class="k2">(</span> strWarningMessage, 
<span class="number">  88</span>                                <span class="s">"Requested graphics mode [%ux%u] does not appear to be supported by the driver."</span>,
<span class="number">  89</span>                                m_nGFXWidth,
<span class="number">  90</span>                                m_nGFXHeight <span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>
<span class="number">  92</span>            GetLogger<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>LogWarning<span class="k2">(</span> strWarningMessage <span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>            MessageBox<span class="k2">(</span> NULL, strWarningMessage.c_str<span class="k2">(</span><span class="k2">)</span>, <span class="s">"Warning"</span>, MB_OK <span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>
<span class="number">  95</span>            <span class="k1">auto</span> it <span class="k3">=</span> vecModes.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>            <span class="k1">auto</span> itEnd <span class="k3">=</span> vecModes.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span>            <span class="k1">for</span><span class="k2">(</span> <span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> itEnd <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>it <span class="k2">)</span>
<span class="number">  99</span>            <span class="k2">{</span>
<span class="number"> 100</span>                GetLogger<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>LogInfo<span class="k2">(</span> <span class="k3">*</span>it <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>            <span class="k2">}</span>
<span class="number"> 102</span>
<span class="number"> 103</span>            <span class="c">// Despite this, try to carry on...</span>
<span class="number"> 104</span>        <span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span>        <span class="k1">if</span><span class="k2">(</span> rConfig.fForceOpenGL <span class="k2">)</span>
<span class="number"> 107</span>        <span class="k2">{</span>
<span class="number"> 108</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_OPENGL <span class="k3">|</span> ALLEGRO_FULLSCREEN <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>        <span class="k2">}</span>
<span class="number"> 110</span>        <span class="k1">else</span>
<span class="number"> 111</span>        <span class="k2">{</span>
<span class="number"> 112</span>            <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span> ALLEGRO_FULLSCREEN <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>        <span class="k2">}</span>
<span class="number"> 114</span>        
<span class="number"> 115</span>        m_pDisplay <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> m_nGFXWidth, m_nGFXHeight <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>    <span class="k2">}</span>
<span class="number"> 117</span>    <span class="k1">else</span>
<span class="number"> 118</span>    <span class="k2">{</span>
<span class="number"> 119</span>        m_pDisplay <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> m_nGFXWidth, m_nGFXHeight <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>    <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ionising)</author>
		<pubDate>Tue, 15 Apr 2014 14:28:48 +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/614155/999482#target">Ionising</a> said:</div><div class="quote"><p> I&#39;ve been adding a minimap to my Isometric game, I first did this by drawing each cell as a simple square using al_draw_filled_rectangle. I then switched to using <b>two al_draw_filled_rectangle</b> calls to draw a diamond shape instead..</p></div></div><p>Did you mean <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_triangle"><span class="a">al_draw_triangle</span></a></span> where I did put bold text? Seems so looking at the code but ain&#39;t sure (no native English speaker here).</p><p>Is the diamond shape a rotated square? or is it a more generalized quadrilateral? </p><p>Either way, there SHOULD be single-call drawing functions (in the 5.1 branch?) of Allegro that could do the trick to get back to the 60-70FPS (just like <span class="source-code">al_draw_rotated_rectangle</span> maybe?)</p><p>Then again, we should find the cause of such a difference...skimming through your code I see nothing obvious but, you know, I am no expert there.</p><p>Are you in any position to properly profile the code?</p><p>Also, a more efficient solution could be caching the vertexes for each cell in a buffer and the use a single <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a> call</span>?</p><p>Sorry, just throwing around ideas for the moment....
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Tue, 15 Apr 2014 15:00:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey pkrcel, no I was using two calls to al_draw_filled_triangle. I switched to al_draw_triangle this morning to try something based on what Arthur Kalliokoski said but it made things worse..</p><p>The diamond shape is two triangles drawn one after the other (top then bottom), but you&#39;re right, I could try using a rotated square but I don&#39;t see any references to al_draw_rotated_rectangle in the 5.0.x library I&#39;m using. I&#39;d sooner not switch to an unstable branch unless there is no other choice...</p><p>I really don&#39;t understand why there would be such a difference in performance between these calls, hence the reason for this thread <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> for reference I&#39;m using Allegro 5.0.10. I can profile my code, but not the allegro library properly.</p><p>I think I&#39;m just going to load a suitably sized sprite and tint it to the correct colour as a work around for now, but it seems crazy to go through so much &#39;heavy&#39; lifting to draw a primitive <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ionising)</author>
		<pubDate>Tue, 15 Apr 2014 15:12:07 +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/614155/999539#target">Ionising</a> said:</div><div class="quote"><p> The diamond shape is two triangles drawn one after the other (top then bottom), but you&#39;re right, I could try using a rotated square but I don&#39;t see any references to al_draw_rotated_rectangle in the 5.0.x library I&#39;m using. I&#39;d sooner not switch to an unstable branch unless there is no other choice...</p></div></div><p>Just a quick post...I confused <b>rectangles</b> with <b>bitmaps</b>!!!! shame on me. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>EDIT:<br />in the 5.1 branch there is <span class="source-code">al_draw_filled_polygon</span> which should do the trick.</p><p>Anyway as I see it is a convenient wrapper around <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span>, which could be tougher to use but is available in 5.0 (I guess? there is no &quot;since&quot; in the docs for this).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Tue, 15 Apr 2014 15:17:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the prod in the right direction! I dug around and figured out how to make al_draw_prim do what I wanted. Getting about 50 FPS now which is almost twice what two triangle calls was for the same result.. going to fiddle a bit more but quite pleased with this. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>EDIT: Here is the optimised code:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">void</span> CSepiaEngine::DrawDiamond<span class="k2">(</span> <span class="k1">int</span> nCornerTopLeftXPx, 
<span class="number">  2</span>                                <span class="k1">int</span> nCornerTopLeftYPx,
<span class="number">  3</span>                                <span class="k1">int</span> nCornerBottomRightXPx,
<span class="number">  4</span>                                <span class="k1">int</span> nCornerBottomRightYPx,
<span class="number">  5</span>                                <span class="k1">const</span> RGBValue<span class="k3">&amp;</span> rCol,
<span class="number">  6</span>                                <span class="k1">bool</span> fFilled <span class="c">/*= false*/</span>,
<span class="number">  7</span>                                <span class="k1">int</span> nBlendingPercentage <span class="c">/*= 100*/</span>  <span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>
<span class="number"> 10</span>    <span class="c">// Leftmost X, mid Y</span>
<span class="number"> 11</span>    <span class="k1">int</span> nPos1X <span class="k3">=</span> nCornerTopLeftXPx<span class="k2">;</span>
<span class="number"> 12</span>    <span class="k1">int</span> nPos1Y <span class="k3">=</span> <span class="k2">(</span> nCornerBottomRightYPx <span class="k3">+</span> nCornerTopLeftYPx <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"> 13</span>
<span class="number"> 14</span>    <span class="c">// Topmost Y, mid X</span>
<span class="number"> 15</span>    <span class="k1">int</span> nPos2X <span class="k3">=</span> <span class="k2">(</span> nCornerBottomRightXPx <span class="k3">+</span> nCornerTopLeftXPx <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"> 16</span>    <span class="k1">int</span> nPos2Y <span class="k3">=</span> nCornerTopLeftYPx<span class="k2">;</span>
<span class="number"> 17</span>    
<span class="number"> 18</span>    <span class="c">// Rightmost X, mid Y</span>
<span class="number"> 19</span>    <span class="k1">int</span> nPos3X <span class="k3">=</span> nCornerBottomRightXPx<span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">int</span> nPos3Y <span class="k3">=</span> <span class="k2">(</span> nCornerBottomRightYPx <span class="k3">+</span> nCornerTopLeftYPx <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"> 21</span>    
<span class="number"> 22</span>    <span class="c">// Bottommost Y, mid X</span>
<span class="number"> 23</span>    <span class="k1">int</span> nPos4X <span class="k3">=</span> nPos2X<span class="k2">;</span>
<span class="number"> 24</span>    <span class="k1">int</span> nPos4Y <span class="k3">=</span> nCornerBottomRightYPx<span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> vertices<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 27</span>    
<span class="number"> 28</span>    vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> nPos1X<span class="k2">;</span>
<span class="number"> 29</span>    vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> nPos1Y<span class="k2">;</span>
<span class="number"> 30</span>    vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 31</span>    vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.u <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 32</span>    vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.v <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 33</span>    vertices<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.color <span class="k3">=</span> MakeColourFromRGB<span class="k2">(</span> rCol, nBlendingPercentage <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>    vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> nPos2X<span class="k2">;</span>
<span class="number"> 36</span>    vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> nPos2Y<span class="k2">;</span>
<span class="number"> 37</span>    vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 38</span>    vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.u <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 39</span>    vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.v <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 40</span>    vertices<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.color <span class="k3">=</span> MakeColourFromRGB<span class="k2">(</span> rCol, nBlendingPercentage <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>
<span class="number"> 42</span>    vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.x <span class="k3">=</span> nPos3X<span class="k2">;</span>
<span class="number"> 43</span>    vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">=</span> nPos3Y<span class="k2">;</span>
<span class="number"> 44</span>    vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 45</span>    vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.u <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 46</span>    vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.v <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 47</span>    vertices<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.color <span class="k3">=</span> MakeColourFromRGB<span class="k2">(</span> rCol, nBlendingPercentage <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span>    vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.x <span class="k3">=</span> nPos4X<span class="k2">;</span>
<span class="number"> 50</span>    vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">=</span> nPos4Y<span class="k2">;</span>
<span class="number"> 51</span>    vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 52</span>    vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.u <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 53</span>    vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.v <span class="k3">=</span> vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 54</span>    vertices<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.color <span class="k3">=</span> MakeColourFromRGB<span class="k2">(</span> rCol, nBlendingPercentage <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>
<span class="number"> 56</span>    <span class="c">// More info on types: https://www.allegro.cc/manual/5/allegro_prim_type</span>
<span class="number"> 57</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_PRIM_TYPE"><span class="a">ALLEGRO_PRIM_TYPE</span></a> eDrawingType <span class="k3">=</span> fFilled ? ALLEGRO_PRIM_TRIANGLE_FAN <span class="k2">:</span> ALLEGRO_PRIM_LINE_STRIP<span class="k2">;</span>
<span class="number"> 58</span>
<span class="number"> 59</span>    <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span> vertices, 
<span class="number"> 60</span>                  nullptr,
<span class="number"> 61</span>                  <span class="n">0</span>,    <span class="c">// No texture</span>
<span class="number"> 62</span>                  <span class="n">0</span>,
<span class="number"> 63</span>                  <span class="n">4</span>,
<span class="number"> 64</span>                  eDrawingType <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>
<span class="number"> 66</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ionising)</author>
		<pubDate>Tue, 15 Apr 2014 15:52:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You will also find that drawing bitmaps will be substantially faster than drawing (filled or not) primitives.  You would get a speed boost if you made square bitmaps and drew those instead.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 15 Apr 2014 16:02:20 +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/614155/999544#target">Ionising</a> said:</div><div class="quote"><p> Thanks for the prod in the right direction! I dug around and figured out how to make al_draw_prim do what I wanted. Getting about 50 FPS now which is almost twice what two triangle calls was for the same result.. going to fiddle a bit more but quite pleased with this.</p></div></div><p>There are countless discussions about primitives having overhead, not really sure if unfounded or not, anyway it makes sense that you group all calls to <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a> building</span> a list of vertexes and making a single draw call....call it an exercise, and if you succeed pls share results with me as I have no Idea of what I&#39;m talking about <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614155/999545#target">Mark Oates</a> said:</div><div class="quote"><p> You will also find that drawing bitmaps will be substantially faster than drawing (filled or not) primitives. You would get a speed boost if you made square bitmaps and drew those instead. </p></div></div><p>Wouldn&#39;t this be true only if holding bitmap draws (<span class="source-code"><a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a></span>)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Tue, 15 Apr 2014 16:22:28 +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/614155/999547#target">pkrcel</a> said:</div><div class="quote"><p>Wouldn&#39;t this be true only if holding bitmap draws (al_hold_bitmap_drawing)? </p></div></div><p>I&#39;ve never actually run any tests with al_hold_bitmap_drawing, but I can tell you that you will get a faster render with bitmaps whether or not you defer your bitmap drawing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 15 Apr 2014 17:11:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="https://www.allegro.cc/forums/thread/613609/993692#target">Recent</a> <a href="https://www.allegro.cc/forums/thread/614089/998543#target">discussions</a> seem to indicate that there is some controversy about that...</p><p>Batching a single <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span> (with either textures or not) seems still the most efficient way to draw a (somewhat big) bunch of (maybe non overlapping) things...</p><p>Defer drawing seems to have similar effects as batching draw calls in <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span>.</p><p>I found it extremely interesting but I am unable to test that right-no, actually I am unable to devote any <i>serious</i> time to Allegro or programming (aside participating in the forums not to rot my already abysmal knowledge <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /> )</p><p>EDIT:<br />Hey ionising thaks for posting the draw code...interesting...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Tue, 15 Apr 2014 17:36:42 +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/614155/999554#target">Mark Oates</a> said:</div><div class="quote"><p>I&#39;ve never actually run any tests with al_hold_bitmap_drawing, but I can tell you that you will get a faster render with bitmaps whether or not you defer your bitmap drawing.</p></div></div><p>
Does using the al_draw_(primitive) functions create a vertex buffer, fill it, pass it on and the destroy it, and that is the reason why bitmap drawing is faster even without deferred drawing?<br />If so then I think using <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span> won&#39;t help (since you are passing vertex data from your memory), but using <span class="source-code">al_draw_vertex_buffer</span> should speed things up considerably, though I see no simple way to control where the buffer will be drawn other then setting the appropriate transformation before drawing and then restoring it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Slartibartfast)</author>
		<pubDate>Tue, 15 Apr 2014 17:52:18 +0000</pubDate>
	</item>
</rss>
