<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>A5 - printing text to memory bitmap</title>
		<link>http://www.allegro.cc/forums/view/613635</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 14 Dec 2013 10:15:13 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi all! I&#39;m playing with A5 and text output. Can&#39;t seem to figure this out: Printing to screen works fine, printing to memory bitmap doesn&#39;t.</p><p>I get this when printing random characters to screen, as expected:<br /><span class="remote-thumbnail"><span class="json">{"name":"allegro5-test-printing-to-screen.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/7\/8753beb6f2ac0ca206a7e9b48dbc18da.png","w":326,"h":228,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/8\/7\/8753beb6f2ac0ca206a7e9b48dbc18da"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/8/7/8753beb6f2ac0ca206a7e9b48dbc18da-240.jpg" alt="allegro5-test-printing-to-screen.png" width="240" height="167" /></span><br />Note that the background of each character is transparent.</p><p>When printing to memory bitmap I get this:<br /><span class="remote-thumbnail"><span class="json">{"name":"allegro5-test-printing-to-memory-bitmap.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/b\/5b24779c4d5a6feefb8f5758a71a4784.png","w":326,"h":228,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/b\/5b24779c4d5a6feefb8f5758a71a4784"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/b/5b24779c4d5a6feefb8f5758a71a4784-240.jpg" alt="allegro5-test-printing-to-memory-bitmap.png" width="240" height="167" /></span><br />Here each character has solid black background. I hope to get transparent background in this case too.</p><p>Below is the code for both tests (configured by changing &quot;DRAW_TO_MEMORY&quot;):
