<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>ALLEGRO_OPENGL_MAJOR_VERSION and ALLEGRO_OPENGL_MINOR_VERSION</title>
		<link>http://www.allegro.cc/forums/view/617591</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 29 Oct 2018 00:28:03 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi, developers! </p><p>I researched the source code of the Allegro library. In the master branch there is no code that controls the loading of the OpenGL version using the parameters ALLEGRO_OPENGL_MAJOR_VERSION and ALLEGRO_OPENGL_MINOR_VERSION! If I&#39;m wrong, correct me.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (I-am-bigov)</author>
		<pubDate>Sun, 21 Oct 2018 16:52:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I believe you use them with <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a></span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Sun, 21 Oct 2018 19:39:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>grep harder man.</p><pre>
e:\LIBS\LIBS81Build\allegro5\src&gt;grep -r -E -I -n ALLEGRO_OPENGL_MAJOR_VERSION .*.*
.\win/wgl_disp.c:963:      ALLEGRO_OPENGL_MAJOR_VERSION, 0);
.\x/xglx_config.c:536:      ALLEGRO_OPENGL_MAJOR_VERSION, 0);
</pre><p>

</p><div class="source-code"><div class="toolbar"><span class="name">win\wgl_disp.c</span><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 962</span>   major <span class="k3">=</span> _al_get_suggested_display_option<span class="k2">(</span>disp,
<span class="number"> 963</span>      ALLEGRO_OPENGL_MAJOR_VERSION, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 964</span>   minor <span class="k3">=</span> _al_get_suggested_display_option<span class="k2">(</span>disp,
<span class="number"> 965</span>      ALLEGRO_OPENGL_MINOR_VERSION, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 966</span>
<span class="number"> 967</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>disp-&gt;flags <span class="k3">&amp;</span> ALLEGRO_OPENGL_3_0<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> major <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 968</span>      <span class="k1">if</span> <span class="k2">(</span>major <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 969</span>         major <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
<span class="number"> 970</span>      <span class="k1">bool</span> fc <span class="k3">=</span> <span class="k2">(</span>disp-&gt;flags <span class="k3">&amp;</span> ALLEGRO_OPENGL_FORWARD_COMPATIBLE<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<div class="highlight"><span class="number"> 971</span>      wgl_disp-&gt;glrc <span class="k3">=</span> init_ogl_context_ex<span class="k2">(</span>wgl_disp-&gt;dc, fc, major, minor<span class="k2">)</span><span class="k2">;</span></div><span class="number"> 972</span>   <span class="k2">}</span>
<span class="number"> 973</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 974</span>      wgl_disp-&gt;glrc <span class="k3">=</span> wglCreateContext<span class="k2">(</span>wgl_disp-&gt;dc<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 975</span>   <span class="k2">}</span>
<span class="number"> 976</span>
<span class="number"> 977</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>wgl_disp-&gt;glrc<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 978</span>      ALLEGRO_ERROR<span class="k2">(</span><span class="s">"Unable to create a render context! %s\n"</span>,
<span class="number"> 979</span>                     get_error_desc<span class="k2">(</span>GetLastError<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 980</span>      destroy_display_internals<span class="k2">(</span>wgl_disp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 981</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 982</span>   <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 21 Oct 2018 20:11:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Strange, &quot;qtcreator&quot; did not find this rows. Maybe this code snippet is not used? But still, in the MinGW-64 environment, my code (<a href="https://github.com/bigov/daft-lib/blob/master/OpenGL/allegro.glad/a_win.cpp">https://github.com/bigov/daft-lib/blob/master/OpenGL/allegro.glad/a_win.cpp</a>) does not work as expected:</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"> 18</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_3_0<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_OPENGL_MAJOR_VERSION, <span class="n">3</span>, ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_OPENGL_MINOR_VERSION, <span class="n">2</span>, ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>  <span class="k1">if</span><span class="k2">(</span>nullptr <span class="k3">=</span><span class="k3">=</span> display<span class="k2">)</span> ERR <span class="k2">(</span><span class="s">"failed to create display!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <a href="http://www.allegro.cc/manual/al_set_current_opengl_context"><span class="a">al_set_current_opengl_context</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>gladLoadGL<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> ERR<span class="k2">(</span><span class="s">"FAILURE: can't load GLAD."</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number"> 26</span>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"OpenGL Version: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> GLVersion.major <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> GLVersion.minor <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n"</span><span class="k2">;</span>
</div></div><p>

I see message: &quot;OpenGL Version: 3.0&quot;.</p><p>If line N18 only is changed so:</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"> 18</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="k2">)</span><span class="k2">;</span>
</div></div><p>

that I see: &quot;OpenGL Version: 4.5&quot;. I can&#39;t setup OpenGL-3.2 context!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (I-am-bigov)</author>
		<pubDate>Mon, 22 Oct 2018 04:53:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can confirm your problem. I too get the most current version of allegro, even when requesting or requiring otherwise.</p><p>It has to do with the _al_get_suggested_display_option function I would think, possibly returning the wrong values, because when I debugged it major was still zero.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 23 Oct 2018 03:09:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for your reply. I opened a request on <a href="https://github.com/liballeg/allegro5/issues/948">https://github.com/liballeg/allegro5/issues/948</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (I-am-bigov)</author>
		<pubDate>Tue, 23 Oct 2018 04:25:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I did some more debugging, and there are a couple of problems. First here is my session with gdb :</p><pre>
Thread 1 hit Breakpoint 1, create_display_internals (wgl_disp=0x2d99ba0)
    at E:\LIBS\LIBS81Build\allegro5\src\win\wgl_disp.c:967
967        if ((disp-&gt;flags &amp; ALLEGRO_OPENGL_3_0) || major != 0) {
(gdb) set major = 3
(gdb) set minor = 2
(gdb) continue
Continuing.

Thread 1 hit Breakpoint 2, _al_ogl_manage_extensions (gl_disp=0x2d99ba0)
    at E:\LIBS\LIBS81Build\allegro5\src\opengl\extensions.c:731
731        if (!_al_ogl_version_3_only(gl_disp-&gt;flags)) {
(gdb) step
_al_ogl_version_3_only (flags=21) at E:\LIBS\LIBS81Build\allegro5\src\opengl\extensions.c:172
172        const int mask = ALLEGRO_OPENGL_3_0 | ALLEGRO_OPENGL_FORWARD_COMPATIBLE;
(gdb) n
173        return (flags &amp; mask) == mask;
(gdb)
174     }
(gdb)
_al_ogl_manage_extensions (gl_disp=0x2d99ba0) at E:\LIBS\LIBS81Build\allegro5\src\opengl\extensions.c:731
731        if (!_al_ogl_version_3_only(gl_disp-&gt;flags)) {
(gdb) n
732           ALLEGRO_DEBUG(&quot;OpenGL Extensions:\n&quot;);
(gdb)
733           print_extensions((char const *)glGetString(GL_EXTENSIONS));
(gdb) step
[New Thread 12072.0x370]

Thread 1 hit Breakpoint 3, print_extensions (extension=0x0)
    at E:\LIBS\LIBS81Build\allegro5\src\opengl\extensions.c:187
187        ASSERT(extension);
(gdb)
</pre><p>

First, _al_get_suggested_display_option has a bug. Second, glGetString(GL_EXTENSIONS) is returning NULL.</p><p>The code for getting display options is here :</p><div class="source-code"><div class="toolbar"><span class="name">display_settings.c</span><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 51</span><span class="k1">int</span> _al_get_suggested_display_option<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>d,
<span class="number"> 52</span>   <span class="k1">int</span> option, <span class="k1">int</span> default_value<span class="k2">)</span>
<span class="number"> 53</span><span class="k2">{</span>
<span class="number"> 54</span>   ALLEGRO_EXTRA_DISPLAY_SETTINGS <span class="k3">*</span>s <span class="k3">=</span> <span class="k3">&amp;</span>d-&gt;extra_settings<span class="k2">;</span>
<span class="number"> 55</span>   <span class="k1">uint64_t</span> flags <span class="k3">=</span> s-&gt;required <span class="k3">|</span> s-&gt;suggested<span class="k2">;</span>
<div class="highlight"><span class="number"> 56</span>   <span class="k1">if</span> <span class="k2">(</span>flags <span class="k3">&amp;</span> <span class="k2">(</span><span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> option<span class="k2">)</span><span class="k2">)</span></div><span class="number"> 57</span>      <span class="k1">return</span> s-&gt;settings<span class="k2">[</span>option<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 58</span>   <span class="k1">return</span> default_value<span class="k2">;</span>
<span class="number"> 59</span><span class="k2">}</span>
<span class="number"> 60</span>
<span class="number"> 61</span>
<span class="number"> 62</span><span class="c">/* Function: al_get_new_display_option</span>
<span class="number"> 63</span><span class="c"> */</span>
<span class="number"> 64</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/al_get_new_display_option"><span class="a">al_get_new_display_option</span></a><span class="k2">(</span><span class="k1">int</span> option, <span class="k1">int</span> <span class="k3">*</span>importance<span class="k2">)</span>
<span class="number"> 65</span><span class="k2">{</span>
<span class="number"> 66</span>   ALLEGRO_EXTRA_DISPLAY_SETTINGS <span class="k3">*</span>extras<span class="k2">;</span>
<span class="number"> 67</span>   extras <span class="k3">=</span> _al_get_new_display_settings<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<div class="highlight"><span class="number"> 68</span>   <span class="k1">if</span> <span class="k2">(</span>extras-&gt;required <span class="k3">&amp;</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int64_t</span><span class="k2">)</span><span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> option<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></div><span class="number"> 69</span>      <span class="k1">if</span> <span class="k2">(</span>importance<span class="k2">)</span> <span class="k3">*</span>importance <span class="k3">=</span> ALLEGRO_REQUIRE<span class="k2">;</span>
<span class="number"> 70</span>      <span class="k1">return</span> extras-&gt;settings<span class="k2">[</span>option<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 71</span>   <span class="k2">}</span>
<div class="highlight"><span class="number"> 72</span>   <span class="k1">if</span> <span class="k2">(</span>extras-&gt;suggested <span class="k3">&amp;</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">int64_t</span><span class="k2">)</span><span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> option<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></div><span class="number"> 73</span>      <span class="k1">if</span> <span class="k2">(</span>importance<span class="k2">)</span> <span class="k3">*</span>importance <span class="k3">=</span> ALLEGRO_SUGGEST<span class="k2">;</span>
<span class="number"> 74</span>      <span class="k1">return</span> extras-&gt;settings<span class="k2">[</span>option<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 75</span>   <span class="k2">}</span>
<span class="number"> 76</span>   <span class="k1">if</span> <span class="k2">(</span>importance<span class="k2">)</span> <span class="k3">*</span>importance <span class="k3">=</span> ALLEGRO_DONTCARE<span class="k2">;</span>
<span class="number"> 77</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 78</span><span class="k2">}</span>
</div></div><p>

The two functions do something slightly different. One uses <span class="source-code"><span class="k2">(</span><span class="k1">int64_t</span><span class="k2">)</span><span class="n">1</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> option<span class="k2">)</span></span> to access extras-&gt;suggested and required. The first uses (1 &lt;&lt; option). ALLEGRO_OPENGL_MAJOR_VERSION has a value of 33 and ALLEGRO_OPENGL_MINOR_VERSION has a value of 34. Which means 1 &lt;&lt; 33 gets bit shifted off of the universe and therefore fails.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 23 Oct 2018 10:31:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I also saw that there was a bug. The truth is not as detailed as you. Great job!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (I-am-bigov)</author>
		<pubDate>Tue, 23 Oct 2018 10:39:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There are more problems.</p><p>For one, _al_get_suggested_display_option uses display-&gt;extra_settings, and al_get_new_display_option uses tls-&gt;new_display_settings, which are completely different.</p><p>I changed create_display_internals to use al_get_new_display_option and now it correctly sets a 3.2 OpenGL context, but fails inside the call to glGetString as if the render context was bad.</p><p><b>EDIT</b><br />glGetString returns 1280 INVALID_ENUM for getLastError. Don&#39;t know what that means. OpenGL 3.2 is being set and made current.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 24 Oct 2018 01:10:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>glGetString(GL_EXTENSIONS) is not valid OpenGL 3.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Wed, 24 Oct 2018 02:25:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>EDIT</b><br />How am I supposed to know that? They don&#39;t list version numbers on any docs I&#39;ve seen.</p><p><a href="https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glGetString.xml">https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glGetString.xml</a></p><p><a href="https://www.khronos.org/opengl/wiki/GLAPI/glGetString">https://www.khronos.org/opengl/wiki/GLAPI/glGetString</a></p><p>I also tried to work around with GL get string I and it didn&#39;t work either.</p><p><b>EDIT2</b>
</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>Allegro version: <span class="n">5</span>.<span class="n">2</span>.<span class="n">5</span>.<span class="n">0</span>
<span class="number">  2</span><span class="n">3</span> , MAJOR
<span class="number">  3</span><span class="n">2</span> , MINOR
<span class="number">  4</span><span class="k2">[</span>New Thread <span class="n">3320</span>.<span class="n">0x2c48</span><span class="k2">]</span>
<span class="number">  5</span><span class="k2">[</span>New Thread <span class="n">3320</span>.<span class="n">0x3220</span><span class="k2">]</span>
<span class="number">  6</span><span class="k2">[</span>New Thread <span class="n">3320</span>.<span class="n">0x1310</span><span class="k2">]</span>
<span class="number">  7</span><span class="k2">[</span>New Thread <span class="n">3320</span>.<span class="n">0x2890</span><span class="k2">]</span>
<span class="number">  8</span><span class="k2">[</span>Thread <span class="n">3320</span>.<span class="n">0x3220</span> exited with code <span class="n">0</span><span class="k2">]</span>
<span class="number">  9</span><span class="k2">[</span>New Thread <span class="n">3320</span>.<span class="n">0xef4</span><span class="k2">]</span>
<span class="number"> 10</span>
<span class="number"> 11</span>Thread <span class="n">1</span> received <a href="http://www.delorie.com/djgpp/doc/libc/libc_724.html" target="_blank">signal</a> SIGSEGV, Segmentation fault.
<span class="number"> 12</span><span class="n">0x00000000</span> in ?? <span class="k2">(</span><span class="k2">)</span>
<span class="number"> 13</span><span class="k2">(</span>gdb<span class="k2">)</span> bt
<span class="number"> 14</span><span class="p">#0  0x00000000 in ?? ()</span>
<span class="number"> 15</span><span class="p">#1  0x0042a771 in print_extensions_3_0 () at E:\LIBS\LIBS81Build\allegro5\src\opengl\extensions.c:214</span>
<span class="number"> 16</span><span class="p">#2  0x0043c779 in _al_ogl_manage_extensions (gl_disp=0x10c9be8)</span>
<span class="number"> 17</span>    at E:\LIBS\LIBS81Build\allegro5\src\opengl\extensions.c:735
<span class="number"> 18</span><span class="p">#3  0x0044451e in create_display_internals (wgl_disp=0x10c9be8)</span>
<span class="number"> 19</span>    at E:\LIBS\LIBS81Build\allegro5\src\win\wgl_disp.c:1000
<span class="number"> 20</span><span class="p">#4  0x00444769 in wgl_create_display (w=640, h=480) at E:\LIBS\LIBS81Build\allegro5\src\win\wgl_disp.c:1059</span>
<span class="number"> 21</span><span class="p">#5  0x00401a34 in al_create_display (w=640, h=480) at E:\LIBS\LIBS81Build\allegro5\src\display.c:53</span>
<span class="number"> 22</span><span class="p">#6  0x004017e9 in main (argc=1, argv=0x10c1d70) at ogltest.cpp:37</span>
<span class="number"> 23</span><span class="k2">(</span>gdb<span class="k2">)</span> frame <span class="n">1</span>
<span class="number"> 24</span><span class="p">#1  0x0042a771 in print_extensions_3_0 () at E:\LIBS\LIBS81Build\allegro5\src\opengl\extensions.c:214</span>
<span class="number"> 25</span><span class="n">214</span>           name <span class="k3">=</span> glGetStringi<span class="k2">(</span>GL_EXTENSIONS, i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k2">(</span>gdb<span class="k2">)</span> p glGetStringi
<span class="number"> 27</span>No symbol <span class="s">"glGetStringi"</span> in current context.
<span class="number"> 28</span><span class="k2">(</span>gdb<span class="k2">)</span> p _al_glGetStringi
<span class="number"> 29</span>$<span class="n">1</span> <span class="k3">=</span> <span class="k2">(</span>_ALLEGRO_glGetStringi_t<span class="k2">)</span> <span class="n">0x0</span>
<span class="number"> 30</span><span class="k2">(</span>gdb<span class="k2">)</span>
</div></div><p>

glGetStringi doesn&#39;t exist. It&#39;s a macro for _al_glGetStringi, which is NULL.</p><p>This is using modified code to use print_extensions_3_0, which uses allegro&#39;s stored gl function pointer, which is null.</p><p>I&#39;m assuming this needs to be filled in somehow?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 25 Oct 2018 02:55:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You may be calling it too early, before the display was created.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 25 Oct 2018 03:17:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Not me, this is allegro code that was there long before I got there.</p><p><a href="https://github.com/liballeg/allegro5/blob/master/src/opengl/extensions.c#L733">https://github.com/liballeg/allegro5/blob/master/src/opengl/extensions.c#L733</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 25 Oct 2018 03:20:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Basically all the OpenGL functions are loaded dynamically (using glx) after the display is created. If there&#39;s code calling an OpenGL function before that then that&#39;s indeed a bug.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 25 Oct 2018 03:22:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>See my link in the edit.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 25 Oct 2018 03:25:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In your link you can see how OpenGL.so is loaded in the lines right afterwards... What if you just move it down a few lines?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 25 Oct 2018 17:13:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The question is how to handle the different versions of opengl.<br /> 
</p><div class="quote_container"><div class="title"><a href="https://www.khronos.org/opengl/wiki/Load_OpenGL_Functions">Load OpenGL Programs</a> said:</div><div class="quote"><p>
If the function is an extension, we need to check to see if the extension is supported. In OpenGL versions before 3.0, this was done by calling glGetString(GL_EXTENSIONS). This returned a large string of space-separated extension names. This was abandoned, deprecated in 3.0 and removed in 3.1, because it frequently caused parsing problems for users. Some users also tried to use strcpy to copy the string to a fixed-size buffer, which could easily cause a buffer overrun if the string had too many extensions.</p><p>In modern, post GL 3.0 code, the correct way to query which extensions are supported is to use glGetIntegerv(GL_NUM_EXTENSIONS) to get the number of extensions, and then use glGetStringi(GL_EXTENSIONS, i), where i is a number between 0 and the number of extensions - 1. Because glGetStringi is not a GL 1.1 function, you will need to load this function before using it on Windows machines.
</p></div></div><p>

Which means we can&#39;t always rely on the old buggy code to work. It&#39;s amazing it did. I think if we use the new way it will work. I&#39;ll try moving it down, but it&#39;s part of _al_opengl_manage_extensions().</p><p>A few minor revisions and all should be fixed. It&#39;s not a far reaching fix though, as there are design problems with _al_get_suggested_display_option that conflict with al_get_new_display_option. That needs to be investigated more thoroughly.</p><p>Here&#39;s an example program that demonstrates the new patch :
</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="number">  2</span><span class="p">#include "allegro5/allegro.h"</span>
<span class="number">  3</span><span class="p">#include "allegro5/allegro_opengl.h"</span>
<span class="number">  4</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">void</span> ERR<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> err<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span> , err<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span><span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argc<span class="k2">;</span>
<span class="number"> 12</span>   <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>argv<span class="k2">;</span>
<span class="number"> 13</span>   
<span class="number"> 14</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> ERR<span class="k2">(</span><span class="s">"failed to initialize allegro!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>  <span class="k1">uint32_t</span> version <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_allegro_version"><span class="a">al_get_allegro_version</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <span class="k1">unsigned</span> <span class="k1">int</span> major <span class="k3">=</span> version <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">24</span><span class="k2">;</span>
<span class="number"> 18</span>  <span class="k1">unsigned</span> <span class="k1">int</span> minor <span class="k3">=</span> <span class="k2">(</span>version <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">unsigned</span> <span class="k1">int</span> revision <span class="k3">=</span> <span class="k2">(</span>version <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k1">unsigned</span> <span class="k1">int</span> release <span class="k3">=</span> version <span class="k3">&amp;</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 21</span>  std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Allegro version: "</span>
<span class="number"> 22</span>    <span class="k3">&lt;</span><span class="k3">&lt;</span> major <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> minor <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> revision <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"."</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> release <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n"</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</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"> 25</span>
<span class="number"> 26</span>  <span class="k1">auto</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> <span class="n">30</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">auto</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"> 28</span>
<span class="number"> 29</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_WINDOWED <span class="k3">|</span> ALLEGRO_RESIZABLE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>  <span class="k1">int</span> vmajor <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 31</span>  <span class="k1">int</span> vminor <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 32</span>  <span class="k1">if</span> <span class="k2">(</span>argc <span class="k3">=</span><span class="k3">=</span> <span class="n">3</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 33</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span> <span class="k3">=</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_741.html" target="_blank">sscanf</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> , <span class="s">"%d"</span> , <span class="k3">&amp;</span>vmajor<span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="n">1</span> <span class="k3">=</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_741.html" target="_blank">sscanf</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> , <span class="s">"%d"</span> , <span class="k3">&amp;</span>vminor<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 34</span>         <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_OPENGL_MAJOR_VERSION, vmajor, ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>         <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_OPENGL_MINOR_VERSION, vminor, ALLEGRO_REQUIRE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>      <span class="k2">}</span>
<span class="number"> 37</span>  <span class="k2">}</span>
<span class="number"> 38</span>  
<span class="number"> 39</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d , MAJOR\n"</span> , <a href="http://www.allegro.cc/manual/al_get_new_display_option"><span class="a">al_get_new_display_option</span></a><span class="k2">(</span>ALLEGRO_OPENGL_MAJOR_VERSION , <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d , MINOR\n"</span> , <a href="http://www.allegro.cc/manual/al_get_new_display_option"><span class="a">al_get_new_display_option</span></a><span class="k2">(</span>ALLEGRO_OPENGL_MINOR_VERSION , <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>  
<span class="number"> 42</span>  
<span class="number"> 43</span>   <span class="k1">auto</span> display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 44</span>   <span class="k1">if</span><span class="k2">(</span>nullptr <span class="k3">=</span><span class="k3">=</span> display<span class="k2">)</span> ERR <span class="k2">(</span><span class="s">"failed to create display!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span><span class="c">//  al_set_current_opengl_context(display);</span>
<span class="number"> 46</span>
<span class="number"> 47</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"> 48</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"> 49</span>
<span class="number"> 50</span>   std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"al opengl version: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::hex <span class="k3">&lt;</span><span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_opengl_version"><span class="a">al_get_opengl_version</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span>   std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"disp options: OPENGL_MAJOR = "</span>
<span class="number"> 53</span>            <span class="k3">&lt;</span><span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_display_option"><span class="a">al_get_display_option</span></a><span class="k2">(</span>display, ALLEGRO_OPENGL_MAJOR_VERSION<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">", "</span>
<span class="number"> 54</span>            <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"OPENGL_MINOR = "</span>
<span class="number"> 55</span>            <span class="k3">&lt;</span><span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_display_option"><span class="a">al_get_display_option</span></a><span class="k2">(</span>display, ALLEGRO_OPENGL_MINOR_VERSION<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n"</span><span class="k2">;</span>
<span class="number"> 56</span>
<span class="number"> 57</span>   <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>            
<span class="number"> 59</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 60</span><span class="k2">}</span>
</div></div><p>

<b>EDIT</b> Removed patch. Not ready yet.</p><p><b>EDIT</b><br />It seems I have fixed the problem with glGetString(GL_EXTENSIONS) being used on contexts greater than or equal to 3.</p><p>There is another problem though, and that is that the members of the display options are not being filled in with ALLEGRO_OPENGL_MAJOR_VERSION and ALLEGRO_OPENGL_MINOR_VERSION. That should be fixed now too.</p><p>My latest pull request is here :<br /><a href="https://github.com/EdgarReynaldo/allegro5/pull/1">https://github.com/EdgarReynaldo/allegro5/pull/1</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 29 Oct 2018 00:28:03 +0000</pubDate>
	</item>
</rss>
