<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[OL] invisible bitmap handling</title>
		<link>http://www.allegro.cc/forums/view/586636</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 26 Jul 2006 17:49:16 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi!</p><p>OpenLayer is a great library, but to me, it still has some quirks which make it unusable for some tasks. On of them has to do with the handling of invisible bitmaps. Please have a look at the following code:</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="p">#include "tilechunkrendertest.h"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">void</span> save_screenshot<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path<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>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>,<a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bmp<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>buff <span class="k3">=</span> <span class="k1">new</span> <span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">[</span><span class="n">4</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">*</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>buff<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>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    <span class="k1">return</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>  glReadPixels<span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>,<a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a>,GL_RGBA,GL_UNSIGNED_BYTE,buff<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>  <span class="k1">int</span> y<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">for</span><span class="k2">(</span>y<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>y<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">;</span>y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">18</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span>bmp-&gt;line<span class="k2">[</span>y<span class="k2">]</span>,buff<span class="k3">+</span><span class="n">4</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">*</span><span class="k2">(</span>SCREEN_H-1-y<span class="k2">)</span>,<span class="n">4</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>  <a href="http://www.allegro.cc/manual/save_bitmap" target="_blank"><span class="a">save_bitmap</span></a><span class="k2">(</span>path,bmp,NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>  <span class="k1">delete</span> buff<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>&#160;</td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</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>  Setup::SetupProgram<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>  Settings::StoreMemoryBitmaps<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td>  Setup::SetupScreen<span class="k2">(</span><span class="n">800</span>, <span class="n">600</span>, WINDOWED<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td>  Settings::SetAntialiasing<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td>  Bitmap test<span class="k2">(</span><span class="n">200</span>, <span class="n">200</span>, Rgba::INVISIBLE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td>  Canvas::SetTo<span class="k2">(</span>test<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>  Rect<span class="k2">(</span><span class="n">90</span>, <span class="n">90</span>, <span class="n">20</span>, <span class="n">20</span><span class="k2">)</span>.Draw<span class="k2">(</span>Rgba::RED<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td>  Canvas::SetTo<span class="k2">(</span>SCREEN_BACKBUF<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>  Canvas::Fill<span class="k2">(</span>Rgba::BLUE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>&#160;</td></tr><tr><td class="number">47</td><td>  test.Blit<span class="k2">(</span><span class="n">100</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>  Canvas::Refresh<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td>  save_screenshot<span class="k2">(</span><span class="s">"out.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
