<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>KrampusHack 2020: Odd Results With Color Mapping Functions</title>
		<link>http://www.allegro.cc/forums/view/618313</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 05 Jan 2021 07:55:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For my hack entry I decided to expand my wrapper library&#39;s asset manager with color management so that I could register a color by name and easily access it later on throughout the application (where it has access to assets).</p><p>Alas, I&#39;m having a strange situation where the color being created does not appear to be initialized correctly. This has blocked me for a couple of days now. I&#39;m not sure if the way I&#39;m using Allegro is wrong, or if my type management is incorrect, or if this is somehow a bug in my build of Allegro.</p><p>Note: I&#39;m casting between <span class="source-code"><span class="k1">int</span></span> and <span class="source-code"><span class="k1">unsigned</span> <span class="k1">char</span></span>, knowing the values should fit within an <span class="source-code"><span class="k1">unsigned</span> <span class="k1">char</span></span>, and assuming that the appropriate conversion will be applied by the C++ compiler. Even though I&#39;m confident that this is fine, this feels like my most likely explanation for the flakiness if only because it&#39;s the only thing I can think of. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="source-code"><div class="toolbar"><span class="name">deps/al5poly/src/AssetManager.cpp</span><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"> 237</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> AssetManager::createColor<span class="k2">(</span>
