<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Good programmig practice light effects</title>
		<link>http://www.allegro.cc/forums/view/617150</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 05 Dec 2017 03:59:22 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Been fiddling around with multiplying and al_set_blender and getting lights to work finally got 1 central light to follow the player around on screen with a black semitransparent tint following the camera.. this is almost the desired output, but woth this code each time a new light point is pushed back into a vector containing light positions it interferes with other points within proximity and overlaps its back night mask with the region thats supposed to be illuminatied.</p><p>Was wondering a good architecture for lighting, was thinking of having a black mask follow the camera and whenever a light position is within camera range it affects that bitmap, is this a good method for a sidescrolling game is there a better method? </p><p>Also how do you get the lights to not overlap in a negative way appreciate everything
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Travis Peterson)</author>
		<pubDate>Mon, 27 Nov 2017 15:26:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Probably you only need one &quot;black mask&quot;, and a light spot per sprite. So why not keep the sprite and it&#39;s light spot together? <br />Could you post some code or put it up on something like github so we can see what you have programmed?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Mon, 27 Nov 2017 23:32:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I actually read the last thread a while back but missed replying, sorry about that.</p><p>A lot of people make the mistake of thinking of this as a &quot;light mask&quot; when in actuality it&#39;s better to think of it as a shadow mask.  AllegroFlare has a very easy to understand and use <span class="source-code">ShadowMask</span> class. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />  Here are the files:</p><p><a href="https://github.com/MarkOates/allegro_flare/blob/master/include/allegro_flare/shadow_mask.h">shadow_mask.h</a>.<br /><a href="https://github.com/MarkOates/allegro_flare/blob/master/src/graphics/shadow_mask.cpp">shadow_mask.cpp</a>.</p><p>Also if you&#39;re interested:</p><ul><li><p>Here&#39;s <a href="https://github.com/MarkOates/allegro_flare/pull/114">the PR in AllegroFlare where `ShadowMask` was added</a>.
