<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Draw texture in AllegroGL</title>
		<link>http://www.allegro.cc/forums/view/591663</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 01 Jun 2007 06:27:42 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have recently (just today...) decided that it is time for me to learn OpenGL/AllegroGL. I have managed to draw a square on the screen, but I am unable to texture that square. I have the following code:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include "alleggl.h"</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">void</span> opengl_init<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>  <span class="c">//Set state to edit projection matrix</span></td></tr><tr><td class="number">6</td><td>  glMatrixMode<span class="k2">(</span>GL_PROJECTION<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  </td></tr><tr><td class="number">8</td><td>  <span class="c">//Clear projection matrix</span></td></tr><tr><td class="number">9</td><td>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  </td></tr><tr><td class="number">11</td><td>  <span class="c">//Create orthoscopic view, -1 to 1 in every direction</span></td></tr><tr><td class="number">12</td><td>  glOrtho<span class="k2">(</span><span class="k3">-</span><span class="n">1</span>, <span class="n">1</span>, <span class="k3">-</span><span class="n">1</span>, <span class="n">1</span>, <span class="k3">-</span><span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  </td></tr><tr><td class="number">14</td><td>  <span class="c">//Set state to edit model-view matrix</span></td></tr><tr><td class="number">15</td><td>  glMatrixMode<span class="k2">(</span>GL_MODELVIEW<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  </td></tr><tr><td class="number">17</td><td>  <span class="c">//Clear model-view matrix</span></td></tr><tr><td class="number">18</td><td>  glLoadIdentity<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  </td></tr><tr><td class="number">20</td><td>  <span class="c">//Disable depth test - things get drawn in order I draw them</span></td></tr><tr><td class="number">21</td><td>  glDisable<span class="k2">(</span>GL_DEPTH_TEST<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  </td></tr><tr><td class="number">23</td><td>  <span class="c">//Enable texturing on 2d models</span></td></tr><tr><td class="number">24</td><td>  glEnable<span class="k2">(</span>GL_TEXTURE_2D<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td><span class="k2">}</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">28</td><td>  GLuint gl_image<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  </td></tr><tr><td class="number">31</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  install_allegro_gl<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  </td></tr><tr><td class="number">34</td><td>  <a href="http://www.allegro.cc/manual/set_window_title" target="_blank"><span class="a">set_window_title</span></a><span class="k2">(</span><span class="s">"GLTest"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  </td></tr><tr><td class="number">36</td><td>  allegro_gl_set<span class="k2">(</span>AGL_COLOR_DEPTH, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  allegro_gl_set<span class="k2">(</span>AGL_SUGGEST, AGL_COLOR_DEPTH<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>  allegro_gl_set<span class="k2">(</span>AGL_REQUIRE, AGL_DOUBLEBUFFER<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">39</td><td>  </td></tr><tr><td class="number">40</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_OPENGL_WINDOWED, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">41</td><td>    <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_OPENGL_FULLSCREEN, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">42</td><td>      <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Video error. Allegro said: %s\n"</span>, <a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>      <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">45</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">46</td><td>  </td></tr><tr><td class="number">47</td><td>  opengl_init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>  </td></tr><tr><td class="number">49</td><td>  bitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"images/gui/button.tga"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>  gl_image <span class="k3">=</span> allegro_gl_make_texture_ex<span class="k2">(</span>AGL_TEXTURE_MASKED, bitmap, GL_RGBA<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>  </td></tr><tr><td class="number">52</td><td>  <span class="c">//Generate and bind a texture</span></td></tr><tr><td class="number">53</td><td>  glGenTextures<span class="k2">(</span><span class="n">1</span>, <span class="k3">&amp;</span>gl_image<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>  glBindTexture<span class="k2">(</span>GL_TEXTURE_2D, gl_image<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>  </td></tr><tr><td class="number">56</td><td>  <span class="c">//Begin drawing a quadrilateral</span></td></tr><tr><td class="number">57</td><td>  glBegin<span class="k2">(</span>GL_QUADS<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>    glColor4ub<span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>  </td></tr><tr><td class="number">60</td><td>    glTexCoord2f<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>    glTexCoord2f<span class="k2">(</span><span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>    glTexCoord2f<span class="k2">(</span><span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>    glTexCoord2f<span class="k2">(</span><span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>  glEnd<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td>  <span class="c">//Finish drawing it</span></td></tr><tr><td class="number">66</td><td>  </td></tr><tr><td class="number">67</td><td>  <span class="c">//Flip the boards in the back of the monitor so that I can see it</span></td></tr><tr><td class="number">68</td><td>  allegro_gl_flip<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>  </td></tr><tr><td class="number">70</td><td>  <span class="k1">while</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span><span class="c">//Pause so that I can see what happens</span></td></tr><tr><td class="number">71</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Anybody know what&#39;s wrong with that?<br />Thanks.</p><p>EDIT:<br />Sorry for filling opengl_init() with comments and not putting any anywhere else.<br />It&#39;s like that because I was trying to use AllegroGL in my game, but it was too hard. I then ripped the init function out and stuck it in a very basic test program. I&#39;m commenting the main() now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 31 May 2007 18:16:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>  bitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"images/gui/button.tga"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
  gl_image <span class="k3">=</span> allegro_gl_make_texture_ex<span class="k2">(</span>AGL_TEXTURE_MASKED, bitmap, GL_RGBA<span class="k2">)</span><span class="k2">;</span>

  <span class="c">//Don't need anymore</span>
  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span> <span class="c">//ADD</span>

  <span class="c">//Generate and bind a texture</span>
  <span class="c">//glGenTextures(1, &amp;gl_image); DELETE</span>
  glBindTexture<span class="k2">(</span>GL_TEXTURE_2D, gl_image<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Archon)</author>
		<pubDate>Thu, 31 May 2007 18:31:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Still just a white rectangle.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 31 May 2007 18:36:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can you check the return value of the load_bitmap call?</p><p>[edit]<br />Also, make sure that you keep the &#39;draw order&#39; of your polygons consistent. The default is counter-clockwise.</p><div class="source-code snippet"><div class="inner"><pre>    glTexCoord2f<span class="k2">(</span><span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    glTexCoord2f<span class="k2">(</span><span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    glTexCoord2f<span class="k2">(</span><span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    glTexCoord2f<span class="k2">(</span><span class="n">0</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span> glVertex3f<span class="k2">(</span><span class="k3">-</span><span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span>.<span class="n">5</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Archon)</author>
		<pubDate>Thu, 31 May 2007 18:44:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>load_bitmap() returns a bitmap, and the current order is the same as yours.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 31 May 2007 18:49:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK. What does allegro_gl_make_texture_ex return? It should be above 0.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Archon)</author>
		<pubDate>Thu, 31 May 2007 18:52:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
