<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro 5 - Bitmap Deferred Corruption(?)</title>
		<link>http://www.allegro.cc/forums/view/615580</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 12 Aug 2015 15:26:29 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,<br />I&#39;m desperately in need of some help before I lose the will to live <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /><br />I&#39;m using Allegro 5.1.9 within X (ie using Opengl (GLES)).<br />I have the following code that has some weird behaviour.<br />I have attached the 3 image files saved.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>old_target <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// keep old destination</span>
<span class="number">  2</span>
<span class="number">  3</span>image <span class="k3">=</span> al_load_bitmap2<span class="k2">(</span><span class="s">"test.png"</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// load default pic</span>
<span class="number">  4</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"1.png"</span>,image<span class="k2">)</span><span class="k2">;</span>       <span class="c">// this image is as expected</span>
<span class="number">  6</span>
<span class="number">  7</span><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>image<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span><a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">16</span>, <span class="n">16</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// draw rectangle on image</span>
<span class="number">  9</span>
<span class="number"> 10</span><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>old_target<span class="k2">)</span><span class="k2">;</span>    <span class="c">// restore destination</span>
<span class="number"> 11</span>
<span class="number"> 12</span><a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"2.png"</span>,image<span class="k2">)</span><span class="k2">;</span>       <span class="c">// this image is unchanged (ie no square drawn)</span>
<span class="number"> 13</span>
<span class="number"> 14</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>image, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>      <span class="c">// draw image to destination</span>
<span class="number"> 15</span>
<span class="number"> 16</span><a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"3.png"</span>,image<span class="k2">)</span><span class="k2">;</span>       <span class="c">// square is shown, rest of image is corrupt</span>
</div></div><p>

My questions consist of:</p><p>Why is the rectangle not shown in 2.png (deferred drawing isn&#39;t enabled) ?<br />Why, when I finally draw the image to screen, is the rectangle then &#39;written&#39; but the rest of the image corrupts?<br />Any idea on where I should be looking - I&#39;m running with the debug version and am quite happy to instrument the code, I&#39;m really at a loss where to go from here and need some guidance <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Kev
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Wed, 22 Jul 2015 19:18:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could be some kind of bug in Allegro, but 5.1.9 is a rather old version so might have been fixed since. Does it work in Allegro 5.1.11?</p><p>Also, does it work if you use normal OpenGL instead of GLES?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Wed, 22 Jul 2015 20:15:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve moved to 5.1.11 - same issues - I think they&#39;re specific to the platform I&#39;m on..<br />I have found that if I do the following, the drawn bitmap doesn&#39;t get corrupted..
</p><div class="source-code snippet"><div class="inner"><pre>temp1 <span class="k3">=</span> al_load_bitmap2<span class="k2">(</span><span class="s">"test24.png"</span><span class="k2">)</span><span class="k2">;</span>

<span class="c">// ** this doesn't fix anything</span>
<span class="c">//image = al_clone_bitmap(temp1);</span>
<span class="c">// **</span>

<span class="c">// ** but this does</span>
image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>temp1<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>temp1<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>image<span class="k2">)</span><span class="k2">;</span> 
<a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>temp1, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="c">// **</span>

<span class="c">// 'image' is now accessible and drawn on screen correctly.. (ie no corruption)</span>
</pre></div></div><p>
But (what I&#39;ve been trying to do is use <br /><span class="source-code"><a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>image, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span></span> <br />- old habits die hard!), but it doesn&#39;t work - ie I get MAGIC PINK left in image..</p><p>So I tried:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span><span class="n">3</span>, <span class="n">3</span>, <span class="n">8</span>, <span class="n">8</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// white rectangle</span>
col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>image, <span class="n">5</span>,<span class="n">5</span><span class="k2">)</span>
</pre></div></div><p>
but it returns r,g,b,a values of 0.000,0.000,0.000,0.000 - I expected 1.0,1.0,1.0,?.?</p><p>Return values from <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k3">/</span>flags<span class="k2">(</span>image<span class="k2">)</span></span> return H&#39;11 &amp; H&#39;4E0<br />Which I believe means </p><div class="source-code snippet"><div class="inner"><pre>format <span class="k3">=</span> ALLEGRO_PIXEL_FORMAT_ABGR_8888
flags  <span class="k3">=</span> ALLEGRO_VIDEO_BITMAP
         ALLEGRO_MAG<span class="k3">/</span>MIN_LINEAR
         ALLEGRO_INTERNAL_OPENGL
