<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Help with blender and alpha masking</title>
		<link>http://www.allegro.cc/forums/view/617346</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 04 Apr 2018 03:10:17 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am new to the whole blender thing and have spent many hours trying<br />to figure out what I though would be a simple task.</p><p>I am trying to draw a bitmap onto the backbuffer and blend it with the<br />backbuffer.</p><p>This code from the examples works great:</p><p>al_set_blend_color(al_map_rgba_f(0.5, 0.5, 0.5, 0.5));<br />al_set_blender(ALLEGRO_ADD, ALLEGRO_CONST_COLOR, ALLEGRO_CONST_COLOR);</p><p>But my source bitmap has an alpha channel, and I can&#39;t figure out how<br />to get that respected...no matter how many different combination I try<br />I always get the zero pixels blended also.</p><p>I have tried al_set_separate_blender with many different combinations<br />and gotten nowhere.</p><p>I have read the docuemntation many times, and looked at other explanations<br />of blending of the web.  But I can&#39;t seem to make it work.</p><p>Here is a simple test program:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="c">// this draws a background of colored squares</span>
<span class="number">  2</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> c<span class="k2">[</span><span class="n">5</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  3</span>   c<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>   c<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">255</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>   c<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>   c<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>   c<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>   <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</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"> 11</span>   <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <span class="k1">int</span> ci <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> y<span class="k3">&lt;</span><span class="n">10</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 15</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> x<span class="k3">&lt;</span><span class="n">10</span><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 16</span>      <span class="k2">{</span>
<span class="number"> 17</span>         <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>x<span class="k3">*</span><span class="n">20</span>, y<span class="k3">*</span><span class="n">20</span>, x<span class="k3">*</span><span class="n">20</span><span class="k3">+</span><span class="n">20</span>, y<span class="k3">*</span><span class="n">20</span><span class="k3">+</span><span class="n">20</span>, c<span class="k2">[</span>ci<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>         <span class="k1">if</span> <span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>ci&gt;2<span class="k2">)</span> ci <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 19</span>      <span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="c">// this is the bitmap I am drawing</span>
<span class="number"> 24</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>msg, <span class="s">"Test"</span><span class="k2">)</span> <span class="k2">;</span>
<span class="number"> 25</span>   <span class="k1">int</span> sw <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>msg<span class="k2">)</span> <span class="k3">*</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 26</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>temp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>sw, <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</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_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>   <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, ci<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>, sw<span class="k3">/</span><span class="n">2</span>, <span class="n">0</span>, ALLEGRO_ALIGN_CENTRE, msg<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>   <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>temp, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</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="c">// here is where I have tried just about every blender combination I can think of</span>
<span class="number"> 34</span>
<span class="number"> 35</span>   al_set_blend_color<span class="k2">(</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">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><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</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_CONST_COLOR, ALLEGRO_CONST_COLOR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span>
<span class="number"> 39</span>
<span class="number"> 40</span><span class="c">// this is where i actually draw  it</span>
<span class="number"> 41</span>   <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>   <a href="http://www.allegro.cc/manual/al_draw_scaled_rotated_bitmap"><span class="a">al_draw_scaled_rotated_bitmap</span></a><span class="k2">(</span>temp, sw<span class="k3">/</span><span class="n">2</span>, <span class="n">4</span>, <span class="n">88</span>, <span class="n">48</span>, <span class="n">4</span>, <span class="n">4</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</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"> 44</span>   <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span>
</div></div><p>
   </p><p>When I don&#39;t specify any blender I get a nice masked text over background.</p><p>When I try this:<br />al_set_blend_color(al_map_rgba_f(0.5, 0.5, 0.5, 0.5));<br />al_set_blender(ALLEGRO_ADD, ALLEGRO_CONST_COLOR, ALLEGRO_CONST_COLOR);</p><p>I get a nice blended source and dest, just like what I wanted,<br />except the alpha is not respected and I get a rectangle around the text.</p><p>I tried:<br />al_set_blend_color(al_map_rgba_f(0.5, 0.5, 0.5, 0));<br />al_set_blend_color(al_map_rgba_f(0.5, 0.5, 0.5, 1));<br />al_set_blend_color(al_map_rgb_f(0.5, 0.5, 0.5));<br />but they all made no difference.</p><p>I tried:<br />al_set_blend_color(al_map_rgb_f(0.5, 0.5, 0.5));<br />al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_CONST_COLOR, ALLEGRO_CONST_COLOR, ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);</p><p>al_set_blend_color(al_map_rgb_f(0.5, 0.5, 0.5));<br />al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_CONST_COLOR, ALLEGRO_CONST_COLOR, ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_ZERO);</p><p>plus many more combinations, but I can never get the alpha mask to work...</p><p>Can anyone with more experience with blenders help me?</p><p>Do I somehow have to do this with 2 steps?</p><p>My overall goal is simply to have a partially transparent bitmap superimposed over<br />another bitmap (the backbuffer), (kind like a water mark), but I want it masked so the <br />zero pixels are not blended with the background.</p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Tue, 03 Apr 2018 19:35:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try:</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>ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span>

OR

<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_ONE<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Tue, 03 Apr 2018 20:25:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Dizzy Egg,</p><p>al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);<br />- no blending and no alpha mask </p><p>al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE);<br />- no blending, but alpha mask works (same as no blender at all)</p><p>I also tried:</p><p>al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_ZERO, ALLEGRO_ONE, ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);<br />- no blending and no alpha mask</p><p>al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE, ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);<br />- no blending, but alpha mask works</p><p>al_set_blend_color(al_map_rgb_f(0.5, 0.5, 0.5));<br />al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_CONST_COLOR, ALLEGRO_CONST_COLOR, ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE);<br />- blending, but no alpha mask</p><p>al_set_blend_color(al_map_rgb_f(0.5, 0.5, 0.5));<br />al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_CONST_COLOR, ALLEGRO_CONST_COLOR, ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE);<br />- blending, but no alpha mask</p><p>al_set_blend_color(al_map_rgb_f(0.5, 0.5, 0.5));<br />al_set_separate_blender(ALLEGRO_ADD, ALLEGRO_CONST_COLOR, ALLEGRO_CONST_COLOR, ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO);<br />- blending, but no alpha mask</p><p>I want something that has blending and alpha mask...</p><p>Does the pixel format have anything to do with it?</p><p>temp pixel format:<br />ALLEGRO_PIXEL_FORMAT_ARGB_8888<br />backbuffer pixel format:<br />ALLEGRO_PIXEL_FORMAT_RGB_565</p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Tue, 03 Apr 2018 20:46:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_tinted_bitmap"><span class="a">al_draw_tinted_bitmap</span></a></span> with al_map_rgba_f(0.5,0.5,0.5,0.5).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 03 Apr 2018 21:59:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You need to 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_ONE, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span></span> BEFORE you create your display, not afterwards.</p><p>Note: the options are just ones I use in my Deluxe Pacman 2 game, yours may differ.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 03 Apr 2018 23:10:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Poppycock. You can change the blender anytime you want, except when drawing is held.</p><p>What you just quoted is the pre-multiplied alpha blender, which is the default.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 03 Apr 2018 23:12:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just tested that, you&#39;re right, no longer needed.  But I needed to add it at one point so I will assume something changed.  Good to know anyhow, even with Edgar&#39;s usual charming, kind replies.</p><p>My only guess would be that it has to do with <span class="source-code"><a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>temp, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span>.  It&#39;s not a function I have ever used but what mask is it converting?  And what alpha is it making it?  Is it expecting the bitmap to already have a mask? (awaits another rude response from Edgar)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 03 Apr 2018 23:21:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If I&#39;m being fresh it&#39;s because I dislike bad advice. :/</p><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a></span> takes a mask color, compares it to every pixel, and writes zero alpha if it matches.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 03 Apr 2018 23:40:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar!</p><p>your suggestion:</p><p>Try al_draw_tinted_bitmap with al_map_rgba_f(0.5,0.5,0.5,0.5).</p><p>Did exactly what I was looking for.</p><p>I didn&#39;t even look at the tinted drawing functions.<br />If I would have I would have found your exact suggestion as an example.</p><p>Thanks again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Weiss)</author>
		<pubDate>Wed, 04 Apr 2018 03:10:17 +0000</pubDate>
	</item>
</rss>
