<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Graphical problems with video bitmaps</title>
		<link>http://www.allegro.cc/forums/view/590620</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 20 Mar 2007 21:06:37 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>On a different computer to that which the game was compiled on, i get this lovely effect on my backgrounds. And as you can see from the screen shot, the test monkey is not happy.</p><p><span class="remote-thumbnail"><span class="json">{"name":"screenshotel7.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/3\/034e3f62570350aef1fc484ee8ccec2b.png","w":803,"h":481,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/3\/034e3f62570350aef1fc484ee8ccec2b"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/0/3/034e3f62570350aef1fc484ee8ccec2b-240.jpg" alt="screenshotel7.png" width="240" height="143" /></span></p><p>The reason you can see some rings, a small man, and an angry looking monkey. Is because i have a video bitmap for writing large bitmaps to, to save some RAM (by using the VRAM) so this includes backgrounds etc.</p><p>All other non-static objects are drawn to a memory bitmap. Once all the drawing is done, the memory bitmap is placed atop the video bitmap, and the video bitmap is displayed on the screen.</p><p>So, the backgrounds are video bitmaps, they are blitted to the video buffer, all should be good right? Well apparently it isn&#39;t. I put this code at the beggining to check that blitting VRAM to VRAM, was hardware accelerated:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_HW_VRAM_BLIT<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_HW_VRAM_BLIT_MASKED<span class="k2">)</span><span class="k2">)</span>
  <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Oh no..."</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

It said nothing so... i don&#39;t know whats going on :-\<br />And im not 100% on all things allegro
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Unknown)</author>
		<pubDate>Tue, 20 Mar 2007 05:20:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>First, you should allways allow your game to work with a simple and nice double buffer system.<br />Once you have that, you can add page flipping and triple buffering.<br />About your problem I can&#39;t help you, sorry, perhaps if you show your code...</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
to save some RAM (by using the VRAM)
</p></div></div><p>

I am not sure if that&#39;s a good idea, usually most systems have more RAM than VRAM.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Tue, 20 Mar 2007 09:27:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m only using about 20MB of the VRAM, so its not big deal. And it worked fine when i was only using memory bitmaps.</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">int</span> Tile <span class="k3">=</span> <span class="n">800</span><span class="k3">/</span>BG0-&gt;w <span class="k3">+</span><span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td><span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>Tile<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>BG0, VideoBuffer<span class="k2">[</span>Page<span class="k2">]</span>, <span class="n">0</span>,<span class="n">0</span>,BG0offset<span class="k3">+</span><span class="k2">(</span>i<span class="k3">*</span>BG0-&gt;w<span class="k2">)</span>, <span class="n">0</span>, BG0-&gt;w, BG0-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><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>Tile <span class="k3">=</span> <span class="n">800</span><span class="k3">/</span>BG1-&gt;w <span class="k3">+</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td><span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>Tile<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>  <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>BG1, VideoBuffer<span class="k2">[</span>Page<span class="k2">]</span>, <span class="n">0</span>,<span class="n">0</span>,BG0offset<span class="k3">+</span><span class="k2">(</span>i<span class="k3">*</span>BG1-&gt;w<span class="k2">)</span>, <span class="n">0</span>, BG1-&gt;w, BG1-&gt;h<span class="k2">)</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>&#160;</td></tr><tr><td class="number">12</td><td>      </td></tr><tr><td class="number">13</td><td>Tile <span class="k3">=</span> <span class="n">800</span><span class="k3">/</span>BG2-&gt;w <span class="k3">+</span><span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>Tile<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>  <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>BG2, VideoBuffer<span class="k2">[</span>Page<span class="k2">]</span>, <span class="n">0</span>,<span class="n">0</span>,BG0offset<span class="k3">+</span><span class="k2">(</span>i<span class="k3">*</span>BG2-&gt;w<span class="k2">)</span>, <span class="n">0</span>, BG0-&gt;w, BG2-&gt;h<span class="k2">)</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>    </td></tr><tr><td class="number">18</td><td><a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>Foreground, VideoBuffer<span class="k2">[</span>Page<span class="k2">]</span>,XOffset, YOffset,<span class="n">0</span>,<span class="n">0</span>, <span class="n">800</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

Thats the background, thats what goes all crazy.<br />Everything else is just memory bitmap to memory bitmap, and then i put the memory bitmap over the video bitmap, and show it</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>Buffer, VideoBuffer<span class="k2">[</span>Page<span class="k2">]</span>, <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">800</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/show_video_bitmap" target="_blank"><span class="a">show_video_bitmap</span></a><span class="k2">(</span>VideoBuffer<span class="k2">[</span>Page<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

And its not just random computers that do this, it seems to be any compy without allegro installed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Unknown)</author>
		<pubDate>Tue, 20 Mar 2007 15:17:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How are you loading them into VRAM?</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
save some RAM (by using the VRAM)
</p></div></div><p>
Note that many systems will keep a copy of VRAM bitmaps in RAM as well in case the VRAM bitmaps get corrupted and need to be &quot;refreshed&quot;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Tue, 20 Mar 2007 19:17:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Err...</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> Foreground <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>RoomWidth, RoomHeight<span class="k2">)</span><span class="k2">;</span>
...
BITAMP<span class="k3">*</span> Temp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"Levels\\Jungle.tga"</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>Temp, Foreground, <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>, RoomWidth, RoomHeight<span class="k2">)</span><span class="k2">;</span>
...
<a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>Temp<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>


</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Note that many systems will keep a copy of VRAM bitmaps in RAM as well in case the VRAM bitmaps get corrupted and need to be &quot;refreshed&quot;.
</p></div></div><p>

Even if that happens, i still get an extra 5FPS, ooh. Not that anybody will ever notice :-\
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Unknown)</author>
		<pubDate>Tue, 20 Mar 2007 19:33:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Should probably change that to:
</p><div class="source-code snippet"><div class="inner"><pre>BITAMP<span class="k3">*</span> Temp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"Levels/Jungle.tga"</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> Foreground <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>Temp-&gt;w, Temp-&gt;h<span class="k2">)</span><span class="k2">;</span>
...
<a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>Temp, Foreground, <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>, Temp-&gt;w, Temp-&gt;h<span class="k2">)</span><span class="k2">;</span>
...
<a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>Temp<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
(with proper error checking) in case the bitmap you&#39;re loading is a different size than what RoomWidth and RoomHeight are.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Even if that happens, i still get an extra 5FPS, ooh. Not that anybody will ever notice :-\
</p></div></div><p>
Not to dissuade you from using VRAM bitmaps, as it&#39;s a perfectly fine method. Just don&#39;t think you&#39;re saving RAM because of it.</p><p>Also, you&#39;re creating your video bitmap buffers first, before loading your images? Since the first video bitmaps created overlap the screen...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Tue, 20 Mar 2007 19:55:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>the RoomWidth and RoomHeight are the width and height of jungle.tga</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Also, you&#39;re creating your video bitmap buffers first, before loading your images? Since the first video bitmaps created overlap the screen...
</p></div></div><p>

Huh? All this stuff is done once when loading the level... after which the screen is cleared and drawn to.</p><p>Anyway, ive decided that it too much effort, and gone back to double buffering. I also imagine the performance boost given by using video bitmaps, would depend on the card so...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (The Unknown)</author>
		<pubDate>Tue, 20 Mar 2007 21:06:37 +0000</pubDate>
	</item>
</rss>
