<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>starfield - direct acces to video memory</title>
		<link>http://www.allegro.cc/forums/view/583544</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 07 May 2006 16:08:43 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i&#39;m sorry but another problem occured...<br />now it&#39;s with direct acces to video memory. i want to draw a starfield. here is the code:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> stars_<span class="k2">[</span><span class="n">800</span><span class="k2">]</span><span class="k2">[</span><span class="n">540</span><span class="k2">]</span><span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span><span class="n">800</span><span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> y<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>y<span class="k3">&lt;</span><span class="n">540</span><span class="k2">;</span>y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
       stars_<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol16" target="_blank"><span class="a">makecol16</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_639.html" target="_blank">random</a><span class="k2">(</span><span class="n">175</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
bmp_select<span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y<span class="k3">&lt;</span><span class="n">540</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">unsigned</span> <span class="k1">long</span> address <span class="k3">=</span> <a href="http://www.allegro.cc/manual/bmp_read_line" target="_blank"><span class="a">bmp_read_line</span></a><span class="k2">(</span>bitmap,y<span class="k2">)</span><span class="k2">;</span>
   <span class="k1">for</span> <span class="k2">(</span><span class="k1">short</span> x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> x<span class="k3">&lt;</span><span class="n">800</span><span class="k2">;</span> x <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>uint16_t<span class="k2">)</span><span class="k2">)</span>
       bmp_write16<span class="k2">(</span>address<span class="k3">+</span>x,<span class="k2">(</span>uint16_t<span class="k2">)</span>stars_<span class="k2">[</span>y<span class="k2">]</span><span class="k3">+</span>x<span class="k2">)</span><span class="k2">;</span>       
<span class="k2">}</span>
<a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

and bitmap is video_bitmap. whole program just crashes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mscava)</author>
		<pubDate>Sat, 06 May 2006 22:32:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Why don&#39;t you just use an Allegro bitmap and blit?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Sun, 07 May 2006 00:15:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>your method will be slow, and prone to crash</p><p>just use a regular memory bitmap, then blit.<br />it will be safer, and faster.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Sun, 07 May 2006 01:35:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you are accessing your array with <tt>stars_[y]+x</tt>, you have got the X and Y coordiantes the wrong way round for this to work. Try <tt>int stars_[540][800];</tt> and <tt>stars_[y][x] = makecol16(255,255,random(175,255));</tt></p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Sun, 07 May 2006 02:45:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah...you&#39;re method seems as though it would be rather slow. What&#39;s with the whole reading and writting lines of the bitmap? The way I would do it is as follows:</p><p>create an array/vector/etc. of star objects/structs<br />each &quot;frame&quot;:<br />  clear the double buffer to black<br />  move each star towards the edge of the screen,<br />  if it passes the edge, reset it to center<br />  draw each star to the double buffer using putpixil</p><p>You might want to also consider scaling the &quot;stars&quot; based on distance from center of the screen. Or, you can also make them fade in from gray to white as they reach the edges of the screen, too.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elverion)</author>
		<pubDate>Sun, 07 May 2006 10:03:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
draw each star to the double buffer using putpixil
</p></div></div><p>
What he&#39;s doing is faster than putpixel (check the exflame example <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />). With memory bitmaps it won&#39;t be much worse than accesing line[] directly, and on system/video bitmaps it (is supposed to) remove a lot of redundant code from being executed all the time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sun, 07 May 2006 12:22:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>thanks kitty...what i am trying to do is to write those stars onto video_buffer. with putpixel it is slooow. exflame example is showing how to make it faster. so i tried to do something like that. but my code just seems to crash the program... so any ideas how to rewrite it so it will be fast and working?</p><p>and i&#39;ve tried to exchange x and y but it still crashes...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mscava)</author>
		<pubDate>Sun, 07 May 2006 14:49:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>do you know how to use a debugger ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Sun, 07 May 2006 14:57:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You need to keep consistant with your x/y usage with the array. In bmp_write16, you were adding x instead of sub-scripting it for the array. And, you were calling bmp_read_line (which is for reading) instead of bmp_write_line (which is for writing).
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> stars_<span class="k2">[</span><span class="n">540</span><span class="k2">]</span><span class="k2">[</span><span class="n">800</span><span class="k2">]</span><span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> y<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>y<span class="k3">&lt;</span><span class="n">540</span><span class="k2">;</span>y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span><span class="n">800</span><span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
       stars_<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/makecol16" target="_blank"><span class="a">makecol16</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_639.html" target="_blank">random</a><span class="k2">(</span><span class="n">175</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
bmp_select<span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="k1">for</span><span class="k2">(</span><span class="k1">short</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y<span class="k3">&lt;</span><span class="n">540</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">unsigned</span> <span class="k1">long</span> address <span class="k3">=</span> <a href="http://www.allegro.cc/manual/bmp_write_line" target="_blank"><span class="a">bmp_write_line</span></a><span class="k2">(</span>bitmap, y<span class="k2">)</span><span class="k2">;</span>
   <span class="k1">for</span> <span class="k2">(</span><span class="k1">short</span> x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> x<span class="k3">&lt;</span><span class="n">800</span><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
       bmp_write16<span class="k2">(</span>address <span class="k3">+</span> x<span class="k3">*</span><span class="k1">sizeof</span><span class="k2">(</span>uint16_t<span class="k2">)</span>, <span class="k2">(</span>uint16_t<span class="k2">)</span>stars_<span class="k2">[</span>y<span class="k2">]</span><span class="k2">[</span>x<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
<a href="http://www.allegro.cc/manual/bmp_unwrite_line" target="_blank"><span class="a">bmp_unwrite_line</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sun, 07 May 2006 15:03:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>thank you very much kitty cat... now it works... and i am less confused with all those bmp_read/write methods... thanks again...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mscava)</author>
		<pubDate>Sun, 07 May 2006 16:08:43 +0000</pubDate>
	</item>
</rss>