</p></li><li><p>Here&#39;s <a href="https://www.allegro.cc/forums/thread/616352/1023373">the allegro.cc thread with the question that sparked the creation of the class</a>.
</p></li><li><p>And <a href="https://github.com/MarkOates/allegro_flare/blob/master/examples/ex_shadow_mask.cpp">here&#39;s an example program</a>.</p></li></ul><p>Note that for the example program, you&#39;ll need to compile AllegroFlare, but the <span class="source-code">ShadowMask</span> class is stand-alone.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 28 Nov 2017 10:44:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oates, could you explain some of this? I don&#39;t understand allegro&#39;s blenders very well. I&#39;ve read the manual and I still don&#39;t get it.</p><p>I don&#39;t understand what your line with the blender here does :</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_DST_COLOR, ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span></span></p><p>How does that let you draw the shadow mask?</p><p>And how do you combine lights with this?</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_ONE<span class="k2">)</span><span class="k2">;</span></span></p><p><b>EDIT</b></p><p>I tried to do my own lights and I&#39;m having problems :</p><p>My code [ <a href="https://pastebin.com/c2srVteB">https://pastebin.com/c2srVteB</a> ] and the results [ <a href="https://imgur.com/a/NRPQ1">https://imgur.com/a/NRPQ1</a> ]</p><p><b>EDIT2</b></p><p><span class="remote-thumbnail"><span class="json">{"name":"611131","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/0\/00e9941907378dcb44cbd19d86049cf7.png","w":802,"h":633,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/0\/00e9941907378dcb44cbd19d86049cf7"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/0/0/00e9941907378dcb44cbd19d86049cf7-240.jpg" alt="611131" width="240" height="189" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 01 Dec 2017 04:12:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That doesn&#39;t look like add... that looks like replace... maybe it&#39;s the alpha and not the luminescence of the light messing with it?</p><p>[edit] Wait, and the circle doesn&#39;t make sense. If it&#39;s a square bitmap/texture, how is it drawing a circle / drawing stuff <b>under it</b>? Check the alpha for sure...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Fri, 01 Dec 2017 04:33:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The light effects and merging of lights works 100% visually now thanks to all your help only problem is it cuts fps by 1000%<br />Anyone have ideas to remedy this
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Travis Peterson)</author>
		<pubDate>Sat, 02 Dec 2017 21:20:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How many draws are we talking about per frame? (Lightmap) lighting effects are <b>almost free</b> on any GPU made after the 90&#39;s and maybe even before. So there&#39;s most likely something else going on.</p><p>Do you know how to use a profiler?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Sun, 03 Dec 2017 02:57:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Dont know how to use profilers in the context you describe and theres only 1 draw of the lightmap per frame, surface its drawn to is 1280x720 and theres 3 light points currently. Perhaps its somehow running on cpu rather than gpu?</p><p>Also noticed it runs near 100% speed when laptop is plugged in and 10% speed when not plugged in
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Travis Peterson)</author>
		<pubDate>Sun, 03 Dec 2017 21:24:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, I discussed this on IRC with Mr-Hide and we have working lighting now.</p><p><a href="https://imgur.com/a/AAXVT">https://imgur.com/a/AAXVT</a></p><p>Here&#39;s the code :</p><p><a href="https://pastebin.com/PB1qWz56">https://pastebin.com/PB1qWz56</a></p><p>I finally understand the blending better. I was wasting my time with a pure black bitmap with varying alpha and an alpha blender when it is as simple as drawing in plain color and using a multiply blender. The color value becomes the light value.</p><p>In regards to your slowdown, don&#39;t profile yet, sit down and think about what you&#39;re doing. Look at your code and examine what it is doing. Post code so we can help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 03 Dec 2017 23:17:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>//light.cpp<br />include &quot;light.h&quot;</p><p>light::light()<br />{<br />	torch = al_load_bitmap(&quot;images/torchlight.png&quot;);<br />	draw = false;<br />}</p><p>void light::UpdateXYLight()<br />{<br />	x1 = positionX;<br />	x2 = positionX + 450;<br />	y1 = positionY;<br />	y2 = positionY + 450;<br />}</p><p>//////blend.cpp<br />#include &quot;blend.h&quot;</p><p>void blend::update_surface(std::vector&lt;light*&gt; &amp;lightVector, std::vector&lt;light*&gt;::const_iterator &amp;iter44, std::vector&lt;player*&gt; &amp;playerVector, float cameraPosition[2])<br />{<br />	ALLEGRO_STATE previous_state;<br />	al_store_state(&amp;previous_state, ALLEGRO_STATE_TARGET_BITMAP | ALLEGRO_STATE_BLENDER);<br />	al_set_target_bitmap(surface);<br />	al_clear_to_color(al_map_rgb(0, 0, 0)); <br />	al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE);</p><p>	int counter_ = 0;<br />	for (iter44 = lightVector.begin(); iter44 != lightVector.end(); iter44++)<br />	{<br />		int tempposx = lightVector[counter_]-&gt;positionX - cameraPosition[0];<br />		int tempposy = lightVector[counter_]-&gt;positionY - cameraPosition[1];<br />		if (lightVector[counter_]-&gt;draw)<br />			al_draw_bitmap(lightVector[counter_]-&gt;torch, tempposx, tempposy, NULL);<br />		counter_++;<br />	}</p><p>	al_draw_bitmap(playerVector[0]-&gt;torch, playerVector[0]-&gt;positionX - cameraPosition[0] - 180, playerVector[0]-&gt;positionY - cameraPosition[1] - 200, NULL);</p><p>	al_restore_state(&amp;previous_state);<br />}</p><p>void blend::draw(std::vector&lt;light*&gt; &amp;lightVector, std::vector&lt;light*&gt;::const_iterator &amp;iter44, std::vector&lt;player*&gt; &amp;playerVector, float cameraPosition[2])<br />{<br />	update_surface(lightVector, iter44, playerVector, cameraPosition);<br />	<br />	ALLEGRO_STATE previous_state;<br />	al_store_state(&amp;previous_state, ALLEGRO_STATE_BLENDER);<br />	al_set_blender(ALLEGRO_ADD, ALLEGRO_DST_COLOR, ALLEGRO_ZERO);///</p><p>	al_draw_bitmap(surface, cameraPosition[0], cameraPosition[1], 0);  </p><p>	al_restore_state(&amp;previous_state);<br />}</p><p>void blend::UpdateLight(std::vector&lt;player*&gt; &amp;playerVector, float cameraPosition[2])<br />{<br />	//points[0].x = playerVector[0]-&gt;positionX - 300;<br />	//points[0].y = playerVector[0]-&gt;positionY - 850;<br />	//points[#include &quot;blend.h&quot;</p><p>void blend::update_surface(std::vector&lt;light*&gt; &amp;lightVector, std::vector&lt;light*&gt;::const_iterator &amp;iter44, std::vector&lt;player*&gt; &amp;playerVector, float cameraPosition[2])<br />{<br />	ALLEGRO_STATE previous_state;<br />	al_store_state(&amp;previous_state, ALLEGRO_STATE_TARGET_BITMAP | ALLEGRO_STATE_BLENDER);<br />	al_set_target_bitmap(surface);<br />	al_clear_to_color(al_map_rgb(0, 0, 0)); <br />	al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ONE);</p><p>	int counter_ = 0;<br />	for (iter44 = lightVector.begin(); iter44 != lightVector.end(); iter44++)<br />	{<br />		int tempposx = lightVector[counter_]-&gt;positionX - cameraPosition[0];<br />		int tempposy = lightVector[counter_]-&gt;positionY - cameraPosition[1];<br />		if (lightVector[counter_]-&gt;draw)<br />			al_draw_bitmap(lightVector[counter_]-&gt;torch, tempposx, tempposy, NULL);<br />		counter_++;<br />	}</p><p>	al_draw_bitmap(playerVector[0]-&gt;torch, playerVector[0]-&gt;positionX - cameraPosition[0] - 180, playerVector[0]-&gt;positionY - cameraPosition[1] - 200, NULL);</p><p>	al_restore_state(&amp;previous_state);<br />}</p><p>void blend::draw(std::vector&lt;light*&gt; &amp;lightVector, std::vector&lt;light*&gt;::const_iterator &amp;iter44, std::vector&lt;player*&gt; &amp;playerVector, float cameraPosition[2])<br />{<br />	update_surface(lightVector, iter44, playerVector, cameraPosition);<br />	<br />	ALLEGRO_STATE previous_state;<br />	al_store_state(&amp;previous_state, ALLEGRO_STATE_BLENDER);<br />	al_set_blender(ALLEGRO_ADD, ALLEGRO_DST_COLOR, ALLEGRO_ZERO);///</p><p>	al_draw_bitmap(surface, cameraPosition[0], cameraPosition[1], 0);  </p><p>	al_restore_state(&amp;previous_state);<br />}</p><p>void blend::UpdateLight(std::vector&lt;player*&gt; &amp;playerVector, float cameraPosition[2])<br />{<br />	//<br />}</p><p>void blend::UpdateXYScreen()<br />{<br />	x1 = positionX;<br />	x2 = positionX + 1280;<br />	y1 = positionY;<br />	y2 = positionY + 720;<br />}</p><p>void blend::UpdateXYScreen()<br />{<br />	x1 = positionX;<br />	x2 = positionX + 1280;<br />	y1 = positionY;<br />	y2 = positionY + 720;<br />}
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Travis Peterson)</author>
		<pubDate>Mon, 04 Dec 2017 01:34:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>added code tag</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">//light.cpp</span>
