<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>A5 glCreateShaderObject/program crash? Is glewInit() needed?</title>
		<link>http://www.allegro.cc/forums/view/611685</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 24 Dec 2012 06:00:32 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to get my code that uses opengl and allegro to work..</p><p>I was following the example (ex_opengl_pixel_shader), and right after it makes the display, it does some shader stuff.</p><p>To make it not crash, I can call glewInit(), but is that necessary or valid? I have a feeling it&#39;d screw with all sorts of things.</p><p>But when I try to use glewInit(), I cannot for the life of me, pass a valid sampler2d..but that issue is for another thread, i think.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">void</span> Game::init<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="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">  4</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">  5</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">  6</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">  7</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">  8</span>    Debug::log<span class="k2">(</span>Debug::Area::System<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Using allegro version: "</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="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    Debug::fatal<span class="k2">(</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>, Debug::Area::System, <span class="s">"Failure to init allegro"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span><span class="c">//    Debug::fatal(al_init_acodec_addon(), Debug::Area::System, "Failure to init acodec addon");</span>
<span class="number"> 14</span><span class="c">////FIXME:    Debug::fatal(al_init_native_dialog_addon(), Debug::Area::System, "Failure to init native dialog addon");</span>
<span class="number"> 15</span><span class="c">//    Debug::fatal(al_init_primitives_addon(), Debug::Area::System, "Failure to init primitives addon");</span>
<span class="number"> 16</span><span class="c">//    Debug::fatal(al_init_ttf_addon(), Debug::Area::System, "Failure to init ttf addon");</span>
<span class="number"> 17</span><span class="c">//    Debug::fatal(al_init_image_addon(), Debug::Area::System, "Failure to init image addon");</span>
<span class="number"> 18</span><span class="c">//    Debug::fatal(al_install_keyboard(), Debug::Area::System, "Failure to install keyboard");</span>
<span class="number"> 19</span><span class="c">//    Debug::fatal(al_install_mouse(), Debug::Area::System, "Failure to install mouse");</span>
<span class="number"> 20</span><span class="c">//</span>
<span class="number"> 21</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>
<span class="number"> 22</span><span class="c">//    al_set_new_display_option( ALLEGRO_VSYNC, 2, ALLEGRO_REQUIRE );</span>
<span class="number"> 23</span>
<span class="number"> 24</span>    m_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><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>    Debug::fatal<span class="k2">(</span>m_display, Debug::Area::Graphics, <span class="s">"display creation failed"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span><span class="c">//FIXME: needed?    glewInit();</span>
<span class="number"> 28</span>    
<span class="number"> 29</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_have_opengl_extension"><span class="a">al_have_opengl_extension</span></a><span class="k2">(</span><span class="s">"GL_EXT_framebuffer_object"</span><span class="k2">)</span>
<span class="number"> 30</span>        <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span><a href="http://www.allegro.cc/manual/al_have_opengl_extension"><span class="a">al_have_opengl_extension</span></a><span class="k2">(</span><span class="s">"GL_ARB_fragment_shader"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>        Debug::fatal<span class="k2">(</span><span class="k1">true</span>, Debug::Area::Graphics, <span class="k2">(</span><span class="s">"Fragment shaders not supported.\n"</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>        <span class="k2">}</span>
<span class="number"> 33</span>        
<span class="number"> 34</span>        
<span class="number"> 35</span>        glCreateShaderObjectARB<span class="k2">(</span>GL_FRAGMENT_SHADER_ARB<span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Predator106)</author>
		<pubDate>Sun, 23 Dec 2012 13:13:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t quite understand the question you&#39;re asking, but as far as using OpenGL and Allegro code together, Allegro will handle everything OpenGL needs done on its own up to the point where you need to take control of OpenGL yourself. At that point, you simply take over for as long as you need, then just let Allegro continue doing its thing. In fact, you can mix OpenGL and Allegro calls together, just keep a couple things in mind:</p><p>1. You need to use al_get_opengl_texture() in order to access the OpenGL texture IDs of your ALLEGRO_BITMAP objects.</p><p>2. ex_opengl_pixel_shader() doesn&#39;t actually do everything perfectly. It makes a couple mistakes yet still works anyways because of the state-machine nature of OpenGL. Here&#39;s an example of the code I wrote for my current game project in order to load a particular shader program into video memory, turn it on, and unload it when I&#39;m done with it.</p><p>For reference:
</p><ul><li><p>&quot;VBlur1024&quot; and &quot;VBlur1024_shader&quot; are of type GLhandleARB
</p></li><li><p>&quot;VBlur1024_program&quot; and &quot;VBlur1024_program_len&quot; refer to the actual shader code and the number of lines in it
</p></li><li><p>&quot;source1&quot; is the name of my sampler2D in my actual shader code</p></li></ul><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">void</span> GFrags_Load_VBlur1024 <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">if</span> <span class="k2">(</span>VBlur1024_loaded<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number">  4</span>  VBlur1024_shader <span class="k3">=</span> glCreateShaderObjectARB<span class="k2">(</span>GL_FRAGMENT_SHADER_ARB<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  glShaderSourceARB<span class="k2">(</span>VBlur1024_shader,VBlur1024_program_len,VBlur1024_program,NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  glCompileShaderARB<span class="k2">(</span>VBlur1024_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  VBlur1024 <span class="k3">=</span> glCreateProgramObjectARB<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>  glAttachObjectARB<span class="k2">(</span>VBlur1024,VBlur1024_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>  glLinkProgramARB<span class="k2">(</span>VBlur1024<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>  VBlur1024_loaded <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 11</span><span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">void</span> GFrags_Use_VBlur1024 <span class="k2">(</span>GLuint source_texture<span class="k2">)</span>
<span class="number"> 14</span><span class="k2">{</span>
<span class="number"> 15</span>  GLint loc<span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>VBlur1024_loaded<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 17</span>  glUseProgramObjectARB<span class="k2">(</span>VBlur1024<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  glActiveTexture<span class="k2">(</span>GL_TEXTURE0<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  glBindTexture<span class="k2">(</span>GL_TEXTURE_2D,source_texture<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  loc <span class="k3">=</span> glGetUniformLocationARB<span class="k2">(</span>VBlur1024,<span class="s">"source1"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>  glUniform1iARB<span class="k2">(</span>loc,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="k1">void</span> GFrags_Unload_VBlur1024 <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number"> 25</span><span class="k2">{</span>
<span class="number"> 26</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>VBlur1024_loaded<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number"> 27</span>  glDetachObjectARB<span class="k2">(</span>VBlur1024, VBlur1024_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>  glDeleteObjectARB<span class="k2">(</span>VBlur1024_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>  VBlur1024_loaded <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 30</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Sun, 23 Dec 2012 17:06:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You did answer part of my question, but for some reason I can&#39;t run any GL commands without crashing on them, without running glewInit() after I make a display. I don&#39;t even know if running glewInit() is compatible with allegro...</p><p>I&#39;m using this, as well..
</p><div class="source-code snippet"><div class="inner"><pre>    <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_OPENGL_FORWARD_COMPATIBLE<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

and adding ALLEGRO_OPENGL_3_0 to it results in X saying error, failed request: GLXBadFBConfig...and the application locking up there...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Predator106)</author>
		<pubDate>Mon, 24 Dec 2012 00:27:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ALLEGRO_OPENGL_FORWARD_COMPATIBLE is meant to prevent the use of depreciated functions and furthermore, Allegro graphical functions cannot properly be used beside OpenGL calls while using this flag. (At least, as far as the manual is concerned.)</p><p>Try removing this flag.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Mon, 24 Dec 2012 06:00:32 +0000</pubDate>
	</item>
</rss>
