<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[OpenLayer] Drawing white instead of images</title>
		<link>http://www.allegro.cc/forums/view/590000</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 10 Feb 2007 22:42:57 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am working on a 2d tile map system and am having some problems when drawing the tiles. I am loading the tile sheet from an Allegro datafile and am splitting up the tiles within the program.</p><p>The problem is all the tiles show up as white blocks.</p><p>Here is the tile set loading function. I figured something must be wrong here.
</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">void</span> CTileHandler::LoadTileSet<span class="k2">(</span>string file<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>    <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>tileData <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_datafile" target="_blank"><span class="a">load_datafile</span></a><span class="k2">(</span>file.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    stringstream tileInfo<span class="k2">(</span><span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>tileData<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.dat<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">int</span> width, height, tileWidth, tileHeight<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    string name<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    tileInfo <span class="k3">&gt;</span><span class="k3">&gt;</span> name<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    tileInfo <span class="k3">&gt;</span><span class="k3">&gt;</span> width<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    tileInfo <span class="k3">&gt;</span><span class="k3">&gt;</span> height<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    tileInfo <span class="k3">&gt;</span><span class="k3">&gt;</span> tileWidth<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    tileInfo <span class="k3">&gt;</span><span class="k3">&gt;</span> tileHeight<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    Bitmap tileSheet<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><span class="k2">)</span>tileData<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.dat<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>    TileSet <span class="k3">*</span>newSet <span class="k3">=</span> <span class="k1">new</span> TileSet<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">int</span> xOff <span class="k3">=</span> <span class="n">0</span>, yOff <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> n <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> n <span class="k3">&lt;</span> height<span class="k2">;</span> n<span class="k3">+</span><span class="k3">+</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>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> n2 <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> n2 <span class="k3">&lt;</span> width<span class="k2">;</span> n2<span class="k3">+</span><span class="k3">+</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>      newSet-&gt;tiles.push_back<span class="k2">(</span><span class="k1">new</span> Bitmap<span class="k2">(</span>tileSheet, Rect<span class="k2">(</span>xOff, yOff, tileWidth, tileHeight<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>      xOff <span class="k3">+</span><span class="k3">=</span> tileWidth<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>  xOff <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  yOff <span class="k3">+</span><span class="k3">=</span> tileHeight<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">26</td><td>    m_tileSets<span class="k2">[</span>name<span class="k2">]</span> <span class="k3">=</span> newSet<span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GrantG)</author>
		<pubDate>Sat, 10 Feb 2007 12:11:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s what&#39;s wrong:
</p><div class="quote_container"><div class="title">OpenLayer&#39;s manual said:</div><div class="quote"><p>

Bitmap(const Bitmap &amp;other, const Rect &amp;area );</p><p>//Construct a sub-bitmap of an area of the given Bitmap.
</p></div></div><p>
Sub bitmaps usually require original Bitmaps to exist in memory (and your does not). Your bitmap does not exist outside of your loading function.</p><p>Try this:
</p><div class="source-code snippet"><div class="inner"><pre>Bitmap <span class="k3">*</span>tilesheet <span class="k3">=</span> <span class="k1">new</span> Bitmap<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><span class="k2">)</span>tileData<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.dat<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Don&#39;t forget to release and delete it when quitting.</p><p>But, in case that doesn&#39;t work, a few things from the top of my mind:</p><ul><li><p>attach OL&#39;s log
</p></li><li><p>try setting Canvas::SetPixelWriteMode(COLOR_AND_ALPHA);
</p></li><li><p>make sure the images are power of 2 if your card doesn&#39;t support non-power-of-two textures (vide log)
</p></li></ul></div>]]>
		</description>
		<author>no-reply@allegro.cc (CursedTyrant)</author>
		<pubDate>Sat, 10 Feb 2007 13:52:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Does it work if you load the image directly from the image file?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Sat, 10 Feb 2007 17:50:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maybe something went wrong with antialising? I remember that when I switched it off, it drawn only white rectancles instead of sprites - which was very weird. Also make sure that you have proper color depth.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Sat, 10 Feb 2007 17:53:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I fixed it. I thought when making a sub-bitmap it actually copied the data over, I guess that wasn&#39;t the case. Also just doing that didn&#39;t work.</p><p>I had to do.<br />Bitmap((BITMAP *)tileData[1].dat, false, true);</p><p>Since by images didn&#39;t have alpha channels, otherwise they were being drawn completely transparent.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GrantG)</author>
		<pubDate>Sat, 10 Feb 2007 22:42:57 +0000</pubDate>
	</item>
</rss>