<span class="number"> 238</span>            <span class="k1">const</span> std::string <span class="k3">&amp;</span> name,
<span class="number"> 239</span>            <span class="k1">unsigned</span> <span class="k1">char</span> red,
<span class="number"> 240</span>            <span class="k1">unsigned</span> <span class="k1">char</span> green,
<span class="number"> 241</span>            <span class="k1">unsigned</span> <span class="k1">char</span> blue,
<span class="number"> 242</span>            <span class="k1">unsigned</span> <span class="k1">char</span> alpha<span class="k2">)</span>
<span class="number"> 243</span>    <span class="k2">{</span>
<span class="number"> 244</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> value <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span>red, green, blue, alpha<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>
<span class="number"> 246</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"LIBAL5POLY DEBUG: {\"r\": %d, \"g\": %d, \"b\": %d, \"a\": %d} &lt;=&gt; %s\n"</span>,
<span class="number"> 247</span>                <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>red, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>green, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>blue, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>alpha, AssetManager::printColor<span class="k2">(</span>value<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 248</span>
<span class="number"> 249</span>        this-&gt;colors_.insert<span class="k2">(</span>std::make_pair<span class="k2">(</span>name, value<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span>
<span class="number"> 251</span>        <span class="k1">return</span> value<span class="k2">;</span>
<span class="number"> 252</span>    <span class="k2">}</span>
</div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="name">deps/al5poly/src/AssetManager.cpp</span><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"> 312</span>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> AssetManager::printColor<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span>
<span class="number"> 313</span>    <span class="k2">{</span>
<span class="number"> 314</span>        <span class="k1">static</span> <span class="k1">char</span> buffer<span class="k2">[</span><span class="n">50</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="n">0</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 315</span>
<span class="number"> 316</span>        <span class="k1">unsigned</span> <span class="k1">char</span> red, green, blue, alpha<span class="k2">;</span>
<span class="number"> 317</span>
<span class="number"> 318</span>        <a href="http://www.allegro.cc/manual/al_unmap_rgba"><span class="a">al_unmap_rgba</span></a><span class="k2">(</span>color, <span class="k3">&amp;</span>red, <span class="k3">&amp;</span>green, <span class="k3">&amp;</span>blue, <span class="k3">&amp;</span>alpha<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 319</span>
<span class="number"> 320</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_732.html" target="_blank">snprintf</a><span class="k2">(</span>buffer, <span class="n">50</span>, <span class="s">"{\"r\": %d, \"g\": %d, \"b\": %d, \"a\": %d}"</span>,
<span class="number"> 321</span>                <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>red, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>green, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>blue, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>alpha<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 322</span>
<span class="number"> 323</span>        <span class="k1">return</span> buffer<span class="k2">;</span>
<span class="number"> 324</span>    <span class="k2">}</span>
</div></div><p>

Outputs things like this:</p><p>LIBAL5POLY DEBUG: {&quot;r&quot;: 114, &quot;g&quot;: 63, &quot;b&quot;: 32, &quot;a&quot;: 255} &lt;=&gt; {&quot;r&quot;: 0, &quot;g&quot;: 0, &quot;b&quot;: 0, &quot;a&quot;: 0}</p><p>Which makes it appear like the color object I just created is uninitialized/zeroed. And that appears to be correct too because when drawn the color is invisible regardless of background color (so the alpha=0 appears to be true at least). Any ideas what I&#39;m doing wrong or ways to figure it out? Cookies for constructive posts that lead up to a solution. <img src="http://www.allegro.cc/forums/smileys/kiss.gif" alt=":-*" /></p><p>(I&#39;m banned from the IRC channel ATM so I can&#39;t ask there... <img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" />)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 28 Dec 2020 17:03:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think you need to initialize Allegro and create a display before you call those functions, are you doing that?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Mon, 28 Dec 2020 17:11:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes I am. This is only happening after Allegro has been initialized and a display created (and all errors should be handled).</p><div class="spoiler"><p>
</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">void</span> initializeAllegro5<span class="k2">(</span>
<span class="number">  2</span>        al5poly::ALLEGRO_DISPLAY_Ptr <span class="k3">&amp;</span> display,
<span class="number">  3</span>        al5poly::ALLEGRO_TIMER_Ptr <span class="k3">&amp;</span> timer,
<span class="number">  4</span>        al5poly::ALLEGRO_EVENT_QUEUE_Ptr <span class="k3">&amp;</span> eventQueue<span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>    <span class="k1">const</span> <span class="k1">int</span> FPS <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</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">  9</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to initialize Allegro 5!"</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</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_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    al5poly::ALLEGRO_DISPLAY_Ptr d<span class="k2">(</span>
<span class="number"> 14</span>            <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span>,
<span class="number"> 15</span>            <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>d<span class="k2">)</span>
<span class="number"> 18</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to create Allegro 5 display!"</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>    display <span class="k3">=</span> d<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</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"> 23</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to install Allegro 5 keyboard!"</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</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"> 26</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to initialize image addon."</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</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"> 29</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to initialize primitives addon."</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>    al5poly::ALLEGRO_TIMER_Ptr t<span class="k2">(</span>
<span class="number"> 32</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> FPS<span class="k2">)</span>,
<span class="number"> 33</span>            <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>t<span class="k2">)</span>
<span class="number"> 36</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to create Allegro 5 timer!"</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span>    timer <span class="k3">=</span> t<span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>    al5poly::ALLEGRO_EVENT_QUEUE_Ptr eQ<span class="k2">(</span>
<span class="number"> 41</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="number"> 42</span>            <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>eQ<span class="k2">)</span>
<span class="number"> 45</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to create Allegro 5 event queue!"</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span>    eventQueue <span class="k3">=</span> eQ<span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</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>
<span class="number"> 50</span>            eventQueue.get<span class="k2">(</span><span class="k2">)</span>,
<span class="number"> 51</span>            <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.get<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>
<span class="number"> 53</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>
<span class="number"> 54</span>            eventQueue.get<span class="k2">(</span><span class="k2">)</span>,
<span class="number"> 55</span>            <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"> 56</span>
<span class="number"> 57</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>
<span class="number"> 58</span>            eventQueue.get<span class="k2">(</span><span class="k2">)</span>,
<span class="number"> 59</span>            <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.get<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span><span class="k2">}</span>
</div></div><p>
</p></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 28 Dec 2020 18:22:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you have a compileable and runnable testcase?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Mon, 28 Dec 2020 23:12:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The only way al_map_rgb* fails is if al_init hasn&#39;t been run yet. Check again. Check for globals / singletons / etc....</p><p><b>EDIT</b><br />IF I have to give you the <i>globals</i> talk, I&#39;m never gonna let you get over it.</p><p><img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /></p><p><b>EDIT2</b><br />static char buffers? Oh boy, you&#39;re gonna get it. NOT THREAD SAFE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 29 Dec 2020 00:57:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m pretty sure Edgar&#39;s got it:
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618313/1048591#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> The only way al_map_rgb* fails is if al_init hasn&#39;t been run yet. 
</p></div></div><p>This looks most likely to me; if I make a test prog with your code and run it without al_init, I get exactly the (0,0,0,0) result that you do. Try printing the result of <span class="source-code"><a href="http://www.allegro.cc/manual/al_is_system_installed"><span class="a">al_is_system_installed</span></a></span> in your LIBAL5POLY DEBUG: print-out.<br />I bet you&#39;re calling <span class="source-code">AssetManager::createColor</span> from a global or static initializer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Tue, 29 Dec 2020 14:51:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/618313/1048591#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
IF I have to give you the <i>globals</i> talk, I&#39;m never gonna let you get over it.</p><p><img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div></div><p>

State that exists globally (i.e,. throughout the lifetime of the application) is OK. State that is globally readable and writeable is not though. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> A closed static makes good sense here I think.</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/618313/1048591#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
static char buffers? Oh boy, you&#39;re gonna get it. NOT THREAD SAFE.
</p></div></div><p>

Good feedback. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> I appreciate that. What do I need to make that thread-safe? <span class="source-code"><span class="k1">static</span> thread_local <span class="k1">char</span><span class="k2">[</span><span class="n">50</span><span class="k2">]</span></span>? <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> What&#39;s the &quot;correct&quot; way? Perhaps I could try to implement a library buffer that can be used for various things.</p><p>I attempted once to implement a ring buffer<span class="ref"><sup>[<a href="#">1</a>]</sup></span> and apparently failed. I want to remedy that some day too. <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /> So I guess I&#39;d need at least two buffer implementations.</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/618313/1048590#target">Elias</a> said:</div><div class="quote"><p>
Do you have a compileable and runnable testcase?
</p></div></div><p>

<a href="https://github.com/bambams/al5poly-color-test">https://github.com/bambams/al5poly-color-test</a></p><p><tt>
git clone --recursive <a>git://github.com/bambams/al5poly-color-test.git</a> &amp;&amp; make -C al5poly-color-test run
</tt></p><p>Note: it references my library, which will contain the bulk of code, and obviously you wouldn&#39;t want to go through all of it... But I think it shouldn&#39;t be hard to track down where we call <span class="source-code"><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>, and verify that it is all setup before we call <span class="source-code"><a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="k2">)</span></span>.</p><p>It&#39;s important to note that calling al_map_rgba() works fine. It&#39;s using my library&#39;s helper method that fails. There&#39;s no bug in Allegro. I just can&#39;t figure out the bug in my own code. <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" />
</p><div class="ref-block"><h2>References</h2><ol><li><a href="https://github.com/bambams/libbam/blob/master/src/bam_circbuf.c">https://github.com/bambams/libbam/blob/master/src/bam_circbuf.c</a></li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Tue, 29 Dec 2020 15:06:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>    std::string AssetManager::printColor<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span>
    <span class="k2">{</span>
        <span class="k1">char</span> buffer<span class="k2">[</span><span class="n">50</span><span class="k2">]</span><span class="k2">;</span>

        <span class="k1">unsigned</span> <span class="k1">char</span> red, green, blue, alpha<span class="k2">;</span>

        <a href="http://www.allegro.cc/manual/al_unmap_rgba"><span class="a">al_unmap_rgba</span></a><span class="k2">(</span>color, <span class="k3">&amp;</span>red, <span class="k3">&amp;</span>green, <span class="k3">&amp;</span>blue, <span class="k3">&amp;</span>alpha<span class="k2">)</span><span class="k2">;</span>

        <a href="http://www.delorie.com/djgpp/doc/libc/libc_732.html" target="_blank">snprintf</a><span class="k2">(</span>buffer, <span class="n">50</span>, <span class="s">"{\"r\": %d, \"g\": %d, \"b\": %d, \"a\": %d}"</span>,
                <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>red, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>green, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>blue, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>alpha<span class="k2">)</span><span class="k2">;</span>

        <span class="k1">return</span> std::string<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
</pre></div></div><p>
would be thread-safe, obviously you&#39;d have to change the places where you&#39;d used it and c_str() or whatever.</p><p>BTW I tried your example code from github and everything seemed to work OK. So that is weird.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Tue, 29 Dec 2020 20:55:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/618313/1048596#target">Peter Hull</a> said:</div><div class="quote"><p>
...would be thread-safe, obviously you&#39;d have to change the places where you&#39;d used it and c_str() or whatever.
</p></div></div><p>

Yes, that&#39;s an easy way to make it thread-safe, but then it has the added cost of allocating the string and copying the buffer into it... Which I was trying to avoid just because it should be relatively simple... But I guess C++ over-complicates matters. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> E.g., <a href="https://devblogs.microsoft.com/oldnewthing/20040308-00/?p=40363">https://devblogs.microsoft.com/oldnewthing/20040308-00/?p=40363</a>.</p><p>Apparently initialization of the static local is guaranteed thread-safe since C++0x, but that&#39;s all. It still sounds like adding <span class="source-code">thread_local</span> to it will make it per-thread, which by definition should be thread safe, I guess? Which I guess is still a reasonable solution here instead of returning the copy, assuming it compiles OK.</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/618313/1048596#target">Peter Hull</a> said:</div><div class="quote"><p>
BTW I tried your example code from github and everything seemed to work OK. So that is weird.
</p></div></div><p>

Good to know. So perhaps I&#39;m using Allegro properly, and there&#39;s a bug with the binaries? Did you test on MinGW/Windows or some other platform?</p><p>Edgar, fixit fixit fixit? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> Any ideas what I can do to narrow down the cause?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Wed, 30 Dec 2020 22:27:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="">bamccaig</a> said:</div><div class="quote"><p>
Edgar, fixit fixit fixit? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> Any ideas what I can do to narrow down the cause? 
</p></div></div><p>
If your color manager is a singleton, and it&#39;s constructed outside of main, that would explain it. You may not believe it but you&#39;re calling al_map_rgb before al_init otherwise it would work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 31 Dec 2020 04:41:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, I have very minimal global state. The only reason the char buffer is global is because it&#39;s still local to that function, making its storage global, but it&#39;s access through the language is very narrow. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>And apparently the code worked fine with Peter&#39;s environment. Which suggests that maybe the bug isn&#39;t in my code after all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 31 Dec 2020 10:54:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>bambams - your example code looks fine. It doesn&#39;t work for you? Which binaries are you using (I have several versions), the ones from Bitbucket (whose upload is broken btw) or Github (Allegro 5.2.6x from GIT)?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 01 Jan 2021 04:29:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can&#39;t remember where I downloaded them from. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>6ba400e3ecbf3bc7f468a2f65ffc0f9d540233c9 *Allegro525_GCC81_MinGW_W64_i686_posix_dwarf.7z</p><p><b>Append:</b></p><p><i>Maybe</i> from BitBucket?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sat, 02 Jan 2021 12:12:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, those are the ones from bitbucket. I have a newer version on github released with eagle.</p><p>Get it here :</p><p><a href="https://github.com/EdgarReynaldo/EagleGUI/releases">https://github.com/EdgarReynaldo/EagleGUI/releases</a></p><p>0pt8pt1 is a monolith download.</p><p>0pt8pt0 has a separate download for Allegro 526x that and its deps.</p><p><b>EDIT</b><br />Try this code :</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 "allegro5/allegro.h"</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">class</span> Color <span class="k2">{</span>
<span class="number">  4</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> c<span class="k2">;</span>
<span class="number">  6</span>   Color<span class="k2">(</span><span class="k1">int</span> r , <span class="k1">int</span> g , <span class="k1">int</span> b , <span class="k1">int</span> a<span class="k2">)</span> <span class="k2">:</span> c<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span>r,g,b,a<span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>   
<span class="number">  7</span>   <span class="k1">void</span> Print<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>      <span class="k1">unsigned</span> <span class="k1">char</span> r,g,b,a<span class="k2">;</span>
<span class="number">  9</span>      <a href="http://www.allegro.cc/manual/al_unmap_rgba"><span class="a">al_unmap_rgba</span></a><span class="k2">(</span>c<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%c %c %c %c\n"</span> , r , g , b , a<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>   <span class="k2">}</span>
<span class="number"> 12</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 13</span>Color global<span class="k2">(</span><span class="n">1</span>,<span class="n">2</span>,<span class="n">3</span>,<span class="n">4</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</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="k2">{</span>
<span class="number"> 15</span>   Color toosoon<span class="k2">(</span><span class="n">5</span>,<span class="n">6</span>,<span class="n">7</span>,<span class="n">8</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><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="k2">{</span><span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 17</span>   Color okay<span class="k2">(</span><span class="n">9</span>,<span class="n">10</span>,<span class="n">11</span>,<span class="n">12</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>   global.Print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   toosoon.Print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>   okay.Print<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 02 Jan 2021 19:28:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The updated library appears to work now. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> I&#39;m getting a correct brown circle. You might want to pull those 525 binaries down since there appears to be some kind of bug in them (and leave a notice redirecting to latest or something).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 04 Jan 2021 12:12:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I tested the simple code I posted above with both 525 from bitbucket and 526x from github. Both work equally well. I don&#39;t think there is a bug in the binaries.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 04 Jan 2021 23:39:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your makefile is quite complicated, I wonder if maybe at some point it was rebuilding with a stale version of something or other? (vague, I know <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> )
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Tue, 05 Jan 2021 02:19:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, but it&#39;s pretty easy to see that I&#39;m also initializing Allegro before I&#39;m creating my color:</p><p><a href="https://github.com/bambams/al5poly-color-test/blob/main/src/main.cpp#L26">https://github.com/bambams/al5poly-color-test/blob/main/src/main.cpp#L26</a></p><div class="quote_container"><div class="title"><a href="https://github.com/bambams/al5poly-color-test/blob/main/src/main.cpp#L26">Quote</a>:</div><div class="quote"><p>
</p><div class="source-code"><div class="toolbar"><span class="name">src/main.cpp</span><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><div class="highlight"><span class="number"> 26</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="k1">try</span> </div><span class="number"> 27</span><span class="k2">{</span>
<span class="number"> 28</span>    al5poly::ALLEGRO_DISPLAY_Ptr display<span class="k2">;</span>
<span class="number"> 29</span>    al5poly::ALLEGRO_TIMER_Ptr timer<span class="k2">;</span>
<span class="number"> 30</span>    al5poly::ALLEGRO_EVENT_QUEUE_Ptr eventQueue<span class="k2">;</span>
<span class="number"> 31</span>
<div class="highlight"><span class="number"> 32</span>    initializeAllegro5<span class="k2">(</span>display, timer, eventQueue<span class="k2">)</span><span class="k2">;</span> </div></div></div><p>
</p></div></div><p>

(Note: these <span class="source-code"><span class="k3">*</span>_Ptr</span> types are just <span class="source-code">boost::shared_ptr<span class="k3">&lt;</span>T&gt;</span> <span class="source-code"><span class="k1">typedef</span></span>s)</p><div class="quote_container"><div class="title"><a href="https://github.com/bambams/al5poly-color-test/blob/main/src/main.cpp#L125">Quote</a>:</div><div class="quote"><p>
</p><div class="source-code"><div class="toolbar"><span class="name">src/main.cpp</span><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><div class="highlight"><span class="number"> 125</span><span class="k1">void</span> initializeAllegro5<span class="k2">(</span> </div><span class="number"> 126</span>        al5poly::ALLEGRO_DISPLAY_Ptr <span class="k3">&amp;</span> display,
<span class="number"> 127</span>        al5poly::ALLEGRO_TIMER_Ptr <span class="k3">&amp;</span> timer,
<span class="number"> 128</span>        al5poly::ALLEGRO_EVENT_QUEUE_Ptr <span class="k3">&amp;</span> eventQueue<span class="k2">)</span>
<span class="number"> 129</span><span class="k2">{</span>
<span class="number"> 130</span>    <span class="k1">const</span> <span class="k1">int</span> FPS <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span>
<span class="number"> 131</span>
<div class="highlight"><span class="number"> 132</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> </div><span class="number"> 133</span>        al5poly::Exception<span class="k2">(</span><span class="s">"Failed to initialize Allegro 5!"</span><span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div></div><p>

</p><div class="quote_container"><div class="title"><a href="https://github.com/bambams/al5poly-color-test/blob/main/src/main.cpp#L42">Quote</a>:</div><div class="quote"><p>
</p><div class="source-code"><div class="toolbar"><span class="name">src/main.cpp</span><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><div class="highlight"><span class="number"> 42</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> brown_level2 <span class="k3">=</span> assMan.createColor<span class="k2">(</span><span class="s">"squirrel-brown"</span>, <span class="n">114</span>, <span class="n">63</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span> </div><span class="number"> 43</span>
<span class="number"> 44</span>    <span class="k1">while</span><span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>
<span class="number"> 45</span>    <span class="k2">{</span>
<span class="number"> 46</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"> 47</span>        <span class="k1">bool</span> tick <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</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>eventQueue.get<span class="k2">(</span><span class="k2">)</span>, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>
<span class="number"> 51</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"> 52</span>        <span class="k2">{</span>
<span class="number"> 53</span>            tick <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 54</span>        <span class="k2">}</span>
<span class="number"> 55</span>        <span class="k1">else</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="k2">)</span>
<span class="number"> 56</span>        <span class="k2">{</span>
<span class="number"> 57</span>            <span class="k1">int</span> keycode <span class="k3">=</span> event.keyboard.keycode<span class="k2">;</span>
<span class="number"> 58</span>
<span class="number"> 59</span>            <span class="k1">if</span><span class="k2">(</span>keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span>
<span class="number"> 60</span>            <span class="k2">{</span>
<span class="number"> 61</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 62</span>            <span class="k2">}</span>
<span class="number"> 63</span>        <span class="k2">}</span>
<span class="number"> 64</span>        <span class="k1">else</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"> 65</span>        <span class="k2">{</span>
<span class="number"> 66</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 67</span>        <span class="k2">}</span>
<span class="number"> 68</span>
<span class="number"> 69</span>        <span class="c">// Drawing.</span>
<span class="number"> 70</span>        <span class="k1">if</span><span class="k2">(</span>tick<span class="k2">)</span>
<span class="number"> 71</span>        <span class="k2">{</span>
<span class="number"> 72</span>            <span class="k1">try</span>
<span class="number"> 73</span>            <span class="k2">{</span>
<div class="highlight"><span class="number"> 74</span>                <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> brown_level1 <span class="k3">=</span> assMan.getColor<span class="k2">(</span><span class="s">"squirrel-brown"</span><span class="k2">)</span><span class="k2">;</span> </div><div class="highlight"><span class="number"> 75</span>                <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> brown_level0 <span class="k3">=</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">114</span>, <span class="n">63</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span> </div><span class="number"> 76</span>
<span class="number"> 77</span>                <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"brown (level3): %s\n"</span>, assMan.printColor<span class="k2">(</span><span class="s">"squirrel-brown"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 78</span>                <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"brown (level2): %s\n"</span>, assMan.printColor<span class="k2">(</span>brown_level2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 79</span>                <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"brown (level1): %s\n"</span>, assMan.printColor<span class="k2">(</span>brown_level1<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 80</span>                <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"brown (level0): %s\n"</span>, assMan.printColor<span class="k2">(</span>brown_level0<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 81</span>
<span class="number"> 82</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">150</span>, <span class="n">100</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 83</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">150</span>, <span class="n">100</span>, brown_level0<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 84</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">400</span>, <span class="n">150</span>, <span class="n">100</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 85</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">400</span>, <span class="n">150</span>, <span class="n">100</span>, brown_level1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 86</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">350</span>, <span class="n">100</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 87</span>                <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">350</span>, <span class="n">100</span>, brown_level2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 88</span>
<span class="number"> 89</span>                renderer.paint<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="k2">)</span><span class="k2">;</span>
<span class="number"> 90</span>            <span class="k2">}</span>
<span class="number"> 91</span>            <span class="k1">catch</span><span class="k2">(</span>al5poly::IException <span class="k3">&amp;</span> ex<span class="k2">)</span>
<span class="number"> 92</span>            <span class="k2">{</span>
<span class="number"> 93</span>                std::cerr <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Unhandled exception in main loop drawing block: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> ex.getMessage<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 94</span>            <span class="k2">}</span>
<span class="number"> 95</span>        <span class="k2">}</span>
<span class="number"> 96</span>    <span class="k2">}</span>
</div></div><p>
</p></div></div><p>

</p><div class="quote_container"><div class="title"><a href="https://github.com/bambams/libal5poly/blob/547d32075ffe463a0151ab2c10e4047212db5a31/src/AssetManager.cpp#L244">Quote</a>:</div><div class="quote"><p>
</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"> 244</span><span class="k1">void</span> AssetManager::addColor<span class="k2">(</span>
<span class="number"> 245</span>            <span class="k1">const</span> std::string <span class="k3">&amp;</span> name,
<span class="number"> 246</span>            <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">)</span>
<span class="number"> 247</span>    <span class="k2">{</span>
<span class="number"> 248</span>        <span class="k1">auto</span> insertion <span class="k3">=</span> this-&gt;colors_.insert<span class="k2">(</span>std::make_pair<span class="k2">(</span>name, color<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</span>
<span class="number"> 250</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>insertion.second<span class="k2">)</span>
<span class="number"> 251</span>        <span class="k2">{</span>
<span class="number"> 252</span>            al5poly::AssetManagerException<span class="k2">(</span>
<span class="number"> 253</span>                    std::string<span class="k2">(</span><span class="s">"Failed to add color by key "</span><span class="k2">)</span> <span class="k3">+</span>
<span class="number"> 254</span>                            name <span class="k3">+</span>
<span class="number"> 255</span>                            <span class="s">". Duplicate exists?"</span><span class="k2">)</span>
<span class="number"> 256</span>                .<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 257</span>        <span class="k2">}</span>
<span class="number"> 258</span>    <span class="k2">}</span>
<span class="number"> 259</span>
<span class="number"> 260</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> AssetManager::createColor<span class="k2">(</span>
<span class="number"> 261</span>            <span class="k1">const</span> std::string <span class="k3">&amp;</span> name,
<span class="number"> 262</span>            <span class="k1">unsigned</span> <span class="k1">char</span> red,
<span class="number"> 263</span>            <span class="k1">unsigned</span> <span class="k1">char</span> green,
<span class="number"> 264</span>            <span class="k1">unsigned</span> <span class="k1">char</span> blue,
<span class="number"> 265</span>            <span class="k1">unsigned</span> <span class="k1">char</span> alpha<span class="k2">)</span>
<span class="number"> 266</span>    <span class="k2">{</span>
<span class="number"> 267</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> value <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span>red, green, blue, alpha<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 268</span>
<span class="number"> 269</span>        <span class="c">//fprintf(stderr, "LIBAL5POLY DEBUG: {\"r\": %d, \"g\": %d, \"b\": %d, \"a\": %d} &lt;=&gt; %s\n",</span>
<span class="number"> 270</span>        <span class="c">//        (int)red, (int)green, (int)blue, (int)alpha, AssetManager::printColor(value));</span>
<span class="number"> 271</span>
<span class="number"> 272</span>        this-&gt;addColor<span class="k2">(</span>name, value<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 273</span>
<span class="number"> 274</span>        <span class="k1">return</span> value<span class="k2">;</span>
<span class="number"> 275</span>    <span class="k2">}</span>
<span class="number"> 276</span>
<span class="number"> 277</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> AssetManager::createColor<span class="k2">(</span>
<span class="number"> 278</span>            <span class="k1">const</span> std::string <span class="k3">&amp;</span> name,
<span class="number"> 279</span>            <span class="k1">int</span> red,
<span class="number"> 280</span>            <span class="k1">int</span> green,
<span class="number"> 281</span>            <span class="k1">int</span> blue,
<span class="number"> 282</span>            <span class="k1">int</span> alpha<span class="k2">)</span>
<span class="number"> 283</span>    <span class="k2">{</span>
<span class="number"> 284</span>        <span class="k1">return</span> this-&gt;createColor<span class="k2">(</span>
<span class="number"> 285</span>                name,
<span class="number"> 286</span>                <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span>red,
<span class="number"> 287</span>                <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span>green,
<span class="number"> 288</span>                <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span>blue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 289</span>    <span class="k2">}</span>
<span class="number"> 290</span>
<span class="number"> 291</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> AssetManager::createColor<span class="k2">(</span>
<span class="number"> 292</span>            <span class="k1">const</span> std::string <span class="k3">&amp;</span> name,
<span class="number"> 293</span>            <span class="k1">float</span> red,
<span class="number"> 294</span>            <span class="k1">float</span> green,
<span class="number"> 295</span>            <span class="k1">float</span> blue,
<span class="number"> 296</span>            <span class="k1">float</span> alpha<span class="k2">)</span>
<span class="number"> 297</span>    <span class="k2">{</span>
<span class="number"> 298</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> value <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span>red, green, blue, alpha<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 299</span>
<span class="number"> 300</span>        this-&gt;colors_.insert<span class="k2">(</span>std::make_pair<span class="k2">(</span>name, value<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 301</span>
<span class="number"> 302</span>        <span class="k1">return</span> value<span class="k2">;</span>
<span class="number"> 303</span>    <span class="k2">}</span>
<span class="number"> 304</span>
<span class="number"> 305</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> AssetManager::getColor<span class="k2">(</span>
<span class="number"> 306</span>            <span class="k1">const</span> std::string <span class="k3">&amp;</span> name,
<span class="number"> 307</span>            <span class="k1">bool</span> throwOnMismatch<span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 308</span>    <span class="k2">{</span>
<span class="number"> 309</span>        ColorMap::const_iterator it <span class="k3">=</span> this-&gt;colors_.find<span class="k2">(</span>name<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 310</span>
<span class="number"> 311</span>        <span class="k1">if</span><span class="k2">(</span>it <span class="k3">=</span><span class="k3">=</span> this-&gt;colors_.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 312</span>        <span class="k2">{</span>
<span class="number"> 313</span>            std::string msg <span class="k3">=</span> <span class="s">"Color asset not found: "</span> <span class="k3">+</span> name<span class="k2">;</span>
<span class="number"> 314</span>
<span class="number"> 315</span>            <span class="k1">if</span> <span class="k2">(</span>throwOnMismatch<span class="k2">)</span>
<span class="number"> 316</span>            <span class="k2">{</span>
<span class="number"> 317</span>                AssetManagerException<span class="k2">(</span>msg<span class="k2">)</span>.<a href="http://www.delorie.com/djgpp/doc/libc/libc_636.html" target="_blank">raise</a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 318</span>            <span class="k2">}</span>
<span class="number"> 319</span>            <span class="k1">else</span>
<span class="number"> 320</span>            <span class="k2">{</span>
<span class="number"> 321</span>                <span class="c">//fprintf(stderr, "%s. Falling back on AL5POLY_ERROR_COLOR. ;)\n", msg.c_str());</span>
<span class="number"> 322</span>                <span class="k1">return</span> AL5POLY_ERROR_COLOR<span class="k2">;</span>
<span class="number"> 323</span>            <span class="k2">}</span>
<span class="number"> 324</span>        <span class="k2">}</span>
<span class="number"> 325</span>
<span class="number"> 326</span>        <span class="k1">return</span> <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span>.second<span class="k2">;</span>
<span class="number"> 327</span>    <span class="k2">}</span>
</div></div><p>
</p></div></div><p>

I need to look more into this. It may well be that the build is fine, but I cannot yet see the bug in my code. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> The color test program appears to still be failing with the 526 binaries though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Tue, 05 Jan 2021 03:33:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Bambams it could be ABI related if you have old 5.2 dlls laying around on the path somewhere. Did you compile statically or dynamically?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 05 Jan 2021 07:55:41 +0000</pubDate>
	</item>
</rss>
