<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Proper FPS counter increment</title>
		<link>http://www.allegro.cc/forums/view/590641</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 22 Mar 2007 09:02:44 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Howdy,</p><p>I just need to know when to increment my framecounter in code like this:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">volatile</span> <span class="k1">int</span> speed_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">volatile</span> <span class="k1">int</span> framecounter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">volatile</span> <span class="k1">int</span> framerate <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>      <span class="k1">void</span> IncSpeedCounter<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">7</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">8</td><td>   speed_counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>      <a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>IncSpeedCounter<span class="k2">)</span> </td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>      <span class="k1">void</span> GetFR<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>         framerate <span class="k3">=</span> framecounter<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>         framecounter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>      <a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>GetFR<span class="k2">)</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>      <span class="k1">void</span> PlayGame<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">22</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">23</td><td>   <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>   <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>IncSpeedCounter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>   <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>IncSpeedCounter, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>         <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>GetFR, BPS_TO_TIMER<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>game_over<span class="k2">)</span></td></tr><tr><td class="number">30</td><td>         <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>      <span class="k1">while</span> <span class="k2">(</span>speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">32</td><td>            <span class="k2">{</span></td></tr><tr><td class="number">33</td><td>               <span class="c">//Should I increment it in here? (framecounter++)</span></td></tr><tr><td class="number">34</td><td>         update_game_logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>         speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">36</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td>            <span class="c">//Or should I increment it here? (framecounter++)</span></td></tr><tr><td class="number">39</td><td>      update_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">41</td><td>      <span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (blargmob)</author>
		<pubDate>Wed, 21 Mar 2007 05:42:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you want to count the number of redraws, then the latter. If you want the number of (logical) updates, the former. I assume you want the first, so you need the latter. (Wow, now that was perfectly confusing, wasn&#39;t it? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />)</p><p>Put it right above that <tt>update_display();</tt>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Indeterminatus)</author>
		<pubDate>Wed, 21 Mar 2007 05:46:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If I increment at the latter, than anything I pass to BPS_TO_TIMER() doesn&#39;t affect the FPS, and when there is actually only 1 Frame Per Second, it says that there is like 100 Frames Per Second. How do fix this and have control of my FPS?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (blargmob)</author>
		<pubDate>Wed, 21 Mar 2007 06:00:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Something like this will prevent extraneous redraws:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">bool</span> need_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>game_over<span class="k2">)</span></td></tr><tr><td class="number">3</td><td><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>    <span class="k1">while</span><span class="k2">(</span>speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">5</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>        update_game_logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>        speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>        need_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>    <span class="k1">if</span><span class="k2">(</span>need_redraw<span class="k2">)</span></td></tr><tr><td class="number">12</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>        framecounter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        update_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        need_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Wed, 21 Mar 2007 06:03:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Problem fixed.<br />Thanks!<br /><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (blargmob)</author>
		<pubDate>Wed, 21 Mar 2007 06:41:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You might also want to add</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span><span class="k2">(</span>speed_counter <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
  <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p> </p><p>or something like that <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Unknown)</author>
		<pubDate>Thu, 22 Mar 2007 03:19:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The Unknown: would you want that to be in a <tt>while()</tt> loop, or a simple <tt>if()</tt> statement?</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">volatile</span> <span class="k1">int</span> speed_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">volatile</span> <span class="k1">int</span> framecounter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">volatile</span> <span class="k1">int</span> framerate <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">void</span> incrementSpeedCounter<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>   speed_counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k2">}</span></td></tr><tr><td class="number">11</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>incrementSpeedCounter<span class="k2">)</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">void</span> getFrameRate<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>   framerate <span class="k3">=</span> framecounter<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>   framecounter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr><tr><td class="number">19</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>getFrameRate<span class="k2">)</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">void</span> PlayGame<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</td><td>   <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>   <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>incrementSpeedCounter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>   <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>incrementSpeedCounter, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>   <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>getFrameRate, BPS_TO_TIMER<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>game_over<span class="k2">)</span></td></tr><tr><td class="number">30</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>      <span class="k1">while</span> <span class="k2">(</span>speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">32</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">33</td><td>         update_game_logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>         speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">35</td><td>         need_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td>      <span class="c">// Should this be a "while" or an "if"?</span></td></tr><tr><td class="number">39</td><td>      <span class="k1">if</span> <span class="k2">(</span>speed_counter <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">40</td><td>         <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td>      <span class="k1">if</span> <span class="k2">(</span>need_redraw<span class="k2">)</span></td></tr><tr><td class="number">43</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">44</td><td>         framecounter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>         update_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>         need_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">48</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">49</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (TeamTerradactyl)</author>
		<pubDate>Thu, 22 Mar 2007 03:29:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>TT,</p><p>Your code will call the rest(1) nearly every time it loops past it. Would this cause more logical updates to occur for every screen update than if it were placed  before the while loop(as shown below), because the while block is exited when speed_counter is zero?</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>game_over<span class="k2">)</span></td></tr><tr><td class="number">2</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>      <span class="c">// Should this be a "while" or an "if"?</span></td></tr><tr><td class="number">4</td><td>      <span class="k1">if</span> <span class="k2">(</span>speed_counter <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">5</td><td>         <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>      <span class="k1">while</span> <span class="k2">(</span>speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>         update_game_logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>         speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>         need_redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>      <span class="k1">if</span> <span class="k2">(</span>need_redraw<span class="k2">)</span></td></tr><tr><td class="number">15</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">16</td><td>         framecounter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>         update_display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>         need_redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">20</td><td>   <span class="k2">}</span></td></tr></tbody></table></div></div><p>

I&#39;d say it wouldn&#39;t make much of a difference whether a &quot;while&quot; or an &quot;if&quot; was used if the code given was all the processing that is done (but I&#39;d be interested if someone can show a scenario where it would have an impact). But personally I go for an &quot;if&quot;. Do the rest(!) command once and then check everything else before testing again whether the rest(!) should be called.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (HardTranceFan)</author>
		<pubDate>Thu, 22 Mar 2007 04:44:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>an if statement would run quicker than a while loop, since the amount of times a while loop needs to run is unknown... but, the difference in negligable <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>Infact, to save a whole new if/while statement, just add it an an else to if(need_redraw)</p><p>It would still make no difference though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Unknown)</author>
		<pubDate>Thu, 22 Mar 2007 05:57:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The amount of times the while statement needs to be run is known to be one. Since rest will sleep for 10 milliseconds, and his timer fires more frequently than that, the condition will always be true after a rest.</p><p>[append]<br />So yes, the faster is if, but the difference is microscopic.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 22 Mar 2007 09:02:44 +0000</pubDate>
	</item>
</rss>
