<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[a5 rc4] anomalous blending</title>
		<link>http://www.allegro.cc/forums/view/606101</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 18 Jan 2011 17:49:39 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since switching to RC4 (from 4.9.22) I noticed my images were not blending the same as they were before while in different opacities. I recreated the problem thusly:</p><ul><li><p>blue background (or any color background)
</p></li><li><p>The top is a single white bitmap that fades from transparent to opaque.
</p></li><li><p>The bottom is a donkey image being drawn several times from no opacity to full opacity.</p></li></ul><h2>RC4</h2><p>

this is default with no function call to change the blender:<br /><span class="remote-thumbnail"><span class="json">{"name":"603110","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/b\/8b2ae23f8fce815bc6914bb91a692524.png","w":1019,"h":723,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/b\/8b2ae23f8fce815bc6914bb91a692524"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/b/8b2ae23f8fce815bc6914bb91a692524-240.jpg" alt="603110" width="240" height="170" /></span><br />the gradient appears correct, but, the donkey is being drawn additive when at 0 opacity.</p><p>This is after a call to <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span></span> to &#39;draw it normally&#39;.<br /><span class="remote-thumbnail"><span class="json">{"name":"603111","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/c\/ccacc794bc2a9f98a5d4d87eadc47d4a.png","w":1019,"h":723,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/c\/ccacc794bc2a9f98a5d4d87eadc47d4a"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/c/ccacc794bc2a9f98a5d4d87eadc47d4a-240.jpg" alt="603111" width="240" height="170" /></span><br />Now the donkey appears to drawn correctly, but the gradient reveals that as the opacity decreases, there is a bump in darkness, so much that the white overlayed on the blue makes the blue darker.</p><h2>RC1</h2><p>

It looks like the change happened somewhere between RC1 and RC3, I don&#39;t have a copy of RC2 that I could test it out with.  Under RC1, it seems like the blending is correct.</p><p>While in default:<br /><span class="remote-thumbnail"><span class="json">{"name":"603112","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/d\/2d1de75cb50024f524b6871bd9aef110.png","w":1019,"h":723,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/d\/2d1de75cb50024f524b6871bd9aef110"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/2/d/2d1de75cb50024f524b6871bd9aef110-240.jpg" alt="603112" width="240" height="170" /></span></p><p>a call to <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span></span><br /><span class="remote-thumbnail"><span class="json">{"name":"603113","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/3\/838ce3f39af9e3a4430934a9a552378a.png","w":1019,"h":723,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/3\/838ce3f39af9e3a4430934a9a552378a"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/3/838ce3f39af9e3a4430934a9a552378a-240.jpg" alt="603113" width="240" height="170" /></span></p><p>Here&#39;s my code:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;allegro5\allegro5.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5\allegro_image.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5\allegro_color.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</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">  9</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"> 10</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"> 11</span>
<span class="number"> 12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">1024</span>, <span class="n">768</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>b <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"not_sure.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>b2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"donk3.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>background <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"background.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>b<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>  <span class="c">// comment/uncomment as necessary</span>
<span class="number"> 22</span>  <span class="c">//al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA);</span>
<span class="number"> 23</span>  <span class="c">//al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);</span>
<span class="number"> 24</span>
<span class="number"> 25</span>  <span class="k1">do</span>
<span class="number"> 26</span>  <span class="k2">{</span>
<span class="number"> 27</span>    <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_color_name"><span class="a">al_color_name</span></a><span class="k2">(</span><span class="s">"darkblue"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>    <a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a><span class="k2">(</span>b, color, <span class="n">100</span>, <span class="n">100</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>b, <span class="n">100</span>, <span class="n">200</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>    
<span class="number"> 33</span>    <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><span class="k3">=</span><span class="n">5</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 34</span>    <span class="k2">{</span>
<span class="number"> 35</span>      color <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, i<span class="k3">*</span><span class="n">0</span>.<span class="n">2f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>      <a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a><span class="k2">(</span>b2, color, <span class="k3">-</span><span class="n">50</span><span class="k3">+</span>i<span class="k3">*</span><span class="n">175</span>, <span class="n">400</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>
<span class="number"> 39</span>    <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>  <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span><span class="k2">}</span>
</div></div><p>

I also attached the two images I used.  I also tried al_set_new_display_flags(ALLEGRO_OPENGL); but it made no difference.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 17 Jan 2011 12:48:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry, didn&#39;t really even read your post. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /></p><p>Is this a pre-multiplied alpha thing? There&#39;s a bitmap flag to disable that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 17 Jan 2011 12:51:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why would I, by default, want an image at 0 opacity to be visible?</p><p>[edit]<br />this appears to make things normal again:
</p><div class="source-code snippet"><div class="inner"><pre><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_NO_PREMULTIPLIED_ALPHA<span class="k2">)</span><span class="k2">;</span>
<span class="c">// load images heaurh </span>
<a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

How &#39;bout we add <span class="source-code">al_set_display_flags<span class="k2">(</span>ALLEGRO_DISPLAY_NOT_UPSIDE_DOWN<span class="k2">)</span></span> while we&#39;re at it? <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 17 Jan 2011 13:02:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;s a confusing explanation at <span class="source-code"><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><span class="k2">)</span></span>.</p><p>Personally, I wouldn&#39;t have changed Allegro to work this way by default, even if it is better to those who know what they are doing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 17 Jan 2011 13:16:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Images that you intend to be additive shouldn&#39;t have alpha data in them, regardless.  </p><p>It seems to me that it&#39;s an attempt to make additive images with alpha work with alpha, which they shouldn&#39;t.</p><p>I vote we change it back. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>[edit] or at least make the default behavior as described above.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 17 Jan 2011 13:20:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606101/899061#target">Mark Oates</a> said:</div><div class="quote"><p> Images that you intend to be additive shouldn&#39;t have alpha data in them, regardless.
</p></div></div><p>I agree; it just seems weird from my perspective as a casual 2D game programmer.</p><p>I don&#39;t mind Allegro supporting pre-multiplied alpha, but I would make it opt-in via <span class="source-code">ALLEGRO_PREMULTIPLIED_ALPHA</span>. And I think <span class="source-code"><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span></span> makes for a better default blending mode.</p><p>Anyway, I assume this was discussed on the AD mailing list. You could search it to find all the reasoning behind making this the default mode.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 17 Jan 2011 13:33:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The problem with ADD/ALPHA/INVERSE is mainly that it breaks when you turn filtering on (and also when you draw to intermediate alpha bitmaps). I got convinced that it&#39;s a better idea to have ADD/ONE/INVERSE by default when I read Shawn Hargreave&#39;s explanations <span class="ref"><sup>[<a href="#">1</a>]</sup></span> <span class="ref"><sup>[<a href="#">2</a>]</sup></span> why he changed the default blending mode in XNA 4 to just that (breaking all older XNA code by doing so <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />).</p><p>The easiest explanation to justify the change is to just say it&#39;s the way both OpenGL and DirectX do blending - except for the special case of completely unfiltered blitting directly to a non-alpha target you won&#39;t be happy with non-premultiplied alpha.</p><p>The donkey seems to be drawn correctly. If you do this:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ADD, ONE, INVERSE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a><span class="k2">(</span>donkey, <span class="k2">{</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">}</span>, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Then it means the source alpha is 0 for every pixel due to the tinting, so you fully keep the blue background and then just add the r/g/b values in the source to it. To draw the donkey completely transparent, instead do this:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ADD, ONE, INVERSE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a><span class="k2">(</span>donkey, <span class="k2">{</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">}</span>, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

To draw it at exactly 50% of its normal transparency, do this:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ADD, ONE, INVERSE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a><span class="k2">(</span>donkey, <span class="k2">{</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">}</span>, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

This last version above may look similar to using the version below (assuming no premultiplied alpha below):</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ADD, ALPHA, INVERSE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a><span class="k2">(</span>donkey, <span class="k2">{</span><span class="n">1</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">}</span>, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

However this will break completely when you turn on filtering. Look at ex_filter and ex_premul_alpha to see why this will probably matter in most games.</p><p>With premultiplied alpha you can do anything you can with non-premultiplied just as easily (for tinted drawing, simply multiply the r,g,b values you pass with the alpha yourself) but, the big advantage, things won&#39;t randomly break when you turn on filtering (or draw to an intermediate bitmap). It also will be like other libraries do it (XNA, OpenGL, DirectX, and likely also things like Flash or HTML5 which do filtering by default and so have little choice).
</p><div class="ref-block"><h2>References</h2><ol><li><a href="http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx">http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx</a></li><li><a href="http://blogs.msdn.com/b/shawnhar/archive/2010/04/09/how-shawn-learned-to-stop-worrying-and-love-premultiplied-alpha.aspx">http://blogs.msdn.com/b/shawnhar/archive/2010/04/09/how-shawn-learned-to-stop-worrying-and-love-premultiplied-alpha.aspx</a></li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Mon, 17 Jan 2011 17:06:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Alright, I&#39;m down. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /></p><p>It sure is wack at first, and I wouldn&#39;t have recommended changing it in an RC ( <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" /> ), but it does solve more problems at the cost of (r*a, g*a, b*a) in tinting.</p><p>So everything has the same appearance as before, except:
</p><ul><li><p>by default, the mode is <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ADD, ONE, INVERSE<span class="k2">)</span><span class="k2">;</span></span>  Not a big deal but:
</p></li><li><p>you must tint your bitmaps by multiplying the color components by the alpha component (r*a, g*a, b*a); otherwise the images will appear additive blended at 0 opacity.
</p></li><li><p>alpha is essentially discarded in this mode.</p></li></ul><p>We gain:
</p><ul><li><p>ability to draw on off-screen bitmaps with correct blending. (this I am very much in favor of, had problems with that in the past.)
</p></li><li><p>filtering will not cause issues.
</p></li><li><p>alpha-type cutout images will not have white borders.
</p></li><li><p>in additive blending mode (ADD, ONE, ONE) alpha is preserved. So before (ADD, ALPHA, INVERSE), fading out an additive image meant interpolating the colors with black instead of changing the alpha.  This is still the case, but it&#39;s now what you do for your regular blending, too.</p></li></ul><p>Leave everything in default, and all you have to do differently is:
</p><ul><li><p>all your tinting colors must have their individual color components by multiplied by the alpha. eg <span class="source-code"><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">*</span>alpha, <span class="n">0</span>.<span class="n">93</span><span class="k3">*</span>alpha, <span class="n">0</span>.<span class="n">2</span><span class="k3">*</span>alpha, alpha<span class="k2">)</span><span class="k2">;</span></span></p></li></ul><p>Right?</p><p>[edit] perhaps a PREMULTIPLIED_TINTING may be helpful? </p><p>[edit2] hmmm... subtractive blending is a challenge, now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 18 Jan 2011 00:02:37 +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/606101/899136#target">Mark Oates</a> said:</div><div class="quote"><p>
[edit2] hmmm... subtractive blending is a challenge, now.
</p></div></div><p>

I never tried it or thought about it, but is it really much different? In fact as long as bitmaps you blend additivly/subtractivly contain no alpha, nothing at all should change.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 18 Jan 2011 17:49:39 +0000</pubDate>
	</item>
</rss>
