<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Fladimir&#39;s alpha blending routines</title>
		<link>http://www.allegro.cc/forums/view/589627</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 24 Jan 2007 17:18:23 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Please excuse my lack of experience but I just don&#39;t know how to use Fladimir&#39;s alpha blender, here is an example using allegro&#39;s alpha blender functions, but I can&#39;t figure out how to replace them with Fladimir&#39;s alpha blender routines.</p><p>Example
</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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#define VIDEO_BPP 32</span></td></tr><tr><td class="number">3</td><td><span class="p">#define VIDEO_W 640</span></td></tr><tr><td class="number">4</td><td><span class="p">#define VIDEO_H 480</span></td></tr><tr><td class="number">5</td><td>                            </td></tr><tr><td class="number">6</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">7</td><td><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bg<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>sprite<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>alpha<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>   <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>   <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>   <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>   </td></tr><tr><td class="number">17</td><td>   <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>VIDEO_BPP<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>   <span class="c">//set_gfx_mode(GFX_AUTODETECT, VIDEO_W, VIDEO_H, 0, 0);</span></td></tr><tr><td class="number">19</td><td>   <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, VIDEO_W, VIDEO_H, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>   </td></tr><tr><td class="number">21</td><td>   <span class="c">//load files</span></td></tr><tr><td class="number">22</td><td>   bg <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"pucca.pcx"</span>, NULL<span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">23</td><td>   sprite <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"item.pcx"</span>, NULL<span class="k2">)</span><span class="k2">;</span>         </td></tr><tr><td class="number">24</td><td>   alpha <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"item_alpha.pcx"</span>, NULL<span class="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">25</td><td>   </td></tr><tr><td class="number">26</td><td>   <span class="c">//Write alpha blender</span></td></tr><tr><td class="number">27</td><td>   <a href="http://www.allegro.cc/manual/set_write_alpha_blender" target="_blank"><span class="a">set_write_alpha_blender</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</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>sprite, alpha, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>   <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>alpha<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>      </td></tr><tr><td class="number">31</td><td>   <span class="c">//create memory buffer</span></td></tr><tr><td class="number">32</td><td>   buffer <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">33</td><td>   </td></tr><tr><td class="number">34</td><td>   <span class="c">//loop   </span></td></tr><tr><td class="number">35</td><td>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span> </td></tr><tr><td class="number">36</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bg, buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</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">38</td><td>    <a href="http://www.allegro.cc/manual/set_alpha_blender" target="_blank"><span class="a">set_alpha_blender</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</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>buffer, sprite, <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a> <span class="k3">-</span> sprite-&gt;w <span class="k3">/</span> <span class="n">2</span>, <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a> <span class="k3">-</span> sprite-&gt;h <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</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">41</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">42</td><td>      </td></tr><tr><td class="number">43</td><td>   <a href="http://www.allegro.cc/manual/show_mouse" target="_blank"><span class="a">show_mouse</span></a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>   <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>   <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>sprite<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>   <span class="k1">return</span> EXIT_SUCCESS<span class="k2">;</span></td></tr><tr><td class="number">47</td><td><span class="k2">}</span></td></tr><tr><td class="number">48</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>




