<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>OpenGL forward compatible context initialization</title>
		<link>http://www.allegro.cc/forums/view/604906</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 21 Aug 2010 00:59:59 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Salutations!</p><p>I&#39;m new to Allegro and am trying to use it to create an OpenGL 3+ context.  Which works, using the code below:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;GL/gl.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">int</span> main <span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>al_init<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  9</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  al_set_new_display_flags<span class="k2">(</span> ALLEGRO_WINDOWED <span class="k3">|</span>
<span class="number"> 12</span>          ALLEGRO_OPENGL <span class="k3">|</span>
<span class="number"> 13</span>          ALLEGRO_NOFRAME <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  ALLEGRO_DISPLAY<span class="k3">*</span> dpy <span class="k3">=</span> al_create_display<span class="k2">(</span><span class="n">1</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  al_set_new_display_flags<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  al_set_new_display_flags<span class="k2">(</span> ALLEGRO_WINDOWED
<span class="number"> 19</span>        <span class="k3">|</span> ALLEGRO_OPENGL_3_0
<span class="number"> 20</span>      <span class="c">/*| ALLEGRO_OPENGL_FORWARD_COMPATIBLE*/</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  ALLEGRO_DISPLAY<span class="k3">*</span> dpy3 <span class="k3">=</span> al_create_display<span class="k2">(</span><span class="n">800</span>, <span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>  al_destroy_display<span class="k2">(</span>dpy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"OpenGL version: %s\n"</span>, glGetString<span class="k2">(</span>GL_VERSION<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"GLSL   version: %s\n"</span>, glGetString<span class="k2">(</span>GL_SHADING_LANGUAGE_VERSION<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>  al_destroy_display<span class="k2">(</span>dpy3<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 32</span><span class="k2">}</span>
</div></div><p>

This compiles, links and returns:
</p><pre class="terminal">OpenGL version: 3.0.0 NVIDIA 256.44
GLSL   version: 1.30 NVIDIA via Cg compiler</pre><p>

However, when I try to initialize a forward compatible context by uncommenting ALLEGRO_OPENGL_FORWARD_COMPATIBLE, the program crashes with the output
</p><pre class="terminal">opengl3.3.exe: /home/tim/ccpp/allegro-4.9.21/src/opengl/extensions.c:153: print_extensions: Assertion `extension&#39; failed.
Aborted</pre><p>
where the assertion is checking for an empty string of OpenGL extensions.</p><p>So:
</p><ol><li><p> What am I doing wrong? What is the correct way to request a forward compatible context? </p></li><li><p> Or is it Allegro that is doing something wrong? </p></li></ol><p>

Also, I have two other questions that I wouldn&#39;t mind an answer to:
</p><ol><li><p> Is it necessary to do both the two al_create_display()s? On my installation it crashes if I do not first create the OpenGL 2 context.  Is this the expected behaviour for allegro?</p></li><li><p> How do I request a OpenGL version of, for example, 3.3? The glxinfo output claims to be capable of that. </p></li></ol><p>

Speaking of which, I am using Allegro 4.9.21 (from sourceforge 2010-08-17), built with GCC 4.3.3 on Ubuntu 9.4 (Jaunty) with the Nvidia 256.44 drivers.</p><p>Any and all answers are greatly appreciated!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tim Spain)</author>
		<pubDate>Fri, 20 Aug 2010 04:28:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The assertion will be because Allegro internally calls glGetString(GL_EXTENSIONS); which is deprecated in OpenGL 3. So you aren&#39;t doing anything wrong, it&#39;s a bug. You shouldn&#39;t need to create two displays either.</p><p>We&#39;ll need to think about the API for requesting later OpenGL versions as well.</p><p>You&#39;re probably the first to try OpenGL 3 support...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Fri, 20 Aug 2010 05:57:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the prompt reply, Peter.</p><p>It is good to know that I am not doing it wrong... <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tim Spain)</author>
		<pubDate>Sat, 21 Aug 2010 00:59:59 +0000</pubDate>
	</item>
</rss>