(I omit the .h-file because it just includes the necessary headers)<br />Now, IMO, the bitmap it produces should look like the first attached picture (out_right.gif). But it looks like the second (out_wrong.gif).<br />It seems like when you draw to a bitmap, all invisible areas get filled with black, which is not a wanted behavior. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><p>Why is that? Is there even a way to create these kind of bitmaps in Openlayer?</p><p>I need it for my game-project (the current IOTD, btw <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />), because right now, I render all tiles separately. But I want to create larger tile-chunks when the map loads to reduce the number of renders. (rendering a few big bitmaps is faster than more small bitmaps). For, example, I want to always group 5x5 tiles into one bitmap.</p><p>Thanks for your help! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Sun, 23 Jul 2006 19:27:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Try adding this:
</p><div class="source-code snippet"><div class="inner"><pre> <span class="c">// Deal with cases where people have a screen with an alpha channel.</span>
 Canvas::SetPixelWriteMode<span class="k2">(</span> COLOR_AND_ALPHA <span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
After your settings::SetAntiAliasing(true) line.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Sun, 23 Jul 2006 19:31:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Didn&#39;t work. Still produces the same output. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Sun, 23 Jul 2006 19:39:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Not sure if the created bitmap has an alpha channel.<br />Does:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span> test.HasAlphaChannel<span class="k2">(</span><span class="k2">)</span> <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">"Yes it does!"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
Show the message?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Sun, 23 Jul 2006 19:49:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes it does!</p><p>edit: Did you try the code yourself? What do you get?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Sun, 23 Jul 2006 19:57:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
No, I haven&#39;t compiled the code.</p><p>Does adding this make any difference before blitting?<br /><span class="source-code">Blenders::Set<span class="k2">(</span> ALPHA_BLENDER <span class="k2">)</span><span class="k2">;</span></span><br />It shouldn&#39;t do, but just checking..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Sun, 23 Jul 2006 20:02:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You are right! It doesn&#39;t change anything...:(</p><p>But, nevertheless, I really appreciate your help, Richard! Thanks a lot! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Sun, 23 Jul 2006 20:13:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Imaxcs, I made a new project, cut out your code and made it draw to the screen until I pressed the mouse. It works fine for me. If I change the INVISIBLE to BLACK I get the black square too.</p><p>Are you sure your screenshot save function is not causing the problem? Do you see the output on the screen?</p><p>Finally, what version of OpenLayer are you using? I use 2.0
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Sun, 23 Jul 2006 21:08:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
It seems like when you draw to a bitmap, all invisible areas get filled with black, which is not a wanted behavior.
</p></div></div><p>
You should use the latest SVN version.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Mon, 24 Jul 2006 00:46:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Are you sure your screenshot save function is not causing the problem? Do you see the output on the screen?
</p></div></div><p>
No, my screenshot-function surely does work right. I can see the black square on the screen too.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Finally, what version of OpenLayer are you using? I use 2.0
</p></div></div><p>
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
You should use the latest SVN version.
</p></div></div><p>
I am using an SVN-version which is about 1 month old. Has anything changed since then?</p><p>Anyway, I use Gentoo Linux. Could it be the case that this doesn&#39;t work because of that? And I have a Nvidia Geforce MX 440 Go. Maybe that&#39;s it?</p><p><img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /><img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /><img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Mon, 24 Jul 2006 01:23:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
I&#39;m not using a newish SVN version and I have a Geforce 4 MX 440SE.</p><p>Any more ideas Flad?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Mon, 24 Jul 2006 02:43:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is an even shorter version, which uses OL&#39;s save-function to create the screenshot:
</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="p">#include "tilechunkrendertest.h"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</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>  Setup::SetupProgram<span class="k2">(</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>  Settings::StoreMemoryBitmaps<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>  Setup::SetupScreen<span class="k2">(</span><span class="n">800</span>, <span class="n">600</span>, WINDOWED<span class="k2">)</span><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/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td>  Settings::SetAntialiasing<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>  Bitmap test<span class="k2">(</span><span class="n">200</span>, <span class="n">200</span>, Rgba::INVISIBLE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td>  Canvas::SetTo<span class="k2">(</span>test<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  Rect<span class="k2">(</span><span class="n">90</span>, <span class="n">90</span>, <span class="n">20</span>, <span class="n">20</span><span class="k2">)</span>.Draw<span class="k2">(</span>Rgba::RED<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>  Canvas::SetTo<span class="k2">(</span>SCREEN_BACKBUF<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  Canvas::Fill<span class="k2">(</span>Rgba::BLUE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>  test.Blit<span class="k2">(</span><span class="n">100</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>  Canvas::Refresh<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>  Canvas::Save<span class="k2">(</span> <span class="s">"out.png"</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">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Still, it doesn&#39;t work! <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /><br />I will try it under Windows...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Mon, 24 Jul 2006 13:37:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Well the old code works for me, so it sounds like it&#39;s either something in OpenLayer, AllegroGL or your gfx drivers. Does it work in full screen?</p><p>BTW: I don&#39;t think you need the set-color-depth(32) line. Does it make a difference if you remove it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Mon, 24 Jul 2006 13:41:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Does it work in full screen?
</p></div></div><p>
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
BTW: I don&#39;t think you need the set-color-depth(32) line. Does it make a difference if you remove it?
</p></div></div><p>
No, that doesn&#39;t change anything...</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Well the old code works for me, so it sounds like it&#39;s either something in OpenLayer, AllegroGL or your gfx drivers.
</p></div></div><p>
I just tried it under Windows and <b>it worked</b>. So the problem is Linux. It seems to handle these bitmaps a bit different. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> Flad?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Mon, 24 Jul 2006 13:58:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe it&#39;s the OpenGL drivers then... But I&#39;ll check if there&#39;s an issue with the alpha channels...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Mon, 24 Jul 2006 15:20:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Did you find something? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Wed, 26 Jul 2006 17:49:16 +0000</pubDate>
	</item>
</rss>