</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">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">enum</span> <span class="k2">{</span> W <span class="k3">=</span> <span class="n">320</span>, H <span class="k3">=</span> <span class="n">200</span>, DRAW_TO_MEMORY <span class="k3">=</span> <span class="n">1</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</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>bmp<span class="k2">;</span>
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">;</span>
<span class="number"> 11</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>eq<span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>W,H<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_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    <span class="k1">if</span> <span class="k2">(</span>DRAW_TO_MEMORY<span class="k2">)</span> 
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</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"> 21</span>        <a href="http://www.allegro.cc/manual/al_set_new_bitmap_format"><span class="a">al_set_new_bitmap_format</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        bmp <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>W,H<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</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>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>    <span class="k2">}</span>
<span class="number"> 25</span>
<span class="number"> 26</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_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</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="k2">;</span>
<span class="number"> 27</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="number"> 28</span>
<span class="number"> 29</span>    <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> al_create_builtin_font<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    eq <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>eq,<a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">10000</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 34</span>    <span class="k2">{</span>
<span class="number"> 35</span>        <span class="k1">char</span> s<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">96</span><span class="k3">+</span><span class="n">32</span><span class="k2">)</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 36</span>        <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">&amp;</span><span class="n">0xFF</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">&amp;</span><span class="n">0xFF</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">&amp;</span><span class="n">0xFF</span><span class="k2">)</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="k2">(</span>W-20<span class="k2">)</span><span class="k3">+</span><span class="n">5</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="k2">(</span>H-20<span class="k2">)</span><span class="k3">+</span><span class="n">5</span>,<span class="n">0</span>,s<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>    <span class="k2">}</span>
<span class="number"> 38</span>    <span class="k1">if</span> <span class="k2">(</span>DRAW_TO_MEMORY<span class="k2">)</span>
<span class="number"> 39</span>    <span class="k2">{</span>
<span class="number"> 40</span>        <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</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="number"> 42</span>        <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp,<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="number"> 43</span>    <span class="k2">}</span>
<span class="number"> 44</span>    <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>
<span class="number"> 46</span>    <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 47</span>    <span class="k2">{</span>
<span class="number"> 48</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> e<span class="k2">;</span>
<span class="number"> 49</span>        <span class="k1">while</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>eq,<span class="k3">&amp;</span>e<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span> <span class="k2">}</span> <span class="k2">}</span>
<span class="number"> 50</span>        <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">001</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>    <span class="k2">}</span>
<span class="number"> 52</span><span class="k2">}</span>
</div></div><p>
I use Win 7, MinGW (GCC 4.8.1) and Allegro 5.0.10 (built from source, all examples and demos seem to work fine). Compiling command:<br /><span class="source-code">gcc <span class="k3">-</span>std<span class="k3">=</span>gnu99 <span class="k3">-</span>o test_a5.exe test_a5.c <span class="k3">-</span>lallegro.dll <span class="k3">-</span>lallegro_font.dll</span></p><p>I guess I&#39;m probably confused about blending modes. I&#39;ll appreciate any hints or suggestions!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kirr)</author>
		<pubDate>Wed, 11 Dec 2013 09:00:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Try this: everytime you are drawing to the memory bitmap, call <span class="source-code"><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> first. Then reset the blending mode to default before drawing to the backbuffer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Wed, 11 Dec 2013 09:28:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><s>&lt;code&gt;al_set_blender(ALLEGRO_ADD,ALLEGRO_ONE,ALLEGRO_ZERO);&lt;/code&gt; is wrong.</s></p><p>edit: what the hell am I thinking
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Wed, 11 Dec 2013 09:29:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, it&#39;s right only when drawing the text, not when blitting to the backbuffer. Or I could be wrong again <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Wed, 11 Dec 2013 09:34:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t get the difference in output on Linux (both cases indicate transparent background). Could you try this with OpenGL?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 11 Dec 2013 09:38:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There shouldn&#39;t be a difference so there&#39;s clearly a bug going on. What that bug is though... I&#39;m uncertain.</p><p>The only thing I can think of is that you&#39;re calling al_get_bitmap_format() so soon after setting the video mode that the video mode may not be completely set or initialized by the GPU by the time the CPU makes the call. An example of this is if you attempt to call al_create_display() a second time too soon after calling it once prior, you can cause some really nasty problems to occur. (At least on Windows.)</p><p>If your memory bitmap is thus getting a format that lacks an alpha channel, it&#39;s effectively the same as using ALLEGRO_ZERO instead of ALLEGRO_INVERSE_ALPHA for the destination pixels.</p><p>...actually, that&#39;s a good point. You should add some code to save the result of al_get_bitmap_format() into a variable so we can see what the result is on your system.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Wed, 11 Dec 2013 10:48:14 +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/613635/993845#target">torhu</a> said:</div><div class="quote"><p>Try this: everytime you are drawing to the memory bitmap, call al_set_blender(ALLEGRO_ADD, ALLEGRO_ONE, ALLEGRO_ZERO) first. Then reset the blending mode to default before drawing to the backbuffer.</p></div></div><p>
This results in solid black background in both cases, as expected. It&#39;s the opposite of what I&#39;m trying to do.</p><p>al_set_blender(ALLEGRO_ADD,ALLEGRO_ONE,ALLEGRO_ZERO) is supposed to set &quot;no-blending&quot; blending mode where the source bitmap is copied to destination verbatim. Thus I use it for the final blit to screen, but not for printing characters.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613635/993849#target">SiegeLord</a> said:</div><div class="quote"><p>I don&#39;t get the difference in output on Linux (both cases indicate transparent background). Could you try this with OpenGL?</p></div></div><p>
With OpenGL it works correctly in both cases! (Transparent background).</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613635/993850#target">Kris Asick</a> said:</div><div class="quote"><p>The only thing I can think of is that you&#39;re calling al_get_bitmap_format() so soon after setting the video mode that the video mode may not be completely set or initialized by the GPU by the time the CPU makes the call. An example of this is if you attempt to call al_create_display() a second time too soon after calling it once prior, you can cause some really nasty problems to occur. (At least on Windows.)</p></div></div><p>
I&#39;ve just tried waiting for 5 seconds (al_rest(5)) after creating display - does not fix it.</p><div class="quote_container"><div class="title">Kris Asick said:</div><div class="quote"><p>If your memory bitmap is thus getting a format that lacks an alpha channel, it&#39;s effectively the same as using ALLEGRO_ZERO instead of ALLEGRO_INVERSE_ALPHA for the destination pixels.</p></div></div><p>
I was under impression that I don&#39;t need an alpha channel in the memory bitmap - it&#39;s the font glyphs that should have the alpha channel - for which there is no API to control.</p><div class="quote_container"><div class="title">Kris Asick said:</div><div class="quote"><p>...actually, that&#39;s a good point. You should add some code to save the result of al_get_bitmap_format() into a variable so we can see what the result is on your system.</p></div></div><p>
23, which should correspond to ALLEGRO_PIXEL_FORMAT_XRGB_8888.</p><p>EDIT: Simplified test code - now saves image to file instead of blitting to screen.
</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">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">enum</span> <span class="k2">{</span> W <span class="k3">=</span> <span class="n">320</span>, H <span class="k3">=</span> <span class="n">200</span>, OPENGL <span class="k3">=</span> <span class="n">0</span>, DRAW_TO_MEMORY <span class="k3">=</span> <span class="n">1</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<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>bmp<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">if</span> <span class="k2">(</span>OPENGL<span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 16</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>W,H<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_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    <span class="k1">if</span> <span class="k2">(</span>DRAW_TO_MEMORY<span class="k2">)</span> 
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</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"> 21</span>        <a href="http://www.allegro.cc/manual/al_set_new_bitmap_format"><span class="a">al_set_new_bitmap_format</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        bmp <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>W,H<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</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>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>    <span class="k2">}</span>
<span class="number"> 25</span>    <span class="k1">else</span> <span class="k2">{</span> bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</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_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</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="k2">;</span>
<span class="number"> 28</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> al_create_builtin_font<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>
<span class="number"> 30</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">10000</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 31</span>    <span class="k2">{</span>
<span class="number"> 32</span>        <span class="k1">char</span> s<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="n">96</span><span class="k3">+</span><span class="n">32</span><span class="k2">)</span>,<span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 33</span>        <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">&amp;</span><span class="n">0xFF</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">&amp;</span><span class="n">0xFF</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">&amp;</span><span class="n">0xFF</span><span class="k2">)</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="k2">(</span>W-20<span class="k2">)</span><span class="k3">+</span><span class="n">5</span>,<a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span>%<span class="k2">(</span>H-20<span class="k2">)</span><span class="k3">+</span><span class="n">5</span>,<span class="n">0</span>,s<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    <span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</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">"test_a5.png"</span>,bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span><span class="k2">}</span>
</div></div><p>
With OPENGL = 1 all works fine (characters have transparent background) regardless of DRAW_TO_MEMORY setting. With DRAW_TO_MEMORY = 0 everything fine too.</p><p>With OPENGL = 0 and DRAW_TO_MEMORY = 1 it prints each character with solid black background (second screenshot in first post).</p><p><b>EDIT: Solved!</b></p><p>It seems I must create font <u>before</u> changing target bitmap to memory bitmap - then it produces correct result. Apparently al_create_builtin_font() is sensitive to pixel format of current target bitmap. I think the same applies to al_load_ttf_font(), because I first noticed this with TTF fonts.</p><p>If this is the intended behavior, perhaps it should be documented.</p><p>Thanks everyone! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>EDIT: Actually it responds to setting bitmap format and flags, not to setting target bitmap. It seems that any grabbed or loaded font (including built-in one) is generated with currently set bitmap format and flags. So there is an API for controlling alpha channel in fonts. Just the documentation is lacking.</p><p>In particular, current flags control whether the font is loaded into video memory, which can have big impact on performance.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kirr)</author>
		<pubDate>Wed, 11 Dec 2013 13:29:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cool. I think what I was thinking about was when you want the temporary bitmap to have transparency when blitting it onto the background. I was using it for something like that. Sorry if I created confusion <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Wed, 11 Dec 2013 22:37:54 +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/613635/993851#target">Kirr</a> said:</div><div class="quote"><p>Actually it responds to setting bitmap format and flags, not to setting target bitmap.</p></div></div><p>
