<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>performance issues with al_draw_prim</title>
		<link>http://www.allegro.cc/forums/view/614949</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 07 Jan 2015 10:58:55 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>My 3D engine relies on using al_draw_indexed_prim to draw the 3D models in my scene, but I have found that there is a severe performance bottleneck with this method.  While my actual production code is immensely more complex, this simple example should demonstrate how I typically (and probably not ideally) use the pipeline:</p><p>In this example, I am drawing 10,000 &quot;Models&quot;.  Each model is just a 3-vertex triangle and is drawn through al_draw_indexed_prim.  (You&#39;ll have to hard crash the running program yourself)</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="number">   2</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro.h&gt; </span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">   7</span>
<span class="number">   8</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">float</span> random_float<span class="k2">(</span><span class="k1">float</span> min, <span class="k1">float</span> max<span class="k2">)</span>
<span class="number">  11</span><span class="k2">{</span>
<span class="number">  12</span>    <span class="k1">return</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span>RAND_MAX<span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>max-min<span class="k2">)</span> <span class="k3">+</span> min<span class="k2">;</span>
<span class="number">  13</span><span class="k2">}</span>
<span class="number">  14</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="c">// note: uncomment the commented lines of</span>
<span class="number">  17</span><span class="c">// code in this class to include the random</span>
<span class="number">  18</span><span class="c">// placement of objects (through ALLEGRO_TRANSFORM).</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">class</span> Model
<span class="number">  21</span><span class="k2">{</span>
<span class="number">  22</span>public:
<span class="number">  23</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> vertex<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  24</span>  <span class="c">//ALLEGRO_TRANSFORM placement;</span>
<span class="number">  25</span>  Model<span class="k2">(</span><span class="k2">)</span>
<span class="number">  26</span>  <span class="k2">{</span>
<span class="number">  27</span>    vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  28</span>    vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  29</span>    vertex<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">  30</span>    vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">128</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span>    vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  33</span>    vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  34</span>    vertex<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">  35</span>    vertex<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">128</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>
<span class="number">  37</span>    vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  38</span>    vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  39</span>    vertex<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">  40</span>    vertex<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">128</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>
<span class="number">  42</span>    <span class="c">//al_identity_transform(&amp;placement);</span>
<span class="number">  43</span>    <span class="c">//al_scale_transform(&amp;placement, random_float(0.2, 1.5), random_float(0.2, 1.5));</span>
<span class="number">  44</span>    <span class="c">//al_rotate_transform(&amp;placement, random_float(0, 1));</span>
<span class="number">  45</span>    <span class="c">//al_translate_transform(&amp;placement, random_float(0, 800), random_float(0, 500));</span>
<span class="number">  46</span>  <span class="k2">}</span> 
<span class="number">  47</span>  <span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span>
<span class="number">  48</span>  <span class="k2">{</span>
<span class="number">  49</span>    <span class="k1">int</span> indices<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0</span>, <span class="n">1</span>, <span class="n">2</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  50</span>
<span class="number">  51</span>    <span class="c">//ALLEGRO_STATE previous_state;</span>
<span class="number">  52</span>    <span class="c">//al_store_state(&amp;previous_state, ALLEGRO_STATE_TRANSFORM);</span>
<span class="number">  53</span>
<span class="number">  54</span>    <span class="c">//al_use_transform(&amp;placement);</span>
<span class="number">  55</span>    <a href="http://www.allegro.cc/manual/al_draw_indexed_prim"><span class="a">al_draw_indexed_prim</span></a><span class="k2">(</span><span class="k3">&amp;</span>vertex<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, NULL, NULL, indices, <span class="n">3</span>, ALLEGRO_PRIM_TRIANGLE_LIST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</span>    <span class="c">//al_restore_state(&amp;previous_state);</span>
<span class="number">  58</span>  <span class="k2">}</span>
<span class="number">  59</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>
<span class="number">  62</span>
<span class="number">  63</span>
<span class="number">  64</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span> 
<span class="number">  65</span><span class="k2">{</span>
<span class="number">  66</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">  67</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>
<span class="number">  70</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>disp <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><span class="n">800</span>, <span class="n">500</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  71</span>
<span class="number">  72</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  73</span>  <span class="k1">bool</span> strobe <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span>  <span class="c">// create the models</span>
<span class="number">  76</span>
<span class="number">  77</span>  std::vector<span class="k3">&lt;</span>Model&gt; models<span class="k2">;</span>
<span class="number">  78</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">10000</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="c">// in this example, draw 10000 triangles</span>
<span class="number">  79</span>  <span class="k2">{</span>
<span class="number">  80</span>    Model model<span class="k2">;</span>
<span class="number">  81</span>    models.push_back<span class="k2">(</span>model<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="c">// do the loop</span>
<span class="number">  85</span>
<span class="number">  86</span>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">  87</span>  <span class="k2">{</span>
<span class="number">  88</span>    <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">64</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>models.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  91</span>      models<span class="k2">[</span>i<span class="k2">]</span>.draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>
<span class="number">  93</span>    <span class="c">// a strobing circle, will alternate on/off between frames</span>
<span class="number">  94</span>    <span class="c">// to demonstrate drawing speed</span>
<span class="number">  95</span>    <span class="k1">if</span> <span class="k2">(</span>strobe<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">20</span>, <span class="n">20</span>, <span class="n">8</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>    strobe <span class="k3">=</span> <span class="k3">!</span>strobe<span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</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">  99</span>  <span class="k2">}</span>
<span class="number"> 100</span><span class="k2">}</span>
</div></div><p>

In my <i>real</i> code, each model is more complex, is projected in 3D, and has textures.</p><p>Now, in the example program above, I am drawing 10,000 models with 3 vertexes each, so, 30,000 vertexes each loop.  It&#39;s my understanding that a cheap modern graphics card can push ~500 <i>million</i> vertexes in a second, so what gives?  Why is there already such a substantial lag at 30,000 vertexes?  What should I be doing instead?</p><p>Here are some pretty screenshots:<br />example program from above (with transforms on)<br /><span class="remote-thumbnail"><span class="json">{"name":"609131","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/9\/d9d57232f36a88503323c2a0e5d79c20.png","w":819,"h":548,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/9\/d9d57232f36a88503323c2a0e5d79c20"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/d/9/d9d57232f36a88503323c2a0e5d79c20-240.jpg" alt="609131" width="240" height="160" /></span><br />example from production (already laggy):<br /><span class="remote-thumbnail"><span class="json">{"name":"609130","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/8\/580f4973b673ba83e5acb7b75d2a48b3.png","w":1276,"h":711,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/8\/580f4973b673ba83e5acb7b75d2a48b3"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/8/580f4973b673ba83e5acb7b75d2a48b3-240.jpg" alt="609130" width="240" height="133" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 03 Jan 2015 23:40:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t have to do anything to crash it. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />
</p><pre>
Program received signal SIGSEGV, Segmentation fault.
0x000000004009fee7 in ?? ()
(gdb) bt
#0  0x000000004009fee7 in ?? ()
#1  0x00007ffff256f53b in ?? () from /usr/lib64/libnvidia-glcore.so.331.20
#2  0x00007ffff25731ef in ?? () from /usr/lib64/libnvidia-glcore.so.331.20
#3  0x00007ffff21c2012 in ?? () from /usr/lib64/libnvidia-glcore.so.331.20
#4  0x00007ffff78c0cfa in _al_draw_prim_indexed_opengl () from /usr/local/lib64/liballegro_primitives.so.5.1
#5  0x00007ffff78c3a63 in al_draw_indexed_prim () from /usr/local/lib64/liballegro_primitives.so.5.1
#6  0x0000000000401265 in Model::draw (this=0x7fffefb48010) at t.cpp:53
#7  0x0000000000401010 in main (argc=1, argv=0x7fffffffe0c8) at t.cpp:89
(gdb) 
</pre><p>

[EDIT]</p><p>Well if I use the allegro debug libs I get this instead.
</p><pre>
t: /home/prog/allegro-5.1.8/addons/primitives/primitives.c:109: al_draw_indexed_prim: Assertion `indices&#39; failed.
</pre><p>

[EDIT 2]</p><p>If I put in a line </p><pre>int indices[] = { 0, 1, 2 };</pre><p> and change line 53 to </p><pre>al_draw_indexed_prim(&amp;vertex[0], NULL, NULL, indices, 3, ALLEGRO_PRIM_TRIANGLE_LIST);</pre><p> it doesn&#39;t crash but only shows one triangle with a round thingee.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Sun, 04 Jan 2015 00:01:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh so weird, how did I miss that... and how did my program not crash as a result??? OK, I&#39;ll edit my first post.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 04 Jan 2015 00:31:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should be using VBOs or something, you&#39;ll never get anywhere near 500 mil verts without batching them and keeping them on the GPU. It&#39;s kind of like al_hold_bitmap_drawing only worse. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sun, 04 Jan 2015 06:08:31 +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/614949/1008766#target">Arthur Kalliokoski</a> said:</div><div class="quote"><p>
it doesn&#39;t crash but only shows one triangle with a round thingee. 
</p></div></div><p>
You have to uncomment the transform lines with the random_float calls
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 04 Jan 2015 06:22:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Each <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span> call has some overhead, so if you want to get better performance, you want to minimize the number of those calls. Additionally, as Trent said, if you use vertex buffers, then things will go even faster. There&#39;s a vertex buffer API in the primitives addon. There&#39;s basically no reason not to use it (even for dynamically updated data, vertex buffers tend to be faster than <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span>).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 04 Jan 2015 09:53:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can only use a vertex buffer in OpenGL mode on Vista. Doesn&#39;t matter how I create it in D3D it returns 0. And even in OpenGL mode performance isn&#39;t much better than al_draw_prim, batched or not.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 04 Jan 2015 10:00:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s interesting. Do you have a reasonably modern GPU?</p><p>But either way, it&#39;s good that it&#39;s not worse in OpenGL otherwise I&#39;d have to eat my earlier post <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 04 Jan 2015 10:02:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s a crappy integrated ATI Radeon X1270 on my Gateway Vista laptop.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 04 Jan 2015 10:05:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>this is <a href="https://github.com/liballeg/allegro5/blob/5.1/examples/ex_vertex_buffer.c">ex_vertex_buffer.c</a> on my computer.</p><p>As is (Direct3D):<br /><span class="remote-thumbnail"><span class="json">{"name":"609136","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/d\/5dc9c5a4bd354d5524f560d83763c9b4.png","w":669,"h":537,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/d\/5dc9c5a4bd354d5524f560d83763c9b4"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/d/5dc9c5a4bd354d5524f560d83763c9b4-240.jpg" alt="609136" width="240" height="192" /></span></p><p>with <span class="source-code"><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="k2">)</span><span class="k2">;</span></span><br /><span class="remote-thumbnail"><span class="json">{"name":"609135","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/4\/2457de99f0e0fb0b741e05c4b1be79d9.png","w":668,"h":529,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/4\/2457de99f0e0fb0b741e05c4b1be79d9"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/2/4/2457de99f0e0fb0b741e05c4b1be79d9-240.jpg" alt="609135" width="240" height="190" /></span><br /><span class="remote-thumbnail"><span class="json">{"name":"609137","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/e\/4e2c71ae6ea682b77fd959cfa7bcbec0.png","w":674,"h":526,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/4\/e\/4e2c71ae6ea682b77fd959cfa7bcbec0"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/e/4e2c71ae6ea682b77fd959cfa7bcbec0-240.jpg" alt="609137" width="240" height="187" /></span></p><p>... don&#39;t know what these numbers represent, but there they are. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 04 Jan 2015 21:30:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wow, a second person non-functioning D3D vertex buffers. Is your GPU pretty bad too?</p><p>Either way, those numbers are frames per second (FPS <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />) in scientific notation. The top circle is <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span> and the rest are vertex buffers. Dynamic means you&#39;re changing the buffer every frame, and static means you don&#39;t. It looks like vertex buffers are 30% - 50% faster on your system.</p><p>Incidentally,</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614949/1008830#target">Mark Oates</a> said:</div><div class="quote"><p> al_set_new_display_flags(ALLEGRO_OPENGL);</p></div></div><p>I prefer to use allegro5.cfg to switch backends for the examples.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 05 Jan 2015 01:57:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That one was a Intel HD Graphics 4000, it&#39;s the onboard graphics card on my laptop.  It&#39;s not a bad chip.</p><p>I also have an external doc with a &quot;much more powerful&quot; AMD Radeon HD 7670M, but looking at the numbers I don&#39;t see much of a change: <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>D3D:<br /><span class="remote-thumbnail"><span class="json">{"name":"609140","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/7\/b7e98fb3d161b09f68d002e8e4343c56.png","w":679,"h":542,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/7\/b7e98fb3d161b09f68d002e8e4343c56"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/b/7/b7e98fb3d161b09f68d002e8e4343c56-240.jpg" alt="609140" width="240" height="191" /></span></p><p>with OpenGL:<br /><span class="remote-thumbnail"><span class="json">{"name":"609138","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/2\/d29378d37b9e076abc344d4d6408dbb9.png","w":666,"h":538,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/2\/d29378d37b9e076abc344d4d6408dbb9"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/d/2/d29378d37b9e076abc344d4d6408dbb9-240.jpg" alt="609138" width="240" height="193" /></span><br /><span class="remote-thumbnail"><span class="json">{"name":"609139","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/5\/d5a15e18245ac913096e3a238456a140.png","w":674,"h":538,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/d\/5\/d5a15e18245ac913096e3a238456a140"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/d/5/d5a15e18245ac913096e3a238456a140-240.jpg" alt="609139" width="240" height="191" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 05 Jan 2015 02:29:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve added some more logging to the D3D side of things in the primitives addon. Could either of you get the latest 5.1 branch, compile in Debug mode and check out the allegro.log?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Tue, 06 Jan 2015 09:15:04 +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/614949/1008837#target">SiegeLord</a> said:</div><div class="quote"><p>
I prefer to use allegro5.cfg to switch backends for the examples. 
</p></div></div><p>
Is allegro5.cfg documented anywhere? What the various options are, what the syntax is, so on...</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614949/1008898#target">SiegeLord</a> said:</div><div class="quote"><p>
I&#39;ve added some more logging to the D3D side of things in the primitives addon. Could either of you get the latest 5.1 branch, compile in Debug mode and check out the allegro.log? 
</p></div></div><p>
Here&#39;s my <a href="https://www.allegro.cc/files/attachment/609155">allegro.log</a> file.</p><p>(What I think) the relevant parts are :
</p><div class="source-code snippet"><div class="inner"><pre>d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:60   is_legacy_card                   <span class="k2">[</span>   <span class="n">0</span>.<span class="n">27891</span><span class="k2">]</span> Your GPU is considered legacy<span class="k3">!</span> Some of the features of the primitives addon will be slower<span class="k3">/</span>disabled.
d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:1022 _al_create_vertex_buffer_directx <span class="k2">[</span>   <span class="n">0</span>.<span class="n">27896</span><span class="k2">]</span> Cannot create vertex buffer <span class="k1">for</span> a legacy card.
d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:1022 _al_create_vertex_buffer_directx <span class="k2">[</span>   <span class="n">0</span>.<span class="n">27898</span><span class="k2">]</span> Cannot create vertex buffer <span class="k1">for</span> a legacy card.
d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:1022 _al_create_vertex_buffer_directx <span class="k2">[</span>   <span class="n">0</span>.<span class="n">27900</span><span class="k2">]</span> Cannot create vertex buffer <span class="k1">for</span> a legacy card.
d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:1022 _al_create_vertex_buffer_directx <span class="k2">[</span>   <span class="n">0</span>.<span class="n">27902</span><span class="k2">]</span> Cannot create vertex buffer <span class="k1">for</span> a legacy card.
d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:1022 _al_create_vertex_buffer_directx <span class="k2">[</span>   <span class="n">0</span>.<span class="n">27903</span><span class="k2">]</span> Cannot create vertex buffer <span class="k1">for</span> a legacy card.
d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:1022 _al_create_vertex_buffer_directx <span class="k2">[</span>   <span class="n">0</span>.<span class="n">27905</span><span class="k2">]</span> Cannot create vertex buffer <span class="k1">for</span> a legacy card.
d3d_primitives W C:\mingw\LIBS\A5GIT\allegro\addons\primitives\prim_directx.cpp:1069 _al_create_index_buffer_directx  <span class="k2">[</span>   <span class="n">0</span>.<span class="n">28117</span><span class="k2">]</span> Cannot create <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> buffer <span class="k1">for</span> a legacy card.
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 06 Jan 2015 23:21:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve had the legacy card check go wrong on me before with shaders. If you return false from that function does it work?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Jan 2015 23:46:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>To check, I ran it on my desktop with an ATI Radeon 4600 series gfx card, and it created the vertex buffers in dynamic and non-dynamic mode. I get about 1100 frames with a buffer dynamically and about 2300 statically. (I get about 1300 frames dynamically with no buffer, which seems backwards). However, allegro.log says my card is still legacy, which it shouldn&#39;t be. It&#39;s a fairly decent gpu from about 5 years ago. The <a href="https://www.allegro.cc/files/attachment/609156">allegro log file</a> is attached again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 07 Jan 2015 00:06:16 +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/614949/1008915#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>  Is allegro5.cfg documented anywhere? What the various options are, what the syntax is, so on...</p></div></div><p>There&#39;s a prototypical copy inside the root directory of the source distributions. Here it is online: <a href="https://github.com/liballeg/allegro5/blob/5.1/allegro5.cfg">https://github.com/liballeg/allegro5/blob/5.1/allegro5.cfg</a> . I&#39;m adding documentation about this next to <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_system_config"><span class="a">al_get_system_config</span></a></span>, but I think we can do something better with this... perhaps generate it automatically somehow.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 07 Jan 2015 10:58:55 +0000</pubDate>
	</item>
</rss>
