<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] Lit (fog?) on sprite</title>
		<link>http://www.allegro.cc/forums/view/614620</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 05 Sep 2014 11:59:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello all,</p><p>I&#39;m trying to port my old Allegro 4 code with AllegroGL to Allegro 5.<br />This concerns the drawing of a &#39;lit&#39; sprite (the equivalent of draw_lit_sprite in allegro 4.2)</p><p>With AllegroGL I was doing this :</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>glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>        
<span class="number">  2</span>glTranslatef<span class="k2">(</span>fx, fy, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>glScalef<span class="k2">(</span>fScaleX, fScaleY, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>  
<span class="number">  4</span><span class="k1">if</span> <span class="k2">(</span>fRot360 <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span> glRotated<span class="k2">(</span>fRot360, <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>glBlendFunc<span class="k2">(</span>GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>glBindTexture<span class="k2">(</span>GL_TEXTURE_2D, m_texSprite<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">if</span> <span class="k2">(</span>fLitLevel <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1e</span><span class="k3">-</span><span class="n">2</span><span class="k2">)</span>
<span class="number"> 10</span><span class="k2">{</span>
<span class="number"> 11</span>  glFogi<span class="k2">(</span> GL_FOG_MODE, GL_LINEAR <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  <span class="k1">float</span> fogCol<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>fLitR, fLitG, fLitB, <span class="n">1</span>.<span class="n">0f</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  glFogfv<span class="k2">(</span> GL_FOG_COLOR, fogCol <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  glFogf<span class="k2">(</span> GL_FOG_DENSITY, <span class="n">1</span>.<span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  
<span class="number"> 17</span>  glFogf<span class="k2">(</span> GL_FOG_START, <span class="k3">-</span>fLitLevel <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  glFogf<span class="k2">(</span> GL_FOG_END, <span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">-</span> fLitLevel<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  
<span class="number"> 20</span>  glHint<span class="k2">(</span> GL_FOG_HINT, GL_FASTEST <span class="k2">)</span><span class="k2">;</span>    
<span class="number"> 21</span>  glEnable<span class="k2">(</span> GL_FOG <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>  <span class="k2">{</span>
<span class="number"> 23</span>    glColor3f<span class="k2">(</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"> 24</span>    DrawTheQuadWithGL_QUADS<span class="k2">(</span>...<span class="k2">)</span>
<span class="number"> 25</span>  <span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span>  glDisable<span class="k2">(</span> GL_FOG <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
<span class="number"> 29</span><span class="k1">else</span>
<span class="number"> 30</span><span class="k2">{</span>
<span class="number"> 31</span>  glColor4f<span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, <span class="n">1</span>.<span class="n">0f</span>, fAlpha<span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 32</span>  DrawTheQuadWithGL_QUADS<span class="k2">(</span>...<span class="k2">)</span>
<span class="number"> 33</span><span class="k2">}</span>
</div></div><p>

If I understand correctly the Allegro 5 documentation, managing alpha layer is done by using al_draw_tinted_xx_bitmap.<br />However I can&#39;t find how to lit(fog) a sprite.</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>fAlpha <span class="k3">&lt;</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <a href="http://www.allegro.cc/manual/al_draw_tinted_scaled_rotated_bitmap"><span class="a">al_draw_tinted_scaled_rotated_bitmap</span></a><span class="k2">(</span>m_bmpSprite, 
<span class="number">  4</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">0f</span><span class="k3">*</span>fAlpha, <span class="n">1</span>.<span class="n">0f</span><span class="k3">*</span>fAlpha, <span class="n">1</span>.<span class="n">0f</span><span class="k3">*</span>fAlpha, fAlpha<span class="k2">)</span>,
<span class="number">  5</span>    cx, cy, fx, fy, fScaleX, fScaleY, fRot360, <span class="n">0x00</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span><span class="k2">}</span>
<span class="number">  7</span><span class="k1">else</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>  <span class="k1">if</span> <span class="k2">(</span>fLitLevel <span class="k3">&gt;</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span>
<span class="number"> 10</span>  <span class="k2">{</span>
<span class="number"> 11</span>    <span class="c">// ???</span>
<span class="number"> 12</span>  <span class="k2">}</span>
<span class="number"> 13</span>  <span class="k1">else</span>
<span class="number"> 14</span>  <span class="k2">{</span>
<span class="number"> 15</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>m_bmpSprite, cx, cy, fx, fy,
<span class="number"> 16</span>                    fScaleX, fScaleY, fRot360, <span class="n">0x00</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k2">}</span>
<span class="number"> 18</span><span class="k2">}</span>
</div></div><p>

One more question:<br />Is it faster to continue on using glLoadIdentity / glTranslatef / glScalef / glRotated or to switch to various Allegro 5 methods using <span class="source-code">_scaled_</span> / <span class="source-code">_rotated_</span> ?</p><p>Thank you in advance for your help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Mon, 01 Sep 2014 12:55:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">al_draw_tinted_<span class="k3">*</span><span class="k2">(</span><span class="k2">)</span></span> just sets the color of each vertex to the passed tint color. This works in conjunction with the currently set blender to get the final result.</p><p>You cannot achieve the lit sprite effect you are talking about using Allegro functions unless you use a shader.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/614620/1004935#target">anto80</a> said:</div><div class="quote"><p>Is it faster to continue on using glLoadIdentity / glTranslatef / glScalef / glRotated or to switch to various Allegro 5 methods using <u>scaled</u> / <u>rotated</u> ?</p></div></div><p>
I can&#39;t say for certain (don&#39;t have time to look at Allegro&#39;s code), but just considering A5 has to apply the current transformation and then translate, scale, and rotate, your OpenGL code is probably a bit faster.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Wed, 03 Sep 2014 07:36:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think it&#39;s possible to draw lights using Allegro5 using a trick: draw one or more white or grayscale circle with an alpha 0.5 or so over the part you want to give a highlight. For fog, you could use a suitable half-transparent fog sprite in the same manner. But yes, for &quot;real&quot; fog you will need OpenGL or shaders.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Wed, 03 Sep 2014 09:00:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you for your feedback.</p><p>I also thought about drawing a filled rectangle with color and transparency. But I agree with you it won&#39;t work if the target sprite is not rectangular.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anto80)</author>
		<pubDate>Fri, 05 Sep 2014 11:59:48 +0000</pubDate>
	</item>
</rss>