</pre></div></div><p>
Any ideas on where I go from here?</p><p>Is there a way of getting to the pixel data specifically (ie as hex) as we did on Allegro 4 with &#39;line&#39;..? That may give me some idea what&#39;s going on (possibly).</p><p>I&#39;m suspicious that Allegro thinks the display is in a different RGB(A) format to what it actually is.. <br />but then why does everything get displayed correctly?</p><p>Kev
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Thu, 23 Jul 2015 19:39:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615580/1015341#target">Kev Callahan</a> said:</div><div class="quote"><p>Is there a way of getting to the pixel data specifically (ie as hex) as we did on Allegro 4 with &#39;line&#39;..? That may give me some idea what&#39;s going on (possibly).</p></div></div><p>Take a look at <span class="source-code"><a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a></span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 23 Jul 2015 21:41:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>On the same topic I&#39;ve found this issue - 
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"WHT: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>,   <span class="n">0</span>,   <span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"RED: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"WHT: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>,   <span class="n">1</span>.<span class="n">0</span>,   <span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"GRN: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"WHT: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>,     <span class="n">0</span>,   <span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"BLK: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"WHT: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>,     <span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"BLU: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>logo, <span class="n">5</span>, <span class="n">5</span><span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"WHT: %f, %f, %f, %f\n"</span>, col.r, col.g, col.b, col.a<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
This outputs:</p><div class="source-code snippet"><div class="inner"><pre>WHT: <span class="n">0</span>.<span class="n">870588</span>, <span class="n">0</span>.<span class="n">082353</span>, <span class="n">0</span>.<span class="n">188235</span>, <span class="n">0</span>.<span class="n">462745</span>
RED: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
WHT: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
GRN: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
WHT: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
BLK: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
WHT: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
BLU: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
WHT: <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>, <span class="n">0</span>.<span class="n">000000</span>
</pre></div></div><p>

Although what is displayed is correct.. <br />Is there something wrong with READING from an ALLEGRO_BITMAP..<br />Or am I doing something fundamentally wrong..?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Fri, 24 Jul 2015 19:38:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It may not be implemented for GLES at all, maybe not even possible... reading back from a texture is not something you&#39;d usually do. You can use a memory bitmap, then it will always work (you shouldn&#39;t draw those of course as it would be extremely slow).</p><p>Hm, and just a thought, if you call al_flip_display before al_get_pixel, does that make any difference?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Fri, 24 Jul 2015 19:57:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the speedy reply Elias.</p><p>Just rebuilding Allegro at the moment - will have a try flipping the display in a moment in case that helps/flushes something.</p><p>With video bitmaps, are there two copies of the bitmap?</p><p>Did consider also, when I draw to display, to also draw to a temporary bitmap and see what values that has.</p><p>Reason I&#39;m going down this line of investigation is that I&#39;m trying to use al_convert_mask_to_color() btw and it doesn&#39;t work. Maybe for that I need to use a (system) memory bitmap and then copy that to a video bitmap once parsed.</p><p>EDIT:<br />Added, before I create the bitmap<br /><span class="source-code"><a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span></span><br />and it made no difference.</p><p>Also tried calling al_flip_display() and again no change.</p><p>EDIT2:<br />Adding ALLEGRO_KEEP_BITMAP_FORMAT to the flags (with ALLEGRO_MEMORY_BITMAP) actually meant the values read back are correct ie 1.0 where expected).. but the displayed images are corrupt..!<br />Is something going wrong with a conversion somewhere...?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Fri, 24 Jul 2015 20:07:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615580/1015300#target">Elias</a> said:</div><div class="quote"><p>
Could be some kind of bug in Allegro, but 5.1.9 is a rather old version so might have been fixed since. 
</p></div></div><p>
I find it funny that 2 steps on a minor, minor version number constitute &quot;a rather old version.&quot; <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Fri, 24 Jul 2015 21:18:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you sure your format flags are right? Ie - is col.r really a float? I thought you were supposed to use al_unmap_rgba_f for floats.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 25 Jul 2015 03:12:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615580/1015367#target">Kev Callahan</a> said:</div><div class="quote"><p>Added, before I create the bitmap<br />al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP)<br />and it made no difference.</p></div></div><p>

