<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Trouble with tiles and transparency</title>
		<link>http://www.allegro.cc/forums/view/588374</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 05 Nov 2006 04:36:03 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I posted a topic about my code, but I found that I believe the solution can be found by asking this question instead of the other.  Something is wrong with my transparency and I&#39;m having a lot of problems with it.<br />I made the background of the screen white to show my problem.  I tiled using this tileset:<br />http://img139.imageshack.us/img139/767/tiledu3.png<br />My grid is 3x3 using all of tile number 2 (The green one)<br />I then draw another tile to the screen coord (20, 20).  This 2nd tile that I draw is tile 3 (the transparent one).  Now this should just display the 3x3 grid of the green tiles.. because the tile drawn over them is transparent right?  Well this is what I actually see:<br /><span class="remote-thumbnail"><span class="json">{"name":"error2yd8.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/8\/c81a84b4d26c617e32aeccc19bf161fe.png","w":646,"h":512,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/8\/c81a84b4d26c617e32aeccc19bf161fe"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/8/c81a84b4d26c617e32aeccc19bf161fe-240.jpg" alt="error2yd8.png" width="240" height="190" /></span><br />Here is the relevant code:<br />Main:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tile<span class="k2">;</span></td></tr><tr><td class="number">2</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> draw<span class="k2">;</span></td></tr><tr><td class="number">3</td><td><a href="http://www.allegro.cc/manual/PALETTE" target="_blank"><span class="a">PALETTE</span></a> palette<span class="k2">;</span></td></tr><tr><td class="number">4</td><td><a href="http://www.allegro.cc/manual/set_palette" target="_blank"><span class="a">set_palette</span></a><span class="k2">(</span>palette<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td>cTile Tile<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>Tile.LoadTileSet<span class="k2">(</span><span class="s">"tile.bmp"</span>, <span class="n">64</span>, <span class="n">64</span>, palette<span class="k2">)</span></td></tr><tr><td class="number">8</td><td>tile <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><span class="n">64</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>draw <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><span class="n">64</span>,<span class="n">64</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>draw <span class="k3">=</span> Tile.GetTile<span class="k2">(</span><span class="n">3</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>tile <span class="k3">=</span> Tile.GetTile<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td><span class="k2">{</span></td></tr><tr><td class="number">14</td><td>     <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <span class="n">3</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">15</td><td>     <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> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <span class="n">3</span><span class="k2">;</span> x<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>               thescreen.DrawToBuffer<span class="k2">(</span>tile, <span class="n">0</span>, <span class="n">0</span>, tile-&gt;w <span class="k3">*</span> x, tile-&gt;h <span class="k3">*</span> y<span class="k2">)</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>     <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>     thescreen.DrawToBuffer<span class="k2">(</span>draw, <span class="n">0</span>, <span class="n">0</span>, <span class="n">20</span>, <span class="n">20</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>     <a href="http://www.allegro.cc/manual/vsync" target="_blank"><span class="a">vsync</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>     thescreen.Swap<span class="k2">(</span><span class="k2">)</span><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><a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>tile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td><a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>draw<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
