<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] Blender</title>
		<link>http://www.allegro.cc/forums/view/613960</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 28 Feb 2014 00:58:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,</p><p>I&#39;ve a small problem with the use of <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><span class="k2">)</span></span>.<br />I want to create something like <a href="https://www.youtube.com/watch?v=YpQk55bqmUA">https://www.youtube.com/watch?v=YpQk55bqmUA</a> ; so my first try was with <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 class="k2">(</span><span class="k2">)</span></span>, but the effect wasn&#39;t really what I expected..<br />After that, I heard about <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><span class="k2">)</span></span>, but what I found on it was the same on every website: a copy/paste of the Allegro Wiki.</p><p>For exemple, let&#39;s say I have:<br />- my map drawned<br />- a black box covering the screen (covering the map with shadow)<br />- a &quot;white&quot; zone/bitmap, to enlight a part of the room</p><p>like (in my gameloop ; draw section):
</p><div class="source-code snippet"><div class="inner"><pre>map-&gt;DrawMap<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

darkarea <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>config-&gt;WIDTH, config-&gt;HEIGHT<span class="k2">)</span><span class="k2">;</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>darkarea<span class="k2">)</span><span class="k2">;</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><span class="n">0</span>, <span class="n">0</span>, config-&gt;WIDTH, config-&gt;HEIGHT, <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="c">// my black screen</span>
<a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>?, ?, ?<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>light, mouse.x <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>light<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, mouse.y <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>light<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// my light bitmap (png, transparent at the center, black on the sides)</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>

<a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>darkarea, <span class="n">0</span>, <span class="n">0</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>darkarea<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

