<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Is it possible to acheive &quot;screen&quot; blending with al_set_blender()?</title>
		<link>http://www.allegro.cc/forums/view/612797</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 13 Jun 2013 12:05:34 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I want to set a certain blending mode that I have used in previous games, called &quot;screen&quot; blending, which results in a color that is always at least as bright as the input colors, but is <i>not the same as additive blending</i>. More details about it can be found <a href="http://en.wikipedia.org/wiki/Blend_modes#Screen">here</a>.</p><p>Basically, I want the resulting color to be the following:</p><div class="source-code snippet"><div class="inner"><pre>r <span class="k3">=</span> <span class="n">1</span> <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span> <span class="k3">-</span> sr<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">1</span> <span class="k3">-</span> dr<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
g <span class="k3">=</span> <span class="n">1</span> <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span> <span class="k3">-</span> sg<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">1</span> <span class="k3">-</span> dg<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
b <span class="k3">=</span> <span class="n">1</span> <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span> <span class="k3">-</span> sb<span class="k2">)</span> <span class="k3">*</span> <span class="k2">(</span><span class="n">1</span> <span class="k3">-</span> db<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Is this at all possible using al_set_blender() or am I going to have to do this sort of stuff with my own code?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tumlee)</author>
		<pubDate>Thu, 13 Jun 2013 01:47:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Rearrange your formula a bit to see which blender you need :</p><p>r = 1 - (1-sr)*(1-dr)<br />r = 1 - (1 -sr -dr +sr*dr)<br />r = 1 - 1 + sr + dr - sr*dr<br />r = 0 + sr + dr - sr*dr</p><p>so</p><p>r = sr(1 - dr) + dr</p><p>or</p><p>r = sr + dr(1 - sr)</p><p>So, use <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_INVERSE_DEST_COLOR , ALLEGRO_ONE<span class="k2">)</span><span class="k2">;</span></span></p><p>or<br /><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_SRC_COLOR<span class="k2">)</span><span class="k2">;</span></span></p><p>That should get you your &#39;screen&#39; blending back.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 13 Jun 2013 02:43:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you very much! It&#39;s amazing how I can pass calculus and then trip over my own feet on basic algebra.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tumlee)</author>
		<pubDate>Thu, 13 Jun 2013 12:03:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It takes constant practice to maintain.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Thu, 13 Jun 2013 12:05:34 +0000</pubDate>
	</item>
</rss>