Fladimir&#39;s routines
</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">inline</span> <span class="k1">unsigned</span> <span class="k1">long</span> BlendColorsNoEmms<span class="k2">(</span> <span class="k1">unsigned</span> <span class="k1">int</span> dst, <span class="k1">unsigned</span> <span class="k1">int</span> src, <span class="k1">unsigned</span> <span class="k1">int</span> factor <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">2</td><td> <span class="k1">static</span> <span class="k1">unsigned</span> <span class="k1">short</span> INVERT_MASK<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0x00FF</span>, <span class="n">0x00FF</span>, <span class="n">0x00FF</span>, <span class="n">0x00FF</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td> <span class="k1">unsigned</span> <span class="k1">long</span> returnParam<span class="k2">;</span></td></tr><tr><td class="number">4</td><td> factor <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> factor<span class="k2">;</span></td></tr><tr><td class="number">5</td><td> <span class="k1">asm</span><span class="k2">(</span></td></tr><tr><td class="number">6</td><td>  <span class="s">"movd %1, %%mm0\n"</span></td></tr><tr><td class="number">7</td><td>  <span class="s">"movd %2, %%mm1\n"</span></td></tr><tr><td class="number">8</td><td>  <span class="s">"pxor %%mm2, %%mm2\n"</span></td></tr><tr><td class="number">9</td><td>  <span class="s">"punpcklbw %%mm2, %%mm0\n"</span></td></tr><tr><td class="number">10</td><td>  <span class="s">"punpcklbw %%mm2, %%mm1\n"</span></td></tr><tr><td class="number">11</td><td>  </td></tr><tr><td class="number">12</td><td>  <span class="c">// Get the alpha value //</span></td></tr><tr><td class="number">13</td><td>  <span class="s">"movd %4, %%mm3\n"</span></td></tr><tr><td class="number">14</td><td>  <span class="s">"punpcklwd %%mm3, %%mm3\n"</span></td></tr><tr><td class="number">15</td><td>  <span class="s">"punpcklwd %%mm3, %%mm3\n"</span></td></tr><tr><td class="number">16</td><td>  </td></tr><tr><td class="number">17</td><td>  <span class="c">// (alpha * (source + 255 - dest))/255 + dest - alpha //</span></td></tr><tr><td class="number">18</td><td>  <span class="s">"paddw (%3), %%mm0\n"</span></td></tr><tr><td class="number">19</td><td>  <span class="s">"psubw %%mm1, %%mm0\n"</span></td></tr><tr><td class="number">20</td><td>  <span class="s">"psrlw $1, %%mm0\n"</span></td></tr><tr><td class="number">21</td><td>  <span class="s">"pmullw %%mm3, %%mm0\n"</span></td></tr><tr><td class="number">22</td><td>  <span class="s">"psrlw $7, %%mm0\n"</span></td></tr><tr><td class="number">23</td><td>  <span class="s">"paddw %%mm1, %%mm0\n"</span></td></tr><tr><td class="number">24</td><td>  <span class="s">"psubw %%mm3, %%mm0\n"</span></td></tr><tr><td class="number">25</td><td>  </td></tr><tr><td class="number">26</td><td>  <span class="s">"packuswb %%mm0, %%mm0\n"</span></td></tr><tr><td class="number">27</td><td>  <span class="s">"movd %%mm0, %0\n"</span></td></tr><tr><td class="number">28</td><td>  <span class="k2">:</span> <span class="s">"=&amp;a"</span> <span class="k2">(</span>returnParam<span class="k2">)</span></td></tr><tr><td class="number">29</td><td>  <span class="k2">:</span> <span class="s">"rm"</span> <span class="k2">(</span>dst<span class="k2">)</span>, <span class="s">"rm"</span> <span class="k2">(</span>src<span class="k2">)</span>, <span class="s">"rm"</span> <span class="k2">(</span>INVERT_MASK<span class="k2">)</span>, <span class="s">"rm"</span> <span class="k2">(</span>factor<span class="k2">)</span></td></tr><tr><td class="number">30</td><td>  <span class="k2">:</span> <span class="s">"memory"</span></td></tr><tr><td class="number">31</td><td> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td> <span class="k1">return</span> returnParam<span class="k2">;</span></td></tr><tr><td class="number">33</td><td><span class="k2">}</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td><span class="c">// ... but remember to call this one before you use any floats or doubles //</span></td></tr><tr><td class="number">37</td><td><span class="k1">inline</span> <span class="k1">void</span> CallEmms<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">38</td><td>  <span class="k1">asm</span><span class="k2">(</span></td></tr><tr><td class="number">39</td><td>   <span class="s">"emms\n"</span></td></tr><tr><td class="number">40</td><td>  <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td><span class="k2">}</span></td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td><span class="c">// This is a shorthand to blend single pixels at</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Fri, 19 Jan 2007 01:29:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>BlendColorsNoEmms() is used to blend only two colors: <i>dst</i> and <i>src</i>, with factor <i>factor</i>. Format of the colors is RGB32, factor is [0, 255].</p><p>If you want to blend a whole bitmap you have to do it pixel by pixel.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Milan Mimica)</author>
		<pubDate>Fri, 19 Jan 2007 01:40:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Does that mean that I have to write my own draw_trans_sprite and set_write_alpha_blender?:&#39;(<br />BTW does someone knows if Fladimir´s functions are really so fast? <br />How much faster are they?</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
If you want to blend a whole bitmap you have to do it pixel by pixel.
</p></div></div><p>

Would that be faster than allegro´s blender?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Fri, 19 Jan 2007 04:06:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m probably completely wrong here, not really using ol that much, but what you need to do is not use magic pink bitmaps, instead use graphic files with an alpha channel then call Blenders::Set( ALPHA_BLENDER );
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Fri, 19 Jan 2007 06:29:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t worry, I&#39;ve also written the function for you. Here it is: (slightly edited, I hope it still works <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />)
</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">typedef</span> <span class="k1">unsigned</span> <span class="k1">int</span> PixelType<span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">void</span> BasicAlphaBlend<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>src, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dst, <span class="k1">int</span> dst_x, <span class="k1">int</span> dst_y <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">4</td><td> <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> src <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td> <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> dst <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td> </td></tr><tr><td class="number">7</td><td> <span class="k1">int</span> src_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td> <span class="k1">int</span> src_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td> <span class="k1">int</span> w <span class="k3">=</span> src-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">10</td><td> <span class="k1">int</span> h <span class="k3">=</span> src-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">11</td><td> <span class="k1">if</span><span class="k2">(</span> dst_x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>  w <span class="k3">+</span><span class="k3">=</span> dst_x<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  src_x <span class="k3">-</span><span class="k3">=</span> dst_x<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  dst_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td> <span class="k2">}</span></td></tr><tr><td class="number">16</td><td> <span class="k1">if</span><span class="k2">(</span> dst_y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">17</td><td>  h <span class="k3">+</span><span class="k3">=</span> dst_y<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  src_y <span class="k3">-</span><span class="k3">=</span> dst_y<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  dst_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td> <span class="k2">}</span></td></tr><tr><td class="number">21</td><td> <span class="k1">if</span><span class="k2">(</span> dst_x <span class="k3">+</span> w <span class="k3">&gt;</span> dst-&gt;w <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>  w <span class="k3">-</span><span class="k3">=</span> dst_x <span class="k3">+</span> w <span class="k3">-</span> dst-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">23</td><td> <span class="k2">}</span></td></tr><tr><td class="number">24</td><td> <span class="k1">if</span><span class="k2">(</span> w <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td> <span class="k1">if</span><span class="k2">(</span> dst_y <span class="k3">+</span> h <span class="k3">&gt;</span> dst-&gt;h <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>  h <span class="k3">-</span><span class="k3">=</span> dst_y <span class="k3">+</span> h <span class="k3">-</span> dst-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">27</td><td> <span class="k2">}</span></td></tr><tr><td class="number">28</td><td> <span class="k1">if</span><span class="k2">(</span> h <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td> </td></tr><tr><td class="number">30</td><td> <span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> h<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>  PixelType <span class="k3">*</span>src_ptr <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>PixelType <span class="k3">*</span><span class="k2">)</span>src-&gt;line<span class="k2">[</span>src_y<span class="k3">+</span>j<span class="k2">]</span><span class="k2">)</span> <span class="k3">+</span> src_x<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  PixelType <span class="k3">*</span>dst_ptr <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>PixelType <span class="k3">*</span><span class="k2">)</span>dst-&gt;line<span class="k2">[</span>dst_y<span class="k3">+</span>j<span class="k2">]</span><span class="k2">)</span> <span class="k3">+</span> dst_x<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  <span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> w<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">34</td><td>   <span class="k1">unsigned</span> <span class="k1">char</span> fact <span class="k3">=</span> <a href="http://www.allegro.cc/manual/geta32" target="_blank"><span class="a">geta32</span></a><span class="k2">(</span> <span class="k3">*</span>src_ptr <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>   <span class="k1">if</span><span class="k2">(</span> fact <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>    <span class="k1">if</span><span class="k2">(</span> fact <span class="k3">=</span><span class="k3">=</span> <span class="n">255</span> <span class="k2">)</span> <span class="k3">*</span>dst_ptr <span class="k3">=</span> <span class="k3">*</span>src_ptr<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    <span class="k1">else</span> <span class="k3">*</span>dst_ptr <span class="k3">=</span> BlendColorsNoEmms<span class="k2">(</span> <span class="k3">*</span>dst_ptr, <span class="k3">*</span>src_ptr, fact <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">40</td><td>   src_ptr<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>   dst_ptr<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">43</td><td> <span class="k2">}</span></td></tr><tr><td class="number">44</td><td> </td></tr><tr><td class="number">45</td><td> CallEmms<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
How much faster are they?
</p></div></div><p>
IIRC it&#39;s 300-570% faster than Allegro&#39;s alpha blender, when compiled with -O3.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Fri, 19 Jan 2007 23:45:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wow! thank you very very much!:D<br />What compiler are you using?<br />I am using MSVC6 and I have some problems with the assembler lines inside your functions.<br />MSVC6 uses __asm {}, instead of asm(), I replaced that and other microsoft specific stuffs but still it doesn&#39;t compile, I don&#39;t know what is wrong here.<br />I get multiple errors like this <br />C2400: in-line assembler syntax error in &#39;opcode&#39;; found &#39;bad token&#39;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Sat, 20 Jan 2007 00:55:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>He uses gcc style for ASM (I can&#39;t remember the correct name). To make it work with MSVC you would have to rewrite the whole ASM stuff with Intel syntax. In other words, if you don&#39;t know ASM then use GCC <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Sat, 20 Jan 2007 01:03:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe switching the opcode parameters would be sufficient?</p><p>For example, &quot;movd %2, %%mm1\n&quot; becomes &quot;movd %%mm1, %2\n&quot;</p><p>Though I also think that you&#39;ll also need to remove one % from them.</p><p>Is it possible to compile the source with GCC and then import the object file in a MSVC project?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Sat, 20 Jan 2007 02:29:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Is it possible to compile the source with GCC and then import the object file in a MSVC project?
</p></div></div><p>