Tile:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>BOOL cTile::LoadTileSet<span class="k2">(</span><span class="k1">char</span><span class="k3">*</span> Filename, <span class="k1">int</span> TileWidth, <span class="k1">int</span> TileHeight, <a href="http://www.allegro.cc/manual/PALETTE" target="_blank"><span class="a">PALETTE</span></a> Palette<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>     m_Filename     <span class="k3">=</span> Filename<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>     m_TileSet      <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>Filename, Palette<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>     <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_TileSet<span class="k2">)</span> <span class="k2">{</span>    <span class="k1">return</span> FALSE<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>TileWidth <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> TileHeight <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>     <span class="k1">return</span> FALSE<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">7</td><td>     m_TileWidth    <span class="k3">=</span> TileWidth<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>     m_TileHeight   <span class="k3">=</span> TileHeight<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>     <span class="k1">if</span><span class="k2">(</span>m_TileSet-&gt;h % TileHeight <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>    <span class="k1">return</span> FALSE<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">10</td><td>     m_Rows         <span class="k3">=</span> m_TileSet-&gt;h <span class="k3">/</span> TileHeight<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>     <span class="k1">if</span><span class="k2">(</span>m_TileSet-&gt;w % TileWidth <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>     <span class="k1">return</span> FALSE<span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">12</td><td>     m_Cols         <span class="k3">=</span> m_TileSet-&gt;w <span class="k3">/</span> TileWidth<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>     <span class="k1">return</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k2">}</span></td></tr><tr><td class="number">15</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> cTile::GetTile<span class="k2">(</span><span class="k1">int</span> TileNum<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>     <span class="c">// Is the Tile Number in range?</span></td></tr><tr><td class="number">18</td><td>     <span class="k1">if</span><span class="k2">(</span>TileNum <span class="k3">&gt;</span> <span class="k2">(</span><span class="k2">(</span>m_Cols <span class="k3">*</span> m_Rows<span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</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>          <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">"TileSet: %s\nTile: %d\nDoes not exhist!"</span>, m_Filename, TileNum<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>          TileNum <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>m_Cols <span class="k3">*</span> m_Rows<span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>          <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">"Using Tile: %d"</span>, TileNum<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>     <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span>   tile<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>     tile      <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>m_TileWidth, m_TileHeight<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>     <span class="k1">int</span>       tilexpos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>     <span class="k1">int</span>       tileypos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>     tileypos  <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>TileNum <span class="k3">/</span> m_Cols<span class="k2">)</span> <span class="k3">*</span> m_TileHeight<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>     tilexpos  <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>TileNum % m_Cols<span class="k2">)</span> <span class="k3">*</span> m_TileWidth<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>     <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>m_TileSet, tile, tilexpos, tileypos, <span class="n">0</span>, <span class="n">0</span>, m_TileWidth, m_TileHeight<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>     <span class="k1">return</span> tile<span class="k2">;</span></td></tr><tr><td class="number">33</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Screen:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>BOOL cScreen::Swap<span class="k2">(</span><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/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>BackBuffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, BackBuffer-&gt;w, BackBuffer-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>     ClearBuffer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>     <span class="k1">return</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">6</td><td><span class="k2">}</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>BOOL cScreen::ClearBuffer<span class="k2">(</span><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>     <span class="c">//clear_to_color(BackBuffer, bitmap_mask_color(BackBuffer));</span></td></tr><tr><td class="number">11</td><td>     <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>BackBuffer, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">250</span>, <span class="n">250</span>, <span class="n">250</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>     <span class="k1">return</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">13</td><td><span class="k2">}</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>BOOL cScreen::DrawToBuffer<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> backbuf, <span class="k1">int</span> xpos, <span class="k1">int</span> ypos, <span class="k1">int</span> xdes <span class="k3">=</span> <span class="n">0</span>, <span class="k1">int</span> ydes <span class="k3">=</span> <span class="n">0</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>     <a href="http://www.allegro.cc/manual/masked_blit" target="_blank"><span class="a">masked_blit</span></a><span class="k2">(</span>backbuf, BackBuffer, xpos, ypos, xdes, ydes, backbuf-&gt;w, backbuf-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>     <span class="k1">return</span> TRUE<span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /><img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /><br />EDIT:  Well after thinking more about the knowledge miran gave me from my old post
</p><div class="quote_container"><div class="title">miran said:</div><div class="quote"><p>
You must not use masked_blit() when you copy the back buffer to the screen. ...
</p></div></div><p>
I went through and looked and I used masked_blit() in more than one place.  I see that using this more than once on a given bitmap is not a good idea.  I now have changed my GetTile() method to return a bit() of the tileset instead of a masked_blit.  I am now only using masked_blit in the DrawToBuffer() method.  I guess solving your own problems is always best sometimes.<br />EDIT: FIXED:  FYI That means IT WORKS now.. and when I use<br /><span class="source-code"><a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>BackBuffer, <a href="http://www.allegro.cc/manual/bitmap_mask_color" target="_blank"><span class="a">bitmap_mask_color</span></a><span class="k2">(</span>BackBuffer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span><br />It actually draws the pink color instead of the black I was seeing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Dalrymple)</author>
		<pubDate>Sun, 05 Nov 2006 04:36:03 +0000</pubDate>
	</item>
</rss>