A memory bitmap means it just is a buffer with RGBA values, so I don&#39;t see how this would be possible.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Adding ALLEGRO_KEEP_BITMAP_FORMAT to the flags (with ALLEGRO_MEMORY_BITMAP) actually meant the values read back are correct ie 1.0 where expected).. but the displayed images are corrupt..!<br />Is something going wrong with a conversion somewhere...? </p></div></div><p>

This flag is not actually implemented, so this is impossible to make any difference whatsoever.</p><p>Make sure you are not mixing 5.1.9 and 5.1.11 libraries and headers, none of the 5.1.x versions are compatible with each other.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sat, 25 Jul 2015 07:08:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is a fresh install of the O/S - just installed 5.1.11.</p><p>Appears memory bitmaps don&#39;t appear to work at all..!</p><p>I had hoped I could call (where image is a system bitmap)</p><p><span class="source-code">  <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>image, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span></span></p><p>and then copy to a video bitmap - no luck.</p><p>For example running ex_rotate - switching to memory bitmaps displays nothing, video bitmap is okay..</p><p>EDIT:<br />Memory bitmaps appear to work - ie if I fill one with magic pink and then convert to alpha, it works as expected (when interrogated with get_pixel).. However then copying that system meory image to a video bitmap (or display) doesn&#39;t actually do anything.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Mon, 27 Jul 2015 16:05:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>FWIW I am using 5.1.9 on iOS and memory bitmaps are working fine ( I need them for some pre-game blitting to generate some images, and it&#39;s much faster with the memory bitmaps to do pixel drawing on it) ).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Michael Moffitt)</author>
		<pubDate>Mon, 27 Jul 2015 21:14:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah thanks for that - I have run this code on the RPi (imx6 is also ARM) and an Intel platform with no issues as well, so don&#39;t suspect it&#39;s Allegro, just hoping for some workarounds of the problems..</p><p>I&#39;m now suspecting that Allegro hasn&#39;t detected the bit depth of the display correctly,  so I&#39;m investigating that at the moment. <br />Amongst other things it seems like the alpha channel isn&#39;t being utilised during a video bitmap draw..</p><p>I think there are 2 or 3 issues confusing the analysis - will stick at it for a while yet.</p><p>EDIT:<br />I have homed in on the fault more..<br />There appears to be a problem with using al_put_pixel() vs al_draw_pixel().<br />Changing the blender to ADD/ONE/ZERO and using al_draw_pixel() in al_convert_mask_to_alpha() makes it work.. sort of - I get some pink fringing (it is 255,0,255 and not a &#39;tone&#39; of pink) but I&#39;ll look at that soon.. Maybe it is still a RGB format issue.</p><p>Looking through al_put/draw_pixel() shows that &#39;draw&#39; uses OPENGL and &#39;put&#39; uses direct memory access.. </p><p>Question is.. <br />Are there two copies of bitmaps when using OPENGL?<br />If so, how are they synchronised?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Tue, 28 Jul 2015 14:34:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_put_pixel"><span class="a">al_put_pixel</span></a></span> works by first locking the bitmap and then using memory access to that locked memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 02 Aug 2015 06:15:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What appears to be the problem is related to direct memory access to the bitmaps.</p><p>Using the OPENGL based &#39;functions&#39;, everything appears to work.<br />Using al_put_pixel() in al_convert_alpha_to_mask(), it sets the correct bits and I can read it back fine, but when I display the resultant image - nothing has changed..<br />Swap that to al_draw_pixel(), the image updates.</p><p>I&#39;m not at all knowledgeable about how OPENGL works (pipelines, etc?).. <br />Could it be that the image (texture?) isn&#39;t being flowed down to the GPU?</p><p>I have had the same sort of issue just loading an image from a file - the resultant image was empty, but if I loaded it twice and used al_draw_bitmap() to overwrite the image, it&#39;s fine.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Tue, 04 Aug 2015 20:21:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615580/1015651#target">SiegeLord</a> said:</div><div class="quote"><p>
