<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Video Bitmap Issue</title>
		<link>http://www.allegro.cc/forums/view/609640</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 29 Feb 2012 00:14:59 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve only been working with Allegro 5.0.5 for a few weeks now. I a problem that I shouldn&#39;t be having. I have an ATI Raedon with 256MB RAM. I&#39;m loading less than 5 MBs of bitmaps. No matter how I set al_set_bitmapflags(flags|ALLEGRO_VIDEO_BITMAP), I can get no more than a handful of MBs loaded into video memory(I assume I don&#39;t even need to change the bitmap flags as the default setting are what I need). I&#39;ve read at least half of the posts that discuss this issue, with no information being present that leads me in a direction to resolve this issue.</p><p>I&#39;m loading a modular game suite as a control frame with under 1MB of bitmaps and that works well with abundant FPS. However, when I load a game selected from a list, not one of those bitmaps load into video memory. With 256MB available, I don&#39;t understand the problem. I have multiple times verified that all needed addons are loaded successfully and in the correct order. 5 FPS is completely unacceptable. What could be preventing such a small number of bitmaps from loading into video RAM?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Acturo)</author>
		<pubDate>Sun, 26 Feb 2012 23:03:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could we see some of the code that might be causing the problem?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sun, 26 Feb 2012 23:21:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><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">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">   2</span><span class="k2">{</span>
<span class="number">   3</span>  <span class="k1">int</span> ret <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   4</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> NULL<span class="k2">;</span>
<span class="number">   5</span>
<span class="number">   6</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">   7</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</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">  10</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">2</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span>  PHYSFS_init<span class="k2">(</span>argv<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  13</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>PHYSFS_addToSearchPath<span class="k2">(</span><span class="s">"h:\\CodeBlocks Projects\\Ruth's Solitaire\\Cards.zip"</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  14</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">3</span><span class="k2">;</span>
<span class="number">  15</span>  <a href="http://www.allegro.cc/manual/al_set_physfs_file_interface"><span class="a">al_set_physfs_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  16</span>
<span class="number">  17</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_NOFRAME <span class="k3">|</span> ALLEGRO_OPENGL_3_0<span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</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">800</span>, <span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>
<span class="number">  20</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">4</span><span class="k2">;</span>
<span class="number">  21</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">  22</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">  23</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">  24</span>  <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>
<span class="number">  26</span>  CSolitaire sol<span class="k2">;</span>
<span class="number">  27</span>  ret <span class="k3">=</span> sol.Init<span class="k2">(</span>display, argv<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>ret<span class="k2">)</span>
<span class="number">  29</span>  <span class="k2">{</span>
<span class="number">  30</span>    sol.Play<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>    <span class="k1">if</span><span class="k2">(</span>sol.IsLoaded<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  32</span>      sol.Abort<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>  <span class="k2">}</span>
<span class="number">  34</span>  <span class="k1">if</span><span class="k2">(</span>sol.IsLoaded<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  35</span>    sol.Abort<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>  <span class="k1">return</span> ret<span class="k2">;</span>
<span class="number">  38</span><span class="k2">}</span>
<span class="number">  39</span>
<span class="number">  40</span>CSolitaire::CSolitaire<span class="k2">(</span><span class="k2">)</span>
<span class="number">  41</span><span class="k2">{</span>
<span class="number">  42</span>  m_x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  43</span>  m_y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  44</span>  m_w <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  45</span>  m_h <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  46</span>  m_bInitialized <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  47</span>  m_bmBackground <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  48</span>  m_bmInterface <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  49</span>  m_Display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  50</span>  m_eq <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  51</span>  m_bnPlay <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  52</span>  m_bnOptions <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  53</span>  m_bnHelp <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  54</span>  m_bnDeal <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  55</span>  m_bnUndo <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  56</span>  m_bnQuit <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  57</span>  m_bnX <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  58</span>  m_txtTitle <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  59</span>  m_txtScoreLabel <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  60</span>  m_txtScore <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  61</span>  m_txtHighScoreLabel <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  62</span>  m_txtHighScore <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  63</span>  m_pGame <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  64</span>  m_pPlayPopup <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  65</span><span class="k2">}</span>
<span class="number">  66</span>
<span class="number">  67</span><span class="k1">int</span> CSolitaire::Init<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display, <span class="k1">char</span><span class="k3">*</span> path<span class="k2">)</span>
<span class="number">  68</span><span class="k2">{</span>
<span class="number">  69</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmFrame <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  70</span>  m_Display <span class="k3">=</span> display<span class="k2">;</span>
<span class="number">  71</span>  m_eq <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  72</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_eq<span class="k2">)</span>
<span class="number">  73</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  74</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>m_eq, <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">  75</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>m_eq, <a href="http://www.allegro.cc/manual/al_get_mouse_event_source"><span class="a">al_get_mouse_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>  m_bmBackground <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Cards/Main_bkgnd.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_bmBackground<span class="k2">)</span>
<span class="number">  78</span>  <span class="k2">{</span>
<span class="number">  79</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>m_eq<span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>    <span class="k1">return</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  81</span>  <span class="k2">}</span>
<span class="number">  82</span>  <span class="k1">int</span> flags <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_flags"><span class="a">al_get_bitmap_flags</span></a><span class="k2">(</span>m_bmBackground<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>  <a href="http://www.allegro.cc/manual/al_set_new_bitmap_flags"><span class="a">al_set_new_bitmap_flags</span></a><span class="k2">(</span>flags <span class="k3">|</span> ALLEGRO_VIDEO_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span><span class="c">//  if((flags &amp; ALLEGRO_VIDEO_BITMAP) == ALLEGRO_VIDEO_BITMAP)</span>
<span class="number">  85</span><span class="c">//    fprintf(stderr, "PlaceHolder is a video bitmap\n");</span>
<span class="number">  86</span><span class="c">//  else</span>
<span class="number">  87</span><span class="c">//    fprintf(stderr, "PlaceHolder is NOT a video bitmap\n");</span>
<span class="number">  88</span>
<span class="number">  89</span>  m_bmInterface <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><span class="n">800</span>, <span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  90</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_bmInterface<span class="k2">)</span>
<span class="number">  91</span>    <span class="k1">return</span> <span class="n">3</span><span class="k2">;</span>
<span class="number">  92</span>
<span class="number">  93</span>  bmFrame <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Cards/Frame.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bmFrame<span class="k2">)</span>
<span class="number">  95</span>    <span class="k1">return</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  96</span>
<span class="number">  97</span>  <span class="c">// set drawing target to interface bitmap</span>
<span class="number">  98</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>m_bmInterface<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmFrame, <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"> 100</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>m_bmBackground, <span class="n">10</span>, <span class="n">50</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>bmFrame<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>
<span class="number"> 103</span>  <span class="c">// return drawing target to display</span>
<span class="number"> 104</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><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>  <span class="c">// Create timers</span>
<span class="number"> 107</span><span class="c">//  m_Logic = al_create_timer(1000/30);</span>
<span class="number"> 108</span><span class="c">//  if(!m_Logic)</span>
<span class="number"> 109</span><span class="c">//    return 5;</span>
<span class="number"> 110</span>  m_Draw <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">1000</span><span class="k3">/</span><span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_Draw<span class="k2">)</span>
<span class="number"> 112</span>    <span class="k1">return</span> <span class="n">6</span><span class="k2">;</span>
<span class="number"> 113</span><span class="c">//  al_register_event_source(m_eq, al_get_timer_event_source(m_Logic));</span>
<span class="number"> 114</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>m_eq, <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>m_Draw<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>
<span class="number"> 116</span>  <span class="c">// Seed the random number generator</span>
<span class="number"> 117</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><span class="k2">(</span>UINT<span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>
<span class="number"> 119</span>  <span class="c">// Load buttons &amp;settings</span>
<span class="number"> 120</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>LoadButtons<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 121</span>    <span class="k1">return</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 122</span>  LoadSettings<span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>  m_bInitialized <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 124</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>m_Draw<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span><span class="c">//  al_start_timer(m_Logic);</span>
<span class="number"> 126</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 127</span><span class="k2">}</span>
</div></div><p>
there are 6 buttons loaded with 3 80x20 bitmaps loaded into them. A handful of text based labelbs and outputs, none with the font loaded larger than 20.<br />This much of my code runs very smoothly.</p><p>Loading the next stage is where the problems begin.
</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">bool</span> CGameBase::Init<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="c">// Load images</span>
<span class="number">  4</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>m_bmCardBack <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Cards/Back.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  5</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>m_bmBuf <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><span class="n">780</span>, <span class="n">540</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  7</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  8</span><span class="c">//  if(!(m_bmBoard = al_create_bitmap(780, 1024)))</span>
<span class="number">  9</span><span class="c">//    return false;</span>
<span class="number"> 10</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>m_bmFocus <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Cards/Focus.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 11</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 12</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>m_bmPlaceHolder <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Cards/PlaceHolder.png"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 13</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>m_bmLock <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><span class="n">71</span>, <span class="n">96</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 15</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="c">//  al_set_target_bitmap(m_bmBoard);</span>
<span class="number"> 18</span><span class="c">//  al_clear_to_color(al_map_rgb(25, 100, 25));</span>
<span class="number"> 19</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>m_bmLock<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</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"> 21</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><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>m_Display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    <span class="c">// Enable Buttons</span>
<span class="number"> 24</span>  m_pSol-&gt;EnableDealButton<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>  m_pSol-&gt;EnableUndoButton<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>  m_pSol-&gt;EnableQuitButton<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  m_pTitle <span class="k3">=</span> m_pSol-&gt;GetTitle<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>  <span class="c">// Load High Score</span>
<span class="number"> 30</span>  <span class="k1">char</span> buf<span class="k2">[</span>MAX_PATH<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 31</span>  GetPrivateProfileString<span class="k2">(</span>m_szHelpName, <span class="s">"High Score"</span>, <span class="s">"0"</span>, buf, MAX_PATH, m_szOptFile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  m_HighScore <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_55.html" target="_blank">atol</a><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>  m_bInitialized <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 34</span>  <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 35</span><span class="k2">}</span>
<span class="number"> 36</span>
<span class="number"> 37</span><span class="k1">bool</span> CAcesUp::Init<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 38</span><span class="k2">{</span>
<span class="number"> 39</span>  <span class="k1">int</span> i, x, y<span class="k2">;</span>
<span class="number"> 40</span>
<span class="number"> 41</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>CGameBase::Init<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 42</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span>  <span class="c">// Set Talon</span>
<span class="number"> 45</span>  x <span class="k3">=</span> <span class="n">143</span><span class="k2">;</span>
<span class="number"> 46</span>  y <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 47</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>m_Talon <span class="k3">=</span> <span class="k1">new</span> CTalon<span class="k2">(</span>x, y, <span class="n">71</span>, <span class="n">96</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 48</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 49</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_Talon-&gt;Init<span class="k2">(</span>m_eq, ID_TALON<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 50</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span>  <span class="c">// Set Tableau points</span>
<span class="number"> 53</span>  x <span class="k3">=</span> <span class="n">239</span><span class="k2">;</span>
<span class="number"> 54</span>  <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>i<span class="k3">&lt;</span><span class="n">4</span><span class="k2">;</span>i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 55</span>  <span class="k2">{</span>
<span class="number"> 56</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>m_Tab<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">=</span> <span class="k1">new</span> CTableau<span class="k2">(</span>x, y, <span class="n">71</span>, <span class="n">96</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 57</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 58</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_Tab<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Init<span class="k2">(</span>m_eq, ID_TABLEAU, i<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 59</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 60</span>    x <span class="k3">+</span><span class="k3">=</span> <span class="n">81</span><span class="k2">;</span>
<span class="number"> 61</span>  <span class="k2">}</span>
<span class="number"> 62</span>
<span class="number"> 63</span>  <span class="c">// Draw Placeholders on Board buffer</span>
<span class="number"> 64</span><span class="c">//  al_set_target_bitmap(m_bmBoard);</span>
<span class="number"> 65</span><span class="c">//  DrawPlaceHolders();</span>
<span class="number"> 66</span><span class="c">//  al_set_target_bitmap(al_get_backbuffer(m_Display));</span>
<span class="number"> 67</span>
<span class="number"> 68</span>  <span class="c">// Load Deck</span>
<span class="number"> 69</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>LoadDeck<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 70</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 71</span>
<span class="number"> 72</span>  <span class="c">// Set Ace Value to 14</span>
<span class="number"> 73</span>  m_Cards<span class="k2">[</span><span class="n">12</span><span class="k2">]</span>.SetVal<span class="k2">(</span><span class="n">14</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 74</span>  m_Cards<span class="k2">[</span><span class="n">25</span><span class="k2">]</span>.SetVal<span class="k2">(</span><span class="n">14</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 75</span>  m_Cards<span class="k2">[</span><span class="n">38</span><span class="k2">]</span>.SetVal<span class="k2">(</span><span class="n">14</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 76</span>  m_Cards<span class="k2">[</span><span class="n">51</span><span class="k2">]</span>.SetVal<span class="k2">(</span><span class="n">14</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 77</span>
<span class="number"> 78</span>  <span class="c">// Init Scores</span>
<span class="number"> 79</span>  m_Score.Reset<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 80</span>  m_Score.Update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 81</span>  <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 82</span><span class="k2">}</span>
</div></div><p>
Is this enough to see what I&#39;m doing?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Acturo)</author>
		<pubDate>Sun, 26 Feb 2012 23:33:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A few things I noticed:</p><p>Any reason why you need an opengl 3.0 context explicitly? Usually just ALLEGRO_OPENGL is fine. Try that.</p><p>Usually you should init your addons before creating the display. That might be causing a problem.</p><p>You use 1000/60 to create your timer, you might want to double check that it is indeed 16.666 because neither your numerator or denominator are floats so C++ might do integer division which would give you a weird framerate maybe.</p><p>I would also highly recommend that you throw exceptions instead of returning numbers like that. I would much rather see &quot;Allegro Display Failed To Create&quot; in my console than 2 or something.</p><p>Also, there&#39;s no sense in checking for NULL every time you call new. The only way that will return NULL is if you run out of memory and if that happens the runtime will throw an out of memory exception or something.</p><p>You are often changing targets which requires render to texture support. Maybe you do not have that?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Mon, 27 Feb 2012 00:16:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Also note that ALLEGRO_OPENGL_3_0 is only a modifier for ALLEGRO_OPENGL, if you don&#39;t specify ALLEGRO_OPENGL, Allegro will fall back to its default on a given platform. For windows the default is ALLEGRO_DIRECT3D.</p><p>Also ALLEGRO_VIDEO_BITMAP is the default.</p><p>Would you be able to post the entire code? Or even better, make a small, simple example that displays the same problems? (I would prefer that over your original code, that way if it is an allegro bug, it would be extremely obvious that it is an allegro bug, and be easier to debug).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 27 Feb 2012 00:31:51 +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/609640/948400#target">jmasterx</a> said:</div><div class="quote"><p>
A few things I noticed:Any reason why you need an opengl 3.0 context explicitly? usually just ALLEGRO_OPENGL is fine. Try that.
</p></div></div><p>
I&#39;ve been trying various unnecessary changes to my code attempting to track down the bottle neck. No other reason for for setting the display atm.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Usually you should init your addons before creating the display. That might be causing a problem.You use 1000/60 to create your timer, you might want to double check that it is indeed 16.666 because neither your numerator or denominator are floats so C++ might do integer division which would give you a weird framerate maybe.I would also highly recommend that you throw exceptions instead of returning numbers like that. I would must rather see &quot;Allegro Display Failed To Create&quot; in my console than 2 or something.
</p></div></div><p>

Ok, I can try changing the order of init&#39;ing the addons, again. I can typecast the timer rate, np. I&#39;m working on a overloaded new operator to use as a mixin class(once I verify Allegro can meet my needs), so had planned to deal with that later.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Also, there&#39;s no sense in checking for NULL every time you call new. The only way that will return NULL is if you run out of memory and if that happens the runtime will throw an out of memory exception or something.You are often changing targets which requires render to texture support. Maybe you do not have that?
</p></div></div><p>
Checking for NULL is good practice no matter how long you&#39;ve been coding.???<br />Just how many cycles will it save to not do it?</p><p>The target bitmap is changed once per loop, no more than that other than in Init().</p><p>Loading and running the first stage(host frame with controls) runs like a charm. I haven&#39;t measured FPS, I&#39;ve merely used fprintf every 100 frames. I see it printed more than twice a second.</p><p>Once I&#39;ve loaded and closed the playlist popup and started the game, every single bitmap is a memeory bitmap, not a video bitmap and everything becomes moot with 5 FPS. If I want a card game where the cards don&#39;t move, I could use windoze and be done in a week or probably less.</p><p>When I close the game and only the frame is running again, the frame rate returns(all of the first stage of bitmap loading are video bitmaps and accelerated).</p><p>-------------------------------------------------------------------------------</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609640/948401#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>
Also note that ALLEGRO_OPENGL_3_0 is only a modifier for ALLEGRO_OPENGL, if you don&#39;t specify ALLEGRO_OPENGL, Allegro will fall back to its default on a given platform. For windows the default is ALLEGRO_DIRECT3D.Also ALLEGRO_VIDEO_BITMAP is the default.Would you be able to post the entire code? Or even better, make a small, simple example that displays the same problems? (I would prefer that over your original code, that way if it is an allegro bug, it would be extremely obvious that it is an allegro bug, and be easier to debug).
</p></div></div><p>

Changing ALLEGRRO_OPENGL_3_0 TO ALLGRO_OPENGL solved the issue.</p><p>Thanks all for your input.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Acturo)</author>
		<pubDate>Mon, 27 Feb 2012 00:46:04 +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/609640/948403#target">Acturo</a> said:</div><div class="quote"><p>
Checking for NULL is good practice no matter how long you&#39;ve been coding.???<br />Just how many cycles will it save to not do it?
</p></div></div><p>

When it comes to Operator new, I feel it is better that the operator checks for failure and throw an exception. That way you can catch it somewhere else, and keep your code clean and modular. I always check for NULL when using C functions that could fail, but in C++ there are exceptions which IMO result in cleaner modular code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Mon, 27 Feb 2012 01:27:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I find exceptions clutter code more than explicit error checking does. Especially when you have to start creating a boat load of custom exception classes. It gets to be a mess very quickly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 27 Feb 2012 01:47:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Unrelated, but exceptions are also <i>very</i> expensive on some embedded hardware, especially game consoles. In some cases, they are unsupported on these systems. So if you develop a very budget game and happen to have a console development kit, keep this in mind...</p><p>(Alternatively, you can use homebrew compilers for current consoles and come to the same conclusion, such as on the Wii.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Mon, 27 Feb 2012 09:52:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I only use them for exceptional circumstances that would otherwise result in a crash or a state where the application can no longer continue. This way I can quickly see why it crashed. I agree that if you used them for anything that could return NULL it would get messy. As for expensiveness, since after my exceptions are thrown the application closes, I don&#39;t care if it takes a second or two.</p><p>In theory, I do not expect my games to throw any exceptions for the end user. If it does, there is a bug.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Mon, 27 Feb 2012 19:40:15 +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/609640/948473#target">jmasterx</a> said:</div><div class="quote"><p>I only use them for exceptional circumstances that would otherwise result in a crash or a state where the application can no longer continue. </p></div></div><p>I like to use assert/ASSERT for that. Just make it puke and throw a backtrace to the debugger.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 27 Feb 2012 23:11:13 +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/609640/948403#target">Acturo</a> said:</div><div class="quote"><p>
Checking for NULL is good practice no matter how long you&#39;ve been coding.???<br />Just how many cycles will it save to not do it?
</p></div></div><p>
His point is that new will throw an exception if there&#39;s any error, so the check for NULL is useless (the code inside the if is just unreachable).</p><p>You can use <span class="source-code"><span class="k1">new</span> <span class="k2">(</span>nothrow<span class="k2">)</span></span> if you don&#39;t want new to throw an exception on failure, and make it return NULL instead.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Oscar Giner)</author>
		<pubDate>Mon, 27 Feb 2012 23:48:57 +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/609640/948506#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>I like to use assert/ASSERT for that. Just make it puke and throw a backtrace to the debugger.
</p></div></div><p>

I thought assertions were skipped in release builds? That is why I use exceptions.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Tue, 28 Feb 2012 00:50:33 +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/609640/948520#target">jmasterx</a> said:</div><div class="quote"><p>I thought assertions were skipped in release builds? That is why I use exceptions.</p></div></div><p>Yup. I want the app to crash hard if theres a <i>fatal</i> error. Maybe my idea of a fatal error is different from yours. I tend to split errors into &quot;unimportant&quot;, &quot;recoverable&quot;, &quot;fatal, but needs graceful handling&quot; and &quot;fatal&quot;. That last one usually means things are so far beyond anything I can check for that things crash regardless. second last one is where I&#39;d check return values, and bail out of a function, which would bubble back up and somewhere the app would puke. recoverable is stuff like not being able to fetch a file off the internet, the app shouldn&#39;t crash, but it might not be as useful, and unimportant is... well I&#39;m not sure, doesn&#39;t often come up, more like an error I turn into a warning and paper over completely.</p><p>But yes, ASSERT is compiled out in release mode. So the overhead isn&#39;t there. And you <i>should</i> have done a bunch of testing in debug mode, so you have a chance to hit those ASSERTs, meaning you get a nice backtrace rather than some nasty chain of exceptions.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 28 Feb 2012 02:34:03 +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/609640/948400#target">jmasterx</a> said:</div><div class="quote"><p> Usually you should init your addons before creating the display. That might be causing a problem.
</p></div></div><p>Is this true?
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609640/948395#target">Acturo</a> said:</div><div class="quote"><p> However, when I load a game selected from a list, not one of those bitmaps load into video memory.
</p></div></div><p>What does that mean? What does the code that <i>does</i> work look like? You know your mainline (probably) always calls sol.Abort ? Lines 27 to 35 make no sense to me.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Tue, 28 Feb 2012 13:52:10 +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/609640/948561#target">weapon_S</a> said:</div><div class="quote"><p>
What does that mean? What does the code that does work look like? You know your mainline (probably) always calls sol.Abort ? Lines 27 to 35 make no sense to me.
</p></div></div><p>

Yes, my c++ is weak. I&#39;m aware of this.</p><p>The lines you question are there to test for Initialization failure and returns what stage of initialization failed. If 0 is returned, the code enters the play loop of the host frame, load graphics for the Play Popup dialog, then waits for the user. Yes, I know I could have just used the constructor for initialization, but I wanted a return value. So, I chain up to the base class with the calls to Init(), and chain up with the Abort() functions as well. Maybe Abort() was a bad choice for the function name? Regardless, it gives me the opportunity to sort the errors rather than just going straight to crash mode.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Acturo)</author>
		<pubDate>Tue, 28 Feb 2012 21:23:29 +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/609640/948588#target">Acturo</a> said:</div><div class="quote"><p>the lines you question are there for Initialization</p></div></div><p>
I think what he means is you&#39;ve got
</p><div class="source-code snippet"><div class="inner"><pre>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>ret<span class="k2">)</span>
  <span class="k2">{</span>
    sol.Play<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k1">if</span><span class="k2">(</span>sol.IsLoaded<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
      sol.Abort<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
  <span class="k1">if</span><span class="k2">(</span>sol.IsLoaded<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
    sol.Abort<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

so you are calling if(sol.IsLoaded()) and sol.Abort() whether you enter the condition or not, so you only need have it once after the condition.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Tue, 28 Feb 2012 23:21:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>TBH my internal parser crashes when encountering redundant conditionals. (I really didn&#39;t get it <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> ) Also it is confusing that CGamebase returns 0 on failure <b>and</b> you said CGamebase was where the trouble begins. Is CSolitaire derived from CGamebase? If so, I&#39;d exepct a call to CGamebase::init() somewhere.<br />Is &quot;Abort&quot; the opposite of &quot;init&quot;? (I also struggle to define the opposite of &quot;init&quot; <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> ) Using an init method which returns false on error is ok, if done consistently.<br />Perhaps you should more clearly define the problem (What class is not functioning. Which bitmap fails to load. Does it fail to load if you don&#39;t load others.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Tue, 28 Feb 2012 23:50:29 +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/609640/948596#target">Neil Walker</a> said:</div><div class="quote"><p>
I think what he means is you&#39;ve got<br />  if(!ret)<br />  {<br />    sol.Play();<br />    if(sol.IsLoaded())<br />      sol.Abort();<br />  }<br />  if(sol.IsLoaded())<br />    sol.Abort();
</p></div></div><p>

I saw that not long after I posted it and corrected the redundant call.</p><p>if(!ret)<br />  sol.Play();<br />if(sol.IsLoaded())<br />  sol.Abort();</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609640/948599#target">weapon_S</a> said:</div><div class="quote"><p>
TBH my internal parser crashes when encountering redundant conditionals. (I really didn&#39;t get it <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> ) Also it is confusing that CGamebase returns 0 on failure and you said CGamebase was where the trouble begins.
</p></div></div><p>
CSolitaire::Init() returns int, CGameBase::Init() returns bool so it can be the first check during game instance loading.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Is CSolitaire derived from CGamebase? If so, I&#39;d exepct a call to CGamebase::init() somewhere.
</p></div></div><p>
CSolitaire serves as little more than a host frame, event router, and play loop. CGameBase won&#39;t be initialized until a game is selected from the resulting popup from clicking the &quot;Play&quot; button CSolitaire displays and manages.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Is &quot;Abort&quot; the opposite of &quot;init&quot;? (I also struggle to define the opposite of &quot;init&quot; <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> ) Using an init method which returns false on error is ok, if done consistently.
</p></div></div><p>
Yes.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Perhaps you should more clearly define the problem (What class is not functioning. Which bitmap fails to load. Does it fail to load if you don&#39;t load others.)
</p></div></div><p>

All classes are functioning. The problem was that I wasn&#39;t happy with the default DirectX window and needed to specify OpenGL; which I did incorrectly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Acturo)</author>
		<pubDate>Wed, 29 Feb 2012 00:14:59 +0000</pubDate>
	</item>
</rss>
