<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] TTF Fonts not caching correctly?</title>
		<link>http://www.allegro.cc/forums/view/609404</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 15 Feb 2012 03:01:32 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m using Allegro 5.0.5</p><p>In the game I&#39;m making, the game&#39;s text dynamically resizes and therefore I load and use a lot of fonts.</p><p>Each Gui component, when receiving a resize event accesses the font manager and sets its font to the appropriate font.</p><p>I load fonts in the constructor of the core class, after Allegro has been initialized and after a display has been created.</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>  Core::Core<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  2</span>    <span class="k2">:</span>display<span class="k2">(</span>NULL<span class="k2">)</span>,
<span class="number">  3</span>    m_fontManager<span class="k2">(</span>NULL<span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    <span class="c">//initialize Allegro 5</span>
<span class="number">  6</span>    _initAllegro<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>    <span class="c">//initialize Agui</span>
<span class="number">  9</span>    _initAgui<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>    <span class="c">//create the display</span>
<span class="number"> 12</span>    Vec2 optimalSize <span class="k3">=</span> Display::getOptimalResoluton<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>    display <span class="k3">=</span> <span class="k1">new</span> Display<span class="k2">(</span>optimalSize.getX<span class="k2">(</span><span class="k2">)</span>,optimalSize.getY<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    appIcon <span class="k3">=</span> <span class="k1">new</span> Sprite<span class="k2">(</span><span class="s">"res/appico.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>    display-&gt;setIcon<span class="k2">(</span>appIcon<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="c">//init font manager</span>
<span class="number"> 18</span>    m_fontManager <span class="k3">=</span> <span class="k1">new</span> GuiFontManager<span class="k2">(</span><span class="s">"res/font.ttf"</span>,<span class="n">8</span>,<span class="n">32</span>,<span class="n">17</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    agui::Widget::setGlobalFont<span class="k2">(</span>m_fontManager-&gt;getDefaultFont<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    <span class="c">//create the scene manager</span>
<span class="number"> 22</span>    sceneManager <span class="k3">=</span> <span class="k1">new</span> SceneManager<span class="k2">(</span>settings, m_dynamicUIManager<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>    display-&gt;setSceneMessenger<span class="k2">(</span>sceneManager<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>  <span class="k2">}</span>
<span class="number"> 26</span>...
<span class="number"> 27</span>  GuiFontManager::GuiFontManager<span class="k2">(</span> 
<span class="number"> 28</span>    <span class="k1">const</span> std::string<span class="k3">&amp;</span> fontPath, <span class="k1">int</span> beginRange, <span class="k1">int</span> endRange, <span class="k1">int</span> defaultSize <span class="k2">)</span>
<span class="number"> 29</span>    <span class="k2">:</span> m_beginRange<span class="k2">(</span>beginRange<span class="k2">)</span>, m_endRange<span class="k2">(</span>endRange<span class="k2">)</span>, m_defaultSize<span class="k2">(</span>defaultSize<span class="k2">)</span>
<span class="number"> 30</span>  <span class="k2">{</span>
<span class="number"> 31</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> beginRange<span class="k2">;</span> i <span class="k3">&lt;</span><span class="k3">=</span> endRange<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number"> 32</span>    <span class="k2">{</span>
<span class="number"> 33</span>      m_fonts.push_back<span class="k2">(</span>agui::Font::load<span class="k2">(</span>fontPath,i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    <span class="k2">}</span>
<span class="number"> 35</span>  <span class="k2">}</span>
</div></div><p>

My issue is when I get into a scene and start using a bunch of these fonts. Sometimes only part of a word is rendered, and on occasion, a glyph is totally the wrong one. I also tried, after loading a font to render the alphabet and this actually helped, but there were still certain circumstances when the word &#39;Across&#39; rendered as &#39;Acro&#39; or &#39;o&#39;. I&#39;ve looked through my code for hours trying to find something wrong with it but I cannot seem to find anything wrong. </p><p>Is there some sort of precaution to take when loading and using around 40 TTF fonts?</p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 27 Jan 2012 09:12:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sounds like an issue I had with my last SpeedHack game, only I loaded only two. In my case, only some computers failed to load the fonts correctly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Fri, 27 Jan 2012 09:35:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>On my PC, the same exe and conditions cause different letters to show and different letters not to... I do not know what to do. It is very important for me to be able to have this feature.</p><p>Edit:</p><p>I can confirm that this only happens with Direct3D, not OpenGL.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 27 Jan 2012 09:41:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Best provide a test case.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Fri, 27 Jan 2012 12:47:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think I had a similar issue with the D3D driver at one point. I fixed it by making sure bitmaps were a minimum size, I think 16x16. Not sure if it&#39;s related. I don&#39;t know for certain but I assumed that fix was either done before 5.0 was released or ported back.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Fri, 27 Jan 2012 13:04:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is an example that produces the problem.</p><p>It seems to happen when calling al_get_text_width and loading many fonts.</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;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro5.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">   7</span><span class="p">#include "stdlib.h"</span>
<span class="number">   8</span><span class="p">#include &lt;vector&gt;</span>
<span class="number">   9</span><span class="k1">struct</span> Example
<span class="number">  10</span><span class="k2">{</span>
<span class="number">  11</span>    <span class="k1">double</span> fps<span class="k2">;</span>
<span class="number">  12</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_CONFIG"><span class="a">ALLEGRO_CONFIG</span></a> <span class="k3">*</span>config<span class="k2">;</span>
<span class="number">  13</span><span class="k2">}</span> ex<span class="k2">;</span>
<span class="number">  14</span><span class="c">//Globals are bad but it is an example</span>
<span class="number">  15</span>std::vector<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span><span class="k3">&gt;</span> m_fonts<span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="k1">static</span> <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>get_string<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="number">  18</span><span class="k2">{</span>
<span class="number">  19</span>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>v <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_config_value"><span class="a">al_get_config_value</span></a><span class="k2">(</span>ex.config, <span class="s">""</span>, <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span>    <span class="k1">return</span> <span class="k2">(</span>v<span class="k2">)</span> ? v <span class="k2">:</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">;</span>
<span class="number">  21</span><span class="k2">}</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">static</span> <span class="k1">void</span> render<span class="k2">(</span><span class="k1">void</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/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">  26</span>
<span class="number">  27</span>  <span class="k1">int</span> fontSz <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">03f</span><span class="k2">;</span>
<span class="number">  28</span>  <span class="k1">if</span><span class="k2">(</span>fontSz <span class="k3">&gt;</span><span class="k3">=</span> m_fonts.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  29</span>  <span class="k2">{</span>
<span class="number">  30</span>    fontSz <span class="k3">=</span> m_fonts.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  31</span>  <span class="k2">}</span>
<span class="number">  32</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><span class="k2">(</span>m_fonts<span class="k2">[</span>fontSz<span class="k2">]</span><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">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="s">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>
<span class="number">  35</span>  <a href="http://www.allegro.cc/manual/al_get_text_width"><span class="a">al_get_text_width</span></a><span class="k2">(</span>m_fonts<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>,<span class="s">"ALLEGRO"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span><span class="k2">}</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  39</span><span class="k2">{</span>
<span class="number">  40</span>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>font_file <span class="k3">=</span> <span class="s">"data/DejaVuSans.ttf"</span><span class="k2">;</span>
<span class="number">  41</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">  42</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  43</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue<span class="k2">;</span>
<span class="number">  44</span>    <span class="k1">int</span> redraw <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  45</span>    <span class="k1">double</span> t <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  46</span>
<span class="number">  47</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</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">  48</span>  <span class="k2">{</span>
<span class="number">  49</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  50</span>  <span class="k2">}</span>
<span class="number">  51</span>
<span class="number">  52</span>
<span class="number">  53</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  54</span>  <span class="k2">{</span>
<span class="number">  55</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  56</span>  <span class="k2">}</span>
<span class="number">  57</span>
<span class="number">  58</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">  59</span>
<span class="number">  60</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  61</span>  <span class="k2">{</span>
<span class="number">  62</span>  <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  63</span>  <span class="k2">}</span>
<span class="number">  64</span>
<span class="number">  65</span>
<span class="number">  66</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_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</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><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  69</span>        <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  70</span>    <span class="k2">}</span>
<span class="number">  71</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">  72</span>
<span class="number">  73</span>  <span class="c">//load the fonts</span>
<span class="number">  74</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">32</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number">  75</span>  <span class="k2">{</span>
<span class="number">  76</span>    m_fonts.push_back<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span>font_file,i,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>  <span class="k2">}</span>
<span class="number">  78</span>
<span class="number">  79</span>    timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>
<span class="number">  81</span>    queue <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">  82</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>queue, <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">  83</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>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</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>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>
<span class="number">  86</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>    <span class="k1">while</span> <span class="k2">(</span><span class="k1">true</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  88</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  89</span>        <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number">  91</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number">  92</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number">  93</span>                event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  94</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number">  95</span>        <span class="k2">}</span>
<span class="number">  96</span>        <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number">  97</span>            redraw<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  98</span>
<span class="number">  99</span>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_RESIZE<span class="k2">)</span>
<span class="number"> 100</span>    <span class="k2">{</span>
<span class="number"> 101</span>      <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>      
<span class="number"> 103</span>    <span class="k2">}</span>
<span class="number"> 104</span>
<span class="number"> 105</span>        <span class="k1">while</span> <span class="k2">(</span>redraw <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 106</span>            <span class="k1">double</span> dt<span class="k2">;</span>
<span class="number"> 107</span>            redraw--<span class="k2">;</span>
<span class="number"> 108</span>
<span class="number"> 109</span>            dt <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>            render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>            dt <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> dt<span class="k2">;</span>
<span class="number"> 112</span>
<span class="number"> 113</span>            t <span class="k3">=</span> <span class="n">0</span>.<span class="n">99</span> <span class="k3">*</span> t <span class="k3">+</span> <span class="n">0</span>.<span class="n">01</span> <span class="k3">*</span> dt<span class="k2">;</span>
<span class="number"> 114</span>
<span class="number"> 115</span>            ex.fps <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> t<span class="k2">;</span>
<span class="number"> 116</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"> 117</span>        <span class="k2">}</span>
<span class="number"> 118</span>    <span class="k2">}</span>
<span class="number"> 119</span>  <span class="c">//free mem</span>
<span class="number"> 120</span>
<span class="number"> 121</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 122</span><span class="k2">}</span>
<span class="number"> 123</span>
<span class="number"> 124</span><span class="c">/* vim: set sts=4 sw=4 et: */</span>
</div></div><p>

Just keep resizing the window until you see the image I&#39;ve attached:<br /><span class="remote-thumbnail"><span class="json">{"name":"605475","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/0\/6057c40463519de97417fc003c88ed78.png","w":742,"h":308,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/0\/6057c40463519de97417fc003c88ed78"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/6/0/6057c40463519de97417fc003c88ed78-240.jpg" alt="605475" width="240" height="99" /></span></p><p>It&#39;s quite tricky to reproduce. If I draw the alphabet with all the loaded fonts the issue does not occur.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 27 Jan 2012 21:30:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Something to do with display lost/found probably. When you resize a window D3D has to reinit all bitmaps from system memory, including fonts.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Fri, 27 Jan 2012 22:18:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you think it can be fixed? I do not want to use GL on Windows because:</p><p>When it resizes it flickers. Theres no way to address this because I cant get a resize begin / end events and therefore cannot render black while resizing.</p><p>And it reduces a lot of compatibility. If a person does not have an OpenGL driver from NVidia or ATI Allegro does not work well.</p><p>Also, it seems like it does have to do with resizing. If I launch the Window at 320x240, it does not happen (but in my game it still does, just differently).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 27 Jan 2012 22:32:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m sure it can be fixed. Change the fonts to use memory bitmaps. See if that &quot;fixes&quot; it. I know it&#39;ll be slow but that&#39;ll narrow down the bug.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Fri, 27 Jan 2012 23:35:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yup<br />Adding:<br />	al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);</p><p>&#39;fixes&#39; the problem.</p><p>It also &#39;fixes&#39; it for my game.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Fri, 27 Jan 2012 23:54:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Now try cycling through different sizes without resizing (using video bitmaps). Just have a font_index, increase it each render and wrap it around to zero. See if you have any problems.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Fri, 27 Jan 2012 23:56:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Cycling does not have the issue. However, when cycling, I can resize and the issue does not happen.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 28 Jan 2012 00:02:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, it seems like a threading issue. WM_SIZE events come in on a separate thread than the user thread (the one you write your code on.) So a bitmap &quot;backup&quot; must be performed before the resize takes place, and _flip() should probably be blocked with a mutex until all of this is done.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 28 Jan 2012 00:05:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If the bitmaps are invalidated, just send down the LOST_DISPLAY event and call it a day <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 28 Jan 2012 00:06:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s not required to be handled by Allegro user programs. They can handle it if they choose, and skip all of the automatic stuff in favor of perhaps a little more performance and flexibility. But I think it&#39;s too complicated and different from other platforms that it shouldn&#39;t be the only way.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 28 Jan 2012 00:08:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Most games I see using D3D that resize do postpone display flipping until resizing is done. This causes the game to also look better when resizing. Instead of a fuzzy stretched version of your output you get the last frame and some black which to me looks more elegant anyways. It just seems to me like it is better not to render while resizing; On all platforms too.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 28 Jan 2012 00:30:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can you build 5.1 svn and try that? It probably doesn&#39;t work, but you&#39;ll be ready to test some patches in case I feel like trying to fix this now <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 28 Jan 2012 00:43:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Would you happen to have FreeType and some of Allegro&#39;s other deps (for MSVC 9)? Otherwise it might take a while. I can compile core Allegro without trouble, but the TTF and other addons need the deps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 28 Jan 2012 00:52:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t have them, but they come with the A5 binaries on this page that Michal Cichon makes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 28 Jan 2012 00:57:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wouldn&#39;t I still need the headers though? I added the .libs to my PATH environment variable and CMAKE still cannot find them.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 28 Jan 2012 00:59:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was going to say use the libs from the binary package of 5.0.5, but I noticed you would need to deal with static compiling to do that...</p><p>[edit] Just noticed that the only header included is the Physfs one (assuming an example needs it)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Sat, 28 Jan 2012 01:00:11 +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/609404/945801#target">MiquelFire</a> said:</div><div class="quote"><p>
[edit] Just noticed that the only header included is the Physfs one (assuming an example needs it)
</p></div></div><p>

Exactly, that&#39;s my problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 28 Jan 2012 01:03:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I seem to have this file on my Windows system. FreeType comes with MSVC build stuff in builds/win32 so it should not be that hard to build yourself anyway.</p><p><a href="http://libagar.org/FreeType235-win32-i386.zip">http://libagar.org/FreeType235-win32-i386.zip</a></p><p>Edit: here is a copy of one of my deps directories (I have a few). I do not remember if it works, where all the files came from, how they were built, if anything is missing, or if it is virus infected (I don&#39;t use antivirus). Use at your own risk.</p><p><a href="http://uploading.com/files/9b797f94/deps.zip/">http://uploading.com/files/9b797f94/deps.zip/</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Sat, 28 Jan 2012 05:42:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Has there been any progress on the issue. I do not know if you saw the similar OpenGL issue here as well:<br /><a href="http://www.allegro.cc/forums/thread/609417">http://www.allegro.cc/forums/thread/609417</a></p><p>(Maybe this thread and the other should be moved to the Development section since I guess it is an allegro bug and not an issue with my code which had been my initial speculation)</p><p>Also, I compiled FreeType, but I&#39;m not sure how to get CMAKE to know where it is.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 04 Feb 2012 06:37:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Easiest way is to drop it (both the include and lib folder) into a folder called &quot;deps&quot; in the build folder.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Sat, 04 Feb 2012 18:45:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Elias, that worked perfectly!</p><p>@Trent<br />I just tried my little example in latest SVN and it still happens. But at least now if you have any patches for this that need testing I&#39;m ready!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 04 Feb 2012 20:17:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I tried to recreate what&#39;s happening in the ttf addon but without using the ttf addon. This example works, though I can confirm that yours doesn&#39;t. Right now I&#39;m not sure why, perhaps this example may shed a little light though so I&#39;ll post it here.</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_direct3d.h&gt;</span>
<span class="number">  3</span>
<span class="number">  4</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>pages<span class="k2">[</span><span class="n">50</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> NULL, <span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> check_page<span class="k2">(</span><span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> <span class="n">3</span><span class="k2">)</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  9</span>  <span class="k1">int</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>pages<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>  <span class="k1">int</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>pages<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y<span class="k3">+</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> h<span class="k2">;</span> y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x<span class="k3">+</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> w<span class="k2">;</span> x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</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"> 14</span>      lr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_lock_bitmap_region"><span class="a">al_lock_bitmap_region</span></a><span class="k2">(</span>
<span class="number"> 15</span>        pages<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span>,
<span class="number"> 16</span>        x, y, <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a>, <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a>,
<span class="number"> 17</span>        ALLEGRO_PIXEL_FORMAT_ARGB_8888,
<span class="number"> 18</span>        ALLEGRO_LOCK_WRITEONLY
<span class="number"> 19</span>      <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>        <span class="k1">if</span> <span class="k2">(</span>j <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> j <span class="k3">=</span><span class="k3">=</span> index-1<span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 22</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> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>          <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> i <span class="k3">=</span><span class="k3">=</span> index-1<span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 24</span>          <span class="k1">uint8_t</span> <span class="k3">*</span>p <span class="k3">=</span>
<span class="number"> 25</span>            <span class="k2">(</span><span class="k1">uint8_t</span> <span class="k3">*</span><span class="k2">)</span>lr-&gt;data<span class="k2">;</span>
<span class="number"> 26</span>          p <span class="k3">+</span><span class="k3">=</span> j <span class="k3">*</span> lr-&gt;pitch<span class="k2">;</span>
<span class="number"> 27</span>          p <span class="k3">+</span><span class="k3">=</span> i <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 28</span>          <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span>p<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xFF00FF00</span><span class="k2">;</span>
<span class="number"> 29</span>        <span class="k2">}</span>
<span class="number"> 30</span>      <span class="k2">}</span>
<span class="number"> 31</span>      <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>pages<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    <span class="k2">}</span>
<span class="number"> 33</span>  <span class="k2">}</span>
<span class="number"> 34</span><span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number"> 37</span><span class="k2">{</span>
<span class="number"> 38</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"> 39</span>
<span class="number"> 40</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_RESIZABLE <span class="k3">|</span> ALLEGRO_DIRECT3D<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>
<span class="number"> 42</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</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><span class="n">500</span>, <span class="n">500</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue <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"> 44</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>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<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">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">50</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 47</span>    <span class="k1">int</span> w <span class="k3">=</span> <span class="n">100</span> <span class="k3">+</span> i <span class="k3">*</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 48</span>    <span class="k1">int</span> h <span class="k3">=</span> <span class="n">100</span> <span class="k3">+</span> i <span class="k3">*</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 49</span>    pages<span class="k2">[</span>i<span class="k2">]</span> <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"> 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>pages<span class="k2">[</span>i<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</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"> 52</span>  <span class="k2">}</span>
<span class="number"> 53</span>
<span class="number"> 54</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"> 55</span>
<span class="number"> 56</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k1">true</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 57</span>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>al_event_queue_is_empty<span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 58</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"> 59</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>queue, <span class="k3">&amp;</span>e<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>      <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_RESIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 61</span>        <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>      <span class="k2">}</span>
<span class="number"> 63</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 64</span>        <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 65</span>      <span class="k2">}</span>
<span class="number"> 66</span>    <span class="k2">}</span>
<span class="number"> 67</span>    
<span class="number"> 68</span>    <span class="k1">float</span> window_width <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>    window_width <span class="k3">-</span><span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number"> 70</span>    window_width <span class="k3">/</span><span class="k3">=</span> <span class="n">400</span><span class="k2">;</span>
<span class="number"> 71</span>    window_width <span class="k3">*</span><span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number"> 72</span>    <span class="k1">if</span> <span class="k2">(</span>window_width <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> window_width <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 73</span>    <span class="k1">if</span> <span class="k2">(</span>window_width <span class="k3">&gt;</span> <span class="n">49</span><span class="k2">)</span> window_width <span class="k3">=</span> <span class="n">49</span><span class="k2">;</span>
<span class="number"> 74</span>    check_page<span class="k2">(</span>window_width<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 75</span>
<span class="number"> 76</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>pages<span class="k2">[</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>window_width<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="number"> 77</span>
<span class="number"> 78</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"> 79</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 80</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sun, 05 Feb 2012 11:48:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s what I found and wrote in the other thread. Maybe it helps:</p><p>It really has to do with resizing because I had it display the alphabet at varying sizes for a few minutes. The second I resize, the letter Z is no longer rendered.</p><p>The problem seems to happen when d3d_acknowledge_resize is called.</p><p>I suspect the problem is somewhere in _al_d3d_refresh_texture_memory</p><p>I tried having it rest a few seconds but it still caused the problem.</p><p>I&#39;m not familiar with D3D so I cannot be much help in debugging this area.</p><p>Edit:<br />I think I&#39;ve somewhat narrowed it down to d3d_sync_bitmap_texture(), or at least there&#39;s something there.</p><p>When I remove the first call to _al_convert... , the letter Z stops disappearing.  However the letters that I get the width of still exhibit the issue.<br /> </p><p><b>Edit 2/10/12:</b><br />THIS solution seems to somewhat the trick, when the device is lost the bitmaps were not being prepared for reset:<br />Change:
</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">if</span> <span class="k2">(</span>hr <span class="k3">=</span><span class="k3">=</span> D3DERR_DEVICELOST<span class="k2">)</span> <span class="k2">{</span>
      d3d_display-&gt;device_lost <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
     _al_d3d_prepare_bitmaps_for_reset<span class="k2">(</span>d3d_display<span class="k2">)</span><span class="k2">;</span>
      <span class="k1">return</span><span class="k2">;</span>
   <span class="k2">}</span>
   <span class="k1">else</span> <span class="k2">{</span>
      _al_d3d_prepare_bitmaps_for_reset<span class="k2">(</span>d3d_display<span class="k2">)</span><span class="k2">;</span>
   <span class="k2">}</span>
</pre></div></div><p>
New patch attached.</p><p>It solves the case where the Z was vanishing but the get text width problem still prevails.</p><p><b>Edit 2/13/12:</b><br />I noticed that the results it gives when it messes up are fairly predictable. I tried changing the order that the fonts are loaded in and now it looks like this:<br /><span class="remote-thumbnail"><span class="json">{"name":"605587","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/e\/ae4e7551b10f00cba71ed1fbfde447bc.png","w":634,"h":245,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/a\/e\/ae4e7551b10f00cba71ed1fbfde447bc"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/a/e/ae4e7551b10f00cba71ed1fbfde447bc-240.jpg" alt="605587" width="240" height="92" /></span></p><p>As can be seen here, the problem seems to be that when it either makes the backup or restores from backup it grabs from the wrong font. Hopefully this helps <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 14 Feb 2012 05:47:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Still not sure what it is. The font addon uses sub-bitmaps and those don&#39;t change when backing up/restoring the sheets. Don&#39;t know if that&#39;s relevant but it just occurred to me. Doesn&#39;t seem relevant since the sub bitmap parent pointer doesn&#39;t change and the rectangle stays the same. Maybe digging a little deeper with some debugging drawing from within the ttf addon, maybe drawing each sheet that you can cycle through or something, would help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 14 Feb 2012 06:13:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I did some digging around in the ttf.c and changed:
</p><div class="source-code snippet"><div class="inner"><pre> glyph_data <span class="k3">=</span> alloc_glyph_region<span class="k2">(</span>font_data, w, h, <span class="k1">false</span>, glyph, lock_more<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
to
</p><div class="source-code snippet"><div class="inner"><pre> glyph_data <span class="k3">=</span> alloc_glyph_region<span class="k2">(</span>font_data, w, h, <span class="k1">true</span>, glyph, lock_more<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

And the problem completely disappears, the returned text width is correct and it uses video bitmaps.</p><p>Does this indicate anything to you?</p><p>I think it causes every glyph to be on its own page, which wastes a ton of memory, but the problem vanishes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 14 Feb 2012 06:58:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hm, that piques my interest. Obviously that&#39;s not a solution (using true will create a whole new page for each character), but it made me think... maybe Peter Wang who optimized the addon could tell us, does the ttf addon hold a lock on glyphs between drawing calls? Because maybe the page(s) are locked when D3D tries to backup/restore them. Not sure how to work around that since some of the data (relock, possibly other things) is held in the font and the D3D driver doesn&#39;t have access. But if it does hold a lock, releasing the lock before backup/restore (in a proper way as to respect all of the ttf internal variables), may solve the problem.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 14 Feb 2012 07:05:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have found something even better now.</p><p>The whole notion of locking got me realizing that the renderGlyph function calls lock_more on the cache function with false.</p><p>I created a new function called _renderGlyph which is basically renderGlyph WITHOUT the call to al_draw_bitmap. Calling it like this returns the correct text width and the problem vanishes.</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">static</span> <span class="k1">int</span> ttf_text_length<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k1">const</span> <span class="k3">*</span>f, <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>text<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   ALLEGRO_TTF_FONT_DATA <span class="k3">*</span>data <span class="k3">=</span> f-&gt;data<span class="k2">;</span>
<span class="number">  4</span>   FT_Face face <span class="k3">=</span> data-&gt;face<span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">int</span> pos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>   <span class="k1">int</span> prev_ft_index <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  7</span>   <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  8</span>   <span class="k1">int32_t</span> ch<span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">bool</span> hold<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>   hold <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_is_bitmap_drawing_held"><span class="a">al_is_bitmap_drawing_held</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k2">(</span>ch <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_get_next"><span class="a">al_ustr_get_next</span></a><span class="k2">(</span>text, <span class="k3">&amp;</span>pos<span class="k2">)</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>      <span class="k1">int</span> ft_index <span class="k3">=</span> FT_Get_Char_Index<span class="k2">(</span>face, ch<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>      ALLEGRO_TTF_GLYPH_DATA <span class="k3">*</span>glyph <span class="k3">=</span> get_glyph<span class="k2">(</span>data, ft_index<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>     x <span class="k3">+</span><span class="k3">=</span> _render_glyph<span class="k2">(</span>f,<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>,prev_ft_index,ft_index,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>      prev_ft_index <span class="k3">=</span> ft_index<span class="k2">;</span>
<span class="number"> 20</span>   <span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</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>hold<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>   <span class="k1">return</span> x<span class="k2">;</span>
<span class="number"> 25</span><span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span><span class="k1">static</span> <span class="k1">int</span> _render_glyph<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k1">const</span> <span class="k3">*</span>f,
<span class="number"> 28</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color, <span class="k1">int</span> prev_ft_index, <span class="k1">int</span> ft_index,
<span class="number"> 29</span>   <span class="k1">float</span> xpos, <span class="k1">float</span> ypos<span class="k2">)</span>
<span class="number"> 30</span><span class="k2">{</span>
<span class="number"> 31</span>   ALLEGRO_TTF_FONT_DATA <span class="k3">*</span>data <span class="k3">=</span> f-&gt;data<span class="k2">;</span>
<span class="number"> 32</span>   FT_Face face <span class="k3">=</span> data-&gt;face<span class="k2">;</span>
<span class="number"> 33</span>   ALLEGRO_TTF_GLYPH_DATA <span class="k3">*</span>glyph <span class="k3">=</span> get_glyph<span class="k2">(</span>data, ft_index<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>   <span class="k1">int</span> advance <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="c">/* We don't try to cache all glyphs in a pre-pass before drawing them.</span>
<span class="number"> 37</span><span class="c">    * While that would indeed save us making separate texture uploads, it</span>
<span class="number"> 38</span><span class="c">    * implies two passes over a string even in the common case when all glyphs</span>
<span class="number"> 39</span><span class="c">    * are already cached.  This turns out to have an measureable impact on</span>
<span class="number"> 40</span><span class="c">    * performance.</span>
<span class="number"> 41</span><span class="c">    */</span>
<span class="number"> 42</span>   cache_glyph<span class="k2">(</span>data, face, ft_index, glyph, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>   unlock_current_page<span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>
<span class="number"> 45</span>   advance <span class="k3">+</span><span class="k3">=</span> get_kerning<span class="k2">(</span>data, face, prev_ft_index, ft_index<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>   advance <span class="k3">+</span><span class="k3">=</span> glyph-&gt;advance<span class="k2">;</span>
<span class="number"> 47</span>
<span class="number"> 48</span>   <span class="k1">return</span> advance<span class="k2">;</span>
<span class="number"> 49</span><span class="k2">}</span>
</div></div><p>

I can confirm that with this method, the problem in my game completely is gone!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 14 Feb 2012 08:25:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What if you add at line 571 this:</p><div class="source-code snippet"><div class="inner"><pre><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="k1">false</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Giving you:</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">static</span> <span class="k1">int</span> ttf_text_length<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k1">const</span> <span class="k3">*</span>f, <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>text<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   ALLEGRO_TTF_FONT_DATA <span class="k3">*</span>data <span class="k3">=</span> f-&gt;data<span class="k2">;</span>
<span class="number">  4</span>   FT_Face face <span class="k3">=</span> data-&gt;face<span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">int</span> pos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>   <span class="k1">int</span> prev_ft_index <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  7</span>   <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  8</span>   <span class="k1">int32_t</span> ch<span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">bool</span> hold<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>   hold <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_is_bitmap_drawing_held"><span class="a">al_is_bitmap_drawing_held</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</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="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k2">(</span>ch <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_get_next"><span class="a">al_ustr_get_next</span></a><span class="k2">(</span>text, <span class="k3">&amp;</span>pos<span class="k2">)</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</span>      <span class="k1">int</span> ft_index <span class="k3">=</span> FT_Get_Char_Index<span class="k2">(</span>face, ch<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>      ALLEGRO_TTF_GLYPH_DATA <span class="k3">*</span>glyph <span class="k3">=</span> get_glyph<span class="k2">(</span>data, ft_index<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>      cache_glyph<span class="k2">(</span>data, face, ft_index, glyph, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>      x <span class="k3">+</span><span class="k3">=</span> get_kerning<span class="k2">(</span>data, face, prev_ft_index, ft_index<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>      x <span class="k3">+</span><span class="k3">=</span> glyph-&gt;advance<span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>      prev_ft_index <span class="k3">=</span> ft_index<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_hold_bitmap_drawing"><span class="a">al_hold_bitmap_drawing</span></a><span class="k2">(</span>hold<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>   <span class="k1">return</span> x<span class="k2">;</span>
<span class="number"> 29</span><span class="k2">}</span>
</div></div><p>

Added note: I think with your method if you used al_get_text_width before drawing you might run into problems.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 14 Feb 2012 08:44:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nope that does not work.</p><p>I tried my method with getting the width at various places (as I do in my game) and there does not seem to be a problem with it. What sort of problems do you foresee?</p><p>What does the magic is
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">static</span> <span class="k1">void</span> unlock_current_page<span class="k2">(</span>ALLEGRO_TTF_FONT_DATA <span class="k3">*</span>data<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">if</span> <span class="k2">(</span>data-&gt;page_lr<span class="k2">)</span> <span class="k2">{</span>
      <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span>back <span class="k3">=</span> _al_vector_ref_back<span class="k2">(</span><span class="k3">&amp;</span>data-&gt;page_bitmaps<span class="k2">)</span><span class="k2">;</span>
      <a href="http://www.allegro.cc/manual/ASSERT"><span class="a">ASSERT</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_is_bitmap_locked"><span class="a">al_is_bitmap_locked</span></a><span class="k2">(</span><span class="k3">*</span>back<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
      <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span><span class="k3">*</span>back<span class="k2">)</span><span class="k2">;</span>
      data-&gt;page_lr <span class="k3">=</span> NULL<span class="k2">;</span>
   <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

Maybe we should check if a bitmap is locked before making a backup and relock it if it was locked?</p><p>Currently the d3d code does:    
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>dest-&gt;locked<span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">return</span><span class="k2">;</span>
   <span class="k2">}</span>
</pre></div></div><p>

Which does not seem right.</p><p>Another option could be to lock the font page back up after getting the text width; That might work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 14 Feb 2012 08:53:46 +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/609404/947323#target">jmasterx</a> said:</div><div class="quote"><p>
Maybe we should check if a bitmap is locked before making a backup and relock it if it was locked?
</p></div></div><p>

That sounds reasonable. So check if it&#39;s locked, if it is store the lock info (x, y, width, height, format, other?), unlock it, back it up, then re-lock it. This assumes the ttf addon doesn&#39;t hold any pointers within the lock-&gt;data region. If that works then it&#39;s a good solution.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 14 Feb 2012 09:34:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Locking the ttf as readwrite rather than write only, seems to have a different effect. I&#39;m going to look into trying to understand why the other technique works.</p><p>Edit:<br />After trying several different locking / unlocking, it really feels like my solution is the best solution. It is simply 1 line 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">static</span> <span class="k1">int</span> ttf_text_length<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k1">const</span> <span class="k3">*</span>f, <span class="k1">const</span> <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>text<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   ALLEGRO_TTF_FONT_DATA <span class="k3">*</span>data <span class="k3">=</span> f-&gt;data<span class="k2">;</span>
<span class="number">  4</span>   FT_Face face <span class="k3">=</span> data-&gt;face<span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">int</span> pos <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>   <span class="k1">int</span> prev_ft_index <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  7</span>   <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  8</span>   <span class="k1">int32_t</span> ch<span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">bool</span> hold<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>   hold <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_is_bitmap_drawing_held"><span class="a">al_is_bitmap_drawing_held</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <span class="k1">while</span> <span class="k2">(</span><span class="k2">(</span>ch <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_get_next"><span class="a">al_ustr_get_next</span></a><span class="k2">(</span>text, <span class="k3">&amp;</span>pos<span class="k2">)</span><span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>      <span class="k1">int</span> ft_index <span class="k3">=</span> FT_Get_Char_Index<span class="k2">(</span>face, ch<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>      ALLEGRO_TTF_GLYPH_DATA <span class="k3">*</span>glyph <span class="k3">=</span> get_glyph<span class="k2">(</span>data, ft_index<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>      cache_glyph<span class="k2">(</span>data, face, ft_index, glyph, <span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    unlock_current_page<span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span> <span class="c">//Only change</span>
<span class="number"> 19</span>      x <span class="k3">+</span><span class="k3">=</span> get_kerning<span class="k2">(</span>data, face, prev_ft_index, ft_index<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>      x <span class="k3">+</span><span class="k3">=</span> glyph-&gt;advance<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>      prev_ft_index <span class="k3">=</span> ft_index<span class="k2">;</span>
<span class="number"> 23</span>   <span class="k2">}</span>
<span class="number"> 24</span>
<span class="number"> 25</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>hold<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>   <span class="k1">return</span> x<span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
</div></div><p>

literally the only change here is the call to:
</p><div class="source-code snippet"><div class="inner"><pre>unlock_current_page<span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I have tested in several situations with and without rendering anything and I do not see a performance impact nor are results inconsistent.</p><p>If you could tell me what sorts of problems I should be looking for or problems doing this could cause, please let me know. I do not see a problem because when rendering a glyph, this is called. And Allegro&#39;s state is always &#39;ready to render&#39; since a new scene begins when another has ended.</p><p>I tested with GL too and results are nice and consistent here too. If you&#39;re worried it might affect other platforms somehow you could ifdef the call for D3D only, but I do not think that is necessary.</p><p>I also tried 2 calls to al_get_text_width in a row before any rendering even occurs.</p><p>Note that it should be done to ttf_get_text_dimensions as well.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 14 Feb 2012 21:49:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Please post a patch to the [AD] mailing list. I&#39;m not comfortable applying this without Peter first having a look at it. He did all of the optimization in the ttf addon. He&#39;d probably know if this change is ok. I don&#39;t know if he&#39;s following this thread.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Wed, 15 Feb 2012 02:46:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll just start a thread in the Allegro Development section. <br /><a href="http://www.allegro.cc/forums/thread/609548/947404#target">http://www.allegro.cc/forums/thread/609548/947404#target</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Wed, 15 Feb 2012 03:01:32 +0000</pubDate>
	</item>
</rss>