glGenTextures(1, &amp;gl_image);
</p></div></div><p>
Remove that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Thu, 31 May 2007 18:52:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Aha!<br />Archon: It was 0.<br />Gnolam: I already have.</p><p>What could be causing it to be 0, then? Bad options?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 31 May 2007 18:54:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>File not found, Not a bmp file, wrong filename.</p><p>shouldn&#39;t it be &quot;my_dir\\myname.bmp&quot;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 31 May 2007 19:05:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Aha! The problem is that I had forgot to use a power-of-2 image!<br />It&#39;s all working now.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
shouldn&#39;t it be &quot;my_dir\\myname.bmp&quot;
</p></div></div><p>
No...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 31 May 2007 19:06:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Aha! The problem is that I had forgot to use a power-of-2 image!
</p></div></div><p>
I wasn&#39;t sure if AllegroGL did something about that or not but it would&#39;ve been my next question.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
shouldn&#39;t it be &quot;my_dir\\myname.bmp&quot;
</p></div></div><p>
Using forward slashes are perfectly fine (and recommended) with Windows. I don&#39;t think that using blackslashes work in Unix though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Archon)</author>
		<pubDate>Thu, 31 May 2007 19:11:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>AllegroGL handles non power of two texture, even if the gfx card does not support it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Thu, 31 May 2007 19:19:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So why did it suddenly start working when I put it as a power of two?</p><p>Also, is there a way to get mouse co-ordinates in OpenGL? Or would I have to convert Allegro co-ordinates?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 31 May 2007 20:08:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>AllegroGL only allows npo2 textures on unsupporting hardware if you pass AGL_TEXTURE_RESCALE. This causes AGL to rescale the texture itself to fit the nearest power-of-2 size.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Also, is there a way to get mouse co-ordinates in OpenGL? Or would I have to convert Allegro co-ordinates?
</p></div></div><p>

The latter. One of the ways to do that is gluUnProject from GLUT.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jakub Wasilewski)</author>
		<pubDate>Thu, 31 May 2007 20:29:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
So why did it suddenly start working when I put it as a power of two?
</p></div></div><p>
Probably because the way textures work in 3D graphical interfaces since the type used are float. Floating point numbers, with their dimensions in the powers of 2, fit &#39;nicely&#39; in binary.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Also, is there a way to get mouse co-ordinates in OpenGL? Or would I have to convert Allegro co-ordinates?
</p></div></div><p>
Are you talking about the coordinates respective to the screen or coordinates to measure with what 3D objects you are &quot;pointing at&quot;?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Archon)</author>
		<pubDate>Thu, 31 May 2007 20:38:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Er, it&#39;s mostly because you can assume a whole bunch of things if you do, not really because of floats.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (X-G)</author>
		<pubDate>Thu, 31 May 2007 20:52:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Jakub: I see. I&#39;ll use AGL_TEXTURE_RESCALE then. Thanks.</p><p>Archon: I&#39;m not doing 3D just yet, it&#39;s actual co-ordinate on the screen that I&#39;m after. I&#39;ve done it by converting allegro&#39;s co-ordinates now.</p><p>EDIT:<br />I know I&#39;m getting a bit off topic on my own thread, but how would I use the mask colour of a BITMAP to set the alpha channel of a texture?</p><p>EDIT2:<br />Never mind, found out how to use glBlendFunc properly.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Thu, 31 May 2007 22:58:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I know I&#39;m getting a bit off topic on my own thread, but how would I use the mask colour of a BITMAP to set the alpha channel of a texture?<br /> <br /> EDIT2:<br /> Never mind, found out how to use glBlendFunc properly.
</p></div></div><p>
Also, look into:
</p><div class="source-code snippet"><div class="inner"><pre>glAlphaTest
glAlphaFunc
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Archon)</author>
		<pubDate>Fri, 01 Jun 2007 06:27:42 +0000</pubDate>
	</item>
</rss>