al_put_pixel works by first locking the bitmap and then using memory access to that locked memory.
</p></div></div><p>
That sounds insanely slow (which is in line with my experience doing simple pixel rain in a5). I don&#39;t remember... is there a way to defer calls and do them in one lock?</p><p>Also, is &quot;blit to memory, draw, blit to VRAM&quot; really the only way to do things? Is direct VRAM access completely gone in newer OpenGL/etc?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 05 Aug 2015 01:06:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually unless the target bitmap is locked already, al_put_pixel() will individually lock/unlock each pixel. <br />So locking, batching al_put_pixel() calls and unlocking is preferred (as convert_mask_to_alpha() does). </p><p>So.. <br />Are we saying the bitmap that al_put_pixel() directly accesses needs to be &#39;uploaded&#39; to video memory (gpu?) after being written to..? </p><p>Should this be done automatically by the driver? <br />Is there a way to force this to happen? </p><p>Or am I completely off in my understanding (very likely!) <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Wed, 05 Aug 2015 12:05:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I would assume the solution is to use the primitives add on and draw very small triangles in stead of pixels. Like that the draws will be hardware accelerated.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Wed, 05 Aug 2015 21:48:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Interesting idea! <br />I&#39;ll try that tomorrow.. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Wed, 05 Aug 2015 22:40:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615580/1015714#target">Chris Katko</a> said:</div><div class="quote"><p> That sounds insanely slow</p></div></div><p>It&#39;s not really meant to be used outside of memory bitmaps. <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_pixel"><span class="a">al_draw_pixel</span></a></span> is a little faster, but if you really want a ton of pixels, you use <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a></span>.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> direct VRAM access</p></div></div><p>There&#39;s a locking API that Allegro wraps. On system with APUs, it&#39;s essentially direct DRAM acces.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 06 Aug 2015 06:53:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I feel I almost have a fix for this, but I seem to have hit a snag..</p><p>How can I use al_draw_prim() function to actually write in the &#39;alpha&#39; value rather than use it?</p><p>Or is there another function (obviously not al_put_pixel()) that I could use to store all 4 (RGBA) values in the target image..?</p><p>Turning off the blender with ADD, ONE, ZERO as I guess it just ignores the alpha parameter.</p><p>Maybe something to do with _al_ogl_update_render_state() .. ??</p><p>______________</p><p>Okay - code below works as an alternative to al_convert_mask_to_alpha().. <br />However, it&#39;s very slow.<br />In order to speed things up I tried locking/unlocking the bitmap - but it crashes.<br />Any ideas on how locking/unlocking works?<br />Does it copy from video to system ram when locked and then copy it back when it unlocks???</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#define NUMVC 1024</span>
<span class="number">  2</span><span class="k1">void</span> kcal_convert_mask_to_alpha<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> mask_color<span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  <span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span>, x<span class="k3">=</span><span class="n">0</span>, y<span class="k3">=</span><span class="n">0</span>, w, h, vc<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lr<span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a> pix<span class="k2">[</span>NUMVC<span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  9</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a>   alpha_pixel <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><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="k2">)</span><span class="k2">;</span>   <span class="c">// output value</span>
<span class="number"> 10</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>old_target  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>  <span class="c">//if (!(lr = al_lock_bitmap(bitmap, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READWRITE))) { printf("Couldn't lock bitmap."); return; }</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a> <span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  <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>h<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 20</span>  <span class="k2">{</span>
<span class="number"> 21</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d / %d\r"</span>, y, h<span class="k2">)</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_315.html" target="_blank">fflush</a><span class="k2">(</span>stdout<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    <span class="k1">for</span> <span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> x<span class="k3">&lt;</span>w<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 24</span>    <span class="k2">{</span>
<span class="number"> 25</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> read_pixel <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>bitmap, x, y<span class="k2">)</span><span class="k2">;</span> <span class="c">// input value</span>
<span class="number"> 26</span>
<span class="number"> 27</span>      pix<span class="k2">[</span>vc<span class="k2">]</span>.x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 28</span>      pix<span class="k2">[</span>vc<span class="k2">]</span>.y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 29</span>      pix<span class="k2">[</span>vc<span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_565.html" target="_blank">memcmp</a><span class="k2">(</span><span class="k3">&amp;</span>read_pixel, <span class="k3">&amp;</span>mask_color, <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 32</span>      <span class="k2">{</span>
<span class="number"> 33</span>        pix<span class="k2">[</span>vc<span class="k2">]</span>.color <span class="k3">=</span> alpha_pixel<span class="k2">;</span> <span class="c">// transparent pixel</span>
<span class="number"> 34</span>      <span class="k2">}</span>
<span class="number"> 35</span>      <span class="k1">else</span>
<span class="number"> 36</span>      <span class="k2">{</span>
<span class="number"> 37</span>        pix<span class="k2">[</span>vc<span class="k2">]</span>.color <span class="k3">=</span> read_pixel<span class="k2">;</span> <span class="c">// copied source pixel</span>
<span class="number"> 38</span>      <span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</span>      vc<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 41</span>
<span class="number"> 42</span>      <span class="k1">if</span> <span class="k2">(</span>vc <span class="k3">=</span><span class="k3">=</span> NUMVC<span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>pix, NULL, NULL, <span class="n">0</span>, vc, ALLEGRO_PRIM_POINT_LIST<span class="k2">)</span><span class="k2">;</span> vc<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> <span class="k2">}</span> <span class="c">// batch points - may be faster than individual access(?)</span>
<span class="number"> 43</span>    <span class="k2">}</span>
<span class="number"> 44</span>  <span class="k2">}</span>
<span class="number"> 45</span>
<span class="number"> 46</span>  <span class="k1">if</span> <span class="k2">(</span>vc <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>pix, NULL, NULL, <span class="n">0</span>, vc, ALLEGRO_PRIM_POINT_LIST<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span> <span class="c">// flush final set of points..</span>
<span class="number"> 47</span>
<span class="number"> 48</span>  <span class="c">//al_unlock_bitmap(bitmap);</span>
<span class="number"> 49</span>
<span class="number"> 50</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>old_target<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span>  <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 53</span><span class="k2">}</span>
</div></div><p>


