<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Increasing the speed of transitioning from one image into another?</title>
		<link>http://www.allegro.cc/forums/view/585866</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 13 Jun 2006 08:45:19 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What I&#39;m doing right now is fading one menu screen into another when a menu item is selected.  Problem is, it&#39;s really slow.  The images are 800x600.  I know it&#39;s the images that are the problem because when I do fade in/out from/to black, the speed is just fine.  It&#39;s only when the image has something in it that the slowdown occurs.</p><p>Here&#39;s the function I&#39;m using:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> objGfx::TransitionFade<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> endImage, <span class="k1">int</span> fadeSpeed<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span>                     </td></tr><tr><td class="number">3</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> startImage <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>Screen-&gt;Buffer<span class="k2">(</span><span class="k2">)</span>, startImage, FULL_SCREEN, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>       </td></tr><tr><td class="number">6</td><td>    <a href="http://www.allegro.cc/manual/COLOR_MAP" target="_blank"><span class="a">COLOR_MAP</span></a> transTable<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <a href="http://www.allegro.cc/manual/color_map" target="_blank"><span class="a">color_map</span></a> <span class="k3">=</span> <span class="k3">&amp;</span>transTable<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>    <span class="k1">if</span> <span class="k2">(</span>fadeSpeed <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">10</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>        fadeSpeed <span class="k3">=</span> <span class="n">16</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>    <a href="http://www.allegro.cc/manual/install_int" target="_blank"><span class="a">install_int</span></a><span class="k2">(</span>TickTimer, FADE_TIMER<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    </td></tr><tr><td class="number">16</td><td>    <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    </td></tr><tr><td class="number">18</td><td>    <span class="k1">while</span> <span class="k2">(</span>i <span class="k3">&lt;</span> <span class="n">256</span><span class="k2">)</span></td></tr><tr><td class="number">19</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>        <span class="k1">if</span> <span class="k2">(</span>tick <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td>        <span class="k2">{</span>       </td></tr><tr><td class="number">22</td><td>            tick <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>            </td></tr><tr><td class="number">24</td><td>            <a href="http://www.allegro.cc/manual/set_trans_blender" target="_blank"><span class="a">set_trans_blender</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, i<span class="k2">)</span><span class="k2">;</span>    </td></tr><tr><td class="number">25</td><td>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>startImage, Screen-&gt;Buffer<span class="k2">(</span><span class="k2">)</span>, FULL_SCREEN, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>            <a href="http://www.allegro.cc/manual/draw_trans_sprite" target="_blank"><span class="a">draw_trans_sprite</span></a><span class="k2">(</span>Screen-&gt;Buffer<span class="k2">(</span><span class="k2">)</span>, endImage, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>            </td></tr><tr><td class="number">28</td><td>            Screen-&gt;Update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>            </td></tr><tr><td class="number">29</td><td>            </td></tr><tr><td class="number">30</td><td>            i <span class="k3">+</span><span class="k3">=</span> fadeSpeed<span class="k2">;</span>            </td></tr><tr><td class="number">31</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">32</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">33</td><td>    </td></tr><tr><td class="number">34</td><td>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>endImage, Screen-&gt;Buffer<span class="k2">(</span><span class="k2">)</span>, FULL_SCREEN, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    </td></tr><tr><td class="number">36</td><td>    <a href="http://www.allegro.cc/manual/remove_int" target="_blank"><span class="a">remove_int</span></a><span class="k2">(</span>TickTimer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>           </td></tr><tr><td class="number">38</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>startImage<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>endImage<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Any tips to speed things up?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BrknPhoenix)</author>
		<pubDate>Mon, 12 Jun 2006 08:59:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your problem is obviously draw_trans_sprite. It&#39;s an Allegro function and therefore uses software rendering. That means that it has to check every pixel of your image and  manually blend it with the correspondending pixel from the new image (800x600 =&gt; 480000 pixels).<br />To speed things up, you should use hardware rendering (through OpenLayer or OpenGL?), which makes use of your graphic card instead of the CPU. This is much faster, but it requires some kind of 3D hardware.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Simon Parzer)</author>
		<pubDate>Mon, 12 Jun 2006 14:49:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>First and probably the simpliest speedup is to create startImage and endImage once, not in every frame. Also a lot of speed can be gained if you don&#39;t use video bitmaps with blending. That means you first do all the drawin in memory bitmaps and blit the result to screen.</p><p>If you need ~30-250% faster blending you might want to try compiling Allegro using plain-c functions. I&#39;ve seen that draw_trans_sprite can be much faster in c-mode:<br /><a href="http://www.allegro.cc/forums/thread/474843/477775#target">http://www.allegro.cc/forums/thread/474843/477775#target</a><br /><a href="http://www.allegro.cc/forums/thread/474843/478181#target">http://www.allegro.cc/forums/thread/474843/478181#target</a></p><p>Another thing that can speed things up is to use draw_trans_rle_sprite() but that only works good for read-only images.</p><p>In Linux you can compile Allegro in C mode with ./configure --enable-asm=no. I don&#39;t know how you can do it in windows.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Mon, 12 Jun 2006 15:21:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Or use fblend.</p><p>But switching to allegrogl or openlayer is probably the best choice.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (deps)</author>
		<pubDate>Mon, 12 Jun 2006 16:44:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>or do as i did, and write a blender in SSE2, works awesomely fast!<br />but not as fast as hardware acceleration, which you should be trying.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Tue, 13 Jun 2006 08:45:19 +0000</pubDate>
	</item>
</rss>
