<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>I did it! ex_ogre3d is now working on Windows!!</title>
		<link>http://www.allegro.cc/forums/view/609044</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 15 Dec 2011 18:18:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><h1>I did it!!!</h1><p>

I thought I was not going to be able to do it... Today is the day! AMCerasoli is not a noob anymore!.</p><p>Yes I know they&#39;re are just a couple of lines, but I know what it&#39;s happening, that&#39;s what it matters!.</p><p><a href="http://www.youtube.com/watch?v=a63hqn-LP5w&amp;feature=youtu.be">Video or didn&#39;t happen</a>!</p><p>Another thing is that I could swear that I saw that ninja with some shadows but now he doesn&#39;t have it...</p><p>The code example
</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="c">/*</span>
<span class="number">   2</span><span class="c"> *    Example program for the Allegro library, by Peter Wang.</span>
<span class="number">   3</span><span class="c"> *    Now working on Windows too.</span>
<span class="number">   4</span><span class="c"> *</span>
<span class="number">   5</span><span class="c"> *    This is a test program to see if Allegro can be used alongside the OGRE</span>
<span class="number">   6</span><span class="c"> *    graphics library.  It currently only works on Linux/GLX.  To run, you</span>
<span class="number">   7</span><span class="c"> *    will need to have OGRE plugins.cfg and resources.cfg files in the</span>
<span class="number">   8</span><span class="c"> *    current directory.</span>
<span class="number">   9</span><span class="c"> *</span>
<span class="number">  10</span><span class="c"> *    Inputs: W A S D, mouse</span>
<span class="number">  11</span><span class="c"> *</span>
<span class="number">  12</span><span class="c"> *    This code is based on the samples in the OGRE distribution.</span>
<span class="number">  13</span><span class="c"> */</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="p">#include &lt;Ogre.h&gt;</span>
<span class="number">  16</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  17</span><span class="p">#include &lt;allegro5/allegro_windows.h&gt;</span>
<span class="number">  18</span><span class="p">#include &lt;allegro5/allegro_opengl.h&gt;</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="c">/*</span>
<span class="number">  21</span><span class="c"> * Ogre 1.7 (and, optionally, earlier versions) uses the FreeImage library to</span>
<span class="number">  22</span><span class="c"> * handle image loading.  FreeImage bundles its own copies of common libraries</span>
<span class="number">  23</span><span class="c"> * like libjpeg and libpng, which can conflict with the system copies of those</span>
<span class="number">  24</span><span class="c"> * libraries that allegro_image uses.  That means we can't use allegro_image</span>
<span class="number">  25</span><span class="c"> * safely, nor any of the addons which depend on it.</span>
<span class="number">  26</span><span class="c"> *</span>
<span class="number">  27</span><span class="c"> * One solution would be to write a codec for Ogre that avoids FreeImage, or</span>
<span class="number">  28</span><span class="c"> * write allegro_image handlers using FreeImage.  The latter would probably be</span>
<span class="number">  29</span><span class="c"> * easier and useful for other reasons.</span>
<span class="number">  30</span><span class="c"> */</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="k1">using</span> <span class="k1">namespace</span> Ogre<span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span><span class="k1">const</span> <span class="k1">int</span> WIDTH <span class="k3">=</span> <span class="n">640</span><span class="k2">;</span>
<span class="number">  35</span><span class="k1">const</span> <span class="k1">int</span> HEIGHT <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>
<span class="number">  36</span><span class="k1">const</span> <span class="k1">float</span> MOVE_SPEED <span class="k3">=</span> <span class="n">1500</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span><span class="k1">class</span> Application
<span class="number">  39</span><span class="k2">{</span>
<span class="number">  40</span>protected:
<span class="number">  41</span>   Root <span class="k3">*</span>mRoot<span class="k2">;</span>
<span class="number">  42</span>   RenderWindow <span class="k3">*</span>mWindow<span class="k2">;</span>
<span class="number">  43</span>   SceneManager <span class="k3">*</span>mSceneMgr<span class="k2">;</span>
<span class="number">  44</span>   Camera <span class="k3">*</span>mCamera<span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>public:
<span class="number">  47</span>   <span class="k1">void</span> setup<span class="k2">(</span><span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span>
<span class="number">  48</span>   <span class="k2">{</span>
<span class="number">  49</span>      createRoot<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>      defineResources<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>      setupRenderSystem<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>      createRenderWindow<span class="k2">(</span>w, h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>      initializeResourceGroups<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>      chooseSceneManager<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>      createCamera<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>      createViewports<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>      createScene<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>   <span class="k2">}</span>
<span class="number">  59</span>
<span class="number">  60</span>   ~Application<span class="k2">(</span><span class="k2">)</span>
<span class="number">  61</span>   <span class="k2">{</span>
<span class="number">  62</span>      <span class="k1">delete</span> mRoot<span class="k2">;</span>
<span class="number">  63</span>   <span class="k2">}</span>
<span class="number">  64</span>
<span class="number">  65</span>private:
<span class="number">  66</span>   <span class="k1">void</span> createRoot<span class="k2">(</span><span class="k2">)</span>
<span class="number">  67</span>   <span class="k2">{</span>
<span class="number">  68</span>      mRoot <span class="k3">=</span> <span class="k1">new</span> Root<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>   <span class="k2">}</span>
<span class="number">  70</span>
<span class="number">  71</span>   <span class="k1">void</span> defineResources<span class="k2">(</span><span class="k2">)</span>
<span class="number">  72</span>   <span class="k2">{</span>
<span class="number">  73</span>      String secName, typeName, archName<span class="k2">;</span>
<span class="number">  74</span>      ConfigFile cf<span class="k2">;</span>
<span class="number">  75</span>      cf.load<span class="k2">(</span><span class="s">"resources.cfg"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>      ConfigFile::SectionIterator seci <span class="k3">=</span> cf.getSectionIterator<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>      <span class="k1">while</span> <span class="k2">(</span>seci.hasMoreElements<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  78</span>         secName <span class="k3">=</span> seci.peekNextKey<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>         ConfigFile::SettingsMultiMap <span class="k3">*</span>settings <span class="k3">=</span> seci.getNext<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>         ConfigFile::SettingsMultiMap::iterator i<span class="k2">;</span>
<span class="number">  81</span>         <span class="k1">for</span> <span class="k2">(</span>i <span class="k3">=</span> settings-&gt;begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i <span class="k3">!</span><span class="k3">=</span> settings-&gt;end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  82</span>            typeName <span class="k3">=</span> i-&gt;first<span class="k2">;</span>
<span class="number">  83</span>            archName <span class="k3">=</span> i-&gt;second<span class="k2">;</span>
<span class="number">  84</span>            ResourceGroupManager::getSingleton<span class="k2">(</span><span class="k2">)</span>.addResourceLocation<span class="k2">(</span>archName,
<span class="number">  85</span>               typeName, secName<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>         <span class="k2">}</span>
<span class="number">  87</span>      <span class="k2">}</span>
<span class="number">  88</span>   <span class="k2">}</span>
<span class="number">  89</span>
<span class="number">  90</span>   <span class="k1">void</span> setupRenderSystem<span class="k2">(</span><span class="k2">)</span>
<span class="number">  91</span>   <span class="k2">{</span>
<span class="number">  92</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>mRoot-&gt;restoreConfig<span class="k2">(</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>mRoot-&gt;showConfigDialog<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  93</span>         <span class="k1">throw</span> Exception<span class="k2">(</span><span class="n">52</span>, <span class="s">"User canceled the config dialog!"</span>,
<span class="number">  94</span>            <span class="s">"Application::setupRenderSystem()"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>      <span class="k2">}</span>
<span class="number">  96</span>   <span class="k2">}</span>
<span class="number">  97</span>
<span class="number">  98</span>   <span class="k1">void</span> createRenderWindow<span class="k2">(</span><span class="k1">int</span> w, <span class="k1">int</span> h<span class="k2">)</span>
<span class="number">  99</span>   <span class="k2">{</span>
<span class="number"> 100</span>   mRoot-&gt;initialise<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>
<span class="number"> 102</span>   Ogre::NameValuePairList misc<span class="k2">;</span>
<span class="number"> 103</span>
<span class="number"> 104</span>   <span class="k1">unsigned</span> <span class="k1">long</span> winHandle      <span class="k3">=</span> <span class="k1">reinterpret_cast</span><span class="k3">&lt;</span>size_t&gt;<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>   <span class="k1">unsigned</span> <span class="k1">long</span> winGlContext   <span class="k3">=</span> <span class="k1">reinterpret_cast</span><span class="k3">&lt;</span>size_t&gt;<span class="k2">(</span>wglGetCurrentContext<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>
<span class="number"> 107</span>   misc<span class="k2">[</span><span class="s">"externalWindowHandle"</span><span class="k2">]</span> <span class="k3">=</span> StringConverter::toString<span class="k2">(</span>winHandle<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 108</span>   misc<span class="k2">[</span><span class="s">"externalGLContext"</span><span class="k2">]</span>    <span class="k3">=</span> StringConverter::toString<span class="k2">(</span>winGlContext<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>   misc<span class="k2">[</span><span class="s">"externalGLControl"</span><span class="k2">]</span>    <span class="k3">=</span> String<span class="k2">(</span><span class="s">"True"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>
<span class="number"> 111</span>   mWindow <span class="k3">=</span> mRoot-&gt;createRenderWindow<span class="k2">(</span><span class="s">"MainRenderWindow"</span>, w, h, <span class="k1">false</span>,
<span class="number"> 112</span>         <span class="k3">&amp;</span>misc<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>   <span class="c">//renderWindow-&gt;setVisible(false);</span>
<span class="number"> 114</span>
<span class="number"> 115</span>   <span class="k2">}</span>
<span class="number"> 116</span>
<span class="number"> 117</span>   <span class="k1">void</span> initializeResourceGroups<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 118</span>   <span class="k2">{</span>
<span class="number"> 119</span>      TextureManager::getSingleton<span class="k2">(</span><span class="k2">)</span>.setDefaultNumMipmaps<span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>      ResourceGroupManager::getSingleton<span class="k2">(</span><span class="k2">)</span>.initialiseAllResourceGroups<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span>   <span class="k2">}</span>
<span class="number"> 122</span>
<span class="number"> 123</span>   <span class="k1">virtual</span> <span class="k1">void</span> chooseSceneManager<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 124</span>   <span class="k2">{</span>
<span class="number"> 125</span>      mSceneMgr <span class="k3">=</span> mRoot-&gt;createSceneManager<span class="k2">(</span>ST_GENERIC, <span class="s">"Default SceneManager"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>   <span class="k2">}</span>
<span class="number"> 127</span>
<span class="number"> 128</span>   <span class="k1">virtual</span> <span class="k1">void</span> createCamera<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 129</span>   <span class="k2">{</span>
<span class="number"> 130</span>      mCamera <span class="k3">=</span> mSceneMgr-&gt;createCamera<span class="k2">(</span><span class="s">"PlayerCam"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>      mCamera-&gt;setPosition<span class="k2">(</span>Vector3<span class="k2">(</span><span class="k3">-</span><span class="n">300</span>, <span class="n">300</span>, <span class="k3">-</span><span class="n">300</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>      mCamera-&gt;lookAt<span class="k2">(</span>Vector3<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"> 133</span>      mCamera-&gt;setNearClipDistance<span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>   <span class="k2">}</span>
<span class="number"> 135</span>
<span class="number"> 136</span>   <span class="k1">virtual</span> <span class="k1">void</span> createViewports<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 137</span>   <span class="k2">{</span>
<span class="number"> 138</span>      <span class="c">// Create one viewport, entire window.</span>
<span class="number"> 139</span>      Viewport <span class="k3">*</span>vp <span class="k3">=</span> mWindow-&gt;addViewport<span class="k2">(</span>mCamera<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>      vp-&gt;setBackgroundColour<span class="k2">(</span>ColourValue<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>.<span class="n">25</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>
<span class="number"> 142</span>      <span class="c">// Alter the camera aspect ratio to match the viewport.</span>
<span class="number"> 143</span>      mCamera-&gt;setAspectRatio<span class="k2">(</span>
<span class="number"> 144</span>         Real<span class="k2">(</span>vp-&gt;getActualWidth<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">/</span> Real<span class="k2">(</span>vp-&gt;getActualHeight<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 145</span>   <span class="k2">}</span>
<span class="number"> 146</span>
<span class="number"> 147</span>   <span class="k1">virtual</span> <span class="k1">void</span> createScene<span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 148</span>
<span class="number"> 149</span>public:
<span class="number"> 150</span>
<span class="number"> 151</span>   <span class="k1">void</span> render<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 152</span>   <span class="k2">{</span>
<span class="number"> 153</span>      <span class="k1">const</span> <span class="k1">bool</span> swap_buffers <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 154</span>      mWindow-&gt;update<span class="k2">(</span>swap_buffers<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>      mRoot-&gt;renderOneFrame<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 156</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>   <span class="k2">}</span>
<span class="number"> 158</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 159</span>
<span class="number"> 160</span><span class="k1">class</span> Example <span class="k2">:</span> <span class="k1">public</span> Application
<span class="number"> 161</span><span class="k2">{</span>
<span class="number"> 162</span>private:
<span class="number"> 163</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number"> 164</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue<span class="k2">;</span>
<span class="number"> 165</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number"> 166</span>
<span class="number"> 167</span>   <span class="k1">double</span> startTime<span class="k2">;</span>
<span class="number"> 168</span>   <span class="k1">double</span> lastRenderTime<span class="k2">;</span>
<span class="number"> 169</span>   <span class="k1">double</span> lastMoveTime<span class="k2">;</span>
<span class="number"> 170</span>   <span class="k1">bool</span> lmb<span class="k2">;</span>
<span class="number"> 171</span>   <span class="k1">bool</span> rmb<span class="k2">;</span>
<span class="number"> 172</span>   <span class="k1">bool</span> forward<span class="k2">;</span>
<span class="number"> 173</span>   <span class="k1">bool</span> back<span class="k2">;</span>
<span class="number"> 174</span>   <span class="k1">bool</span> left<span class="k2">;</span>
<span class="number"> 175</span>   <span class="k1">bool</span> right<span class="k2">;</span>
<span class="number"> 176</span>   <span class="k1">float</span> current_speed<span class="k2">;</span>
<span class="number"> 177</span>   Vector3 last_translate<span class="k2">;</span>
<span class="number"> 178</span>
<span class="number"> 179</span>public:
<span class="number"> 180</span>   Example<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="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>   ~Example<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 182</span>   <span class="k1">void</span> setup<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 183</span>   <span class="k1">void</span> mainLoop<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>
<span class="number"> 185</span>private:
<span class="number"> 186</span>   <span class="k1">void</span> createScene<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>   <span class="k1">void</span> moveCamera<span class="k2">(</span><span class="k1">double</span> timestamp, Radian rot_x, Radian rot_y,
<span class="number"> 188</span>         Vector3 <span class="k3">&amp;</span> translate<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</span>   <span class="k1">void</span> animate<span class="k2">(</span><span class="k1">double</span> now<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 190</span>   <span class="k1">void</span> nextFrame<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 192</span>
<span class="number"> 193</span>Example::Example<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="k2">)</span> <span class="k2">:</span>
<span class="number"> 194</span>   display<span class="k2">(</span>display<span class="k2">)</span>,
<span class="number"> 195</span>   queue<span class="k2">(</span>NULL<span class="k2">)</span>,
<span class="number"> 196</span>   timer<span class="k2">(</span>NULL<span class="k2">)</span>,
<span class="number"> 197</span>   startTime<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number"> 198</span>   lastRenderTime<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number"> 199</span>   lastMoveTime<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number"> 200</span>   lmb<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>,
<span class="number"> 201</span>   rmb<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>,
<span class="number"> 202</span>   forward<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>,
<span class="number"> 203</span>   back<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>,
<span class="number"> 204</span>   left<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>,
<span class="number"> 205</span>   right<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span>,
<span class="number"> 206</span>   current_speed<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 207</span>   last_translate<span class="k2">(</span>Vector3::ZERO<span class="k2">)</span>
<span class="number"> 208</span><span class="k2">{</span>
<span class="number"> 209</span><span class="k2">}</span>
<span class="number"> 210</span>
<span class="number"> 211</span>Example::~Example<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 212</span><span class="k2">{</span>
<span class="number"> 213</span>   <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 214</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>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</span><span class="k2">}</span>
<span class="number"> 216</span>
<span class="number"> 217</span><span class="k1">void</span> Example::createScene<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 218</span><span class="k2">{</span>
<span class="number"> 219</span>   <span class="c">// Enable shadows.</span>
<span class="number"> 220</span>   mSceneMgr-&gt;setAmbientLight<span class="k2">(</span>ColourValue<span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">25</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"> 221</span>   <span class="c">//mSceneMgr-&gt;setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);  // slower</span>
<span class="number"> 222</span>   mSceneMgr-&gt;setShadowTechnique<span class="k2">(</span>SHADOWTYPE_STENCIL_MODULATIVE<span class="k2">)</span><span class="k2">;</span>  <span class="c">// faster</span>
<span class="number"> 223</span>
<span class="number"> 224</span>   <span class="c">// Create the character.</span>
<span class="number"> 225</span>   Entity <span class="k3">*</span>ent1 <span class="k3">=</span> mSceneMgr-&gt;createEntity<span class="k2">(</span><span class="s">"Ninja"</span>, <span class="s">"ninja.mesh"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 226</span>   ent1-&gt;setCastShadows<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>   mSceneMgr-&gt;getRootSceneNode<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>createChildSceneNode<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>attachObject<span class="k2">(</span>ent1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>
<span class="number"> 229</span>   AnimationState <span class="k3">*</span>anim1 <span class="k3">=</span> ent1-&gt;getAnimationState<span class="k2">(</span><span class="s">"Walk"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>   anim1-&gt;setLoop<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span>   anim1-&gt;setEnabled<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>
<span class="number"> 233</span>   <span class="c">// Create the ground.</span>
<span class="number"> 234</span>   Plane plane<span class="k2">(</span>Vector3::UNIT_Y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 235</span>   MeshManager::getSingleton<span class="k2">(</span><span class="k2">)</span>.createPlane<span class="k2">(</span><span class="s">"ground"</span>,
<span class="number"> 236</span>      ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
<span class="number"> 237</span>      <span class="n">1500</span>, <span class="n">1500</span>, <span class="n">20</span>, <span class="n">20</span>, <span class="k1">true</span>, <span class="n">1</span>, <span class="n">5</span>, <span class="n">5</span>, Vector3::UNIT_Z<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 238</span>
<span class="number"> 239</span>   Entity <span class="k3">*</span>ent2 <span class="k3">=</span> mSceneMgr-&gt;createEntity<span class="k2">(</span><span class="s">"GroundEntity"</span>, <span class="s">"ground"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 240</span>   ent2-&gt;setMaterialName<span class="k2">(</span><span class="s">"Examples/Rockwall"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 241</span>   ent2-&gt;setCastShadows<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 242</span>   mSceneMgr-&gt;getRootSceneNode<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>createChildSceneNode<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>attachObject<span class="k2">(</span>ent2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 243</span>
<span class="number"> 244</span>   <span class="c">// Create a light.</span>
<span class="number"> 245</span>   Light <span class="k3">*</span>light <span class="k3">=</span> mSceneMgr-&gt;createLight<span class="k2">(</span><span class="s">"Light1"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>   light-&gt;setType<span class="k2">(</span>Light::LT_POINT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>   light-&gt;setPosition<span class="k2">(</span>Vector3<span class="k2">(</span><span class="n">0</span>, <span class="n">150</span>, <span class="n">250</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 248</span>   light-&gt;setDiffuseColour<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</span>   light-&gt;setSpecularColour<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 250</span><span class="k2">}</span>
<span class="number"> 251</span>
<span class="number"> 252</span><span class="k1">void</span> Example::setup<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 253</span><span class="k2">{</span>
<span class="number"> 254</span>   <span class="k1">int</span> w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 255</span>   <span class="k1">int</span> h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 256</span>   Application::setup<span class="k2">(</span>w, h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 257</span>
<span class="number"> 258</span>   <span class="k1">const</span> <span class="k1">double</span> BPS <span class="k3">=</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 259</span>   timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> BPS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 260</span>
<span class="number"> 261</span>   queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 262</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 263</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_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"> 264</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 265</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 266</span><span class="k2">}</span>
<span class="number"> 267</span>
<span class="number"> 268</span><span class="k1">void</span> Example::mainLoop<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 269</span><span class="k2">{</span>
<span class="number"> 270</span>   <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 271</span>
<span class="number"> 272</span>   startTime <span class="k3">=</span> lastMoveTime <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 273</span>   <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 274</span>
<span class="number"> 275</span>   <span class="k1">for</span> <span class="k2">(</span><span class="k2">;</span><span class="k2">;</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 276</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"> 277</span>
<span class="number"> 278</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 279</span>         nextFrame<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 280</span>         redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 281</span>      <span class="k2">}</span>
<span class="number"> 282</span>
<span class="number"> 283</span>      <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 284</span>      <span class="k1">if</span> <span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">&amp;</span><span class="k3">&amp;</span>
<span class="number"> 285</span>            event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 286</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 287</span>      <span class="k2">}</span>
<span class="number"> 288</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="k2">{</span>
<span class="number"> 289</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 290</span>      <span class="k2">}</span>
<span class="number"> 291</span>
<span class="number"> 292</span>      Radian rot_x<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 293</span>      Radian rot_y<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 294</span>      Vector3 translate<span class="k2">(</span>Vector3::ZERO<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 295</span>
<span class="number"> 296</span>      <span class="k1">switch</span> <span class="k2">(</span>event.type<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 297</span>         <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 298</span>            redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 299</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 300</span>
<span class="number"> 301</span>         <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN:
<span class="number"> 302</span>            <span class="k1">if</span> <span class="k2">(</span>event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 303</span>               lmb <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 304</span>            <span class="k1">if</span> <span class="k2">(</span>event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>
<span class="number"> 305</span>               rmb <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 306</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 307</span>
<span class="number"> 308</span>         <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP:
<span class="number"> 309</span>            <span class="k1">if</span> <span class="k2">(</span>event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 310</span>               lmb <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 311</span>            <span class="k1">if</span> <span class="k2">(</span>event.mouse.button <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>
<span class="number"> 312</span>               rmb <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 313</span>            <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>lmb <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>rmb<span class="k2">)</span>
<span class="number"> 314</span>               <a href="http://www.allegro.cc/manual/al_show_mouse_cursor"><span class="a">al_show_mouse_cursor</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 315</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 316</span>
<span class="number"> 317</span>         <span class="k1">case</span> ALLEGRO_EVENT_MOUSE_AXES:
<span class="number"> 318</span>            <span class="k1">if</span> <span class="k2">(</span>lmb<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 319</span>               rot_x <span class="k3">=</span> Degree<span class="k2">(</span><span class="k3">-</span>event.mouse.dx <span class="k3">*</span> <span class="n">0</span>.<span class="n">13</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 320</span>               rot_y <span class="k3">=</span> Degree<span class="k2">(</span><span class="k3">-</span>event.mouse.dy <span class="k3">*</span> <span class="n">0</span>.<span class="n">13</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 321</span>            <span class="k2">}</span>
<span class="number"> 322</span>            <span class="k1">if</span> <span class="k2">(</span>rmb<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 323</span>               translate.x <span class="k3">=</span> event.mouse.dx <span class="k3">*</span> <span class="n">0</span>.<span class="n">5</span><span class="k2">;</span>
<span class="number"> 324</span>               translate.y <span class="k3">=</span> event.mouse.dy <span class="k3">*</span> <span class="k3">-</span><span class="n">0</span>.<span class="n">5</span><span class="k2">;</span>
<span class="number"> 325</span>            <span class="k2">}</span>
<span class="number"> 326</span>            <span class="k1">if</span> <span class="k2">(</span>lmb <span class="k3">|</span><span class="k3">|</span> rmb<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 327</span>               <a href="http://www.allegro.cc/manual/al_hide_mouse_cursor"><span class="a">al_hide_mouse_cursor</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 328</span>               <a href="http://www.allegro.cc/manual/al_set_mouse_xy"><span class="a">al_set_mouse_xy</span></a><span class="k2">(</span>display,
<span class="number"> 329</span>                  <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k3">/</span><span class="n">2</span>,
<span class="number"> 330</span>                  <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 331</span>            <span class="k2">}</span>
<span class="number"> 332</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 333</span>
<span class="number"> 334</span>         <span class="k1">case</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number"> 335</span>         <span class="k1">case</span> ALLEGRO_EVENT_KEY_UP: <span class="k2">{</span>
<span class="number"> 336</span>            <span class="k1">const</span> <span class="k1">bool</span> is_down <span class="k3">=</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="k2">;</span>
<span class="number"> 337</span>            <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_W<span class="k2">)</span>
<span class="number"> 338</span>               forward <span class="k3">=</span> is_down<span class="k2">;</span>
<span class="number"> 339</span>            <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_S<span class="k2">)</span>
<span class="number"> 340</span>               back <span class="k3">=</span> is_down<span class="k2">;</span>
<span class="number"> 341</span>            <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_A<span class="k2">)</span>
<span class="number"> 342</span>               left <span class="k3">=</span> is_down<span class="k2">;</span>
<span class="number"> 343</span>            <span class="k1">if</span> <span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_D<span class="k2">)</span>
<span class="number"> 344</span>               right <span class="k3">=</span> is_down<span class="k2">;</span>
<span class="number"> 345</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 346</span>         <span class="k2">}</span>
<span class="number"> 347</span>
<span class="number"> 348</span>         <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_RESIZE: <span class="k2">{</span>
<span class="number"> 349</span>            <a href="http://www.allegro.cc/manual/al_acknowledge_resize"><span class="a">al_acknowledge_resize</span></a><span class="k2">(</span>event.display.source<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 350</span>            <span class="k1">int</span> w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 351</span>            <span class="k1">int</span> h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 352</span>            mWindow-&gt;resize<span class="k2">(</span>w, h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 353</span>            mCamera-&gt;setAspectRatio<span class="k2">(</span>Real<span class="k2">(</span>w<span class="k2">)</span> <span class="k3">/</span> Real<span class="k2">(</span>h<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 354</span>            redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 355</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 356</span>         <span class="k2">}</span>
<span class="number"> 357</span>      <span class="k2">}</span>
<span class="number"> 358</span>
<span class="number"> 359</span>      moveCamera<span class="k2">(</span>event.any.timestamp, rot_x, rot_y, translate<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 360</span>   <span class="k2">}</span>
<span class="number"> 361</span><span class="k2">}</span>
<span class="number"> 362</span>
<span class="number"> 363</span><span class="k1">void</span> Example::moveCamera<span class="k2">(</span><span class="k1">double</span> timestamp, Radian rot_x, Radian rot_y,
<span class="number"> 364</span>   Vector3 <span class="k3">&amp;</span> translate<span class="k2">)</span>
<span class="number"> 365</span><span class="k2">{</span>
<span class="number"> 366</span>   <span class="k1">const</span> <span class="k1">double</span> time_since_move <span class="k3">=</span> timestamp <span class="k3">-</span> lastMoveTime<span class="k2">;</span>
<span class="number"> 367</span>   <span class="k1">const</span> <span class="k1">float</span> move_scale <span class="k3">=</span> MOVE_SPEED <span class="k3">*</span> time_since_move<span class="k2">;</span>
<span class="number"> 368</span>
<span class="number"> 369</span>   <span class="k1">if</span> <span class="k2">(</span>forward<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 370</span>      translate.z <span class="k3">=</span> <span class="k3">-</span>move_scale<span class="k2">;</span>
<span class="number"> 371</span>   <span class="k2">}</span>
<span class="number"> 372</span>   <span class="k1">if</span> <span class="k2">(</span>back<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 373</span>      translate.z <span class="k3">=</span> move_scale<span class="k2">;</span>
<span class="number"> 374</span>   <span class="k2">}</span>
<span class="number"> 375</span>   <span class="k1">if</span> <span class="k2">(</span>left<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 376</span>      translate.x <span class="k3">=</span> <span class="k3">-</span>move_scale<span class="k2">;</span>
<span class="number"> 377</span>   <span class="k2">}</span>
<span class="number"> 378</span>   <span class="k1">if</span> <span class="k2">(</span>right<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 379</span>      translate.x <span class="k3">=</span> move_scale<span class="k2">;</span>
<span class="number"> 380</span>   <span class="k2">}</span>
<span class="number"> 381</span>
<span class="number"> 382</span>   <span class="k1">if</span> <span class="k2">(</span>translate <span class="k3">=</span><span class="k3">=</span> Vector3::ZERO<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 383</span>      <span class="c">// Continue previous motion but dampen.</span>
<span class="number"> 384</span>      translate <span class="k3">=</span> last_translate<span class="k2">;</span>
<span class="number"> 385</span>      current_speed <span class="k3">-</span><span class="k3">=</span> time_since_move <span class="k3">*</span> <span class="n">0</span>.<span class="n">3</span><span class="k2">;</span>
<span class="number"> 386</span>   <span class="k2">}</span>
<span class="number"> 387</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 388</span>      <span class="c">// Ramp up.</span>
<span class="number"> 389</span>      current_speed <span class="k3">+</span><span class="k3">=</span> time_since_move<span class="k2">;</span>
<span class="number"> 390</span>   <span class="k2">}</span>
<span class="number"> 391</span>   <span class="k1">if</span> <span class="k2">(</span>current_speed <span class="k3">&gt;</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 392</span>      current_speed <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 393</span>   <span class="k1">if</span> <span class="k2">(</span>current_speed <span class="k3">&lt;</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>
<span class="number"> 394</span>      current_speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 395</span>
<span class="number"> 396</span>   translate <span class="k3">*</span><span class="k3">=</span> current_speed<span class="k2">;</span>
<span class="number"> 397</span>
<span class="number"> 398</span>   mCamera-&gt;yaw<span class="k2">(</span>rot_x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 399</span>   mCamera-&gt;pitch<span class="k2">(</span>rot_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 400</span>   mCamera-&gt;moveRelative<span class="k2">(</span>translate<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 401</span>
<span class="number"> 402</span>   last_translate <span class="k3">=</span> translate<span class="k2">;</span>
<span class="number"> 403</span>   lastMoveTime <span class="k3">=</span> timestamp<span class="k2">;</span>
<span class="number"> 404</span><span class="k2">}</span>
<span class="number"> 405</span>
<span class="number"> 406</span><span class="k1">void</span> Example::animate<span class="k2">(</span><span class="k1">double</span> now<span class="k2">)</span>
<span class="number"> 407</span><span class="k2">{</span>
<span class="number"> 408</span>   <span class="k1">const</span> <span class="k1">double</span> dt0 <span class="k3">=</span> now <span class="k3">-</span> startTime<span class="k2">;</span>
<span class="number"> 409</span>   <span class="k1">const</span> <span class="k1">double</span> dt <span class="k3">=</span> now <span class="k3">-</span> lastRenderTime<span class="k2">;</span>
<span class="number"> 410</span>
<span class="number"> 411</span>   <span class="c">// Animate the character.</span>
<span class="number"> 412</span>   Entity <span class="k3">*</span>ent <span class="k3">=</span> mSceneMgr-&gt;getEntity<span class="k2">(</span><span class="s">"Ninja"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 413</span>   AnimationState <span class="k3">*</span>anim <span class="k3">=</span> ent-&gt;getAnimationState<span class="k2">(</span><span class="s">"Walk"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 414</span>   anim-&gt;addTime<span class="k2">(</span>dt<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 415</span>
<span class="number"> 416</span>   <span class="c">// Move the light around.</span>
<span class="number"> 417</span>   Light <span class="k3">*</span>light <span class="k3">=</span> mSceneMgr-&gt;getLight<span class="k2">(</span><span class="s">"Light1"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 418</span>   light-&gt;setPosition<span class="k2">(</span>Vector3<span class="k2">(</span><span class="n">300</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>dt0<span class="k2">)</span>, <span class="n">300</span>, <span class="n">300</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>dt0<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 419</span><span class="k2">}</span>
<span class="number"> 420</span>
<span class="number"> 421</span><span class="k1">void</span> Example::nextFrame<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 422</span><span class="k2">{</span>
<span class="number"> 423</span>   <span class="k1">const</span> <span class="k1">double</span> now <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 424</span>   animate<span class="k2">(</span>now<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 425</span>   render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 426</span>   lastRenderTime <span class="k3">=</span> now<span class="k2">;</span>
<span class="number"> 427</span><span class="k2">}</span>
<span class="number"> 428</span>
<span class="number"> 429</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>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 430</span><span class="k2">{</span>
<span class="number"> 431</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argc<span class="k2">;</span>
<span class="number"> 432</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argv<span class="k2">;</span>
<span class="number"> 433</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number"> 434</span>
<span class="number"> 435</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="number"> 436</span>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 437</span>   <span class="k2">}</span>
<span class="number"> 438</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"> 439</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"> 440</span>
<span class="number"> 441</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL <span class="k3">|</span> ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 442</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>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 443</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 444</span>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 445</span>   <span class="k2">}</span>
<span class="number"> 446</span>   <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>display, <span class="s">"My window"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 447</span>
<span class="number"> 448</span>   <span class="k2">{</span>
<span class="number"> 449</span>      Example app<span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 450</span>      app.setup<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 451</span>      app.mainLoop<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 452</span>   <span class="k2">}</span>
<span class="number"> 453</span>
<span class="number"> 454</span>   <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 455</span>
<span class="number"> 456</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 457</span><span class="k2">}</span>
</div></div><p>

<b>Edited:</b></p><p>Damn with the title!! <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" />, I screw it again... I meant &quot;working with Allegro 5 on windows&quot;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 13 Dec 2011 06:20:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The ninja is supposed to have shadows in that example. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /></p><div class="source-code snippet"><div class="inner"><pre>ent1-&gt;setCastShadows<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

So you ain&#39;t done yet. <img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" /></p><p>EDIT: What did you add to stop the white screen from appearing tho?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Tue, 13 Dec 2011 06:22:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nothing... I just kick the case a couple of time and that did it... <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Well actually I did something that my brain is still deciphering, practically I just read 1.000 websites and start extracting what I thought it could make the difference.</p><p>In one of those website I found this, all what I found was related to SDL so I had to make some modifications:</p><div class="source-code snippet"><div class="inner"><pre>   <span class="k1">unsigned</span> <span class="k1">long</span> winHandle      <span class="k3">=</span> <span class="k1">reinterpret_cast</span><span class="k3">&lt;</span>size_t&gt;<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
   <span class="k1">unsigned</span> <span class="k1">long</span> winGlContext   <span class="k3">=</span> <span class="k1">reinterpret_cast</span><span class="k3">&lt;</span>size_t&gt;<span class="k2">(</span>wglGetCurrentContext<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

So here I&#39;m kind of &quot;serializing&quot; the <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span><span class="k2">)</span></span> value. Why? I don&#39;t know.</p><p>The same with the second function...</p><p>But what I think is the most important part is this one:</p><div class="source-code snippet"><div class="inner"><pre>   misc<span class="k2">[</span><span class="s">"externalWindowHandle"</span><span class="k2">]</span> <span class="k3">=</span> StringConverter::toString<span class="k2">(</span>winHandle<span class="k2">)</span><span class="k2">;</span>
   misc<span class="k2">[</span><span class="s">"externalGLContext"</span><span class="k2">]</span>    <span class="k3">=</span> StringConverter::toString<span class="k2">(</span>winGlContext<span class="k2">)</span><span class="k2">;</span>
   misc<span class="k2">[</span><span class="s">"externalGLControl"</span><span class="k2">]</span>    <span class="k3">=</span> String<span class="k2">(</span><span class="s">"True"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Where after telling to Ogre to don&#39;t initialize (would create another display) with <span class="source-code">mRoot-&gt;initialise<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span></span>, I&#39;m then tell it to use this values instead.</p><p>As you can see it&#39;s not very clear, but boy I can already see a new tutorial on the wiki <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 13 Dec 2011 06:37:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s cool. Really cool.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (tobing)</author>
		<pubDate>Tue, 13 Dec 2011 18:51:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Indeed. I&#39;ll download Ogre later and see if the example still works in Linux (if I can get it to work at all) - then commit your version if it does.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Tue, 13 Dec 2011 19:01:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>WTH is carring your avatar?...</p><p>Anyway...</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609044/940161#target">Dario ff</a> said:</div><div class="quote"><p> So you ain&#39;t done yet. </p></div></div><p>Well in my defense, I have ran the example in my laptop, and works perfectly. I&#39;m getting a:</p><pre>
WARNING: Stencil shadows were requested, but this device does not have a hardwar
e stencil. Shadows disabled.
</pre><p>

Why? I dunno.</p><p>A question.. ¿?¿?¿:</p><p>If I set the GL context to Ogre, then I&#39;m not going to be able to use normal drawing functions from Allegro?.</p><p>I ask this because before initializing Ogre, I&#39;m able to draw with allegro, but once I init ogre, the function don&#39;t crash or anything but I can&#39;t see anything, just the 3d example.</p><p><b>Edited:</b> Oh, By the way, thank you guys! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Wed, 14 Dec 2011 04:46:43 +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/609044/940241#target">AMCerasoli</a> said:</div><div class="quote"><p>WTH is carring your avatar?...</p></div></div><p>

A christmas tree (notice the green?) and a yellow box. It&#39;s not finished but I won&#39;t have time to finish most likely so replaced it anyway <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>Stencil shadows were requested, but this device does not have a hardwar<br />e stencil. Shadows disabled.</p></div></div><p>

What if you use al_set_display_option(ALLEGRO_STENCIL_SIZE, 8, ALLEGRO_SUGGEST)?</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>If I set the GL context to Ogre, then I&#39;m not going to be able to use normal drawing functions from Allegro?</p></div></div><p>

Yes, unless you are willing to reset the complete OpenGL state to something Allegro expects (and then back to something Ogre expects).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Wed, 14 Dec 2011 18:29:37 +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/609044/940284#target">Elias</a> said:</div><div class="quote"><p> A christmas tree
</p></div></div><p>It looks more like a cucumber <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> What if you use al_set_display_option(ALLEGRO_STENCIL_SIZE, 8, ALLEGRO_SUGGEST)?</p></div></div><p>That fixed it!, well I used al_set_<b>new</b>_display_option() instead. </p><p>Take that Dario!!. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 15 Dec 2011 00:07:39 +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/609044/940304#target">AMCerasoli</a> said:</div><div class="quote"><p>Take that Dario!</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /></p><p>Anyway, it&#39;s so nice to see this working so easily, I&#39;ve been longing for using both A5 and Ogre for a long time. I&#39;ve just recently began using Ogre as well, so this thread&#39;s timing is ideal. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Do you dare to try using the Direct3D driver now? The OpenGL Ogre one is a bit glitchy with some addons. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Thu, 15 Dec 2011 04:47:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Kinda related:<br />What&#39;s Ogre?</p><p>Not related:<br />A5 scares me <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /><br />I need to learn it from A4 <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Felix-The-Ghost)</author>
		<pubDate>Thu, 15 Dec 2011 11:20:39 +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/609044/940333#target">Dario ff</a> said:</div><div class="quote"><p> Do you dare to try using the Direct3D driver now? The OpenGL Ogre one is a bit glitchy with some addons.</p></div></div><p>Actually once when it appeared the platform screen, that which ask you if you want to run it as DirectX or OpenGL, I pressed DirectX <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />, with all configured to work with OpenGL <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> and it could create the display, import everything and start even rendering, the problem was that it as an horrendous flicker, that sometimes let me see only half of the screen. But I think it should be possible. Would need to read about how to get the directx context? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609044/940349#target">Felix-The-Ghost</a> said:</div><div class="quote"><p> What&#39;s Ogre?</p></div></div><p>Ogre is the equivalent of Allegro in the world of 3D. Actually should be OGRE since it is is an acronym: Object-Oriented Graphics Rendering Engine, but it happens the same than with Allegro which supposedly it&#39;s also an acronym, but you&#39;re not going around putting ALLEGRO 5 ALLEGRO 5 because it looks grotesque. Well not quite the equivalent of Allegro since it only allows you to draw 3D meshes on the screen, there is no events, keyboards, mouse, threads, UTF-8, file IO... It&#39;s just an OGRE.</p><p>But since we all know how difficult is to be able to create a mesh in Blender for example, and then import it to Allegro and draw it with raw OpenGL, Ogre is a wonderful tool to keep you away from that. That&#39;s only a tiny reason of course, if you get into 3D you&#39;ll know what I&#39;m talking about.</p><p>OGRE among other things, is cross-platform (Windows, Linux, Mac and I thin even iPhone), it has a resource manager included, which allow you to load files from Zip files too (as Allegro 5), support shaders and <a href="http://www.ogre3d.org/about/features">a lot more</a>.</p><p>And now combined with Allegro 5, you have really <b>BIG</b> and powerful tool on your hands, configurable within minutes.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> A5 scares me </p></div></div><p>What do you mean with that?, don&#39;t you like it?</p><p>Do you know what scares me? the size of the main .dll of Ogre... 11MB in relase mode... and... 310MB in debug mode <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" />, MY GOOOOD!!. And you also need to link to a lot of plugins!.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 15 Dec 2011 13:48:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Only thing that annoys me about Ogre so far is that the only interface is C++. There was a project to write a C interface for it I think, but I think it was never finished.</p><p>Heck, I think it was even gonna use Allegro. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /><br /><a href="http://code.google.com/p/llcoi/">Low level C Ogre3D Interface(llcoi)</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Thu, 15 Dec 2011 18:18:41 +0000</pubDate>
	</item>
</rss>