Allegro does something like that in the build process.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Milan Mimica)</author>
		<pubDate>Sat, 20 Jan 2007 05:15:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ah, I&#39;ve just realised what you wanted <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>There&#39;s also FBlend.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Sat, 20 Jan 2007 06:36:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Any chance Flad&#39;s blender could be incorporated into Allegro? Seems like a speed increase of that magnitude would be well worth it. </p><p>Fblend is sweet but I don&#39;t think it&#39;s been worked on in a while and it has some bugs. I seem to remember there being a problem with running it on 64-bit processors...?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edward Sheets)</author>
		<pubDate>Sat, 20 Jan 2007 07:10:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Maybe switching the opcode parameters would be sufficient?
</p></div></div><p>

I tried that, but it didn&#39;t work, I&#39;ll try to download GCC later and compile your routines to obtain the .obj as you said, I really want to include your routines in my game, but right now I am really busy trying to solve a lot of problems with the game programming itself.<br />I didn&#39;t know that the AT&amp;T and Intel syntaxes were so difficult to translate between each other.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
There&#39;s also FBlend.
</p></div></div><p>

Fblend doesn&#39;t support alpha blending.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Sat, 20 Jan 2007 08:02:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know it doesn&#39;t support alpha blending, but I said it as just another library to help with blending in general.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Sat, 20 Jan 2007 17:25:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Is it possible to compile the source with GCC and then import the object file in a MSVC project?
</p></div></div><p>

