<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>putpixel &quot;weird&quot; issue.</title>
		<link>http://www.allegro.cc/forums/view/586188</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 02 Jul 2006 01:44:40 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve optimized some of my code and it helped a lot. I pretty much changed the areas where I&#39;ve created a bitmap to create_video_bitmap and got a massive jump! But I have on problem.</p><p>I have a star class that creates a 1x1 video bitmap with and puts a pixel in the bitmap and moves the bitmap accordingly. And it seems to eat up FPS So, I was wondered, &quot;why in the heck would I do that?&quot;, and quickly realized why I took that route. When I first wrote the class, I had it where the x and y values would be updated and then just have the pixels drawns at the desired coordinates, but when I do that, the exe crashes with a &quot;alld42.dll access violation&quot; under debug.</p><p>Here&#39;s the class:
</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">class</span> star</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>  <span class="k1">void</span> init<span class="k2">(</span><span class="k1">int</span> xlow, <span class="k1">int</span> xhigh<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>                <span class="c">//random_pick is a random number function I wrote</span></td></tr><tr><td class="number">7</td><td>    x <span class="k3">=</span> random_pick<span class="k2">(</span>xlow, xhigh<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    y <span class="k3">=</span> random_pick<span class="k2">(</span><span class="n">0</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    low <span class="k3">=</span> xlow<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    high <span class="k3">=</span> xhigh<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    started <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    <span class="c">//starimg = create_video_bitmap(1,1);</span></td></tr><tr><td class="number">13</td><td>    </td></tr><tr><td class="number">14</td><td>    </td></tr><tr><td class="number">15</td><td>    </td></tr><tr><td class="number">16</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td>  <span class="k1">void</span> update<span class="k2">(</span><span class="k1">int</span> off<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="c">//off is the offset speed of the scroll of the stage</span></td></tr><tr><td class="number">21</td><td>    range <span class="k3">=</span> off<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>    </td></tr><tr><td class="number">23</td><td>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>started<span class="k2">)</span></td></tr><tr><td class="number">24</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">25</td><td>      <span class="k1">if</span><span class="k2">(</span>off <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">26</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">27</td><td>        speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">29</td><td>      <span class="k1">else</span> </td></tr><tr><td class="number">30</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>      speed <span class="k3">=</span> random_pick<span class="k2">(</span>off<span class="k3">+</span><span class="n">1</span>, off<span class="k3">+</span>range<span class="k2">)</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>      started <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">35</td><td>    <span class="k1">if</span><span class="k2">(</span>started<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>      <span class="k1">if</span><span class="k2">(</span>off <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">38</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">39</td><td>        speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>        started <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">42</td><td>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>curr_off <span class="k3">!</span><span class="k3">=</span> off<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>      speed <span class="k3">=</span> random_pick<span class="k2">(</span>off<span class="k3">+</span><span class="n">1</span>, off<span class="k3">+</span>range<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">46</td><td>        </td></tr><tr><td class="number">47</td><td>      </td></tr><tr><td class="number">48</td><td>      y<span class="k3">+</span><span class="k3">=</span>speed<span class="k2">;</span></td></tr><tr><td class="number">49</td><td>      </td></tr><tr><td class="number">50</td><td>    </td></tr><tr><td class="number">51</td><td>    <span class="k1">if</span><span class="k2">(</span>y <span class="k3">&gt;</span> <span class="n">480</span><span class="k2">)</span></td></tr><tr><td class="number">52</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">53</td><td>      reset<span class="k2">(</span>off<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">55</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">56</td><td>    curr_off <span class="k3">=</span> off<span class="k2">;</span></td></tr><tr><td class="number">57</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td>  <span class="k1">void</span> draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buf<span class="k2">)</span></td></tr><tr><td class="number">60</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">61</td><td>    <span class="k1">if</span><span class="k2">(</span>speed <span class="k3">&lt;</span> <span class="n">10</span><span class="k2">)</span></td></tr><tr><td class="number">62</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">63</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">64</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">65</td><td>    <span class="k1">if</span><span class="k2">(</span>speed <span class="k3">=</span><span class="k3">=</span> <span class="n">10</span><span class="k2">)</span></td></tr><tr><td class="number">66</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">67</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">68</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y<span class="k3">+</span><span class="n">1</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">69</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y<span class="k3">+</span><span class="n">2</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">70</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y<span class="k3">+</span><span class="n">3</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">71</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y<span class="k3">+</span><span class="n">4</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">72</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y<span class="k3">+</span><span class="n">5</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">73</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y<span class="k3">+</span><span class="n">6</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">74</td><td>    <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buf, x, y<span class="k3">+</span><span class="n">7</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</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="k2">;</span></td></tr><tr><td class="number">75</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">76</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">77</td><td>&#160;</td></tr><tr><td class="number">78</td><td>  <span class="k1">void</span> reset<span class="k2">(</span><span class="k1">int</span> off<span class="k2">)</span></td></tr><tr><td class="number">79</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">80</td><td>    range <span class="k3">=</span> off<span class="k2">;</span></td></tr><tr><td class="number">81</td><td>    </td></tr><tr><td class="number">82</td><td>    <span class="k1">if</span><span class="k2">(</span>off <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">83</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">84</td><td>      speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">86</td><td>    <span class="k1">else</span> </td></tr><tr><td class="number">87</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">88</td><td>    speed <span class="k3">=</span> random_pick<span class="k2">(</span>off<span class="k3">+</span><span class="n">1</span>, off<span class="k3">+</span>range<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">90</td><td>    x <span class="k3">=</span> random_pick<span class="k2">(</span>low, high<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>    y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">92</td><td>    </td></tr><tr><td class="number">93</td><td>    </td></tr><tr><td class="number">94</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">95</td><td>&#160;</td></tr><tr><td class="number">96</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>starimg<span class="k2">;</span></td></tr><tr><td class="number">97</td><td>  <span class="k1">int</span> x<span class="k2">;</span></td></tr><tr><td class="number">98</td><td>  <span class="k1">int</span> y<span class="k2">;</span></td></tr><tr><td class="number">99</td><td>  <span class="k1">int</span> low<span class="k2">;</span></td></tr><tr><td class="number">100</td><td>  <span class="k1">int</span> high<span class="k2">;</span></td></tr><tr><td class="number">101</td><td>  <span class="k1">int</span> speed<span class="k2">;</span></td></tr><tr><td class="number">102</td><td>  <span class="k1">int</span> low_speed<span class="k2">;</span></td></tr><tr><td class="number">103</td><td>  <span class="k1">int</span> high_speed<span class="k2">;</span></td></tr><tr><td class="number">104</td><td>  <span class="k1">int</span> r<span class="k2">;</span></td></tr><tr><td class="number">105</td><td>  <span class="k1">int</span> g<span class="k2">;</span></td></tr><tr><td class="number">106</td><td>  <span class="k1">int</span> b<span class="k2">;</span></td></tr><tr><td class="number">107</td><td>  <span class="k1">bool</span> started<span class="k2">;</span></td></tr><tr><td class="number">108</td><td>  <span class="k1">int</span> range<span class="k2">;</span></td></tr><tr><td class="number">109</td><td>  <span class="k1">int</span> diff<span class="k2">;</span></td></tr><tr><td class="number">110</td><td>  <span class="k1">int</span> curr_off<span class="k2">;</span></td></tr><tr><td class="number">111</td><td><span class="k2">}</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

I know I can change the putpixel to the color depth version and have, but had just changed it back to see if the color depth version was the problem is all. If I comment out the &quot;y+=speed&quot; then it doesn&#39;t crash, but of course the stars don&#39;t move either. Any suggestions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Fri, 30 Jun 2006 07:12:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Accessing video memory is so slow you should <b>never</b> do it. Try for example to fill the screen bitmap with putpixel in a double for loop. You will see how the screen is being slowly drawn and it will take seconds. That&#39;s how slow this is. And don&#39;t create 1x1 bitmaps, that just makes no sense...</p><p>The crashes you&#39;re getting might be because the clipping rectangle is not set or something. When you do a putpixel outside the bounds of the bitmap, it checks for inclusion in the clipping rectangle, but if that&#39;s not set properly, it can change memory it shouldn&#39;t have.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Fri, 30 Jun 2006 09:57:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
And don&#39;t create 1x1 bitmaps, that just makes no sense...
</p></div></div><p>

Well, yeah, I know that, which is why I&#39;m asking the question in the first place. I wouldn&#39;t even have thought to even USE that process if it wasn&#39;t crashing to begin with.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
The crashes you&#39;re getting might be because the clipping rectangle is not set or something. When you do a putpixel outside the bounds of the bitmap, it checks for inclusion in the clipping rectangle, but if that&#39;s not set properly, it can change memory it shouldn&#39;t have.
</p></div></div><p>

Well, all the random values should be within the dimensions of the buffer that I&#39;m drawing the stars to. (0 - 640) x (0 - 480), but I&#39;ll do some more checking.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Fri, 30 Jun 2006 11:22:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
putpixel(buf, x, y, makecol(255,255,255));<br />putpixel(buf, x, y+1, makecol(255,255,255));<br />putpixel(buf, x, y+2, makecol(255,255,255));<br />putpixel(buf, x, y+3, makecol(255,255,255));<br />putpixel(buf, x, y+4, makecol(255,255,255));<br />putpixel(buf, x, y+5, makecol(255,255,255));<br />putpixel(buf, x, y+6, makecol(255,255,255));<br />putpixel(buf, x, y+7, makecol(255,255,255));
</p></div></div><p>

a vline() would be better.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Fri, 30 Jun 2006 11:22:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&gt; Any suggestions?<br />Run gdb and see what it can detect about the origin of crash.<br />In particular, even if the SIGSEGV happens inside an allegro function ,the stackdump should show which parameters you passed.</p><p>&gt; Well, all the random values should be within the dimensions of the buffer that I&#39;m drawing the stars to. (0 - 640) x (0 - 480), but I&#39;ll do some more checking.<br />Careful, your buffer is probably [0-639] x [0-479] . Boundaries included.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Fri, 30 Jun 2006 11:25:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
a vline() would be better.
</p></div></div><p>

duh!! hahaha! Thanks, AJ. I&#39;ll go ahead and put that in right now. I don&#39;t know why I didn&#39;t think of that!</p><p>Audric:</p><p>gdb. Is that within the debugging tool in msvc? I code in MSVC. I should&#39;ve stated that earlier, sorry about that? If it&#39;s  within the debugging tool, then I get the (alld42.dll) access violation message.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Fri, 30 Jun 2006 11:49:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
duh!! hahaha! Thanks, AJ. I&#39;ll go ahead and put that in right now. I don&#39;t know why I didn&#39;t think of that!
</p></div></div><p>
The Manual is your friend.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
gdb. Is that within the debugging tool in msvc?
</p></div></div><p>
Gdb is the GNU debugger. Not applicable in your case.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Fri, 30 Jun 2006 11:54:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>if your using msvc<br />build the debug version of allegro.<br />link with the debug version.<br />then in MSVC-IDE hit F5 to run your application (with debugging)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Fri, 30 Jun 2006 12:26:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s what I&#39;ve done already and I get the (alld42.dll) access violation message.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Fri, 30 Jun 2006 19:16:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>in what function ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Sat, 01 Jul 2006 12:08:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In this function that in the &quot;include/platform/al386vc.h&quot; file.
</p><div class="source-code snippet"><div class="inner"><pre>INLINE _AL_DLL uintptr_t <a href="http://www.allegro.cc/manual/bmp_write_line" target="_blank"><span class="a">bmp_write_line</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <span class="k1">int</span> lyne<span class="k2">)</span>
<span class="k2">{</span> 
   _asm <span class="k2">{</span> 
      mov edx, bmp
      mov ecx, <span class="k2">[</span>edx<span class="k2">]</span>BITMAP.write_bank
      mov eax, lyne
      call ecx
   <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

I just went ahead and just made a 1x1 gif file with a white background and drew it to the screen, because I really didn&#39;t want to spend  this much time on this. It seems to work fine now. I just wanted to get away from creating bitmaps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin Epps)</author>
		<pubDate>Sun, 02 Jul 2006 01:44:40 +0000</pubDate>
	</item>
</rss>