I missed that. Yeah, being able to set bitmap formats and flags for fonts is intended behaviour. <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Wed, 11 Dec 2013 23:10:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No problem and all is good now! I appreciate everyone&#39;s trying to help! I needed this for my benchmark of font rendering across different libs. I&#39;m now adding A5, which is shockingly fast, at least when everything is in video memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kirr)</author>
		<pubDate>Thu, 12 Dec 2013 14:17:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just make sure you&#39;re also using the held drawing feature when rendering text.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 13 Dec 2013 02:33:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It should be automatic, otherwise it&#39;s a bug.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Fri, 13 Dec 2013 13:26:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can&#39;t see any effect from held drawing. Either it&#39;s automatic, or I&#39;m doing it wrong (or both).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kirr)</author>
		<pubDate>Fri, 13 Dec 2013 20:51:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was more talking around multiple calls to draw_text.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 13 Dec 2013 22:54:36 +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/613635/993912#target">Peter Wang</a> said:</div><div class="quote"><p>It should be automatic, otherwise it&#39;s a bug.</p></div></div><p>
Question: If it should be automatic, but you make a call to al_hold_bitmap_drawing(true) beforehand, will rendering text disable held bitmap drawing following, or will you still need to call al_hold_bitmap_drawing(false) afterwards as expected?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Sat, 14 Dec 2013 02:53:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The main loop looks like this:
</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="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> go<span class="k3">=</span><span class="n">1</span>,di<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> go<span class="k2">;</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> i<span class="k3">=</span><span class="n">100</span><span class="k2">;</span> i&gt;0<span class="k2">;</span> i--<span class="k2">)</span>
<span class="number">  5</span>    <span class="k2">{</span>
<span class="number">  6</span>        TXT <span class="k3">*</span>t <span class="k3">=</span> <span class="k3">&amp;</span>test_dataset<span class="k2">[</span>di<span class="k2">]</span><span class="k2">;</span>
<span class="number">  7</span>        <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span>f1,t-&gt;text_color,t-&gt;x,t-&gt;y,<span class="n">0</span>,<span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>t-&gt;text<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>        char_count <span class="k3">+</span><span class="k3">=</span> t-&gt;length<span class="k2">;</span>
<span class="number">  9</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">+</span><span class="k3">+</span>di <span class="k3">&gt;</span><span class="k3">=</span> test_dataset_num_elements<span class="k2">)</span> <span class="k2">{</span> di <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 10</span>    <span class="k2">}</span>
<span class="number"> 11</span>    <a href="http://www.allegro.cc/manual/al_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    now1 <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">if</span> <span class="k2">(</span>now1<span class="k3">!</span><span class="k3">=</span>now<span class="k2">)</span> <span class="k2">{</span> update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> now <span class="k3">=</span> now1<span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 15</span>    <span class="k1">else</span> <span class="k2">{</span> <span class="k1">if</span> <span class="k2">(</span>draw_to_screen<span class="k2">)</span> <span class="k2">{</span> <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span> <span class="k2">}</span>
<span class="number"> 16</span>    check_keyboard<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span><span class="k2">}</span>
</div></div><p>
Here I don&#39;t see any speed increase from held drawing. Should I try to lock the bitmap instead?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kirr)</author>
		<pubDate>Sat, 14 Dec 2013 10:15:13 +0000</pubDate>
	</item>
</rss>