Can someone compile Fladimir&#39;s alpha blend routines and give me the .obj so I can use them in MSVC6?<br />My dial-up connection dosen&#39;t allow me to download the GCC compiler right now:-/<br />Thanks in advance.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Tue, 23 Jan 2007 08:18:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://www.bloodshed.net/dev/devcpp.html">http://www.bloodshed.net/dev/devcpp.html</a></p><p>Dev-cpp with GCC 3.4.2 is around 9.2MiB or half an hour with good dial-up connection. If noone else has time or willing to compile it for you then that might help you. I might help you myself but unfortunately I don&#39;t have Windows.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Tue, 23 Jan 2007 15:13:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The best minds in the world have tried to compile OL with MSVC but it fails due to MSVC&#39;s support of the STL and other related issues.</p><p>As hoho, get devcpp, or the free msvc8 (negating the need to have msvc6), mingw, code:blocks, etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Tue, 23 Jan 2007 18:12:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
The best minds in the world have tried to compile OL with MSVC but it fails due to MSVC&#39;s support of the STL and other related issues.
</p></div></div><p>
Not true. At least since MSVC 7.1 support of STL &#39;and other related issues&#39; are good enough to compile OpenLayer. Version 6.0 of MSVC does not work well though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Tue, 23 Jan 2007 19:32:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>MSVC is irrelevant since he is trying to compile AT&amp;T ASM routines, not OL itself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HoHo)</author>
		<pubDate>Tue, 23 Jan 2007 19:43:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Not true. At least since MSVC 7.1 support of ST