<span class="number">   2</span>include <span class="s">"light.h"</span>
<span class="number">   3</span>
<span class="number">   4</span>light::light<span class="k2">(</span><span class="k2">)</span>
<span class="number">   5</span><span class="k2">{</span>
<span class="number">   6</span>torch <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">"images/torchlight.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">   7</span>draw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">   8</span><span class="k2">}</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">void</span> light::UpdateXYLight<span class="k2">(</span><span class="k2">)</span>
<span class="number">  11</span><span class="k2">{</span>
<span class="number">  12</span>x1 <span class="k3">=</span> positionX<span class="k2">;</span>
<span class="number">  13</span>x2 <span class="k3">=</span> positionX <span class="k3">+</span> <span class="n">450</span><span class="k2">;</span>
<span class="number">  14</span>y1 <span class="k3">=</span> positionY<span class="k2">;</span>
<span class="number">  15</span>y2 <span class="k3">=</span> positionY <span class="k3">+</span> <span class="n">450</span><span class="k2">;</span>
<span class="number">  16</span><span class="k2">}</span>
<span class="number">  17</span>
<span class="number">  18</span><span class="c">//////blend.cpp</span>
<span class="number">  19</span><span class="p">#include "blend.h"</span>
<span class="number">  20</span>
<span class="number">  21</span><span class="k1">void</span> blend::update_surface<span class="k2">(</span>std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>lightVector, std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>const_iterator <span class="k3">&amp;</span>iter44, std::vector<span class="k3">&lt;</span>player<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>playerVector, <span class="k1">float</span> cameraPosition<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  22</span><span class="k2">{</span>
<span class="number">  23</span><a href="http://www.allegro.cc/manual/ALLEGRO_STATE"><span class="a">ALLEGRO_STATE</span></a> previous_state<span class="k2">;</span>
<span class="number">  24</span><a href="http://www.allegro.cc/manual/al_store_state"><span class="a">al_store_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state, ALLEGRO_STATE_TARGET_BITMAP <span class="k3">|</span> ALLEGRO_STATE_BLENDER<span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</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>surface<span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</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">  27</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_ONE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span><span class="k1">int</span> counter_ <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  30</span><span class="k1">for</span> <span class="k2">(</span>iter44 <span class="k3">=</span> lightVector.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter44 <span class="k3">!</span><span class="k3">=</span> lightVector.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter44<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  31</span><span class="k2">{</span>
<span class="number">  32</span><span class="k1">int</span> tempposx <span class="k3">=</span> lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionX <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  33</span><span class="k1">int</span> tempposy <span class="k3">=</span> lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionY <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  34</span><span class="k1">if</span> <span class="k2">(</span>lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>draw<span class="k2">)</span>
<span class="number">  35</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>torch, tempposx, tempposy, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>counter_<span class="k3">+</span><span class="k3">+</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_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>playerVector<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>torch, playerVector<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionX <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">-</span> <span class="n">180</span>, playerVector<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionY <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> <span class="n">200</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>
<span class="number">  41</span><a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state<span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span><span class="k2">}</span>
<span class="number">  43</span>
<span class="number">  44</span><span class="k1">void</span> blend::draw<span class="k2">(</span>std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>lightVector, std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>const_iterator <span class="k3">&amp;</span>iter44, std::vector<span class="k3">&lt;</span>player<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>playerVector, <span class="k1">float</span> cameraPosition<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  45</span><span class="k2">{</span>
<span class="number">  46</span>update_surface<span class="k2">(</span>lightVector, iter44, playerVector, cameraPosition<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>
<span class="number">  48</span><a href="http://www.allegro.cc/manual/ALLEGRO_STATE"><span class="a">ALLEGRO_STATE</span></a> previous_state<span class="k2">;</span>
<span class="number">  49</span><a href="http://www.allegro.cc/manual/al_store_state"><span class="a">al_store_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state, ALLEGRO_STATE_BLENDER<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</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_DST_COLOR, ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span><span class="c">///</span>
<span class="number">  51</span>
<span class="number">  52</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>surface, cameraPosition<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, cameraPosition<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>
<span class="number">  54</span><a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state<span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span><span class="k2">}</span>
<span class="number">  56</span>
<span class="number">  57</span><span class="k1">void</span> blend::UpdateLight<span class="k2">(</span>std::vector<span class="k3">&lt;</span>player<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>playerVector, <span class="k1">float</span> cameraPosition<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  58</span><span class="k2">{</span>
<span class="number">  59</span><span class="c">//points[0].x = playerVector[0]-&gt;positionX - 300;</span>
<span class="number">  60</span><span class="c">//points[0].y = playerVector[0]-&gt;positionY - 850;</span>
<span class="number">  61</span><span class="c">//points[#include "blend.h"</span>
<span class="number">  62</span>
<span class="number">  63</span><span class="k1">void</span> blend::update_surface<span class="k2">(</span>std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>lightVector, std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>const_iterator <span class="k3">&amp;</span>iter44, std::vector<span class="k3">&lt;</span>player<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>playerVector, <span class="k1">float</span> cameraPosition<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  64</span><span class="k2">{</span>
<span class="number">  65</span><a href="http://www.allegro.cc/manual/ALLEGRO_STATE"><span class="a">ALLEGRO_STATE</span></a> previous_state<span class="k2">;</span>
<span class="number">  66</span><a href="http://www.allegro.cc/manual/al_store_state"><span class="a">al_store_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state, ALLEGRO_STATE_TARGET_BITMAP <span class="k3">|</span> ALLEGRO_STATE_BLENDER<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</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>surface<span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</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">  69</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_ONE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span><span class="k1">int</span> counter_ <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  72</span><span class="k1">for</span> <span class="k2">(</span>iter44 <span class="k3">=</span> lightVector.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter44 <span class="k3">!</span><span class="k3">=</span> lightVector.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter44<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  73</span><span class="k2">{</span>
<span class="number">  74</span><span class="k1">int</span> tempposx <span class="k3">=</span> lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionX <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  75</span><span class="k1">int</span> tempposy <span class="k3">=</span> lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionY <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  76</span><span class="k1">if</span> <span class="k2">(</span>lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>draw<span class="k2">)</span>
<span class="number">  77</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>lightVector<span class="k2">[</span>counter_<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>torch, tempposx, tempposy, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>counter_<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  79</span><span class="k2">}</span>
<span class="number">  80</span>
<span class="number">  81</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>playerVector<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>torch, playerVector<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionX <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">-</span> <span class="n">180</span>, playerVector<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>positionY <span class="k3">-</span> cameraPosition<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> <span class="n">200</span>, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span><a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span><span class="k2">}</span>
<span class="number">  85</span>
<span class="number">  86</span><span class="k1">void</span> blend::draw<span class="k2">(</span>std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>lightVector, std::vector<span class="k3">&lt;</span>light<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>const_iterator <span class="k3">&amp;</span>iter44, std::vector<span class="k3">&lt;</span>player<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>playerVector, <span class="k1">float</span> cameraPosition<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  87</span><span class="k2">{</span>
<span class="number">  88</span>update_surface<span class="k2">(</span>lightVector, iter44, playerVector, cameraPosition<span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span><a href="http://www.allegro.cc/manual/ALLEGRO_STATE"><span class="a">ALLEGRO_STATE</span></a> previous_state<span class="k2">;</span>
<span class="number">  91</span><a href="http://www.allegro.cc/manual/al_store_state"><span class="a">al_store_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state, ALLEGRO_STATE_BLENDER<span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</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_DST_COLOR, ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span><span class="c">///</span>
<span class="number">  93</span>
<span class="number">  94</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>surface, cameraPosition<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, cameraPosition<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span><a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state<span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span><span class="k2">}</span>
<span class="number">  98</span>
<span class="number">  99</span><span class="k1">void</span> blend::UpdateLight<span class="k2">(</span>std::vector<span class="k3">&lt;</span>player<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&amp;</span>playerVector, <span class="k1">float</span> cameraPosition<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 100</span><span class="k2">{</span>
<span class="number"> 101</span><span class="c">//</span>
<span class="number"> 102</span><span class="k2">}</span>
<span class="number"> 103</span>
<span class="number"> 104</span><span class="k1">void</span> blend::UpdateXYScreen<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 105</span><span class="k2">{</span>
<span class="number"> 106</span>x1 <span class="k3">=</span> positionX<span class="k2">;</span>
<span class="number"> 107</span>x2 <span class="k3">=</span> positionX <span class="k3">+</span> <span class="n">1280</span><span class="k2">;</span>
<span class="number"> 108</span>y1 <span class="k3">=</span> positionY<span class="k2">;</span>
<span class="number"> 109</span>y2 <span class="k3">=</span> positionY <span class="k3">+</span> <span class="n">720</span><span class="k2">;</span>
<span class="number"> 110</span><span class="k2">}</span>
<span class="number"> 111</span>
<span class="number"> 112</span><span class="k1">void</span> blend::UpdateXYScreen<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 113</span><span class="k2">{</span>
<span class="number"> 114</span>x1 <span class="k3">=</span> positionX<span class="k2">;</span>
<span class="number"> 115</span>x2 <span class="k3">=</span> positionX <span class="k3">+</span> <span class="n">1280</span><span class="k2">;</span>
<span class="number"> 116</span>y1 <span class="k3">=</span> positionY<span class="k2">;</span>
<span class="number"> 117</span>y2 <span class="k3">=</span> positionY <span class="k3">+</span> <span class="n">720</span><span class="k2">;</span>
<span class="number"> 118</span><span class="k2">}</span>
</div></div><p>

</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/617150/1033724#target">Travis Peterson</a> said:</div><div class="quote"><p>

Also noticed it runs near 100% speed when laptop is plugged in and 10% speed when not plugged in
</p></div></div><p>
That sounds like your power settings are set to keep the GPU usage to a minimum. What are your hardware specs? Are other 3D programs affected? </p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Dont know how to use profilers in the context you describe and theres only 1 draw of the lightmap per frame, surface its drawn to is 1280x720 and theres 3 light points currently. Perhaps its somehow running on cpu rather than gpu?
</p></div></div><p>
Run a profile. See what&#39;s taking all of the time. It could be a clue, like you have a memory bitmap by accident.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Mon, 04 Dec 2017 03:27:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That code wouldn&#39;t even compile. You have nested function definitions. Post code that compiles with &lt;code&gt;code goes here...&lt;/code&gt; tags.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 05 Dec 2017 03:59:22 +0000</pubDate>
	</item>
</rss>