UPDATE:<br />Have sped this up by cloning the &#39;video&#39; bitmap to a &#39;system&#39; bitmap and lock that one for ALLEGRO_LOCK_READONLY</p><p>Still don&#39;t understand where the issue is - probably an incompatibility between the driver and Allegro.<br />I have other bitmaps that are corrupted in other ways, guess I&#39;ll have to trawl my way through fixing those interfaces as well.</p><p>(Do I need to unlock a bitmap if I&#39;m about to destroy it?).</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#define NUMVC 1024</span>
<span class="number">  2</span><span class="k1">void</span> kcal_convert_mask_to_alpha<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap, <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> mask_color<span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  <span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span>, x<span class="k3">=</span><span class="n">0</span>, y<span class="k3">=</span><span class="n">0</span>, w, h, vc<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lr<span class="k2">;</span>
<span class="number">  7</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_VERTEX"><span class="a">ALLEGRO_VERTEX</span></a>         pix<span class="k2">[</span>NUMVC<span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  8</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a>          alpha_pixel <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><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="k2">)</span><span class="k2">;</span>   <span class="c">// output value</span>
<span class="number">  9</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a>        <span class="k3">*</span>old_target  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a>        <span class="k3">*</span>readbmp<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>  w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a> <span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="c">// create lockable SYSTEM MEMORY bitmap clone</span>
<span class="number"> 16</span>  <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>ALLEGRO_MEMORY_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  readbmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_clone_bitmap"><span class="a">al_clone_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>lr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>readbmp, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Couldn't lock bitmap."</span><span class="k2">)</span><span class="k2">;</span> <span class="k1">return</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span>  <span class="c">// target is VIDEO bitmap</span>
<span class="number"> 22</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>  <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span> <span class="c">// no blending</span>
<span class="number"> 25</span>
<span class="number"> 26</span>  <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>h<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 27</span>  <span class="k2">{</span>
<span class="number"> 28</span>    <span class="k1">for</span> <span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> x<span class="k3">&lt;</span>w<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 29</span>    <span class="k2">{</span>
<span class="number"> 30</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> read_pixel <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>readbmp, x, y<span class="k2">)</span><span class="k2">;</span> <span class="c">// input value from locked clone</span>
<span class="number"> 31</span>
<span class="number"> 32</span>      pix<span class="k2">[</span>vc<span class="k2">]</span>.x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 33</span>      pix<span class="k2">[</span>vc<span class="k2">]</span>.y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 34</span>      pix<span class="k2">[</span>vc<span class="k2">]</span>.z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_565.html" target="_blank">memcmp</a><span class="k2">(</span><span class="k3">&amp;</span>read_pixel, <span class="k3">&amp;</span>mask_color, <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 37</span>      <span class="k2">{</span>
<span class="number"> 38</span>        pix<span class="k2">[</span>vc<span class="k2">]</span>.color <span class="k3">=</span> alpha_pixel<span class="k2">;</span> <span class="c">// transparent pixel</span>
<span class="number"> 39</span>      <span class="k2">}</span>
<span class="number"> 40</span>      <span class="k1">else</span>
<span class="number"> 41</span>      <span class="k2">{</span>
<span class="number"> 42</span>        pix<span class="k2">[</span>vc<span class="k2">]</span>.color <span class="k3">=</span> read_pixel<span class="k2">;</span> <span class="c">// copy pixel - shouldn't be required, but it is.</span>
<span class="number"> 43</span>      <span class="k2">}</span>
<span class="number"> 44</span>
<span class="number"> 45</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>vc <span class="k3">=</span><span class="k3">=</span> NUMVC<span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>pix, NULL, NULL, <span class="n">0</span>, vc<span class="k3">+</span><span class="n">1</span>, ALLEGRO_PRIM_POINT_LIST<span class="k2">)</span><span class="k2">;</span> vc<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> <span class="k2">}</span> <span class="c">// batch pixel writes</span>
<span class="number"> 46</span>    <span class="k2">}</span>
<span class="number"> 47</span>  <span class="k2">}</span>
<span class="number"> 48</span>
<span class="number"> 49</span>  <span class="k1">if</span> <span class="k2">(</span>vc <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_draw_prim"><span class="a">al_draw_prim</span></a><span class="k2">(</span>pix, NULL, NULL, <span class="n">0</span>, vc<span class="k3">+</span><span class="n">1</span>, ALLEGRO_PRIM_POINT_LIST<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span> <span class="c">// final pixel flush</span>
<span class="number"> 50</span>
<span class="number"> 51</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a> <span class="k2">(</span>readbmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>readbmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>
<span class="number"> 54</span>  <span class="c">// reset parameters</span>
<span class="number"> 55</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>old_target<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>  <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_INVERSE_ALPHA<span class="k2">)</span><span class="k2">;</span> <span class="c">// DEFAULT</span>
<span class="number"> 57</span>  <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a>  <span class="k2">(</span>ALLEGRO_VIDEO_BITMAP <span class="k3">|</span> ALLEGRO_MIN_LINEAR <span class="k3">|</span> ALLEGRO_MAG_LINEAR<span class="k2">)</span><span class="k2">;</span> <span class="c">// | ALLEGRO_MIPMAP); // mipmap breaks opengl</span>
<span class="number"> 58</span>
<span class="number"> 59</span>  <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 60</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Tue, 11 Aug 2015 15:35:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615580/1015778#target">Kev Callahan</a> said:</div><div class="quote"><p>Have sped this up by cloning the &#39;video&#39; bitmap to a &#39;system&#39; bitmap and lock that one for ALLEGRO_LOCK_READONLY</p></div></div><p>That makes little sense, because locking a video bitmap will download the texture, and then any drawing on it will be done on the cpu in software like it would with a system bitmap. Cloning does essentially the same thing, it would download the data from the video bitmap to put in the system bitmap. Puzzling.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 11 Aug 2015 21:32:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m glad someone else thinks it&#39;s weird <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /><br />Yes, I thought locking/unlocking would do something like that.<br />All I can guess is the clone_bitmap() function access the driver differently..<br />It is all quite baffling, I feel some basic functionality is broken somewhere and if I could home in on that, then everything would fall into place.</p><p>Problem is, there&#39;s not really any documentation I can find (apart from trudging through the source code) that explains how this all works.</p><p>If you come up with any ideas that may help track down the issue, I&#39;m keen to try it(!)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kev Callahan)</author>
		<pubDate>Wed, 12 Aug 2015 15:26:29 +0000</pubDate>
	</item>
</rss>