In this configuration, what is my &quot;src&quot; and what is my &quot;dst&quot; for the blender?</p><p>Sorry for this stupid question ; I search for information on Internet, but everyone tell the same, and since I don&#39;t understand it...</p><p>Thanks in advance.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hyllis)</author>
		<pubDate>Thu, 27 Feb 2014 19:22:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should use <span class="source-code"><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> instead of drawing a filled rectangle (which requires you to use the Primitives addon.  Also, there&#39;s no need to draw everything to a buffer.  Just draw to the display which is already buffered.  You use <span class="source-code"><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> to show it once everything is drawn.</p><p>For my own game, I use the following for <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><span class="k2">)</span></span> which works well...</p><p><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></p><p>EDIT: Here&#39;s all my own display setup code I have in a game I am currently working on...</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="k1">if</span><span class="k2">(</span>setting.vsync<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_VSYNC, setting.vsync, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span>   <span class="k1">if</span><span class="k2">(</span>setting.opengl<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>   <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_MAG_LINEAR<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</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_ONE, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SINGLE_BUFFER, <span class="n">1</span>, ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>   <span class="k1">if</span><span class="k2">(</span>setting.fullscreen <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span> <span class="c">// Regular Fullscreen mode (0 = window)</span>
<span class="number"> 11</span>      <span class="k1">if</span><span class="k2">(</span>setting.opengl<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_FULLSCREEN <span class="k3">|</span> ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>      <span class="k1">else</span> <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_FULLSCREEN<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>      <span class="k1">if</span><span class="k2">(</span>setting.frequency<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_set_new_display_refresh_rate"><span class="a">al_set_new_display_refresh_rate</span></a><span class="k2">(</span>setting.frequency<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   <span class="k2">}</span>
<span class="number"> 16</span>   <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>setting.fullscreen <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">{</span> <span class="c">// Fullscreen Window (0 = window)</span>
<span class="number"> 17</span>      <span class="k1">if</span><span class="k2">(</span>setting.opengl<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_FULLSCREEN_WINDOW <span class="k3">|</span> ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>      <span class="k1">else</span> <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_FULLSCREEN_WINDOW<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>      <span class="k1">if</span><span class="k2">(</span>setting.frequency<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_set_new_display_refresh_rate"><span class="a">al_set_new_display_refresh_rate</span></a><span class="k2">(</span>setting.frequency<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   <span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>   setting.screen <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>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>setting.screen<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 25</span>      <span class="c">// do error stuff here</span>
<span class="number"> 26</span>   <span class="k2">}</span>
</div></div><p>

I have a few settings I load in from a config file that allows me to easily change fullscreen modes, but this supports fullscreen, fullscreen windowed and window, does nice blending with smooth edges etc.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Thu, 27 Feb 2014 22:54:05 +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/613960/997029#target">NiteHackr</a> said:</div><div class="quote"><p>
al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA);
</p></div></div><p>
That&#39;s the same as the default blender which uses pre-multiplied alpha. (Pre-multiplied alpha means you have to multiply the alpha yourself when passing a color, and allegro pre-multiplies the colors in the bitmaps when you load them).</p><p>To draw your light / light bitmap use the drawing routines and vary the alpha or draw a white light bitmap with <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 class="k2">(</span>bmp , <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span>alpha,alpha,alpha,alpha<span class="k2">)</span> , x , y , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></span></p><p>If you want an overwrite blender, you need :<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_ZERO<span class="k2">)</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 27 Feb 2014 23:49:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi, thanks you both for your answers,</p><p>My tries with <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 class="k2">(</span><span class="k2">)</span></span> failed because I was putting 0 for r, g and b, I was only taking into consideration the alpha ; thanks!</p><p>But unfortunately, it doesn&#39;t change my problem with the &quot;dark zone&quot; thing (now draw directly on the buffer + <span class="source-code"><a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><span class="k2">)</span></span>) ; I try, with and without it, and with <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> (default) and <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_ZERO<span class="k2">)</span></span><br />=&gt; <a href="http://i.imgur.com/P2Ea5B7.png">http://i.imgur.com/P2Ea5B7.png</a></p><p>In both case, the background map disappears, I don&#39;t understand why, the blender don&#39;t blend the black screen and the transparent light image? apparently no since the transparent become white.</p><p>I was using the <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><span class="k2">)</span></span> in my game loop (in the draw section), but I saw you using it in your display setup at the beginning ; is it important? (I try moving it, but apparently, nothing change)</p><p>Thanks in advance ; sorry again for these questions..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hyllis)</author>
		<pubDate>Fri, 28 Feb 2014 00:22:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can make a shadow map by overwriting the light areas with zero alpha. Clear a bitmap to black and then &#39;draw&#39; the &#39;light&#39; onto it using the overwrite blender I showed you earlier.</p><p>And no you can&#39;t draw black completely over it and then draw your light and expect it to work properly like in the first example in the image you gave. You have to leave some areas blank so the light or dark doesn&#39;t get drawn. That&#39;s what the overwrite blender is for.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 28 Feb 2014 00:32:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, I was thinking it could work without it.<br />Well, I&#39;ll read more and try things ; thanks for your help <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hyllis)</author>
		<pubDate>Fri, 28 Feb 2014 00:48:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can combine both in the same bitmap. Clear that bitmap to black and then overwrite with white or clear areas. Then draw that bitmap over your mini map.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 28 Feb 2014 00:49:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>darkarea <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>config-&gt;WIDTH, config-&gt;HEIGHT<span class="k2">)</span><span class="k2">;</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>darkarea<span class="k2">)</span><span class="k2">;</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_ONE , ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</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>
<a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>light, mouse.x <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>light<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, mouse.y <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>light<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</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_ONE, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span> <span class="c">// &lt;=</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>

<a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>darkarea, <span class="n">0</span>, <span class="n">0</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>darkarea<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Thanks! My first code + the correct blender mode + go back to the default one at the end (without it, it doesn&#39;t work..), and it work as expected.<br />It could probably be cleaner, but at least, it&#39;s a good base for me to start.</p><p>Thanks again <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Hyllis)</author>
		<pubDate>Fri, 28 Feb 2014 00:58:36 +0000</pubDate>
	</item>
</rss>
