<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Speed issues with Allegro 5.0.4</title>
		<link>http://www.allegro.cc/forums/view/608765</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 09 Nov 2011 01:37:16 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
I am having some issues with Allegro that I simply can&#39;t figure out how to solve myself, after spending some time searching for an answer I still haven&#39;t found anything that I could use.</p><p>I am new to Allegro, so there&#39;s much I don&#39;t know yet, so please don&#39;t hate me for this question. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /><br />I have, however, spent some time with C++ so I know how to do some things, but I&#39;m far, far from an expert.</p><p>I&#39;m trying to make a program that I will eventually expand to a game, but for now I&#39;m working on a level editor, and I&#39;ve managed to set up a decent interface and the GUI is working as I want it to. Everything works just as I expected - just tens if not hundreds of times slower... I have noticed that my simple GUI renders at about 20-30 FPS, which is just ridiculously slow. However, as soon as I take out the drawing part from my main loop, the program runs much faster, I&#39;d estimate much more than 1000 FPS. Just a very rough guess as the program seems to run 960 frames in less than a second.</p><p>I have no idea what I can do to fix this...<br />I&#39;m using Microsoft Visual C++ 2010 and Allegro 5.0.4, and this is some parts of the code I use to draw everything:</p><p>Setting up Allegro:
</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">bool</span> gfx_init<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="c">// Error-checking</span>
<span class="number">  4</span>  <span class="k1">bool</span> noerror <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  <span class="c">// Starting Allegro</span>
<span class="number">  7</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">  8</span>  <span class="k2">{</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>NULL, <span class="s">""</span>, <span class="s">""</span>, <span class="s">"Failed to initialize Allegro!"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>    noerror <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>  <span class="k1">if</span> <span class="k2">(</span>noerror<span class="k2">)</span>  <span class="c">// Setting up the screen</span>
<span class="number"> 14</span>    window_set_size<span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 17</span>  <span class="k2">{</span>
<span class="number"> 18</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>NULL, <span class="s">""</span>, <span class="s">""</span>, <span class="s">"Failed to initialize Allegro image!"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    noerror <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 24</span>  <span class="k2">{</span>
<span class="number"> 25</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>NULL, <span class="s">""</span>, <span class="s">""</span>, <span class="s">"Failed to initialize Allegro TTF!"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    noerror <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 30</span>  <span class="k2">{</span>
<span class="number"> 31</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>NULL, <span class="s">""</span>, <span class="s">""</span>, <span class="s">"Failed to initialize Allegro keyboard!"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    noerror <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 33</span>  <span class="k2">}</span>
<span class="number"> 34</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 35</span>  <span class="k2">{</span>
<span class="number"> 36</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>NULL, <span class="s">""</span>, <span class="s">""</span>, <span class="s">"Failed to initialize Allegro mouse!"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>    noerror <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 38</span>  <span class="k2">}</span>
<span class="number"> 39</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_install_joystick"><span class="a">al_install_joystick</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 40</span>  <span class="k2">{</span>
<span class="number"> 41</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>NULL, <span class="s">""</span>, <span class="s">""</span>, <span class="s">"Failed to initialize Allegro joystick!"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>    noerror <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 43</span>  <span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span>  <span class="c">// Handle other things related to Allegro</span>
<span class="number"> 46</span>  <span class="k1">if</span> <span class="k2">(</span>noerror<span class="k2">)</span>
<span class="number"> 47</span>  <span class="k2">{</span>
<span class="number"> 48</span>    <span class="c">// Set the bitmaps to video memory</span>
<span class="number"> 49</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"> 50</span>  <span class="k2">}</span>
<span class="number"> 51</span>
<span class="number"> 52</span>  <span class="c">// Return</span>
<span class="number"> 53</span>  <span class="k1">return</span> noerror<span class="k2">;</span>
<span class="number"> 54</span><span class="k2">}</span>
</div></div><p>

Setting up a display
</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> window_set_size<span class="k2">(</span><span class="k1">int</span> width, <span class="k1">int</span> height<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="c">// Set the new width/height</span>
<span class="number">  4</span>  screen_width <span class="k3">=</span> width<span class="k2">;</span>
<span class="number">  5</span>  screen_height <span class="k3">=</span> height<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>  <span class="c">// Reset the screen</span>
<span class="number">  8</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a> <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span> <span class="c">// Todo: Move the window to center of screen after resizing it. This line will be removed later...</span>
<span class="number"> 10</span>    <span class="c">//al_resize_display(screen, window_get_width(), window_get_height());</span>
<span class="number"> 11</span>  <span class="c">//else</span>
<span class="number"> 12</span>    <a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a> <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>window_get_width<span class="k2">(</span><span class="k2">)</span>, window_get_height<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a><span class="k2">)</span>
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>NULL, <span class="s">""</span>, <span class="s">""</span>, <span class="s">"Failed to set up a screen!"</span>, NULL, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>  <span class="k1">if</span> <span class="k2">(</span>buffer <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 18</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  buffer <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>window_get_width<span class="k2">(</span><span class="k2">)</span>, window_get_height<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>

Main loop drawing
</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="c">// Process draw event</span>
<span class="number">  2</span>    surface_reset_target<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  <span class="c">// Make sure that the surface gets reset, may cause unwanted problems if it isn't</span>
<span class="number">  3</span>    <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>viewport_count<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  4</span>    <span class="k2">{</span>
<span class="number">  5</span>      <span class="c">// Get viewport</span>
<span class="number">  6</span>      viewport_current <span class="k3">=</span> <span class="k2">(</span>s_viewport<span class="k3">*</span><span class="k2">)</span>list_find_value<span class="k2">(</span>viewport_list, i<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>      current <span class="k3">=</span> viewport_get_surface<span class="k2">(</span>viewport_current<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</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>current<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>      <span class="c">// Clear viewport to black</span>
<span class="number"> 11</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>viewport_current-&gt;color<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>      <span class="c">// Draw objects to viewport</span>
<span class="number"> 14</span>      node <span class="k3">=</span> object_list-&gt;start<span class="k2">;</span>
<span class="number"> 15</span>      <span class="k1">while</span> <span class="k2">(</span>node <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 16</span>      <span class="k2">{</span>
<span class="number"> 17</span>        object <span class="k3">=</span> <span class="k2">(</span>c_base<span class="k3">*</span><span class="k2">)</span>node-&gt;data<span class="k2">;</span>
<span class="number"> 18</span>        node <span class="k3">=</span> node-&gt;next<span class="k2">;</span>
<span class="number"> 19</span>        object-&gt;event_draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>      <span class="k2">}</span>
<span class="number"> 21</span>    <span class="k2">}</span>
<span class="number"> 22</span>    
<span class="number"> 23</span>
<span class="number"> 24</span>    <span class="c">// Draw buffer to screen and update screen</span>
<span class="number"> 25</span>    surface_reset_target<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>    <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>viewport_count<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 28</span>    <span class="k2">{</span>
<span class="number"> 29</span>      <span class="c">// Obtain viewport bitmap</span>
<span class="number"> 30</span>      viewport_current <span class="k3">=</span> <span class="k2">(</span>s_viewport<span class="k3">*</span><span class="k2">)</span>list_find_value<span class="k2">(</span>viewport_list, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>      current <span class="k3">=</span> viewport_get_surface<span class="k2">(</span>viewport_current<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>      <span class="c">// Draw viewports to screen</span>
<span class="number"> 34</span>      draw_bitmap<span class="k2">(</span>current, viewport_current-&gt;port-&gt;x, viewport_current-&gt;port-&gt;y, <span class="n">0</span>,<span class="n">0</span>,
<span class="number"> 35</span>          viewport_current-&gt;port-&gt;w<span class="k3">/</span>viewport_current-&gt;view-&gt;w, viewport_current-&gt;port-&gt;h<span class="k3">/</span>viewport_current-&gt;view-&gt;h,
<span class="number"> 36</span>          <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>    <span class="k2">}</span>
<span class="number"> 38</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="c">// Update screen</span>
</div></div><p>

Drawing bitmaps:
</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> draw_bitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap, <span class="k1">float</span> x, <span class="k1">float</span> y, <span class="k1">float</span> offx, <span class="k1">float</span> offy, <span class="k1">float</span> scalex, <span class="k1">float</span> scaley, <span class="k1">float</span> angle<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">if</span> <span class="k2">(</span>bitmap <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>  <span class="c">// Can't draw an invalid bitmap</span>
<span class="number">  4</span>    <span class="k1">return</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  <span class="c">// Actual drawing</span>
<span class="number">  7</span>  <span class="k1">if</span> <span class="k2">(</span>angle <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  8</span>  <span class="k2">{</span>
<span class="number">  9</span>    <span class="k1">if</span> <span class="k2">(</span>scalex <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> scaley <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 10</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bitmap, x-offx, y-offy, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">else</span>
<span class="number"> 12</span>    <span class="k2">{</span>
<span class="number"> 13</span>      <span class="k1">float</span> w <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>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>      <span class="k1">float</span> h <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>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>      <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>bitmap, <span class="n">0</span>, <span class="n">0</span>, w, h, x-offx, y-offy, w<span class="k3">*</span>scalex, h<span class="k3">*</span>scaley, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k2">}</span>
<span class="number"> 17</span>  <span class="k2">}</span>
<span class="number"> 18</span>  <span class="k1">else</span>
<span class="number"> 19</span>  <span class="k2">{</span>
<span class="number"> 20</span>    <span class="k1">if</span> <span class="k2">(</span>scalex <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> scaley <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 21</span>      <a href="http://www.allegro.cc/manual/al_draw_rotated_bitmap"><span class="a">al_draw_rotated_bitmap</span></a><span class="k2">(</span>bitmap, offx, offy, x, y, angle<span class="k3">*</span>ANGLE_TO_RAD, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>    <span class="k1">else</span>
<span class="number"> 23</span>      <a href="http://www.allegro.cc/manual/al_draw_scaled_rotated_bitmap"><span class="a">al_draw_scaled_rotated_bitmap</span></a><span class="k2">(</span>bitmap, offx, offy, x, y, scalex, scaley, angle<span class="k3">*</span>ANGLE_TO_RAD, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>  <span class="k2">}</span>
<span class="number"> 25</span><span class="k2">}</span>
</div></div><p>

Other details:<br />The surfaces aren&#39;t anything else than allegro bitmaps with a different name, so surface_reset_target() simply means al_set_target_backbuffer(screen). surface_set_target is just the same as al_set_target_bitmap, just with a little bit more code related to my engine.</p><p>I really hope that anyone can help me out with this. I really do want to make a game with C++, which is something I&#39;ve never been able to do before. But I can&#39;t because my program is running so slow that it hurts...</p><p>This is what I&#39;m drawing thus far:<br /><a href="http://i43.tinypic.com/2mwf8xz.png">http://i43.tinypic.com/2mwf8xz.png</a><br />There&#39;s no reason it should draw as slow as it&#39;s doing...</p><p>EDIT:<br />After running some tests, I notice that most of the slowdown seems to come from the al_flip_display() call. Running 960 cycles with everything but that lines seems to take just around 5 seconds which I might be able to live with, but with that line... Oh boy, soooo slow.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hepolite)</author>
		<pubDate>Tue, 08 Nov 2011 01:04:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>First, are you loading all of your fonts and bitmaps <i>after</i> creating a display? This also means reloading them if you change displays.</p><p>Second, why are you creating a full screen buffer? That&#39;s usually not necessary on Allegro 5. Just draw to the back buffer and then flip it. No need to have another buffer on top of that.</p><p>Disclaimer: I only quickly scanned your code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Tue, 08 Nov 2011 01:30:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, I tried to shift around the order the code executes.<br />Now resources load before the display is created. It looks like that caused even more issues, as now the program runs even slower, about ten-fifteen seconds per frame. Seconds per frame, not frames per second :/</p><p>About the buffer... It&#39;s being created/destroyed in the code, but I don&#39;t use it. I have simply forgotten to remove it, so that&#39;s not the problem either.</p><p>The order would now be as following:<br />Init Allegro<br />Init addons<br />Init display<br />Init resources<br />Main loop:<br /> - Process logic<br /> - Process drawing<br />Free resources<br />Free Allegro
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hepolite)</author>
		<pubDate>Tue, 08 Nov 2011 01:43:51 +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/608765/936672#target">Hepolite</a> said:</div><div class="quote"><p> Now resources load before the display is created.
</p></div></div><p>I didn&#39;t ask you to do that... You want to load resources after creating the display.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Tue, 08 Nov 2011 02:02:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No problem with that, fixed the order back to what it was right after testing that. But nontheless, the speed issue does remain, and I have no idea what I can do to solve that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hepolite)</author>
		<pubDate>Tue, 08 Nov 2011 02:06:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try moving also the addons initialization and place them after creating the display and see if that helps. Also, keep in mind that drawing to anything other than the backbuffer can be really slow on some older cards, so if your <i>current</i> target is not the backbuffer, it can be the cause.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Tue, 08 Nov 2011 03:00:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Creating the display before the addons does squeeze a few more FPS out of this, but it&#39;s still running slow. I&#39;ve added a special case when there&#39;s zero viewports, so the engine uses the backbuffer directly. But what if I really need two viewports at the same time? I would have to render everything separately to each of those viewports (The drawing can be different depending on the viewport, say you don&#39;t want to render something to the second viewport, but only the first), then combine them to the backbuffer, how could that be optimized?</p><p>But still, this program is still running too slow, even when rendering directly to the backbuffer, without the other targets. Is there anything else I can do to speed this up? I&#39;m willing to send the whole project over to do so, if that is what it takes to solve this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hepolite)</author>
		<pubDate>Tue, 08 Nov 2011 03:21:23 +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/608765/936709#target">Hepolite</a> said:</div><div class="quote"><p> But what if I really need two viewports at the same time?
</p></div></div><p>Maybe you could try tweaking the clipping rectangle on the backbuffer. Anyway, it shouldn&#39;t be so slow when you draw directly to the backbuffer so there must be something else causing the slowdown.</p><p>Are you using Direct3D or OpenGL? try with both and see if there&#39;s any difference.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Tue, 08 Nov 2011 03:35:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are your surfaces also video bitmaps? Because if they&#39;re memory bitmaps, that may explain why it&#39;s slow. <br />Just an idea.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Tue, 08 Nov 2011 03:39:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://">kenmasters1976</a> said:</div><div class="quote"><p>Are you using Direct3D or OpenGL? try with both and see if there&#39;s any difference.</p></div></div><p>Well, I don&#39;t really know how to change to those. Any pointers would be helpful.</p><p>Also, about the backbuffer, would that work even if I want to draw one thing to the first viewport, but not the other, or the other way around? Also, there&#39;s some cases where I really have to use surfaces, I can&#39;t cheat that by using the backbuffer, can I? Besides, sounds like this will grossly over-complicate everything...</p><p>Well, I do have a<br />al_set_new_bitmap_flags(ALLEGRO_VIDEO_BITMAP);<br />before the surfaces are created, well, right after the addons has been initialized, actually. So they should be video bitmaps, right?</p><p>As I said, I&#39;m willing to share the entire source code if is required to solve this issue.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hepolite)</author>
		<pubDate>Tue, 08 Nov 2011 03:44:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you&#39;re using Windows then you&#39;re using Direct3D as it&#39;s the default on Windows. Try adding <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> before the display creation and see whether it runs better or not.</p><p>It&#39;s true that using the backbuffer for everything could complicate things and it probably isn&#39;t necessary on recent graphics cards. What&#39;s your graphics card? and do you have the latest drivers for it?.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Tue, 08 Nov 2011 04:51:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://">kenmasters1976</a> said:</div><div class="quote"><p>
Try adding al_set_new_display_flags(ALLEGRO_OPENGL); before the display creation and see whether it runs better or not.
</p></div></div><p>
Ah, thanks! That did the trick, got about 100 FPS but now it&#39;s stable even when drawing to the surfaces, and when drawing hundreds of objects at the same time.</p><p>Though things are running slow with 4000+ objects, but I doubt that that is Allegro&#39;s fault <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hepolite)</author>
		<pubDate>Tue, 08 Nov 2011 17:51:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Isn&#39;t Direct3D supposed to sometimes work better (and in general not worse)? (And that being the reason we even support it?)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 08 Nov 2011 18:55: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/608765/936807#target">Elias</a> said:</div><div class="quote"><p> Isn&#39;t Direct3D supposed to sometimes work better (and in general not worse)?
</p></div></div><p>It probably depends on the quality of the Allegro code.</p><p>Also, I think there&#39;s a much greater chance of OpenGL being totally broken on a Windows computer than the D3D drivers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Wed, 09 Nov 2011 01:37:16 +0000</pubDate>
	</item>
</rss>