</p></div></div><p>Yes True <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> he was asking about MSVC6 and I was replying about MSVC6 <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Tue, 23 Jan 2007 19:55:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah. I thought from your post that you were talking about MSVC in general...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Tue, 23 Jan 2007 20:39:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I actually found my old sources from my hard drive, here&#39;s the complete source:
</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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;loadpng.h&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="c">/*</span></td></tr><tr><td class="number">6</td><td><span class="c"> *  BlendColors32 by Esa Tanskanen</span></td></tr><tr><td class="number">7</td><td><span class="c"> *  Fast 32-bit color mixing routines</span></td></tr><tr><td class="number">8</td><td><span class="c"> *  Use the BlendColors32 function if unsure</span></td></tr><tr><td class="number">9</td><td><span class="c"> */</span></td></tr><tr><td class="number">10</td><td> </td></tr><tr><td class="number">11</td><td> </td></tr><tr><td class="number">12</td><td><span class="c">// If you wish to process multiple pixels at once, use this function... //</span></td></tr><tr><td class="number">13</td><td><span class="k1">inline</span> <span class="k1">unsigned</span> <span class="k1">long</span> BlendColors32NoEmms<span class="k2">(</span> <span class="k1">unsigned</span> <span class="k1">long</span> dst, <span class="k1">unsigned</span> <span class="k1">long</span> src, <span class="k1">unsigned</span> <span class="k1">long</span> factor <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">14</td><td> <span class="k1">static</span> <span class="k1">unsigned</span> <span class="k1">short</span> INVERT_MASK<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0x00FF</span>, <span class="n">0x00FF</span>, <span class="n">0x00FF</span>, <span class="n">0x00FF</span> <span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td> <span class="k1">unsigned</span> <span class="k1">long</span> returnParam<span class="k2">;</span></td></tr><tr><td class="number">16</td><td> factor <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> factor<span class="k2">;</span></td></tr><tr><td class="number">17</td><td> <span class="k1">asm</span><span class="k2">(</span></td></tr><tr><td class="number">18</td><td>  <span class="s">"movd %1, %%mm0\n"</span></td></tr><tr><td class="number">19</td><td>  <span class="s">"movd %2, %%mm1\n"</span></td></tr><tr><td class="number">20</td><td>  <span class="s">"pxor %%mm2, %%mm2\n"</span></td></tr><tr><td class="number">21</td><td>  <span class="s">"punpcklbw %%mm2, %%mm0\n"</span></td></tr><tr><td class="number">22</td><td>  <span class="s">"punpcklbw %%mm2, %%mm1\n"</span></td></tr><tr><td class="number">23</td><td>  </td></tr><tr><td class="number">24</td><td>  <span class="c">// Get the alpha value //</span></td></tr><tr><td class="number">25</td><td>  <span class="s">"movd %4, %%mm3\n"</span></td></tr><tr><td class="number">26</td><td>  <span class="s">"punpcklwd %%mm3, %%mm3\n"</span></td></tr><tr><td class="number">27</td><td>  <span class="s">"punpcklwd %%mm3, %%mm3\n"</span></td></tr><tr><td class="number">28</td><td>  </td></tr><tr><td class="number">29</td><td>  <span class="c">// (alpha * (source + 255 - dest))/255 + dest - alpha //</span></td></tr><tr><td class="number">30</td><td>  <span class="s">"paddw (%3), %%mm0\n"</span></td></tr><tr><td class="number">31</td><td>  <span class="s">"psubw %%mm1, %%mm0\n"</span></td></tr><tr><td class="number">32</td><td>  <span class="s">"psrlw $1, %%mm0\n"</span></td></tr><tr><td class="number">33</td><td>  <span class="s">"pmullw %%mm3, %%mm0\n"</span></td></tr><tr><td class="number">34</td><td>  <span class="s">"psrlw $7, %%mm0\n"</span></td></tr><tr><td class="number">35</td><td>  <span class="s">"paddw %%mm1, %%mm0\n"</span></td></tr><tr><td class="number">36</td><td>  <span class="s">"psubw %%mm3, %%mm0\n"</span></td></tr><tr><td class="number">37</td><td>  </td></tr><tr><td class="number">38</td><td>  <span class="s">"packuswb %%mm0, %%mm0\n"</span></td></tr><tr><td class="number">39</td><td>  <span class="s">"movd %%mm0, %0\n"</span></td></tr><tr><td class="number">40</td><td>  <span class="k2">:</span> <span class="s">"=&amp;a"</span> <span class="k2">(</span>returnParam<span class="k2">)</span></td></tr><tr><td class="number">41</td><td>  <span class="k2">:</span> <span class="s">"rm"</span> <span class="k2">(</span>dst<span class="k2">)</span>, <span class="s">"rm"</span> <span class="k2">(</span>src<span class="k2">)</span>, <span class="s">"rm"</span> <span class="k2">(</span>INVERT_MASK<span class="k2">)</span>, <span class="s">"rm"</span> <span class="k2">(</span>factor<span class="k2">)</span></td></tr><tr><td class="number">42</td><td>  <span class="k2">:</span> <span class="s">"memory"</span></td></tr><tr><td class="number">43</td><td> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td> <span class="k1">return</span> returnParam<span class="k2">;</span></td></tr><tr><td class="number">45</td><td><span class="k2">}</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td><span class="c">// ... but remember to call this one before you use any floats or doubles //</span></td></tr><tr><td class="number">49</td><td><span class="k1">inline</span> <span class="k1">void</span> CallEmms<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">50</td><td>  <span class="k1">asm</span><span class="k2">(</span></td></tr><tr><td class="number">51</td><td>   <span class="s">"emms\n"</span></td></tr><tr><td class="number">52</td><td>  <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td><span class="k2">}</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td>&#160;</td></tr><tr><td class="number">56</td><td><span class="c">// This is a shorthand to blend single pixels at a time //</span></td></tr><tr><td class="number">57</td><td><span class="k1">inline</span> <span class="k1">unsigned</span> <span class="k1">long</span> BlendColors32<span class="k2">(</span> <span class="k1">unsigned</span> <span class="k1">long</span> dst, <span class="k1">unsigned</span> <span class="k1">long</span> src, <span class="k1">unsigned</span> <span class="k1">long</span> factor <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">58</td><td> <span class="k1">unsigned</span> <span class="k1">long</span> returnParam <span class="k3">=</span> BlendColors32NoEmms<span class="k2">(</span> dst, src, factor <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td> CallEmms<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td> <span class="k1">return</span> returnParam<span class="k2">;</span></td></tr><tr><td class="number">61</td><td><span class="k2">}</span></td></tr><tr><td class="number">62</td><td>&#160;</td></tr><tr><td class="number">63</td><td>&#160;</td></tr><tr><td class="number">64</td><td>&#160;</td></tr><tr><td class="number">65</td><td><span class="c">/*</span></td></tr><tr><td class="number">66</td><td><span class="c"> *  AlphaBlend32 by Esa Tanskanen</span></td></tr><tr><td class="number">67</td><td><span class="c"> *  32-bit alpha blending routines with a global alpha value</span></td></tr><tr><td class="number">68</td><td><span class="c"> *  Notice that the source bitmap comes before the destination bitmap!</span></td></tr><tr><td class="number">69</td><td><span class="c"> */</span></td></tr><tr><td class="number">70</td><td>&#160;</td></tr><tr><td class="number">71</td><td>&#160;</td></tr><tr><td class="number">72</td><td><span class="k1">void</span> AlphaBlend32<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>src, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dst, <span class="k1">int</span> dst_x, <span class="k1">int</span> dst_y, <span class="k1">int</span> globalAlpha <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">73</td><td>   <span class="c">/* The following conditions must be true */</span></td></tr><tr><td class="number">74</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> src <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">75</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/bitmap_color_depth" target="_blank"><span class="a">bitmap_color_depth</span></a><span class="k2">(</span> src <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">32</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/bitmap_color_depth" target="_blank"><span class="a">bitmap_color_depth</span></a><span class="k2">(</span> dst <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">32</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>   </td></tr><tr><td class="number">79</td><td>   <span class="c">/* Apply clipping */</span></td></tr><tr><td class="number">80</td><td>   <span class="k1">int</span> src_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>   <span class="k1">int</span> src_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>   <span class="k1">int</span> w <span class="k3">=</span> src-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">83</td><td>   <span class="k1">int</span> h <span class="k3">=</span> src-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">84</td><td>   </td></tr><tr><td class="number">85</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">86</td><td>      w <span class="k3">+</span><span class="k3">=</span> dst_x<span class="k2">;</span></td></tr><tr><td class="number">87</td><td>      src_x <span class="k3">-</span><span class="k3">=</span> dst_x<span class="k2">;</span></td></tr><tr><td class="number">88</td><td>      dst_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">90</td><td>   </td></tr><tr><td class="number">91</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">92</td><td>      h <span class="k3">+</span><span class="k3">=</span> dst_y<span class="k2">;</span></td></tr><tr><td class="number">93</td><td>      src_y <span class="k3">-</span><span class="k3">=</span> dst_y<span class="k2">;</span></td></tr><tr><td class="number">94</td><td>      dst_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">96</td><td>   </td></tr><tr><td class="number">97</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_x <span class="k3">+</span> w <span class="k3">&gt;</span> dst-&gt;w <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">98</td><td>      w <span class="k3">-</span><span class="k3">=</span> dst_x <span class="k3">+</span> w <span class="k3">-</span> dst-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">99</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">100</td><td>   </td></tr><tr><td class="number">101</td><td>   <span class="k1">if</span><span class="k2">(</span> w <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>   </td></tr><tr><td class="number">103</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_y <span class="k3">+</span> h <span class="k3">&gt;</span> dst-&gt;h <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">104</td><td>      h <span class="k3">-</span><span class="k3">=</span> dst_y <span class="k3">+</span> h <span class="k3">-</span> dst-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">105</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">106</td><td>   </td></tr><tr><td class="number">107</td><td>   <span class="k1">if</span><span class="k2">(</span> h <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>   </td></tr><tr><td class="number">109</td><td>   <span class="c">/* Select destination surface for reading and writing */</span></td></tr><tr><td class="number">110</td><td>   <a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">111</td><td>   bmp_select<span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>   </td></tr><tr><td class="number">113</td><td>   <span class="c">/* Loop through all pixels */</span></td></tr><tr><td class="number">114</td><td>   <span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> h<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">115</td><td>      <span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">*</span>src_ptr <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span>src-&gt;line<span class="k2">[</span>src_y<span class="k3">+</span>j<span class="k2">]</span><span class="k2">)</span> <span class="k3">+</span> src_x<span class="k2">;</span></td></tr><tr><td class="number">116</td><td>      <span class="k1">unsigned</span> <span class="k1">int</span> dst_address <span class="k3">=</span> <a href="http://www.allegro.cc/manual/bmp_write_line" target="_blank"><span class="a">bmp_write_line</span></a><span class="k2">(</span> dst, dst_y<span class="k3">+</span>j <span class="k2">)</span> <span class="k3">+</span> <span class="n">4</span><span class="k3">*</span>dst_x<span class="k2">;</span></td></tr><tr><td class="number">117</td><td>      </td></tr><tr><td class="number">118</td><td>      <span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> w<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">119</td><td>         <span class="k1">unsigned</span> <span class="k1">int</span> srcColor <span class="k3">=</span> <span class="k3">*</span>src_ptr<span class="k2">;</span></td></tr><tr><td class="number">120</td><td>         <span class="c">/* Extract the alpha value */</span></td></tr><tr><td class="number">121</td><td>         <span class="k1">unsigned</span> <span class="k1">int</span> fact <span class="k3">=</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/geta32" target="_blank"><span class="a">geta32</span></a><span class="k2">(</span> srcColor <span class="k2">)</span> <span class="k3">*</span> globalAlpha <span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>         </td></tr><tr><td class="number">123</td><td>         <span class="c">/* Blend the colors if required */</span></td></tr><tr><td class="number">124</td><td>         <span class="k1">if</span><span class="k2">(</span> fact <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">125</td><td>            <span class="k1">if</span><span class="k2">(</span> fact <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">255</span> <span class="k2">)</span> bmp_write32<span class="k2">(</span> dst_address, srcColor <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">126</td><td>            <span class="k1">else</span> bmp_write32<span class="k2">(</span> dst_address, BlendColors32NoEmms<span class="k2">(</span> <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span> dst_address<span class="k2">)</span>, <span class="k3">*</span>src_ptr, fact <span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">127</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">128</td><td>         </td></tr><tr><td class="number">129</td><td>         <span class="c">/* Advance to the next pixel */</span></td></tr><tr><td class="number">130</td><td>         dst_address <span class="k3">+</span><span class="k3">=</span> <span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>         src_ptr<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">132</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">133</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">134</td><td>   </td></tr><tr><td class="number">135</td><td>   <span class="c">/* Finish blending */</span></td></tr><tr><td class="number">136</td><td>   CallEmms<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">137</td><td>   </td></tr><tr><td class="number">138</td><td>   <span class="c">/* Finish messing with the destination bitmap */</span></td></tr><tr><td class="number">139</td><td>   <a href="http://www.allegro.cc/manual/bmp_unwrite_line" target="_blank"><span class="a">bmp_unwrite_line</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">140</td><td>   <a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">141</td><td><span class="k2">}</span></td></tr><tr><td class="number">142</td><td>&#160;</td></tr><tr><td class="number">143</td><td>&#160;</td></tr><tr><td class="number">144</td><td>&#160;</td></tr><tr><td class="number">145</td><td><span class="c">/*</span></td></tr><tr><td class="number">146</td><td><span class="c"> *  AlphaBlend32 by Esa Tanskanen</span></td></tr><tr><td class="number">147</td><td><span class="c"> *  32-bit alpha blending routines</span></td></tr><tr><td class="number">148</td><td><span class="c"> *  Notice that the source bitmap comes before the destination bitmap!</span></td></tr><tr><td class="number">149</td><td><span class="c"> */</span></td></tr><tr><td class="number">150</td><td>&#160;</td></tr><tr><td class="number">151</td><td>&#160;</td></tr><tr><td class="number">152</td><td><span class="k1">void</span> AlphaBlend32<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>src, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>dst, <span class="k1">int</span> dst_x, <span class="k1">int</span> dst_y <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">153</td><td>   <span class="c">/* The following conditions must be true */</span></td></tr><tr><td class="number">154</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> src <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">155</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">156</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/bitmap_color_depth" target="_blank"><span class="a">bitmap_color_depth</span></a><span class="k2">(</span> src <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">32</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">157</td><td>   <a href="http://www.allegro.cc/manual/ASSERT" target="_blank"><span class="a">ASSERT</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/bitmap_color_depth" target="_blank"><span class="a">bitmap_color_depth</span></a><span class="k2">(</span> dst <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">32</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">158</td><td>   </td></tr><tr><td class="number">159</td><td>   <span class="c">/* Apply clipping */</span></td></tr><tr><td class="number">160</td><td>   <span class="k1">int</span> src_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">161</td><td>   <span class="k1">int</span> src_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">162</td><td>   <span class="k1">int</span> w <span class="k3">=</span> src-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">163</td><td>   <span class="k1">int</span> h <span class="k3">=</span> src-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">164</td><td>   </td></tr><tr><td class="number">165</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">166</td><td>      w <span class="k3">+</span><span class="k3">=</span> dst_x<span class="k2">;</span></td></tr><tr><td class="number">167</td><td>      src_x <span class="k3">-</span><span class="k3">=</span> dst_x<span class="k2">;</span></td></tr><tr><td class="number">168</td><td>      dst_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">169</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">170</td><td>   </td></tr><tr><td class="number">171</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">172</td><td>      h <span class="k3">+</span><span class="k3">=</span> dst_y<span class="k2">;</span></td></tr><tr><td class="number">173</td><td>      src_y <span class="k3">-</span><span class="k3">=</span> dst_y<span class="k2">;</span></td></tr><tr><td class="number">174</td><td>      dst_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">175</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">176</td><td>   </td></tr><tr><td class="number">177</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_x <span class="k3">+</span> w <span class="k3">&gt;</span> dst-&gt;w <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">178</td><td>      w <span class="k3">-</span><span class="k3">=</span> dst_x <span class="k3">+</span> w <span class="k3">-</span> dst-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">179</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">180</td><td>   </td></tr><tr><td class="number">181</td><td>   <span class="k1">if</span><span class="k2">(</span> w <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">182</td><td>   </td></tr><tr><td class="number">183</td><td>   <span class="k1">if</span><span class="k2">(</span> dst_y <span class="k3">+</span> h <span class="k3">&gt;</span> dst-&gt;h <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">184</td><td>      h <span class="k3">-</span><span class="k3">=</span> dst_y <span class="k3">+</span> h <span class="k3">-</span> dst-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">185</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">186</td><td>   </td></tr><tr><td class="number">187</td><td>   <span class="k1">if</span><span class="k2">(</span> h <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">188</td><td>   </td></tr><tr><td class="number">189</td><td>   <span class="c">/* Select destination surface for reading and writing */</span></td></tr><tr><td class="number">190</td><td>   <a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">191</td><td>   bmp_select<span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">192</td><td>   </td></tr><tr><td class="number">193</td><td>   <span class="c">/* Loop through all pixels */</span></td></tr><tr><td class="number">194</td><td>   <span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> h<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">195</td><td>      <span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">*</span>src_ptr <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span>src-&gt;line<span class="k2">[</span>src_y<span class="k3">+</span>j<span class="k2">]</span><span class="k2">)</span> <span class="k3">+</span> src_x<span class="k2">;</span></td></tr><tr><td class="number">196</td><td>      <span class="k1">unsigned</span> <span class="k1">int</span> dst_address <span class="k3">=</span> <a href="http://www.allegro.cc/manual/bmp_write_line" target="_blank"><span class="a">bmp_write_line</span></a><span class="k2">(</span> dst, dst_y<span class="k3">+</span>j <span class="k2">)</span> <span class="k3">+</span> <span class="n">4</span><span class="k3">*</span>dst_x<span class="k2">;</span></td></tr><tr><td class="number">197</td><td>      </td></tr><tr><td class="number">198</td><td>      <span class="k1">for</span><span class="k2">(</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> w<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">199</td><td>         <span class="k1">unsigned</span> <span class="k1">int</span> srcColor <span class="k3">=</span> <span class="k3">*</span>src_ptr<span class="k2">;</span></td></tr><tr><td class="number">200</td><td>         <span class="c">/* Extract the alpha value */</span></td></tr><tr><td class="number">201</td><td>         <span class="k1">unsigned</span> <span class="k1">int</span> fact <span class="k3">=</span> <a href="http://www.allegro.cc/manual/geta32" target="_blank"><span class="a">geta32</span></a><span class="k2">(</span> srcColor <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">202</td><td>         </td></tr><tr><td class="number">203</td><td>         <span class="c">/* Blend the colors if required */</span></td></tr><tr><td class="number">204</td><td>         <span class="k1">if</span><span class="k2">(</span> fact <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">205</td><td>            <span class="k1">if</span><span class="k2">(</span> fact <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">255</span> <span class="k2">)</span> bmp_write32<span class="k2">(</span> dst_address, srcColor <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">206</td><td>            <span class="k1">else</span> bmp_write32<span class="k2">(</span> dst_address, BlendColors32NoEmms<span class="k2">(</span> <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span> dst_address<span class="k2">)</span>, <span class="k3">*</span>src_ptr, fact <span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">207</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">208</td><td>         </td></tr><tr><td class="number">209</td><td>         <span class="c">/* Advance to the next pixel */</span></td></tr><tr><td class="number">210</td><td>         dst_address <span class="k3">+</span><span class="k3">=</span> <span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">211</td><td>         src_ptr<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">212</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">213</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">214</td><td>   </td></tr><tr><td class="number">215</td><td>   <span class="c">/* Finish blending */</span></td></tr><tr><td class="number">216</td><td>   CallEmms<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">217</td><td>   </td></tr><tr><td class="number">218</td><td>   <span class="c">/* Finish messing with the destination bitmap */</span></td></tr><tr><td class="number">219</td><td>   <a href="http://www.allegro.cc/manual/bmp_unwrite_line" target="_blank"><span class="a">bmp_unwrite_line</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">220</td><td>   <a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span> dst <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">221</td><td><span class="k2">}</span></td></tr><tr><td class="number">222</td><td>&#160;</td></tr><tr><td class="number">223</td><td>&#160;</td></tr><tr><td class="number">224</td><td>&#160;</td></tr><tr><td class="number">225</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">226</td><td>   <span class="c">/* Setup Allegro */</span></td></tr><tr><td class="number">227</td><td>   <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">228</td><td>   <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">229</td><td>   </td></tr><tr><td class="number">230</td><td>   <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span> <span class="n">32</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">231</td><td>   <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span> GFX_AUTODETECT_WINDOWED, <span class="n">800</span>, <span class="n">600</span>, <span class="n">0</span>, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">232</td><td>   </td></tr><tr><td class="number">233</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer <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">234</td><td>   </td></tr><tr><td class="number">235</td><td>   <span class="c">/* mybmp.png must be a 32-bit bitmap with an alpha channel! */</span></td></tr><tr><td class="number">236</td><td>   <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>sprite <span class="k3">=</span> load_png<span class="k2">(</span> <span class="s">"mybitmap.png"</span>, <span class="n">0</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">237</td><td>   </td></tr><tr><td class="number">238</td><td>   <span class="c">/* Draw it to the buffer */</span></td></tr><tr><td class="number">239</td><td>   AlphaBlend32<span class="k2">(</span> sprite, buffer, <span class="n">0</span>, <span class="n">100</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">240</td><td>   </td></tr><tr><td class="number">241</td><td>   <span class="c">/* Draw it 3 times to the buffer with different apha values */</span></td></tr><tr><td class="number">242</td><td>   AlphaBlend32<span class="k2">(</span> sprite, buffer, <span class="n">100</span>              , <span class="n">100</span>, <span class="n">255</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">243</td><td>   AlphaBlend32<span class="k2">(</span> sprite, buffer, <span class="n">100</span> <span class="k3">+</span>   sprite-&gt;w, <span class="n">100</span>, <span class="n">150</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">244</td><td>   AlphaBlend32<span class="k2">(</span> sprite, buffer, <span class="n">100</span> <span class="k3">+</span> <span class="n">2</span><span class="k3">*</span>sprite-&gt;w, <span class="n">100</span>, <span class="n">50</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">245</td><td>   </td></tr><tr><td class="number">246</td><td>   <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span> buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</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">247</td><td>   </td></tr><tr><td class="number">248</td><td>   <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">249</td><td>   </td></tr><tr><td class="number">250</td><td>   <span class="c">/* You can also draw directly to the screen, but that's not recommended</span></td></tr><tr><td class="number">251</td><td><span class="c">      as it's much slower */</span></td></tr><tr><td class="number">252</td><td>   </td></tr><tr><td class="number">253</td><td>   AlphaBlend32<span class="k2">(</span> sprite, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">100</span> <span class="k3">+</span> sprite-&gt;h <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">254</td><td>   </td></tr><tr><td class="number">255</td><td>   AlphaBlend32<span class="k2">(</span> sprite, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">100</span>              , <span class="n">100</span> <span class="k3">+</span> sprite-&gt;h, <span class="n">255</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">256</td><td>   AlphaBlend32<span class="k2">(</span> sprite, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">100</span> <span class="k3">+</span>   sprite-&gt;w, <span class="n">100</span> <span class="k3">+</span> sprite-&gt;h, <span class="n">150</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">257</td><td>   AlphaBlend32<span class="k2">(</span> sprite, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">100</span> <span class="k3">+</span> <span class="n">2</span><span class="k3">*</span>sprite-&gt;w, <span class="n">100</span> <span class="k3">+</span> sprite-&gt;h, <span class="n">50</span> <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">258</td><td>   </td></tr><tr><td class="number">259</td><td>   <a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">260</td><td>   </td></tr><tr><td class="number">261</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">262</td><td><span class="k2">}</span></td></tr><tr><td class="number">263</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>
I&#39;ve attached the .o file, the source file and the bitmap which the test program uses.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Tue, 23 Jan 2007 21:24:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I&#39;ve attached the .o file, the source file and the bitmap which the test program uses.
</p></div></div><p>

I can&#39;t download your attachment, I can&#39;t see it, can you check your attachment please?, and thanks again for all your help I really appreciate it!</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Dev-cpp with GCC 3.4.2 is around 9.2MiB or half an hour with good dial-up connection
</p></div></div><p>

What! only 9MB?, I only knew the official GCC site and it was very intimidating, I did not know about the link you posted, I&#39;ll download it right now!</p><p>[EDIT]</p><p>I followed Hoho&#39;s advice, Devcpp makes everything so nice and easy, specially after a long time using MSVC6!<br />Fladimir eveything works perfectly now! thank you very much, you gave me a lot of help and I&#39;ll add your name in the credits!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Wed, 24 Jan 2007 06:32:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK, I had forgot to press the &quot;Upload&quot; -button... But great that it works!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Wed, 24 Jan 2007 17:18:23 +0000</pubDate>
	</item>
</rss>
