Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 8ffe23af9b6e2265bcac8526648e8186 > files > 94

alleggl-devel-0.4.3-8.fc14.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>AllegroGL: glext.c Source File</title>
<link href="alleggl.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.2 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li class="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul>
</div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul>
</div>
<h1>glext.c</h1><a href="glext_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* This code is (C) AllegroGL contributors, and double licensed under</span>
<a name="l00002"></a>00002 <span class="comment"> * the GPL and zlib licenses. See gpl.txt or zlib.txt for details.</span>
<a name="l00003"></a>00003 <span class="comment"> */</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include "<a class="code" href="alleggl_8h.html" title="Main header file for AllegroGL.">alleggl.h</a>"</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "allglint.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00011"></a>00011 <span class="preprocessor">#ifdef ALLEGRO_MACOSX</span>
<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#include &lt;OpenGL/glu.h&gt;</span>
<a name="l00013"></a>00013 <span class="preprocessor">#else</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="preprocessor">#include &lt;GL/glu.h&gt;</span>
<a name="l00015"></a>00015 <span class="preprocessor">#endif</span>
<a name="l00016"></a>00016 <span class="preprocessor"></span>
<a name="l00017"></a>00017 <span class="preprocessor">#include &lt;allegro/internal/aintern.h&gt;</span>
<a name="l00018"></a>00018 
<a name="l00019"></a>00019 
<a name="l00020"></a>00020 <span class="comment">/* GL extension Structure. Holds the extension pointers for a single context */</span>
<a name="l00021"></a>00021 <span class="preprocessor">#define AGL_API(type, name, args) AGL_##name##_t name;</span>
<a name="l00022"></a><a class="code" href="structAGL__EXT.html">00022</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structAGL__EXT.html">AGL_EXT</a> {
<a name="l00023"></a>00023 <span class="preprocessor">#   include "allegrogl/GLext/gl_ext_api.h"</span>
<a name="l00024"></a>00024 <span class="preprocessor">#ifdef ALLEGRO_WINDOWS</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/wgl_ext_api.h"</span>
<a name="l00026"></a><a class="code" href="structAGL__EXT.html#4609c789993d960a6c59eee8fc744270">00026</a> <span class="preprocessor">#elif defined ALLEGRO_UNIX</span>
<a name="l00027"></a><a class="code" href="structAGL__EXT.html#fe04655d4ede75a5fcb5e3487a61e5a0">00027</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/glx_ext_api.h"</span>
<a name="l00028"></a><a class="code" href="structAGL__EXT.html#21ebe683fd02055f64cf81c4811c78d4">00028</a> <span class="preprocessor">#endif</span>
<a name="l00029"></a><a class="code" href="structAGL__EXT.html#a7f72033bb34aac56574672657ebd7bc">00029</a> <span class="preprocessor"></span>} <a class="code" href="structAGL__EXT.html">AGL_EXT</a>;
<a name="l00030"></a><a class="code" href="structAGL__EXT.html#83ef6351836834a5dbe9c825c51c7361">00030</a> <span class="preprocessor">#undef AGL_API</span>
<a name="l00031"></a><a class="code" href="structAGL__EXT.html#2cab98ded71a59c82b96a5246b0b18be">00031</a> <span class="preprocessor"></span>
<a name="l00032"></a><a class="code" href="glext_8c.html#09462782acac95f9a6da67adf659ed6e">00032</a> <span class="preprocessor">#define PREFIX_I                "agl-ext INFO: "</span>
<a name="l00033"></a><a class="code" href="glext_8c.html#d8bfd440530d371de892a20efd3bbc2a">00033</a> <span class="preprocessor"></span><span class="preprocessor">#define PREFIX_W                "agl-ext WARNING: "</span>
<a name="l00034"></a><a class="code" href="glext_8c.html#8c04b6ea901068c5cc4020e9a18c0cbe">00034</a> <span class="preprocessor"></span><span class="preprocessor">#define PREFIX_E                "agl-ext ERROR: "</span>
<a name="l00035"></a><a class="code" href="structAGL__EXT.html#7d8dd699398f5d81e1f0d42c8a7b7543">00035</a> <span class="preprocessor"></span>
<a name="l00036"></a><a class="code" href="structAGL__EXT.html#2f24fb47c872fb4d8fc6754611be0d78">00036</a> 
<a name="l00037"></a><a class="code" href="structAGL__EXT.html#7859a93af26dd5a3752fcc93ee67ba49">00037</a> <span class="comment">/* Current driver info */</span>
<a name="l00038"></a><a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">00038</a> <span class="keyword">struct </span><a class="code" href="structallegro__gl__info.html">allegro_gl_info</a> <a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a>;
<a name="l00039"></a><a class="code" href="structAGL__EXT.html#8eb6695eaad8b39e19a7dd365a700453">00039</a> 
<a name="l00040"></a><a class="code" href="structAGL__EXT.html#fc6c44af5ef8a530f17f5333b532b3fd">00040</a> 
<a name="l00041"></a>00041 
<a name="l00055"></a><a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436">00055</a> <span class="keyword">struct </span>AGL_EXTENSION_LIST_GL <a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>;
<a name="l00056"></a><a class="code" href="structAGL__EXT.html#0b3d72f390edfa002b1d965c9db66ca5">00056</a> 
<a name="l00057"></a><a class="code" href="structAGL__EXT.html#20040455edaa32dd2e61f666d111603e">00057</a> 
<a name="l00058"></a><a class="code" href="structAGL__EXT.html#aa4dd6c2de1b14be363251845db9a67c">00058</a> 
<a name="l00064"></a><a class="code" href="structAGL__EXT.html#7137c57075c48838e9e8df9c7aea5931">00064</a> <span class="preprocessor">#ifdef ALLEGRO_UNIX</span>
<a name="l00065"></a><a class="code" href="structAGL__EXT.html#4e4b068320fc08db25b9c08f8d9ff6cd">00065</a> <span class="preprocessor"></span><span class="keyword">struct </span>AGL_EXTENSION_LIST_GLX allegro_gl_extensions_GLX;
<a name="l00066"></a><a class="code" href="structAGL__EXT.html#3ae8c353d1155c7808155fd78feb80df">00066</a> <span class="preprocessor">#endif</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span>
<a name="l00068"></a>00068 
<a name="l00069"></a>00069 
<a name="l00075"></a><a class="code" href="structAGL__EXT.html#90c04d72ba449baaebfa04eb55033e61">00075</a> <span class="preprocessor">#ifdef ALLEGRO_WINDOWS</span>
<a name="l00076"></a><a class="code" href="structAGL__EXT.html#6f594a5869357b83d58b125c484349f7">00076</a> <span class="preprocessor"></span><span class="keyword">struct </span>AGL_EXTENSION_LIST_WGL allegro_gl_extensions_WGL;
<a name="l00077"></a><a class="code" href="structAGL__EXT.html#2b03565977e613b0f9a3cfe282ecb3f2">00077</a> <span class="preprocessor">#endif</span>
<a name="l00078"></a><a class="code" href="structAGL__EXT.html#4b42fe7c1c278fa60af0d09363063e5b">00078</a> <span class="preprocessor"></span>
<a name="l00079"></a><a class="code" href="structAGL__EXT.html#23918ab0034a68d3406023fefa8fcac5">00079</a> 
<a name="l00080"></a><a class="code" href="structAGL__EXT.html#741c289a9f008c230f950f1353b7da52">00080</a> 
<a name="l00081"></a><a class="code" href="structAGL__EXT.html#2b08042871f356321fe79cf4c9da6e0c">00081</a> <span class="comment">/* Current context */</span>
<a name="l00082"></a><a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b">00082</a> <a class="code" href="structAGL__EXT.html">AGL_EXT</a> *<a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b" title="List of WGL extensions supported by AllegroGL.">agl_extension_table</a> = NULL;
<a name="l00083"></a><a class="code" href="structAGL__EXT.html#a3860033a7c7ef7dc0b47c47dec20ae5">00083</a> 
<a name="l00084"></a><a class="code" href="structAGL__EXT.html#865c319457d9cde90feb647e7e2cb142">00084</a> 
<a name="l00085"></a><a class="code" href="structAGL__EXT.html#1b2b2be42852888d0081bfe43ca9c9ce">00085</a> <span class="preprocessor">#ifdef ALLEGROGL_GENERIC_DRIVER</span>
<a name="l00086"></a><a class="code" href="structAGL__EXT.html#ad07852ba99d8251789f454c443af618">00086</a> <span class="preprocessor"></span><span class="preprocessor">#include "GL/amesa.h"</span>
<a name="l00087"></a><a class="code" href="structAGL__EXT.html#660f12c6639fc05d0a68c1b97a219b9f">00087</a> <span class="preprocessor">#endif</span>
<a name="l00088"></a><a class="code" href="structAGL__EXT.html#3d27e7591b398587b4d0e5cc03a6969c">00088</a> <span class="preprocessor"></span>
<a name="l00089"></a><a class="code" href="structAGL__EXT.html#739e619e7ed0e3b04e7f7f551dd1a2ea">00089</a> 
<a name="l00090"></a><a class="code" href="structAGL__EXT.html#41e52c94178e466d60f0ed24c4ec5eed">00090</a> <span class="preprocessor">#ifdef ALLEGROGL_HAVE_DYNAMIC_LINK</span>
<a name="l00091"></a><a class="code" href="structAGL__EXT.html#5cc81ae65068ffe9741d88a722d3d40d">00091</a> <span class="preprocessor"></span><span class="preprocessor">#include &lt;dlfcn.h&gt;</span>
<a name="l00092"></a><a class="code" href="structAGL__EXT.html#05cc49363c5f21de5c7e1dfd6a9e4f49">00092</a> 
<a name="l00093"></a><a class="code" href="structAGL__EXT.html#7b99f6638279edd9329955bf1f64a7ff">00093</a> <span class="comment">/* Handle for dynamic library libGL.so */</span>
<a name="l00094"></a><a class="code" href="structAGL__EXT.html#a29c5342119bfe45dfb272497cff42b0">00094</a> <span class="keyword">static</span> <span class="keywordtype">void</span>* __agl_handle = NULL;
<a name="l00095"></a><a class="code" href="structAGL__EXT.html#dd74b84dc62030c31e3d262acb5c110b">00095</a> <span class="comment">/* Pointer to glXGetProcAddressARB */</span>
<a name="l00096"></a><a class="code" href="structAGL__EXT.html#0a3e4ddd5533742c0e40ce9b2b29330e">00096</a> <span class="keyword">typedef</span> <span class="keywordtype">void</span>* (*GLXGETPROCADDRESSARBPROC) (<span class="keyword">const</span> GLubyte*);
<a name="l00097"></a><a class="code" href="structAGL__EXT.html#f867b6d0f625da29916ba5e933cff4df">00097</a> <span class="keyword">static</span> GLXGETPROCADDRESSARBPROC <a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a>;
<a name="l00098"></a><a class="code" href="structAGL__EXT.html#d3f7350c252029e3b75063d0a358e21e">00098</a> <span class="preprocessor">#else</span>
<a name="l00099"></a><a class="code" href="structAGL__EXT.html#b7caa8f4f86f21713d615d0c9f314287">00099</a> <span class="preprocessor"></span><span class="comment">/* Tries static linking */</span>
<a name="l00100"></a><a class="code" href="structAGL__EXT.html#0d3fa826d2a6d1e5161fa60c8ee1c0db">00100</a> <span class="preprocessor">#ifdef ALLEGROGL_GLXGETPROCADDRESSARB</span>
<a name="l00101"></a><a class="code" href="structAGL__EXT.html#cec3b57e366acad09623468a5084a309">00101</a> <span class="preprocessor"></span><span class="preprocessor">#define aglXGetProcAddress glXGetProcAddressARB</span>
<a name="l00102"></a><a class="code" href="structAGL__EXT.html#a69c31ebf8541852c64528ec1f777d64">00102</a> <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00103"></a><a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">00103</a> <span class="preprocessor"></span><span class="preprocessor">#define aglXGetProcAddress glXGetProcAddress</span>
<a name="l00104"></a><a class="code" href="structAGL__EXT.html#ec73667d7205694579d8ab01414d0e29">00104</a> <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00105"></a><a class="code" href="structAGL__EXT.html#2804dc86d6dcc21d3006c4904bd854c3">00105</a> <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00106"></a><a class="code" href="structAGL__EXT.html#0dd6c827a0e9b0840b5d7ee9f3ab13c1">00106</a> <span class="preprocessor"></span>
<a name="l00107"></a><a class="code" href="structAGL__EXT.html#1b8c23d377e24c4e7de4006f4d144843">00107</a> 
<a name="l00108"></a><a class="code" href="structAGL__EXT.html#457f4e159c677239e0d47c171a077bc4">00108</a> <span class="preprocessor">#ifdef ALLEGRO_MACOSX</span>
<a name="l00109"></a><a class="code" href="structAGL__EXT.html#7101c6d610afe4c86f1cb860cb01e540">00109</a> <span class="preprocessor"></span><span class="preprocessor">#undef TRUE</span>
<a name="l00110"></a><a class="code" href="structAGL__EXT.html#fd760e90cd94515797fb8e3d54acd7f6">00110</a> <span class="preprocessor"></span><span class="preprocessor">#undef FALSE</span>
<a name="l00111"></a><a class="code" href="structAGL__EXT.html#0189910965a4c75acb1ccc112358ef8d">00111</a> <span class="preprocessor"></span><span class="preprocessor">#include &lt;Carbon/Carbon.h&gt;</span>
<a name="l00112"></a><a class="code" href="structAGL__EXT.html#c0019c1c50c921f6edb213101fbe43ab">00112</a> <span class="preprocessor">#undef TRUE</span>
<a name="l00113"></a><a class="code" href="structAGL__EXT.html#3629076092057b7a6d78b3a7a676b1c2">00113</a> <span class="preprocessor"></span><span class="preprocessor">#undef FALSE</span>
<a name="l00114"></a><a class="code" href="structAGL__EXT.html#7ac83a694f0b4473a4c8f54a6b704cbf">00114</a> <span class="preprocessor"></span><span class="preprocessor">#define TRUE  -1</span>
<a name="l00115"></a><a class="code" href="structAGL__EXT.html#19a0d9f9936e374cbdcc8c72cd46bcdb">00115</a> <span class="preprocessor"></span><span class="preprocessor">#define FALSE 0</span>
<a name="l00116"></a>00116 <span class="preprocessor"></span>
<a name="l00117"></a>00117 <span class="keyword">static</span> CFBundleRef opengl_bundle_ref;
<a name="l00118"></a>00118 <span class="preprocessor">#endif</span>
<a name="l00119"></a><a class="code" href="structAGL__EXT.html#f1fb441b32672a45a0b28debc8a91580">00119</a> <span class="preprocessor"></span>
<a name="l00120"></a><a class="code" href="structAGL__EXT.html#f464fa8f64f91b86a63ece94e00e903f">00120</a> 
<a name="l00121"></a><a class="code" href="structAGL__EXT.html#876342455c165c5cecc48624c7da6c65">00121</a> 
<a name="l00122"></a><a class="code" href="structAGL__EXT.html#2c7b13ad4ca698b9b4c89cd383fa98ef">00122</a> <span class="comment">/* Define the GL API pointers */</span>
<a name="l00123"></a><a class="code" href="glext_8c.html#b0d616adb649364d02a03623f8b0ac6e">00123</a> <span class="preprocessor">#define AGL_API(type, name, args) AGL_##name##_t __agl##name = NULL;</span>
<a name="l00124"></a><a class="code" href="structAGL__EXT.html#21c36ce1a393968ffa7cce07ff80c507">00124</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/gl_ext_api.h"</span>
<a name="l00125"></a><a class="code" href="structAGL__EXT.html#02e0969dce1aa22d19d5ccd883303fce">00125</a> <span class="preprocessor">#undef AGL_API</span>
<a name="l00126"></a><a class="code" href="structAGL__EXT.html#74ba25d9c65928705e7937c59a2695be">00126</a> <span class="preprocessor"></span><span class="preprocessor">#ifdef ALLEGRO_WINDOWS</span>
<a name="l00127"></a><a class="code" href="structAGL__EXT.html#8b969e228da042c8cc34cfca46a1a88d">00127</a> <span class="preprocessor"></span><span class="preprocessor">#define AGL_API(type, name, args) AGL_##name##_t __awgl##name = NULL;</span>
<a name="l00128"></a><a class="code" href="structAGL__EXT.html#e5366d20bf34c1aa592de0768249665d">00128</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/wgl_ext_api.h"</span>
<a name="l00129"></a><a class="code" href="structAGL__EXT.html#564452eb9da45ee685a037ebd330e61b">00129</a> <span class="preprocessor">#undef AGL_API</span>
<a name="l00130"></a><a class="code" href="structAGL__EXT.html#3a03c316ffac45e874722851c5dddb3c">00130</a> <span class="preprocessor"></span><span class="preprocessor">#elif defined ALLEGRO_UNIX</span>
<a name="l00131"></a><a class="code" href="structAGL__EXT.html#f0483a176ec7d9e85684db1492f710cd">00131</a> <span class="preprocessor"></span><span class="preprocessor">#define AGL_API(type, name, args) AGL_##name##_t __aglX##name = NULL;</span>
<a name="l00132"></a><a class="code" href="structAGL__EXT.html#c9d27131b145293f233f7456a0afe03f">00132</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/glx_ext_api.h"</span>
<a name="l00133"></a><a class="code" href="structAGL__EXT.html#9dac17429478eb39560d2eb8911e720f">00133</a> <span class="preprocessor">#undef AGL_API</span>
<a name="l00134"></a><a class="code" href="structAGL__EXT.html#a98cd2f6480d740a8909e9d6c7532b63">00134</a> <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00135"></a><a class="code" href="structAGL__EXT.html#58631feb4f2d3d35bc6603be4a333c9c">00135</a> <span class="preprocessor"></span>
<a name="l00136"></a><a class="code" href="structAGL__EXT.html#cb88f02230614dcd538b80a45ed17f4c">00136</a> 
<a name="l00137"></a><a class="code" href="structAGL__EXT.html#dff8c565e0dc92454d933e8fa7da2fdc">00137</a> 
<a name="l00138"></a><a class="code" href="structAGL__EXT.html#a2191b3861718754a4e5d76da5eecbcd">00138</a> <span class="comment">/* Create the extension table */</span>
<a name="l00139"></a><a class="code" href="glext_8c.html#f9f2eec6fd790ff68c1e204d690820bc">00139</a> <a class="code" href="structAGL__EXT.html">AGL_EXT</a>* <a class="code" href="glext_8c.html#f9f2eec6fd790ff68c1e204d690820bc">__allegro_gl_create_extensions</a>() {
<a name="l00140"></a><a class="code" href="structAGL__EXT.html#4b84a03c4564eeeebce5ebfa624e5672">00140</a> 
<a name="l00141"></a><a class="code" href="structAGL__EXT.html#7e6d79b2648e0d3845690ee51105b9c3">00141</a>     <a class="code" href="structAGL__EXT.html">AGL_EXT</a> *ret = malloc(<span class="keyword">sizeof</span>(<a class="code" href="structAGL__EXT.html">AGL_EXT</a>));
<a name="l00142"></a><a class="code" href="structAGL__EXT.html#534d113aac63f13864cf363587a129e1">00142</a> 
<a name="l00143"></a><a class="code" href="structAGL__EXT.html#5730293dc03e34903a6968a1c84cecb6">00143</a>     <span class="keywordflow">if</span> (!ret) {
<a name="l00144"></a><a class="code" href="structAGL__EXT.html#9189ef626b0dd258cbd3933f719869e4">00144</a>         <span class="keywordflow">return</span> NULL;
<a name="l00145"></a><a class="code" href="structAGL__EXT.html#b438be8e3831982428ca14d737a38c37">00145</a>     }
<a name="l00146"></a><a class="code" href="structAGL__EXT.html#9f8bb131c6542eee3e3ad60a9f85c799">00146</a> 
<a name="l00147"></a><a class="code" href="structAGL__EXT.html#2bfbecd05a8cf6cef216a614b7722376">00147</a>     memset(ret, 0, <span class="keyword">sizeof</span>(<a class="code" href="structAGL__EXT.html">AGL_EXT</a>));
<a name="l00148"></a><a class="code" href="structAGL__EXT.html#4da846f4fbc6c0138ccec9078417375d">00148</a> 
<a name="l00149"></a><a class="code" href="structAGL__EXT.html#06a305e39a50dcb87283a679c378f25c">00149</a>     <span class="keywordflow">return</span> ret;
<a name="l00150"></a><a class="code" href="structAGL__EXT.html#ec2269bc4950a2cf23863d74b030dacc">00150</a> }
<a name="l00151"></a><a class="code" href="structAGL__EXT.html#fc626dcd7b048b518d0b79e0bb004fc4">00151</a> 
<a name="l00152"></a><a class="code" href="structAGL__EXT.html#53401f0fb7e942eba83c24c48deb0cd8">00152</a> 
<a name="l00153"></a><a class="code" href="structAGL__EXT.html#80422fac4640aedfeab74ab351710ed8">00153</a> 
<a name="l00154"></a><a class="code" href="structAGL__EXT.html#58019bdd142b91bb613394c88476b29f">00154</a> <span class="comment">/* Load the extension addresses into the table.</span>
<a name="l00155"></a><a class="code" href="structAGL__EXT.html#5b983a896c5a91ccd5d2dee10890c70e">00155</a> <span class="comment"> * Should only be done on context creation.</span>
<a name="l00156"></a><a class="code" href="structAGL__EXT.html#348f957fe5b11878fcbc35d285034f24">00156</a> <span class="comment"> */</span>
<a name="l00157"></a><a class="code" href="glext_8c.html#d180f183a628d3f777768d4c33cc772d">00157</a> <span class="keywordtype">void</span> <a class="code" href="glext_8c.html#d180f183a628d3f777768d4c33cc772d">__allegro_gl_load_extensions</a>(<a class="code" href="structAGL__EXT.html">AGL_EXT</a> *ext) {
<a name="l00158"></a><a class="code" href="structAGL__EXT.html#e5df1f96d00d88c478a3b0320cb91b0a">00158</a> 
<a name="l00159"></a><a class="code" href="structAGL__EXT.html#7c133a3b41ee8f821e5f52663d3b98fe">00159</a> <span class="preprocessor">#ifdef ALLEGRO_MACOSX</span>
<a name="l00160"></a><a class="code" href="structAGL__EXT.html#9b496e37c7685a62731cd6ede5c62b5f">00160</a> <span class="preprocessor"></span>    CFStringRef function;
<a name="l00161"></a><a class="code" href="structAGL__EXT.html#bd7d0c3dc9c7d1162464ab9a3b175cae">00161</a> <span class="preprocessor">#endif</span>
<a name="l00162"></a><a class="code" href="structAGL__EXT.html#0cfddbcd3b781839654af2e3927c1c1b">00162</a> <span class="preprocessor"></span>
<a name="l00163"></a><a class="code" href="structAGL__EXT.html#bb415b97226b1c1f3dcb187cf8ff2686">00163</a>     <span class="keywordflow">if</span> (!ext) {
<a name="l00164"></a>00164         <span class="keywordflow">return</span>;
<a name="l00165"></a>00165     }
<a name="l00166"></a>00166 <span class="preprocessor">#ifdef ALLEGRO_UNIX</span>
<a name="l00167"></a>00167 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (!<a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a>) {
<a name="l00168"></a><a class="code" href="structAGL__EXT.html#52dede61c883f6b629f34c1e3609db73">00168</a>         <span class="keywordflow">return</span>;
<a name="l00169"></a><a class="code" href="structAGL__EXT.html#f0249b3d1f8dcf371570c922e8fc6047">00169</a>     }
<a name="l00170"></a><a class="code" href="structAGL__EXT.html#3f59dacc808540a6300e5551697e042f">00170</a> <span class="preprocessor">#endif</span>
<a name="l00171"></a><a class="code" href="structAGL__EXT.html#c80621d3999d611130c6a5f63796e75b">00171</a> <span class="preprocessor"></span>
<a name="l00172"></a><a class="code" href="structAGL__EXT.html#69b79e8e0114ab8fbf95462df17e0b1a">00172</a> <span class="preprocessor">#   ifdef ALLEGRO_WINDOWS</span>
<a name="l00173"></a><a class="code" href="structAGL__EXT.html#5797e2f273fce803dd341fe60e1c2203">00173</a> <span class="preprocessor"></span><span class="preprocessor">#   define AGL_API(type, name, args) \</span>
<a name="l00174"></a><a class="code" href="structAGL__EXT.html#fbde4b01e623927562b269386a564c81">00174</a> <span class="preprocessor">        ext-&gt;name = (AGL_##name##_t)wglGetProcAddress("gl" #name); \</span>
<a name="l00175"></a><a class="code" href="structAGL__EXT.html#ef18f65112a3a2596608fa8cbca5653b">00175</a> <span class="preprocessor">        if (ext-&gt;name) { AGL_LOG(2,"gl" #name " successfully loaded\n"); }</span>
<a name="l00176"></a><a class="code" href="structAGL__EXT.html#9785f789b207f189fc7059fcf7bfffa7">00176</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/gl_ext_api.h"</span>
<a name="l00177"></a><a class="code" href="structAGL__EXT.html#91784020f8868fb0a55bef38a7c17635">00177</a> <span class="preprocessor">#   undef AGL_API</span>
<a name="l00178"></a><a class="code" href="structAGL__EXT.html#b06a48193238d022d7d0e5b3e947a774">00178</a> <span class="preprocessor"></span><span class="preprocessor">#   define AGL_API(type, name, args) \</span>
<a name="l00179"></a><a class="code" href="structAGL__EXT.html#e957925f4ce40d51926c895ba0b3db00">00179</a> <span class="preprocessor">        ext-&gt;name = (AGL_##name##_t)wglGetProcAddress("wgl" #name); \</span>
<a name="l00180"></a><a class="code" href="structAGL__EXT.html#33633c1571b9ab2c183b0f370feb9e3e">00180</a> <span class="preprocessor">        if (ext-&gt;name) { AGL_LOG(2,"wgl" #name " successfully loaded\n"); }</span>
<a name="l00181"></a><a class="code" href="structAGL__EXT.html#46e5d685dd144d88765903870f32d493">00181</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/wgl_ext_api.h"</span>
<a name="l00182"></a><a class="code" href="structAGL__EXT.html#eb6c61f1cab32bb6fe7ac837a2388f05">00182</a> <span class="preprocessor">#   undef AGL_API</span>
<a name="l00183"></a><a class="code" href="structAGL__EXT.html#16f7be047611134634a028619e797146">00183</a> <span class="preprocessor"></span><span class="preprocessor">#   elif defined ALLEGRO_UNIX</span>
<a name="l00184"></a><a class="code" href="structAGL__EXT.html#5922609c2e0d46266bfccb2edc6a9cb7">00184</a> <span class="preprocessor"></span><span class="preprocessor">#   define AGL_API(type, name, args) \</span>
<a name="l00185"></a><a class="code" href="structAGL__EXT.html#2562876c98bd82a6ae6b75f547c50381">00185</a> <span class="preprocessor">        ext-&gt;name = (AGL_##name##_t)aglXGetProcAddress((const GLubyte*)"gl" #name); \</span>
<a name="l00186"></a><a class="code" href="structAGL__EXT.html#2c1488076a8fe0e764584094aa515821">00186</a> <span class="preprocessor">        if (ext-&gt;name) { AGL_LOG(2,"gl" #name " successfully loaded\n"); }</span>
<a name="l00187"></a>00187 <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/gl_ext_api.h"</span>
<a name="l00188"></a>00188 <span class="preprocessor">#   undef AGL_API</span>
<a name="l00189"></a>00189 <span class="preprocessor"></span><span class="preprocessor">#   define AGL_API(type, name, args) \</span>
<a name="l00190"></a>00190 <span class="preprocessor">        ext-&gt;name = (AGL_##name##_t)aglXGetProcAddress((const GLubyte*)"glX" #name); \</span>
<a name="l00191"></a><a class="code" href="structAGL__EXT.html#3ff5779f2fbdc772000c7269fd545b25">00191</a> <span class="preprocessor">        if (ext-&gt;name) { AGL_LOG(2,"glX" #name " successfully loaded\n"); }</span>
<a name="l00192"></a><a class="code" href="structAGL__EXT.html#e391bcca5c6cf4f5046f73de224470b6">00192</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/glx_ext_api.h"</span>
<a name="l00193"></a><a class="code" href="structAGL__EXT.html#87cfbbc9286c24d2689d81b22f96283c">00193</a> <span class="preprocessor">#   undef AGL_API</span>
<a name="l00194"></a><a class="code" href="structAGL__EXT.html#daac17068390af014288ff579ff73cf2">00194</a> <span class="preprocessor"></span><span class="preprocessor">#   elif defined ALLEGRO_MACOSX</span>
<a name="l00195"></a><a class="code" href="structAGL__EXT.html#201ecc49fddb47931546d76d9daae70a">00195</a> <span class="preprocessor"></span><span class="preprocessor">#   define AGL_API(type, name, args)                                          \</span>
<a name="l00196"></a><a class="code" href="structAGL__EXT.html#64d4e343da6f9d9a2445bbdd73bd6da6">00196</a> <span class="preprocessor">        function = CFStringCreateWithCString(kCFAllocatorDefault, "gl" #name, \</span>
<a name="l00197"></a><a class="code" href="structAGL__EXT.html#bd683e60f4c3a230a15d808d4a6bbc07">00197</a> <span class="preprocessor">                                                     kCFStringEncodingASCII); \</span>
<a name="l00198"></a><a class="code" href="structAGL__EXT.html#6067097d98ace2752b2f256c55114853">00198</a> <span class="preprocessor">        if (function) {                                                       \</span>
<a name="l00199"></a><a class="code" href="structAGL__EXT.html#f11b6773ce3cf9a1ce285965c43d2a1f">00199</a> <span class="preprocessor">            ext-&gt;name = (AGL_##name##_t)CFBundleGetFunctionPointerForName(    \</span>
<a name="l00200"></a><a class="code" href="structAGL__EXT.html#070dfa3e015ef0cd8ce1af9079bcbff6">00200</a> <span class="preprocessor">                                             opengl_bundle_ref, function);    \</span>
<a name="l00201"></a><a class="code" href="structAGL__EXT.html#2a6c9170877d069e4162f85e424da1b2">00201</a> <span class="preprocessor">            CFRelease(function);                                              \</span>
<a name="l00202"></a><a class="code" href="structAGL__EXT.html#8382ae678cc945c20df5c980345e642f">00202</a> <span class="preprocessor">        }                                                                     \</span>
<a name="l00203"></a><a class="code" href="structAGL__EXT.html#b24b4dc158bcef43406653ec00943d17">00203</a> <span class="preprocessor">        if (ext-&gt;name) { AGL_LOG(2,"gl" #name " successfully loaded\n"); }</span>
<a name="l00204"></a><a class="code" href="structAGL__EXT.html#7359503dc96051d288a8e78c984a291a">00204</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/gl_ext_api.h"</span>
<a name="l00205"></a><a class="code" href="structAGL__EXT.html#27ecc684fa66fb22f6f065a5ea8ded66">00205</a> <span class="preprocessor">#   undef AGL_API</span>
<a name="l00206"></a><a class="code" href="structAGL__EXT.html#f1f0cc9b364859b1a4a46bef27b32ec4">00206</a> <span class="preprocessor"></span><span class="preprocessor">#   endif</span>
<a name="l00207"></a><a class="code" href="structAGL__EXT.html#7e5118f5e61da088ddb465d6ebc59c04">00207</a> <span class="preprocessor"></span>}
<a name="l00208"></a><a class="code" href="structAGL__EXT.html#0050d23de0314c5df67cf16c55054767">00208</a> 
<a name="l00209"></a><a class="code" href="structAGL__EXT.html#edf0fa2857d1507f7e1cc6c52a722b6d">00209</a> 
<a name="l00210"></a><a class="code" href="structAGL__EXT.html#7b2c08d97ccb293ec14d867f5f30c2f1">00210</a> 
<a name="l00211"></a><a class="code" href="structAGL__EXT.html#e8cd4eb5abaf9dc7e2b1abd80dbfb16e">00211</a> <span class="comment">/* Set the GL API pointers to the current table </span>
<a name="l00212"></a><a class="code" href="structAGL__EXT.html#b361ed56040f17ad1e22fbaa2adbbf8c">00212</a> <span class="comment"> * Should only be called on context switches.</span>
<a name="l00213"></a><a class="code" href="structAGL__EXT.html#45a766a1b810a43a93d68dd416a3b3f9">00213</a> <span class="comment"> */</span>
<a name="l00214"></a><a class="code" href="glext_8c.html#7ac20d3b495437e5a2667d19e3c73fbc">00214</a> <span class="keywordtype">void</span> <a class="code" href="glext_8c.html#7ac20d3b495437e5a2667d19e3c73fbc">__allegro_gl_set_extensions</a>(<a class="code" href="structAGL__EXT.html">AGL_EXT</a> *ext) {
<a name="l00215"></a><a class="code" href="structAGL__EXT.html#edd5e09d1c3407392c001025b8aa286c">00215</a> 
<a name="l00216"></a><a class="code" href="structAGL__EXT.html#7e0bee83a899a73c3270ea7a861d7f35">00216</a>     <span class="keywordflow">if</span> (!ext) {
<a name="l00217"></a><a class="code" href="structAGL__EXT.html#3b197b68b368c6c2d61cc306fbed58c6">00217</a>         <span class="keywordflow">return</span>;
<a name="l00218"></a><a class="code" href="structAGL__EXT.html#25e9fb22cfcf5fe41c9339e596d64035">00218</a>     }
<a name="l00219"></a><a class="code" href="structAGL__EXT.html#2959167d62034ee7cd4007b99e87bbc0">00219</a> 
<a name="l00220"></a><a class="code" href="structAGL__EXT.html#123de591f4cd0c506789f6ada7bee860">00220</a> <span class="preprocessor">#define AGL_API(type, name, args) __agl##name = ext-&gt;name;</span>
<a name="l00221"></a><a class="code" href="structAGL__EXT.html#4637fbacab328972107ce4c9e8f1a5b2">00221</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/gl_ext_api.h"</span>
<a name="l00222"></a><a class="code" href="structAGL__EXT.html#e1365d33178263e3570734f08db184bb">00222</a> <span class="preprocessor">#undef AGL_API</span>
<a name="l00223"></a><a class="code" href="structAGL__EXT.html#722dffe57fc06ddc21f00e44acde5bbc">00223</a> <span class="preprocessor"></span><span class="preprocessor">#ifdef ALLEGRO_WINDOWS</span>
<a name="l00224"></a><a class="code" href="structAGL__EXT.html#5a7281642b902ae236ab1ca199392b5e">00224</a> <span class="preprocessor"></span><span class="preprocessor">#define AGL_API(type, name, args) __awgl##name = ext-&gt;name;</span>
<a name="l00225"></a><a class="code" href="structAGL__EXT.html#00ea284540d03e7730968caacdbe94b2">00225</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/wgl_ext_api.h"</span>
<a name="l00226"></a><a class="code" href="structAGL__EXT.html#e770070ce87e6e3d9b165f3eebe0f626">00226</a> <span class="preprocessor">#undef AGL_API</span>
<a name="l00227"></a><a class="code" href="structAGL__EXT.html#e1c8cf76ebf2d69f9ffef6531a9c5a99">00227</a> <span class="preprocessor"></span><span class="preprocessor">#elif defined ALLEGRO_UNIX</span>
<a name="l00228"></a><a class="code" href="structAGL__EXT.html#89b61951aaf6426d30560855c8b55358">00228</a> <span class="preprocessor"></span><span class="preprocessor">#define AGL_API(type, name, args) __aglX##name = ext-&gt;name;</span>
<a name="l00229"></a><a class="code" href="structAGL__EXT.html#40b1bf33f4424cc2b74d1eb4c2e85a72">00229</a> <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/glx_ext_api.h"</span>
<a name="l00230"></a><a class="code" href="structAGL__EXT.html#5fe63ffce7847dde93596dd774805548">00230</a> <span class="preprocessor">#undef AGL_API</span>
<a name="l00231"></a><a class="code" href="structAGL__EXT.html#ca66ca6fd040c7915a91852fc976fde6">00231</a> <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00232"></a><a class="code" href="structAGL__EXT.html#4ab7007bb3edaee215e1cace62c15ca5">00232</a> <span class="preprocessor"></span>}
<a name="l00233"></a><a class="code" href="structAGL__EXT.html#585fb94ce6d238a13317b42f61c4e8d6">00233</a> 
<a name="l00234"></a><a class="code" href="structAGL__EXT.html#14fe9e54bd2010df5f4e8887e813f4a1">00234</a> 
<a name="l00235"></a><a class="code" href="structAGL__EXT.html#00f77d93fc6d39cb8d2c5f77af01754d">00235</a> 
<a name="l00236"></a><a class="code" href="structAGL__EXT.html#f1285f6b02f2d3ff130a2575b09a98c2">00236</a> <span class="comment">/* Destroys the extension table */</span>
<a name="l00237"></a><a class="code" href="glext_8c.html#1083872406c5d4eb9419df4a6ee201ba">00237</a> <span class="keywordtype">void</span> <a class="code" href="glext_8c.html#1083872406c5d4eb9419df4a6ee201ba">__allegro_gl_destroy_extensions</a>(<a class="code" href="structAGL__EXT.html">AGL_EXT</a> *ext) {
<a name="l00238"></a><a class="code" href="structAGL__EXT.html#23b48b26390affd0de8f692b8061e129">00238</a> 
<a name="l00239"></a><a class="code" href="structAGL__EXT.html#8b58add049757b96d71a199fdf03761c">00239</a>     <span class="keywordflow">if</span> (ext) {
<a name="l00240"></a><a class="code" href="structAGL__EXT.html#b97eb4f1efd113e238b72b2250f102b4">00240</a>         <span class="keywordflow">if</span> (ext == <a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b" title="List of WGL extensions supported by AllegroGL.">agl_extension_table</a>) {
<a name="l00241"></a><a class="code" href="structAGL__EXT.html#bc3fddf62f3a7afbc48f12cbfac9f39c">00241</a>             <a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b" title="List of WGL extensions supported by AllegroGL.">agl_extension_table</a> = NULL;
<a name="l00242"></a><a class="code" href="structAGL__EXT.html#489c886a4de6bb432e8e79f6aa9719a0">00242</a>         }
<a name="l00243"></a><a class="code" href="structAGL__EXT.html#19b3b355f9f9424fc24413b0831e137e">00243</a>         free(ext);
<a name="l00244"></a><a class="code" href="structAGL__EXT.html#4f70182d450abb0102bddc350dcd2b6e">00244</a>     }
<a name="l00245"></a><a class="code" href="structAGL__EXT.html#1de3019bca44f85fbb8ff309c2d9067c">00245</a> }
<a name="l00246"></a><a class="code" href="structAGL__EXT.html#e6f36a2e67ac69f6bc3a173d55621ebb">00246</a> 
<a name="l00247"></a><a class="code" href="structAGL__EXT.html#4d008fbbe4f3d3a6125f4e1ab10238f1">00247</a> 
<a name="l00248"></a><a class="code" href="structAGL__EXT.html#d052ad3dd0c89977e87a9e34043a73f5">00248</a> 
<a name="l00249"></a><a class="code" href="structAGL__EXT.html#d71872941e1086a4f9ad67c88fea83f0">00249</a> <span class="comment">/* __allegro_gl_look_for_an_extension:</span>
<a name="l00250"></a><a class="code" href="structAGL__EXT.html#a96e483decee253ca0fd6113bcbfb951">00250</a> <span class="comment"> * This function has been written by Mark J. Kilgard in one of his</span>
<a name="l00251"></a><a class="code" href="structAGL__EXT.html#27d38435121b5fb1038d7b771c86d3f1">00251</a> <span class="comment"> * tutorials about OpenGL extensions</span>
<a name="l00252"></a><a class="code" href="structAGL__EXT.html#ef2688ee77108eddeebc94f0cdfd0edc">00252</a> <span class="comment"> */</span>
<a name="l00253"></a><a class="code" href="glext_8c.html#17d35fa9e35638eed72bf47362398278">00253</a> <span class="keywordtype">int</span> <a class="code" href="glext_8c.html#17d35fa9e35638eed72bf47362398278">__allegro_gl_look_for_an_extension</a>(AL_CONST <span class="keywordtype">char</span> *name,
<a name="l00254"></a><a class="code" href="structAGL__EXT.html#b0c1186599694ff67cd9a7d8b677add0">00254</a>                                                   AL_CONST GLubyte * extensions)
<a name="l00255"></a><a class="code" href="structAGL__EXT.html#d254e993c00bc97238ec24643a5fdf96">00255</a> {
<a name="l00256"></a><a class="code" href="structAGL__EXT.html#49761e11b8886ea4b076ae7e0c0fc55e">00256</a>     AL_CONST GLubyte *start;
<a name="l00257"></a><a class="code" href="structAGL__EXT.html#52687b02b158fed96e39afa52677ec88">00257</a>     GLubyte *where, *terminator;
<a name="l00258"></a><a class="code" href="structAGL__EXT.html#2c75c037e2db9fb3546700c68d0f3f97">00258</a> 
<a name="l00259"></a><a class="code" href="structAGL__EXT.html#d0ee66112bfed81e7841e4bda4da9472">00259</a>     <span class="comment">/* Extension names should not have spaces. */</span>
<a name="l00260"></a><a class="code" href="structAGL__EXT.html#30a8c28749e51b82fd96011b9d59eb2d">00260</a>     where = (GLubyte *) strchr(name, <span class="charliteral">' '</span>);
<a name="l00261"></a><a class="code" href="structAGL__EXT.html#eee901a24e35fa606ac8c83ee9b65b2c">00261</a>     <span class="keywordflow">if</span> (where || *name == <span class="charliteral">'\0'</span>)
<a name="l00262"></a><a class="code" href="structAGL__EXT.html#122e3f8714ea5e83ac46b25a0072bd10">00262</a>         <span class="keywordflow">return</span> FALSE;
<a name="l00263"></a><a class="code" href="structAGL__EXT.html#08ef0f58b524b527618d770fefbc2f26">00263</a>     <span class="comment">/* It takes a bit of care to be fool-proof about parsing the</span>
<a name="l00264"></a><a class="code" href="structAGL__EXT.html#60062971dca1177fe503c139da3e16b7">00264</a> <span class="comment">     * OpenGL extensions string. Don't be fooled by sub-strings, etc.</span>
<a name="l00265"></a><a class="code" href="structAGL__EXT.html#e50a127520e3fe63d36fb28a932ca3ca">00265</a> <span class="comment">     */</span>
<a name="l00266"></a><a class="code" href="structAGL__EXT.html#932f1e7c6c024b9550299833dc944c21">00266</a>     start = extensions;
<a name="l00267"></a><a class="code" href="structAGL__EXT.html#81d516346ab7e87cb60ab0a3c4869442">00267</a>     <span class="keywordflow">for</span> (;;) {
<a name="l00268"></a><a class="code" href="structAGL__EXT.html#3002aab1c27708be889bbd18aaddf42a">00268</a>         where = (GLubyte *) strstr((AL_CONST <span class="keywordtype">char</span> *) start, name);
<a name="l00269"></a><a class="code" href="structAGL__EXT.html#c20da3e0012487eb12137e70b1fcc256">00269</a>         <span class="keywordflow">if</span> (!where)
<a name="l00270"></a><a class="code" href="structAGL__EXT.html#38a044731e28f0d9dcdd4b513ae30c56">00270</a>         <span class="keywordflow">break</span>;
<a name="l00271"></a><a class="code" href="structAGL__EXT.html#4ad384c3119166056dda0173a7fb1ee1">00271</a>         terminator = where + strlen(name);
<a name="l00272"></a><a class="code" href="structAGL__EXT.html#38c3376a75cfc3cce2f0ca22cef2a384">00272</a>         <span class="keywordflow">if</span> (where == start || *(where - 1) == <span class="charliteral">' '</span>)
<a name="l00273"></a><a class="code" href="structAGL__EXT.html#92762fc8ee2c0eec80945f1a2e60c648">00273</a>             <span class="keywordflow">if</span> (*terminator == <span class="charliteral">' '</span> || *terminator == <span class="charliteral">'\0'</span>)
<a name="l00274"></a>00274                 <span class="keywordflow">return</span> TRUE;
<a name="l00275"></a><a class="code" href="structAGL__EXT.html#b9912f739661f607752e231811241c98">00275</a>         start = terminator;
<a name="l00276"></a><a class="code" href="structAGL__EXT.html#486fd49c17398b5c11ddb1abcc5ba8db">00276</a>     }
<a name="l00277"></a><a class="code" href="structAGL__EXT.html#edef8d058425728dc4ea39fa76825b70">00277</a>     <span class="keywordflow">return</span> FALSE;
<a name="l00278"></a><a class="code" href="structAGL__EXT.html#47debd75a4cf4e10d273f9e10dda12b1">00278</a> }
<a name="l00279"></a><a class="code" href="structAGL__EXT.html#7568ee81d7b4a71fd082e32d90accced">00279</a> 
<a name="l00280"></a><a class="code" href="structAGL__EXT.html#1fdf7e1a747ed93781deb137ad31bbcf">00280</a> 
<a name="l00281"></a><a class="code" href="structAGL__EXT.html#3670e6efb7cdee4b2d87e255ab058436">00281</a> 
<a name="l00282"></a>00282 <span class="preprocessor">#ifdef ALLEGRO_WINDOWS</span>
<a name="l00283"></a><a class="code" href="structAGL__EXT.html#8b14a146eae4f788dd5d2351720fa629">00283</a> <span class="preprocessor"></span><span class="keyword">static</span> AGL_GetExtensionsStringARB_t __wglGetExtensionsStringARB = NULL;
<a name="l00284"></a>00284 <span class="keyword">static</span> HDC __hdc = NULL;
<a name="l00285"></a><a class="code" href="structAGL__EXT.html#0d69c15c9a36507ed56d6967075aaf72">00285</a> <span class="preprocessor">#elif defined ALLEGRO_UNIX</span>
<a name="l00286"></a><a class="code" href="structAGL__EXT.html#18ab2d4ae3449e171959d30543a92e5b">00286</a> <span class="preprocessor"></span><span class="preprocessor">#include &lt;xalleg.h&gt;</span>
<a name="l00287"></a>00287 <span class="preprocessor">#endif</span>
<a name="l00288"></a>00288 <span class="preprocessor"></span>
<a name="l00289"></a>00289 
<a name="l00290"></a>00290 <span class="comment">/* int allegro_gl_is_extension_supported(AL_CONST char *extension) */</span>
<a name="l00306"></a><a class="code" href="group__extensions.html#g7351f56ea1c4f4665193fc3bf547ff0a">00306</a> <span class="keywordtype">int</span> <a class="code" href="group__extensions.html#g7351f56ea1c4f4665193fc3bf547ff0a" title="This function is an helper to determine whether an OpenGL extension is available...">allegro_gl_is_extension_supported</a>(AL_CONST <span class="keywordtype">char</span> *extension)
<a name="l00307"></a><a class="code" href="structAGL__EXT.html#82e94d557e948f0e2d4a9a8838713cd3">00307</a> {
<a name="l00308"></a><a class="code" href="structAGL__EXT.html#2491ec2065be5f7e8e4cb84364f0798d">00308</a>     <span class="keywordtype">int</span> ret;
<a name="l00309"></a><a class="code" href="structAGL__EXT.html#e419e535285b152edec2e8d1f1222e28">00309</a>     
<a name="l00310"></a><a class="code" href="structAGL__EXT.html#b2e24e49e0a54df9697034c846dfc754">00310</a>     <span class="keywordflow">if</span> (!<a class="code" href="alleggl_8c.html#1cf577416af8a45cce479746114d7acb">__allegro_gl_valid_context</a>)
<a name="l00311"></a><a class="code" href="structAGL__EXT.html#568595d2ca087c69309febb88ef67f41">00311</a>         <span class="keywordflow">return</span> FALSE;
<a name="l00312"></a><a class="code" href="structAGL__EXT.html#958686c8259319684aa62207669ffdbd">00312</a> 
<a name="l00313"></a><a class="code" href="structAGL__EXT.html#d15b9f2fbf406f4b7f458a6ecf724ed0">00313</a>     <span class="keywordflow">if</span> (!glGetString(GL_EXTENSIONS))
<a name="l00314"></a><a class="code" href="structAGL__EXT.html#b3bc489b04ea4c866c8a122fd1320d70">00314</a>         <span class="keywordflow">return</span> FALSE;
<a name="l00315"></a><a class="code" href="structAGL__EXT.html#3e3053c2ec147a616d4f7be2524953b6">00315</a> 
<a name="l00316"></a><a class="code" href="structAGL__EXT.html#63c4891209fffe30650d168fc8a9bfc9">00316</a>     ret = <a class="code" href="glext_8c.html#17d35fa9e35638eed72bf47362398278">__allegro_gl_look_for_an_extension</a>(extension,
<a name="l00317"></a><a class="code" href="structAGL__EXT.html#2e7a17aa4470e6c27e5cf9c509c47cd4">00317</a>                                                   glGetString(GL_EXTENSIONS));
<a name="l00318"></a><a class="code" href="structAGL__EXT.html#9b6fdc7b002b54d3db7ef1d4ad6c1688">00318</a> 
<a name="l00319"></a><a class="code" href="structAGL__EXT.html#ad6f853ef9a6bb6aa71cd12ccba1617c">00319</a> <span class="preprocessor">#ifdef ALLEGRO_WINDOWS</span>
<a name="l00320"></a><a class="code" href="structAGL__EXT.html#6511ba1292055ffa9ec03be7af934476">00320</a> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (!ret &amp;&amp; strncmp(extension, <span class="stringliteral">"WGL"</span>, 3) == 0) {
<a name="l00321"></a><a class="code" href="structAGL__EXT.html#cae70affef3c0ba5f959a43c202d2bf3">00321</a>         <span class="keywordflow">if</span> (!__wglGetExtensionsStringARB || __hdc != __allegro_gl_hdc) {
<a name="l00322"></a><a class="code" href="structAGL__EXT.html#9bc8f7f5389c3ee30dfa974aa9f6c616">00322</a>             __wglGetExtensionsStringARB = (AGL_GetExtensionsStringARB_t)
<a name="l00323"></a><a class="code" href="structAGL__EXT.html#db532350a038d9fcf891a3a142ff1347">00323</a>                                wglGetProcAddress(<span class="stringliteral">"wglGetExtensionsStringARB"</span>);
<a name="l00324"></a><a class="code" href="structAGL__EXT.html#9a6b303c093ee4bae29d657f041b36b6">00324</a>             __hdc = __allegro_gl_hdc;
<a name="l00325"></a><a class="code" href="structAGL__EXT.html#4ef0bb6d3e454d6a1135e815b16b2a65">00325</a>         }
<a name="l00326"></a><a class="code" href="structAGL__EXT.html#2c61751723291684bf7a17c97d5398a6">00326</a>         <span class="keywordflow">if</span> (__wglGetExtensionsStringARB) {
<a name="l00327"></a><a class="code" href="structAGL__EXT.html#301876e3ea4ce85b81c74f1e27314b1e">00327</a>             ret = <a class="code" href="glext_8c.html#17d35fa9e35638eed72bf47362398278">__allegro_gl_look_for_an_extension</a>(extension,
<a name="l00328"></a><a class="code" href="structAGL__EXT.html#dd3139f95478c0a3f1fe74985ad8f525">00328</a>                                __wglGetExtensionsStringARB(__allegro_gl_hdc));
<a name="l00329"></a><a class="code" href="structAGL__EXT.html#3f942e1a39c5a7275e158bb600cbd6e4">00329</a>         }
<a name="l00330"></a><a class="code" href="structAGL__EXT.html#6880a1d7d863fde9fd83dff1978235bc">00330</a>     }
<a name="l00331"></a><a class="code" href="structAGL__EXT.html#0f2b7fc8ac5e8ee274ec4ce942c44f6e">00331</a> <span class="preprocessor">#elif defined ALLEGRO_UNIX</span>
<a name="l00332"></a><a class="code" href="structAGL__EXT.html#2357e77db0043288ad1c8abb6ad4fd75">00332</a> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (!ret &amp;&amp; strncmp(extension, <span class="stringliteral">"GLX"</span>, 3) == 0) {
<a name="l00333"></a><a class="code" href="structAGL__EXT.html#0285f7fc1bec8dc26c58c1490d3d116f">00333</a>         XLOCK();
<a name="l00334"></a><a class="code" href="structAGL__EXT.html#b3bdb1b99b0c8b405b6babbf426f9267">00334</a>         ret = <a class="code" href="glext_8c.html#17d35fa9e35638eed72bf47362398278">__allegro_gl_look_for_an_extension</a>(extension,
<a name="l00335"></a><a class="code" href="structAGL__EXT.html#34a4293bbe38d503e17a941a7991791c">00335</a>                 (<span class="keyword">const</span> GLubyte*)glXQueryExtensionsString(_xwin.display,
<a name="l00336"></a><a class="code" href="structAGL__EXT.html#e666a96a2c9304975cc92897d68f12b1">00336</a>                                                          _xwin.screen));
<a name="l00337"></a><a class="code" href="structAGL__EXT.html#65ad6e3896628200646a874b74ee193f">00337</a>         XUNLOCK();
<a name="l00338"></a><a class="code" href="structAGL__EXT.html#66bd50396e043264c1b1189d16cd34e2">00338</a>     }
<a name="l00339"></a>00339 <span class="preprocessor">#endif</span>
<a name="l00340"></a>00340 <span class="preprocessor"></span>
<a name="l00341"></a>00341     <span class="keywordflow">return</span> ret;
<a name="l00342"></a><a class="code" href="structAGL__EXT.html#68b298fe67f0984b2817f47bf7d8e976">00342</a> }
<a name="l00343"></a><a class="code" href="structAGL__EXT.html#8b6518103f0b1f460f68d647b8829d34">00343</a> 
<a name="l00344"></a><a class="code" href="structAGL__EXT.html#cee5c6e90fee8cb4a33161679869ed8c">00344</a> 
<a name="l00345"></a><a class="code" href="structAGL__EXT.html#cce1159caa2c696e1eaaa64d4b9c504a">00345</a> 
<a name="l00346"></a>00346 <span class="comment">/* void * allegro_gl_get_proc_address(AL_CONST char *name) */</span>
<a name="l00372"></a><a class="code" href="group__extensions.html#ga0c2cd7c4b4a94e8801af42a58356cc4">00372</a> <span class="keywordtype">void</span> *<a class="code" href="group__extensions.html#ga0c2cd7c4b4a94e8801af42a58356cc4" title="Helper to get the address of an OpenGL symbol.">allegro_gl_get_proc_address</a>(AL_CONST <span class="keywordtype">char</span> *name)
<a name="l00373"></a><a class="code" href="structAGL__EXT.html#e2536a6be9476b3afccaa190fbaace6e">00373</a> {
<a name="l00374"></a><a class="code" href="structAGL__EXT.html#8d5d8cf10b8e5de164a3d8662d237d86">00374</a>     <span class="keywordtype">void</span> *symbol = NULL;
<a name="l00375"></a><a class="code" href="structAGL__EXT.html#31cc2e14c1e9daa107ce7e03f98505bd">00375</a> <span class="preprocessor">#ifdef ALLEGRO_MACOSX</span>
<a name="l00376"></a><a class="code" href="structAGL__EXT.html#d74da3faed96ee521d0bb005bed6d41d">00376</a> <span class="preprocessor"></span>    CFStringRef function;
<a name="l00377"></a><a class="code" href="structAGL__EXT.html#796f931c4d8394b2518ec5bf75186b27">00377</a> <span class="preprocessor">#endif</span>
<a name="l00378"></a>00378 <span class="preprocessor"></span>
<a name="l00379"></a>00379     <span class="keywordflow">if</span> (!<a class="code" href="alleggl_8c.html#1cf577416af8a45cce479746114d7acb">__allegro_gl_valid_context</a>)
<a name="l00380"></a>00380         <span class="keywordflow">return</span> NULL;
<a name="l00381"></a><a class="code" href="structAGL__EXT.html#4f1c2797335f3e6f3385cf7c9f633711">00381</a> 
<a name="l00382"></a><a class="code" href="structAGL__EXT.html#f71979db3a71d4dcd448f1a09621b8b7">00382</a> <span class="preprocessor">#ifdef ALLEGROGL_GENERIC_DRIVER</span>
<a name="l00383"></a><a class="code" href="structAGL__EXT.html#e7dfc7aee6470e108c311316133d0f98">00383</a> <span class="preprocessor"></span>    <span class="comment">/* AMesa provides a function to get a proc address. It does</span>
<a name="l00384"></a><a class="code" href="structAGL__EXT.html#8238ab1b07bd27e68831373a6fc58459">00384</a> <span class="comment">     * not emulate dynamic linking of course...</span>
<a name="l00385"></a><a class="code" href="structAGL__EXT.html#79a6c1d631d82d34f715378f6ec36367">00385</a> <span class="comment">     */</span>
<a name="l00386"></a>00386     symbol = AMesaGetProcAddress(name);
<a name="l00387"></a>00387 
<a name="l00388"></a>00388 <span class="preprocessor">#elif defined ALLEGRO_WINDOWS</span>
<a name="l00389"></a><a class="code" href="structAGL__EXT.html#15a5e460640b05c5b7b7eaca8acfc010">00389</a> <span class="preprocessor"></span>    <span class="comment">/* For once Windows is the easiest platform to use :)</span>
<a name="l00390"></a><a class="code" href="structAGL__EXT.html#e0ee9fd4416553af53d725004fb0d886">00390</a> <span class="comment">     * It provides a standardized way to get a function address</span>
<a name="l00391"></a><a class="code" href="structAGL__EXT.html#f89cffb0ffa7c9287d7d402e6b8c49f6">00391</a> <span class="comment">     * But of course there is a drawback : the symbol is only valid</span>
<a name="l00392"></a><a class="code" href="structAGL__EXT.html#a56db355ffe5802b2e0a46109b8b38f5">00392</a> <span class="comment">     * under the current context :P</span>
<a name="l00393"></a><a class="code" href="structAGL__EXT.html#3d52a0ff79dccc8b5daf5e117a3c4eff">00393</a> <span class="comment">     */</span>
<a name="l00394"></a><a class="code" href="structAGL__EXT.html#40a6c18c2f2234794850d0c6f187fc31">00394</a>     symbol = wglGetProcAddress(name);
<a name="l00395"></a><a class="code" href="structAGL__EXT.html#5f8b688a7f84fd81f84dabf08171d058">00395</a> <span class="preprocessor">#elif defined ALLEGRO_UNIX</span>
<a name="l00396"></a><a class="code" href="structAGL__EXT.html#2d28019af41efb92f9b743cfc048e66d">00396</a> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (<a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a>) {
<a name="l00397"></a><a class="code" href="structAGL__EXT.html#96b04c669ef3a96685b8b6ce2fd2d80a">00397</a>         <span class="comment">/* This is definitely the *good* way on Unix to get a GL proc</span>
<a name="l00398"></a><a class="code" href="structAGL__EXT.html#47b1ec95fc652ac30e5d4231d69e4532">00398</a> <span class="comment">         * address. Unfortunately glXGetProcAddress is an extension</span>
<a name="l00399"></a><a class="code" href="structAGL__EXT.html#c7d59b9e700dc7da2d369094a8325d2f">00399</a> <span class="comment">         * and may not be available on all platforms</span>
<a name="l00400"></a><a class="code" href="structAGL__EXT.html#a73a738731735d5133427ca67864da44">00400</a> <span class="comment">         */</span>
<a name="l00401"></a><a class="code" href="structAGL__EXT.html#cbf72db4c265a4d84174997d9dbc7c7e">00401</a>         symbol = <a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a>((<span class="keyword">const</span> GLubyte*)name);
<a name="l00402"></a><a class="code" href="structAGL__EXT.html#ccf46d55b1f6fe37ffabf748d3f071ce">00402</a>     }
<a name="l00403"></a><a class="code" href="structAGL__EXT.html#c6d9cc7530d63de071f9daef4b302a13">00403</a> <span class="preprocessor">#elif defined ALLEGROGL_HAVE_DYNAMIC_LINK</span>
<a name="l00404"></a><a class="code" href="structAGL__EXT.html#860e582917320e305fe7b9bd2b0e4522">00404</a> <span class="preprocessor"></span>    <span class="keywordflow">else</span> {
<a name="l00405"></a>00405         <span class="comment">/* Hack if glXGetProcAddress is not available :</span>
<a name="l00406"></a>00406 <span class="comment">         * we try to find the symbol into libGL.so</span>
<a name="l00407"></a>00407 <span class="comment">         */</span>
<a name="l00408"></a><a class="code" href="structAGL__EXT.html#d9f0d572426484582aa63702eb6346e7">00408</a>         <span class="keywordflow">if</span> (__agl_handle) {
<a name="l00409"></a><a class="code" href="structAGL__EXT.html#4d85bf9fd30720481b171629353c9e5a">00409</a>             symbol = dlsym(__agl_handle, name);
<a name="l00410"></a><a class="code" href="structAGL__EXT.html#0cae44e18324a697b231ab52270eb339">00410</a>         }
<a name="l00411"></a><a class="code" href="structAGL__EXT.html#6ee736e2e8eb9228fd028802bd898fd8">00411</a>     }
<a name="l00412"></a><a class="code" href="structAGL__EXT.html#43fa0b25d59d7dd7ac723236f915ca11">00412</a> <span class="preprocessor">#elif defined ALLEGRO_MACOSX</span>
<a name="l00413"></a><a class="code" href="structAGL__EXT.html#b9b82d18244f596fdb576cd351e948c2">00413</a> <span class="preprocessor"></span>    function = CFStringCreateWithCString(kCFAllocatorDefault, name,
<a name="l00414"></a><a class="code" href="structAGL__EXT.html#e7691b0d168b787e4ce12396ecc6f2b8">00414</a>                                          kCFStringEncodingASCII);
<a name="l00415"></a><a class="code" href="structAGL__EXT.html#a351dc948221b481ab9e31fb1bf6a754">00415</a>     <span class="keywordflow">if</span> (function) {
<a name="l00416"></a><a class="code" href="structAGL__EXT.html#2159b6166c78b8c9756d05a7a320dec7">00416</a>         symbol = CFBundleGetFunctionPointerForName(opengl_bundle_ref, function);
<a name="l00417"></a><a class="code" href="structAGL__EXT.html#5f4a5f32dcd408873dd82c47d0599208">00417</a>         CFRelease(function);
<a name="l00418"></a><a class="code" href="structAGL__EXT.html#06a8b56c5cc6f6dcc3616c31c57e15b9">00418</a>     }
<a name="l00419"></a><a class="code" href="structAGL__EXT.html#019a3278e2df7a47eec5e86b10efc20b">00419</a> <span class="preprocessor">#else</span>
<a name="l00420"></a><a class="code" href="structAGL__EXT.html#754cacbb42915110d98e4ec3d3287297">00420</a> <span class="preprocessor"></span>    <span class="comment">/* DOS does not support dynamic linking. If the function is not</span>
<a name="l00421"></a><a class="code" href="structAGL__EXT.html#3e3c57abc738da8d485bab9b1b032c98">00421</a> <span class="comment">     * available at build-time then it will not be available at run-time</span>
<a name="l00422"></a><a class="code" href="structAGL__EXT.html#275987daf0a3b8b78dcae33ed1ee1ce3">00422</a> <span class="comment">     * Therefore we do not need to look for it...</span>
<a name="l00423"></a><a class="code" href="structAGL__EXT.html#5677ae0c3d4016efae777fd0585bda43">00423</a> <span class="comment">     */</span>
<a name="l00424"></a><a class="code" href="structAGL__EXT.html#f609cf8f0e5d9c35f8a52a7252413b4f">00424</a> <span class="preprocessor">#endif</span>
<a name="l00425"></a><a class="code" href="structAGL__EXT.html#9f51d3beb193bb8252d471455d670062">00425</a> <span class="preprocessor"></span>
<a name="l00426"></a><a class="code" href="structAGL__EXT.html#38b241ef7cea60161368ce748db67e90">00426</a>     <span class="keywordflow">if</span> (!symbol) {
<a name="l00427"></a><a class="code" href="structAGL__EXT.html#002ebc11476c3786c0a8cbf99db73fba">00427</a> 
<a name="l00428"></a><a class="code" href="structAGL__EXT.html#be11c6c2d2484d15a3c248c67fddd7d4">00428</a> <span class="preprocessor">#if defined ALLEGROGL_HAVE_DYNAMIC_LINK</span>
<a name="l00429"></a><a class="code" href="structAGL__EXT.html#d1fad70d1a56b1e5741d03efd190f4ff">00429</a> <span class="preprocessor"></span>        <span class="keywordflow">if</span> (!<a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a>) {
<a name="l00430"></a><a class="code" href="structAGL__EXT.html#b56ff693712191a10318f1b34e4497c3">00430</a>             TRACE(<a class="code" href="fontconv_8c.html#d8bfd440530d371de892a20efd3bbc2a">PREFIX_W</a> <span class="stringliteral">"get_proc_address: libdl::dlsym: %s\n"</span>,
<a name="l00431"></a><a class="code" href="structAGL__EXT.html#981d4d12d07d7a43c483354914612f6a">00431</a>                   dlerror());
<a name="l00432"></a><a class="code" href="structAGL__EXT.html#ef37514923ad565c7269df549c957d85">00432</a>         }
<a name="l00433"></a><a class="code" href="structAGL__EXT.html#d56c5d71b77f629384172b0e2f20104b">00433</a> <span class="preprocessor">#endif</span>
<a name="l00434"></a><a class="code" href="structAGL__EXT.html#45be166169d7d71380c8991155f54443">00434</a> <span class="preprocessor"></span>        
<a name="l00435"></a><a class="code" href="structAGL__EXT.html#e16f7b752bb8b6be7ff3cf3a3756b6b9">00435</a>         TRACE(<a class="code" href="fontconv_8c.html#d8bfd440530d371de892a20efd3bbc2a">PREFIX_W</a> <span class="stringliteral">"get_proc_address : Unable to load symbol %s\n"</span>,
<a name="l00436"></a><a class="code" href="structAGL__EXT.html#d9932af610f893d6a316c723c350cc34">00436</a>               name);
<a name="l00437"></a><a class="code" href="structAGL__EXT.html#f3427324c2c5bfe53b23836b6215626f">00437</a>     }
<a name="l00438"></a><a class="code" href="structAGL__EXT.html#f78dd0a328838e8eda31802710b3cb92">00438</a>     <span class="keywordflow">else</span> {
<a name="l00439"></a><a class="code" href="structAGL__EXT.html#92351d81515af103aeb260430f805927">00439</a>         TRACE(<a class="code" href="alleggl_8c.html#09462782acac95f9a6da67adf659ed6e">PREFIX_I</a> <span class="stringliteral">"get_proc_address : Symbol %s successfully loaded\n"</span>,
<a name="l00440"></a><a class="code" href="structAGL__EXT.html#0ae225ce39bcab43d653b3f06887b3b1">00440</a>               name);
<a name="l00441"></a><a class="code" href="structAGL__EXT.html#0fb9816dc2d577eaa40aaecb7cf42e79">00441</a>     }
<a name="l00442"></a><a class="code" href="structAGL__EXT.html#8e55346833c488afa9f93d9d486e8c54">00442</a>     <span class="keywordflow">return</span> symbol;
<a name="l00443"></a><a class="code" href="structAGL__EXT.html#a225122d98bb0636f84dd10e02c4cf5b">00443</a> }
<a name="l00444"></a><a class="code" href="structAGL__EXT.html#5e1b552fcd392a3399440cc05d17a7af">00444</a> 
<a name="l00445"></a><a class="code" href="structAGL__EXT.html#a3a5ec63c13b6906aaa4316e1391deed">00445</a> 
<a name="l00446"></a><a class="code" href="structAGL__EXT.html#efca068b43b382841af936dd65ac3457">00446</a> 
<a name="l00447"></a><a class="code" href="structAGL__EXT.html#8a1d8c10a9df4e760259f68c6e982d92">00447</a> <span class="comment">/* Fills in the AllegroGL info struct for blacklisting video cards.</span>
<a name="l00448"></a><a class="code" href="structAGL__EXT.html#730413fce6b22a0b65fb2ba2e6ac2d8d">00448</a> <span class="comment"> */</span>
<a name="l00449"></a><a class="code" href="glext_8c.html#e3b9286cada535059024edd46c5ad52a">00449</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="glext_8c.html#e3b9286cada535059024edd46c5ad52a">__fill_in_info_struct</a>(<span class="keyword">const</span> GLubyte *rendereru,
<a name="l00450"></a><a class="code" href="structAGL__EXT.html#4de571c804791a2e17921a2dc2352f17">00450</a>                                   <span class="keyword">struct</span> <a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a> *info) {
<a name="l00451"></a><a class="code" href="structAGL__EXT.html#3fbe581ba50601de30ff4f58f649ae90">00451</a>     <span class="keyword">const</span> <span class="keywordtype">char</span> *renderer = (<span class="keyword">const</span> <span class="keywordtype">char</span>*)rendereru;
<a name="l00452"></a><a class="code" href="structAGL__EXT.html#08d8f9955283935bd120559cca2d9acf">00452</a>     
<a name="l00453"></a><a class="code" href="structAGL__EXT.html#de37f17877956f4236efa0ed2aac727e">00453</a>     <span class="comment">/* Some cards are "special"... */</span>
<a name="l00454"></a><a class="code" href="structAGL__EXT.html#1a622a9d850f66076171715c9d27a320">00454</a>     <span class="keywordflow">if</span> (strstr(renderer, <span class="stringliteral">"3Dfx/Voodoo"</span>)) {
<a name="l00455"></a><a class="code" href="structAGL__EXT.html#d8af572419917a7b1e0963098357603c">00455</a>         info-&gt;<a class="code" href="structallegro__gl__info.html#8c61fec5e9618a8ee718df546a1bbba8">is_voodoo</a> = 1;
<a name="l00456"></a><a class="code" href="structAGL__EXT.html#80879013db86ab593ea474a3ad99e006">00456</a>     }
<a name="l00457"></a><a class="code" href="structAGL__EXT.html#2931b8bc7c3eefbe79cc914d665c56a2">00457</a>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strstr(renderer, <span class="stringliteral">"Matrox G200"</span>)) {
<a name="l00458"></a><a class="code" href="structAGL__EXT.html#a82ad73f87aba5c79f9435f249213113">00458</a>         info-&gt;<a class="code" href="structallegro__gl__info.html#096599ee938fec60774b567451c942bf">is_matrox_g200</a> = 1;
<a name="l00459"></a><a class="code" href="structAGL__EXT.html#2bbdd2fc6c0d5880cdfc7b607eb41595">00459</a>     }
<a name="l00460"></a><a class="code" href="structAGL__EXT.html#49061474c6fd87a01e72b5157330a7c8">00460</a>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strstr(renderer, <span class="stringliteral">"RagePRO"</span>)) {
<a name="l00461"></a><a class="code" href="structAGL__EXT.html#7c57318caec92043893eaf98a5dc01c3">00461</a>         info-&gt;<a class="code" href="structallegro__gl__info.html#e895110931dec9578ac6d6de1283c324">is_ati_rage_pro</a> = 1;
<a name="l00462"></a><a class="code" href="structAGL__EXT.html#98dd73c521366589a2a3bef839014fa9">00462</a>     }
<a name="l00463"></a><a class="code" href="structAGL__EXT.html#a12e27a79e4acc166d01344c6802422c">00463</a>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strstr(renderer, <span class="stringliteral">"RADEON 7000"</span>)) {
<a name="l00464"></a><a class="code" href="structAGL__EXT.html#7785f6de8f9b59e9efa5d707a312ca00">00464</a>         info-&gt;<a class="code" href="structallegro__gl__info.html#2a84e717dfac380e9ac36b4e8e15b138">is_ati_radeon_7000</a> = 1;
<a name="l00465"></a><a class="code" href="structAGL__EXT.html#46ecde1a9dbef931497a22a9bcbe6a87">00465</a>     }
<a name="l00466"></a><a class="code" href="structAGL__EXT.html#d816926fa7d43619e5d7deb5a0dcc0d8">00466</a>     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strstr(renderer, <span class="stringliteral">"Mesa DRI R200"</span>)) {
<a name="l00467"></a><a class="code" href="structAGL__EXT.html#5fd21ec572c92c3122d6ba017abee6c6">00467</a>         info-&gt;<a class="code" href="structallegro__gl__info.html#ba62b016af411eee1340536fd9284be8">is_ati_r200_chip</a> = 1;
<a name="l00468"></a><a class="code" href="structAGL__EXT.html#59a12074e37a8b1968149f36dbba4aac">00468</a>     }
<a name="l00469"></a><a class="code" href="structAGL__EXT.html#27d159a4cebc4fbf4d164ebc192ed112">00469</a> 
<a name="l00470"></a>00470     <span class="keywordflow">if</span> ((strncmp(renderer, <span class="stringliteral">"3Dfx/Voodoo3 "</span>, 13) == 0)
<a name="l00471"></a>00471      || (strncmp(renderer, <span class="stringliteral">"3Dfx/Voodoo2 "</span>, 13) == 0) 
<a name="l00472"></a>00472      || (strncmp(renderer, <span class="stringliteral">"3Dfx/Voodoo "</span>, 12) == 0)) {
<a name="l00473"></a><a class="code" href="structAGL__EXT.html#f6cfa0955287f92300d43a6e6414ab12">00473</a>         info-&gt;<a class="code" href="structallegro__gl__info.html#debc2b67bba25f59c12ba2a71d926e83">is_voodoo3_and_under</a> = 1;
<a name="l00474"></a><a class="code" href="structAGL__EXT.html#29412a845f7c1453a9155a64e8e55dfd">00474</a>     }
<a name="l00475"></a><a class="code" href="structAGL__EXT.html#12e3ecd57c4a187aaa7e3191d2f0692a">00475</a> 
<a name="l00476"></a><a class="code" href="structAGL__EXT.html#5b942e556a87f5da5628a5baa8139db2">00476</a>     <span class="comment">/* Read OpenGL properties */</span>    
<a name="l00477"></a><a class="code" href="structAGL__EXT.html#e81043b607c1b07b21942c4f6066631d">00477</a>     info-&gt;<a class="code" href="structallegro__gl__info.html#57b0e418a7655c0550ff125ba48e5ffa">version</a> = <a class="code" href="group__core.html#g444d507eaeb5ba800787f6a81827615d" title="Returns the OpenGL version number of the client (the computer the program is running...">allegro_gl_opengl_version</a>();
<a name="l00478"></a><a class="code" href="structAGL__EXT.html#79d2c2316ddbf8bfe0cd1921e5109ff1">00478</a> 
<a name="l00479"></a><a class="code" href="structAGL__EXT.html#d92adbbd1aecb357241dba6c13b88561">00479</a>     <span class="keywordflow">return</span>;
<a name="l00480"></a><a class="code" href="structAGL__EXT.html#5726170790d097f19ad890e04843dcef">00480</a> }
<a name="l00481"></a><a class="code" href="structAGL__EXT.html#ac095ab3751adadb5943467ba43622b8">00481</a> 
<a name="l00482"></a><a class="code" href="structAGL__EXT.html#a124628377072f6812aa7df5f2a828a1">00482</a> 
<a name="l00483"></a><a class="code" href="structAGL__EXT.html#15520d6399a1df422971d613e5402314">00483</a> 
<a name="l00484"></a>00484 <span class="comment">/* __allegro_gl_manage_extensions:</span>
<a name="l00485"></a>00485 <span class="comment"> * This functions fills the __allegro_gl_extensions structure and displays</span>
<a name="l00486"></a>00486 <span class="comment"> * on the log file which extensions are available</span>
<a name="l00487"></a><a class="code" href="structAGL__EXT.html#18c9f79cca116b49998d873febf230c0">00487</a> <span class="comment"> */</span>
<a name="l00488"></a><a class="code" href="glext_8c.html#04c34dfd05568339ec287045e6e7dead">00488</a> <span class="keywordtype">void</span> <a class="code" href="glext_8c.html#04c34dfd05568339ec287045e6e7dead">__allegro_gl_manage_extensions</a>(<span class="keywordtype">void</span>)
<a name="l00489"></a><a class="code" href="structAGL__EXT.html#54837fffeda70291fa5e546e904503e1">00489</a> {
<a name="l00490"></a><a class="code" href="structAGL__EXT.html#3b0924e4cdc130d45be692734e44b6d7">00490</a>     AL_CONST GLubyte *buf;
<a name="l00491"></a><a class="code" href="structAGL__EXT.html#c021efd8f0a2f16fc38233ef8bb479e8">00491</a>     <span class="keywordtype">int</span> i;
<a name="l00492"></a><a class="code" href="structAGL__EXT.html#4585dd0903c9c7ac7ad63d4aac165946">00492</a> 
<a name="l00493"></a><a class="code" href="structAGL__EXT.html#618ccc11626da8bba740592d211f4970">00493</a> <span class="preprocessor">#ifdef ALLEGRO_MACOSX</span>
<a name="l00494"></a><a class="code" href="structAGL__EXT.html#930923fa48385042a7a6bd21ec8edafc">00494</a> <span class="preprocessor"></span>    CFURLRef bundle_url;
<a name="l00495"></a>00495 <span class="preprocessor">#endif</span>
<a name="l00496"></a>00496 <span class="preprocessor"></span>
<a name="l00497"></a>00497     <span class="comment">/* Print out OpenGL extensions */</span>
<a name="l00498"></a><a class="code" href="structAGL__EXT.html#17987db2b794805a034622199207cf9e">00498</a> <span class="preprocessor">#if LOGLEVEL &gt;= 1</span>
<a name="l00499"></a><a class="code" href="structAGL__EXT.html#288d344ae35a3ae61369de4bd32d6c19">00499</a> <span class="preprocessor"></span>    AGL_LOG(1, <span class="stringliteral">"OpenGL Extensions:\n"</span>);
<a name="l00500"></a><a class="code" href="structAGL__EXT.html#3b1cc2ba700214c726c46cfa02dc8b4e">00500</a>              <a class="code" href="glext_8c.html#7e93a77377d6d6cb5246c21ba5902fb8">__allegro_gl_print_extensions</a>((AL_CONST <span class="keywordtype">char</span>*)
<a name="l00501"></a><a class="code" href="structAGL__EXT.html#a81acb69c6324db66b62a0637a99ea5d">00501</a>             glGetString(GL_EXTENSIONS));
<a name="l00502"></a><a class="code" href="structAGL__EXT.html#d79066221a9c51cdf56793f9e5dc5173">00502</a> <span class="preprocessor">#endif</span>
<a name="l00503"></a><a class="code" href="structAGL__EXT.html#6e0362a3a23242d3031743196037e19a">00503</a> <span class="preprocessor"></span>    
<a name="l00504"></a><a class="code" href="structAGL__EXT.html#dffb4c2d51323cc89e1711b3110589a1">00504</a>     <span class="comment">/* Print out GLU version */</span>
<a name="l00505"></a><a class="code" href="structAGL__EXT.html#3da60034152039e7fb32008b2c130d19">00505</a>     buf = gluGetString(GLU_VERSION);
<a name="l00506"></a><a class="code" href="structAGL__EXT.html#af45d06ff2c51ce615631191ffacd77f">00506</a>     TRACE(<a class="code" href="alleggl_8c.html#09462782acac95f9a6da67adf659ed6e">PREFIX_I</a> <span class="stringliteral">"GLU Version : %s\n"</span>, buf);
<a name="l00507"></a><a class="code" href="structAGL__EXT.html#2090cc9ccd041022c621e97bfbf043d2">00507</a> 
<a name="l00508"></a><a class="code" href="structAGL__EXT.html#99dcc831822590df5fba9c395e23881b">00508</a> <span class="preprocessor">#ifdef ALLEGROGL_HAVE_DYNAMIC_LINK</span>
<a name="l00509"></a><a class="code" href="structAGL__EXT.html#c24a8173dd21b9d16e14f328a4cfab67">00509</a> <span class="preprocessor"></span>    <span class="comment">/* Get glXGetProcAddress entry */</span>
<a name="l00510"></a><a class="code" href="structAGL__EXT.html#25e82a40834942068559ca744b26e086">00510</a>     __agl_handle = dlopen(<span class="stringliteral">"libGL.so"</span>, RTLD_LAZY);
<a name="l00511"></a><a class="code" href="structAGL__EXT.html#6476106accd411f811cb847ab83b3627">00511</a>     <span class="keywordflow">if</span> (__agl_handle) {
<a name="l00512"></a><a class="code" href="structAGL__EXT.html#d5d884f8bb83262cc03f0158d9f881fc">00512</a>         <a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a> = (GLXGETPROCADDRESSARBPROC) dlsym(__agl_handle,
<a name="l00513"></a><a class="code" href="structAGL__EXT.html#b56a83365e52ee12c6fbca18720c6a98">00513</a>                                                         <span class="stringliteral">"glXGetProcAddressARB"</span>);
<a name="l00514"></a><a class="code" href="structAGL__EXT.html#a59afa1242b49b58a3fc23c3b751372b">00514</a>         <span class="keywordflow">if</span> (!<a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a>) {
<a name="l00515"></a><a class="code" href="structAGL__EXT.html#8aaa266c7a8369d7c111967191180096">00515</a>             <a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a> = (GLXGETPROCADDRESSARBPROC) dlsym(__agl_handle,
<a name="l00516"></a><a class="code" href="structAGL__EXT.html#dd08eb057766f846f6d5ad0e88dbb8a6">00516</a>                                                            <span class="stringliteral">"glXGetProcAddress"</span>);
<a name="l00517"></a><a class="code" href="structAGL__EXT.html#f0d376990aea23eb9867868c58ddd9d6">00517</a>         }
<a name="l00518"></a><a class="code" href="structAGL__EXT.html#3687f66eaa5b17d6b9e934ea9244a7f3">00518</a>     }
<a name="l00519"></a><a class="code" href="structAGL__EXT.html#3fc728ec2532de4e9676d8d02fe635c2">00519</a>     <span class="keywordflow">else</span> {
<a name="l00520"></a><a class="code" href="structAGL__EXT.html#06055825a522fa025904685dc67c7b9d">00520</a>         TRACE(<a class="code" href="fontconv_8c.html#d8bfd440530d371de892a20efd3bbc2a">PREFIX_W</a> <span class="stringliteral">"Failed to dlopen libGL.so : %s\n"</span>, dlerror());
<a name="l00521"></a><a class="code" href="structAGL__EXT.html#7a324f9527f6d15464a3932b22f9c1fe">00521</a>     }
<a name="l00522"></a><a class="code" href="structAGL__EXT.html#58b91b826d5cd3922b7258d1cf6a17c8">00522</a>     TRACE(<a class="code" href="alleggl_8c.html#09462782acac95f9a6da67adf659ed6e">PREFIX_I</a> <span class="stringliteral">"glXGetProcAddress Extension: %s\n"</span>,
<a name="l00523"></a><a class="code" href="structAGL__EXT.html#77584ef44861be5cabbf2d579c1c87ed">00523</a>                            <a class="code" href="glext_8c.html#89d8ebbea326a2a7141096294f15ef76">aglXGetProcAddress</a> ? <span class="stringliteral">"Supported"</span> : <span class="stringliteral">"Unsupported"</span>);
<a name="l00524"></a><a class="code" href="structAGL__EXT.html#47948fc221e4aefbceaa7f6e64271a6e">00524</a> <span class="preprocessor">#elif defined ALLEGRO_UNIX</span>
<a name="l00525"></a><a class="code" href="structAGL__EXT.html#adb5e7de3a609bee538b31c15d472770">00525</a> <span class="preprocessor"></span><span class="preprocessor">#ifdef ALLEGROGL_GLXGETPROCADDRESSARB</span>
<a name="l00526"></a><a class="code" href="structAGL__EXT.html#57ece64d975eb1ce0c9ffb7a524fb2e0">00526</a> <span class="preprocessor"></span>    TRACE(<a class="code" href="alleggl_8c.html#09462782acac95f9a6da67adf659ed6e">PREFIX_I</a> <span class="stringliteral">"glXGetProcAddressARB Extension: supported\n"</span>);
<a name="l00527"></a><a class="code" href="structAGL__EXT.html#e1b92642f556bb2188f0fb52848f8796">00527</a> <span class="preprocessor">#else</span>
<a name="l00528"></a><a class="code" href="structAGL__EXT.html#cfc5baec989fbf41a38bdc5b942e8d49">00528</a> <span class="preprocessor"></span>    TRACE(<a class="code" href="alleggl_8c.html#09462782acac95f9a6da67adf659ed6e">PREFIX_I</a> <span class="stringliteral">"glXGetProcAddress Extension: supported\n"</span>);
<a name="l00529"></a><a class="code" href="structAGL__EXT.html#eda462a45feb338d6c6ce5a8c44307ff">00529</a> <span class="preprocessor">#endif</span>
<a name="l00530"></a><a class="code" href="structAGL__EXT.html#0fd5454ea11e7f1bc86899d46d428dfd">00530</a> <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00531"></a><a class="code" href="structAGL__EXT.html#cbebd835e6b77687986fe8c19450d14e">00531</a> <span class="preprocessor"></span>    
<a name="l00532"></a><a class="code" href="structAGL__EXT.html#0ea7c7a51766f4d4dcac19adbd4623a1">00532</a> <span class="preprocessor">#ifdef ALLEGRO_MACOSX</span>
<a name="l00533"></a><a class="code" href="structAGL__EXT.html#dae596b35828160a552f2883fa5e03a1">00533</a> <span class="preprocessor"></span>    bundle_url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
<a name="l00534"></a><a class="code" href="structAGL__EXT.html#15915974ff070dcc2c6578d9ae34a77f">00534</a>                          CFSTR(<span class="stringliteral">"/System/Library/Frameworks/OpenGL.framework"</span>),
<a name="l00535"></a><a class="code" href="structAGL__EXT.html#1ddf2357eb94db643bc0e02da0b85ef9">00535</a>                          kCFURLPOSIXPathStyle, <span class="keyword">true</span>);
<a name="l00536"></a><a class="code" href="structAGL__EXT.html#070f1badbb907eb83edfe6870e14f4db">00536</a>     opengl_bundle_ref = CFBundleCreate(kCFAllocatorDefault, bundle_url);
<a name="l00537"></a>00537     CFRelease(bundle_url);
<a name="l00538"></a>00538 <span class="preprocessor">#endif</span>
<a name="l00539"></a>00539 <span class="preprocessor"></span>
<a name="l00540"></a>00540     <a class="code" href="glext_8c.html#e3b9286cada535059024edd46c5ad52a">__fill_in_info_struct</a>(glGetString(GL_RENDERER), &amp;<a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a>);
<a name="l00541"></a>00541 
<a name="l00542"></a>00542     <span class="comment">/* Load extensions */</span>
<a name="l00543"></a>00543     <a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b" title="List of WGL extensions supported by AllegroGL.">agl_extension_table</a> = <a class="code" href="glext_8c.html#f9f2eec6fd790ff68c1e204d690820bc">__allegro_gl_create_extensions</a>();
<a name="l00544"></a>00544     <a class="code" href="glext_8c.html#d180f183a628d3f777768d4c33cc772d">__allegro_gl_load_extensions</a>(<a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b" title="List of WGL extensions supported by AllegroGL.">agl_extension_table</a>);
<a name="l00545"></a>00545     <a class="code" href="glext_8c.html#7ac20d3b495437e5a2667d19e3c73fbc">__allegro_gl_set_extensions</a>(<a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b" title="List of WGL extensions supported by AllegroGL.">agl_extension_table</a>);
<a name="l00546"></a>00546     
<a name="l00547"></a>00547     <span class="keywordflow">for</span> (i = 0; i &lt; 5; i++) {
<a name="l00548"></a>00548         <a class="code" href="texture_8c.html#8416d9ed6c835ba6572ab1e29fe729f2">__allegro_gl_texture_read_format</a>[i] = -1;
<a name="l00549"></a>00549         <a class="code" href="texture_8c.html#7e74a22ac957103e91218377585b1b76">__allegro_gl_texture_components</a>[i] = GL_RGB;
<a name="l00550"></a>00550     }
<a name="l00551"></a>00551     <a class="code" href="texture_8c.html#8416d9ed6c835ba6572ab1e29fe729f2">__allegro_gl_texture_read_format</a>[3] = GL_UNSIGNED_BYTE;
<a name="l00552"></a>00552     <a class="code" href="texture_8c.html#8416d9ed6c835ba6572ab1e29fe729f2">__allegro_gl_texture_read_format</a>[4] = GL_UNSIGNED_BYTE;
<a name="l00553"></a>00553     <a class="code" href="texture_8c.html#7e74a22ac957103e91218377585b1b76">__allegro_gl_texture_components</a>[4] = GL_RGBA;
<a name="l00554"></a>00554 
<a name="l00555"></a>00555     
<a name="l00556"></a>00556     <span class="comment">/* Get extension info for the rest of the lib */</span>
<a name="l00557"></a>00557 <span class="preprocessor">#    define AGL_EXT(name, ver) {                               \</span>
<a name="l00558"></a>00558 <span class="preprocessor">        allegro_gl_extensions_GL.name =                        \</span>
<a name="l00559"></a>00559 <span class="preprocessor">              allegro_gl_is_extension_supported("GL_" #name)   \</span>
<a name="l00560"></a>00560 <span class="preprocessor">          || (allegro_gl_info.version &gt;= ver &amp;&amp; ver &gt; 0);      \</span>
<a name="l00561"></a>00561 <span class="preprocessor">    }</span>
<a name="l00562"></a>00562 <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/gl_ext_list.h"</span>
<a name="l00563"></a>00563 <span class="preprocessor">#   undef AGL_EXT</span>
<a name="l00564"></a>00564 <span class="preprocessor"></span>
<a name="l00565"></a>00565 <span class="preprocessor">#ifdef ALLEGRO_UNIX</span>
<a name="l00566"></a>00566 <span class="preprocessor"></span><span class="preprocessor">#    define AGL_EXT(name, ver) {                               \</span>
<a name="l00567"></a>00567 <span class="preprocessor">        allegro_gl_extensions_GLX.name =                       \</span>
<a name="l00568"></a>00568 <span class="preprocessor">              allegro_gl_is_extension_supported("GLX_" #name)  \</span>
<a name="l00569"></a>00569 <span class="preprocessor">          || (allegro_gl_info.version &gt;= ver &amp;&amp; ver &gt; 0);      \</span>
<a name="l00570"></a>00570 <span class="preprocessor">    }</span>
<a name="l00571"></a>00571 <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/glx_ext_list.h"</span>
<a name="l00572"></a>00572 <span class="preprocessor">#   undef AGL_EXT</span>
<a name="l00573"></a>00573 <span class="preprocessor"></span><span class="preprocessor">#elif defined ALLEGRO_WINDOWS</span>
<a name="l00574"></a>00574 <span class="preprocessor"></span><span class="preprocessor">#    define AGL_EXT(name, ver) {                               \</span>
<a name="l00575"></a>00575 <span class="preprocessor">        allegro_gl_extensions_WGL.name =                       \</span>
<a name="l00576"></a>00576 <span class="preprocessor">              allegro_gl_is_extension_supported("WGL_" #name)  \</span>
<a name="l00577"></a>00577 <span class="preprocessor">          || (allegro_gl_info.version &gt;= ver &amp;&amp; ver &gt; 0);      \</span>
<a name="l00578"></a>00578 <span class="preprocessor">    }</span>
<a name="l00579"></a>00579 <span class="preprocessor"></span><span class="preprocessor">#   include "allegrogl/GLext/wgl_ext_list.h"</span>
<a name="l00580"></a>00580 <span class="preprocessor">#   undef AGL_EXT</span>
<a name="l00581"></a><a class="code" href="structAGL__EXT.html#7e0c223d68eb005ba2f2788aceefef02">00581</a> <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00582"></a><a class="code" href="structAGL__EXT.html#251ee7758027e954b59c96bc93745509">00582</a> <span class="preprocessor"></span>    
<a name="l00583"></a><a class="code" href="structAGL__EXT.html#6302370f8730e9fac63be3f81b768ef3">00583</a>     <span class="comment">/* Get number of texture units */</span>
<a name="l00584"></a>00584     <span class="keywordflow">if</span> (<a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>.ARB_multitexture) {
<a name="l00585"></a>00585         glGetIntegerv(GL_MAX_TEXTURE_UNITS,
<a name="l00586"></a>00586                       (GLint*)&amp;<a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a>.<a class="code" href="structallegro__gl__info.html#f14daaf4674014c4be7f2ab90715969e">num_texture_units</a>);
<a name="l00587"></a>00587     }
<a name="l00588"></a>00588     <span class="keywordflow">else</span> {
<a name="l00589"></a>00589         <a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a>.<a class="code" href="structallegro__gl__info.html#f14daaf4674014c4be7f2ab90715969e">num_texture_units</a> = 1;
<a name="l00590"></a>00590     }
<a name="l00591"></a>00591 
<a name="l00592"></a>00592     <span class="comment">/* Get max texture size */</span>
<a name="l00593"></a><a class="code" href="structAGL__EXT.html#7a369dcc57fb3b032892aea7346070f5">00593</a>     glGetIntegerv(GL_MAX_TEXTURE_SIZE,
<a name="l00594"></a>00594                   (GLint*)&amp;<a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a>.<a class="code" href="structallegro__gl__info.html#a5ff145ee8bbe3167572c3ebc6a9a09a">max_texture_size</a>);
<a name="l00595"></a>00595 
<a name="l00596"></a>00596     <span class="comment">/* Note: Voodoo (even V5) don't seem to correctly support</span>
<a name="l00597"></a><a class="code" href="structAGL__EXT.html#b9cc985ca24226ab91e4d3e5de81ce50">00597</a> <span class="comment">     * packed pixel formats. Disabling them for those cards.</span>
<a name="l00598"></a>00598 <span class="comment">     */</span>
<a name="l00599"></a>00599     <a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>.EXT_packed_pixels &amp;= !<a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a>.<a class="code" href="structallegro__gl__info.html#8c61fec5e9618a8ee718df546a1bbba8">is_voodoo</a>;
<a name="l00600"></a>00600 
<a name="l00601"></a>00601     
<a name="l00602"></a>00602     <span class="keywordflow">if</span> (<a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>.EXT_packed_pixels) {
<a name="l00603"></a><a class="code" href="structAGL__EXT.html#a51aabc7fac5cb9321d28bad8e7f166a">00603</a> 
<a name="l00604"></a>00604         AGL_LOG(1, <span class="stringliteral">"Packed Pixels formats available\n"</span>);
<a name="l00605"></a>00605 
<a name="l00606"></a>00606         <span class="comment">/* XXX On NV cards, we want to use BGRA instead of RGBA for speed */</span>
<a name="l00607"></a><a class="code" href="structAGL__EXT.html#8e37ba52d9a6a3a9c9ee791818d87427">00607</a>         <span class="comment">/* Fills the __allegro_gl_texture_format array */</span>
<a name="l00608"></a>00608         <a class="code" href="texture_8c.html#8416d9ed6c835ba6572ab1e29fe729f2">__allegro_gl_texture_read_format</a>[0] = GL_UNSIGNED_BYTE_3_3_2;
<a name="l00609"></a>00609         <a class="code" href="texture_8c.html#8416d9ed6c835ba6572ab1e29fe729f2">__allegro_gl_texture_read_format</a>[1] = GL_UNSIGNED_SHORT_5_5_5_1;
<a name="l00610"></a>00610         <a class="code" href="texture_8c.html#8416d9ed6c835ba6572ab1e29fe729f2">__allegro_gl_texture_read_format</a>[2] = GL_UNSIGNED_SHORT_5_6_5;
<a name="l00611"></a><a class="code" href="structAGL__EXT.html#80dd85b717d74f060439bb8223489c3b">00611</a>     }
<a name="l00612"></a><a class="code" href="structAGL__EXT.html#1fe0c89f15186d6b24182d55059a31f5">00612</a> 
<a name="l00613"></a>00613     <span class="comment">/* NVidia and ATI cards expose OpenGL 2.0 but often don't accelerate</span>
<a name="l00614"></a>00614 <span class="comment">     * non-power-of-2 textures. This check is how you verify that NP2</span>
<a name="l00615"></a>00615 <span class="comment">     * textures are hardware accelerated or not.</span>
<a name="l00616"></a><a class="code" href="structAGL__EXT.html#c87bd7047f159842db16b3d6fc2275f9">00616</a> <span class="comment">     * We should clobber the NPOT support if it's not accelerated.</span>
<a name="l00617"></a><a class="code" href="structAGL__EXT.html#c80e539d51eb347c5567c3455ed16505">00617</a> <span class="comment">     */</span>
<a name="l00618"></a>00618     {   <span class="keyword">const</span> <span class="keywordtype">char</span> *vendor = (<span class="keyword">const</span> <span class="keywordtype">char</span>*)glGetString(GL_VENDOR);
<a name="l00619"></a>00619         <span class="keywordflow">if</span> (strstr(vendor, <span class="stringliteral">"NVIDIA Corporation"</span>)) {
<a name="l00620"></a>00620             <span class="keywordflow">if</span> (!<a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>.NV_fragment_program2
<a name="l00621"></a><a class="code" href="structAGL__EXT.html#cfceca0b2cc5393a6d2b02c11be05f06">00621</a>              || !<a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>.NV_vertex_program3) {
<a name="l00622"></a><a class="code" href="structAGL__EXT.html#bf6a0da556c52fb58fcb2545c796f3e2">00622</a>                 <a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>.ARB_texture_non_power_of_two = 0;
<a name="l00623"></a>00623             }
<a name="l00624"></a>00624         }
<a name="l00625"></a>00625         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strstr(vendor, <span class="stringliteral">"ATI Technologies"</span>)) {
<a name="l00626"></a><a class="code" href="structAGL__EXT.html#9e6cfc8692a6a6e370874be102688581">00626</a>             <span class="keywordflow">if</span> (!strstr((<span class="keyword">const</span> <span class="keywordtype">char</span>*)glGetString(GL_EXTENSIONS),
<a name="l00627"></a><a class="code" href="structAGL__EXT.html#db873e7d47d6b71b131e5307e02b7ba5">00627</a>                         <span class="stringliteral">"GL_ARB_texture_non_power_of_two"</span>)
<a name="l00628"></a><a class="code" href="structAGL__EXT.html#2634f8a2ffcfd7390a1c2b2e65f8914f">00628</a>              &amp;&amp; <a class="code" href="glext_8c.html#b2cf6540f2485a3f4a6a841bd3726880">allegro_gl_info</a>.<a class="code" href="structallegro__gl__info.html#57b0e418a7655c0550ff125ba48e5ffa">version</a> &gt;= 2.0f) {
<a name="l00629"></a><a class="code" href="structAGL__EXT.html#845ef0a66ea87bc282e656519054f201">00629</a>                 <a class="code" href="group__extensions.html#g7492f6f6acc608789210560ee63e5436" title="List of OpenGL extensions supported by AllegroGL.">allegro_gl_extensions_GL</a>.ARB_texture_non_power_of_two = 0;
<a name="l00630"></a><a class="code" href="structAGL__EXT.html#c4d18e5e00a6c72723f02948d85be2ce">00630</a>             }
<a name="l00631"></a>00631         }
<a name="l00632"></a>00632     }
<a name="l00633"></a>00633 }
<a name="l00634"></a><a class="code" href="structAGL__EXT.html#18b2ac58027f750bd7bd594f797434ce">00634</a> 
<a name="l00635"></a><a class="code" href="structAGL__EXT.html#99de1cf14e8c73117e5222181819ded2">00635</a> 
<a name="l00636"></a><a class="code" href="structAGL__EXT.html#1988dc0d86b9bddef018a2a1f44e7bea">00636</a> 
<a name="l00637"></a><a class="code" href="structAGL__EXT.html#be7c0def1bfd4900dde37837864073cb">00637</a> <span class="comment">/* __allegro_gl_print_extensions:</span>
<a name="l00638"></a><a class="code" href="structAGL__EXT.html#00d86dcb58aefcd78de7ffe808ca672b">00638</a> <span class="comment"> * Given a string containing extensions (i.e. a NULL terminated string where</span>
<a name="l00639"></a><a class="code" href="structAGL__EXT.html#6e021b181d957538bfc06e173875bc97">00639</a> <span class="comment"> * each extension are separated by a space and which names do not contain any</span>
<a name="l00640"></a><a class="code" href="structAGL__EXT.html#1bbac54e8c34e40c685163063046b5be">00640</a> <span class="comment"> * space)</span>
<a name="l00641"></a><a class="code" href="structAGL__EXT.html#aad92aae52093ae75310302473a51f45">00641</a> <span class="comment"> */</span>
<a name="l00642"></a><a class="code" href="glext_8c.html#7e93a77377d6d6cb5246c21ba5902fb8">00642</a> <span class="keywordtype">void</span> <a class="code" href="glext_8c.html#7e93a77377d6d6cb5246c21ba5902fb8">__allegro_gl_print_extensions</a>(AL_CONST <span class="keywordtype">char</span> * extension)
<a name="l00643"></a><a class="code" href="structAGL__EXT.html#fdb19f329a14c504f4282fe07e7ab3b9">00643</a> {
<a name="l00644"></a>00644         <span class="keywordtype">char</span> buf[80];
<a name="l00645"></a>00645         <span class="keywordtype">char</span>* start;
<a name="l00646"></a>00646 
<a name="l00647"></a><a class="code" href="structAGL__EXT.html#0b8fb03315648396d7180ff2ce892991">00647</a>         <span class="keywordflow">while</span> (*extension != <span class="charliteral">'\0'</span>) {
<a name="l00648"></a><a class="code" href="structAGL__EXT.html#c57877b86259146caa3c507724a4ea3d">00648</a>                 start = buf;
<a name="l00649"></a><a class="code" href="structAGL__EXT.html#f763a12467e2ea4e69c718a43fab66fc">00649</a>                 strncpy(buf, extension, 80);
<a name="l00650"></a><a class="code" href="structAGL__EXT.html#264c857acfd343c860845fe9785bf746">00650</a>                 <span class="keywordflow">while</span> ((*start != <span class="charliteral">' '</span>) &amp;&amp; (*start != <span class="charliteral">'\0'</span>)) {
<a name="l00651"></a><a class="code" href="structAGL__EXT.html#129f1b4a7d2906c3572441c01055f1a4">00651</a>                         extension++;
<a name="l00652"></a><a class="code" href="structAGL__EXT.html#ee3fa4a6e85d82e02e2e59bee03122fb">00652</a>                         start++;
<a name="l00653"></a><a class="code" href="structAGL__EXT.html#fab76a33811111ed28cf7c9210117b4b">00653</a>                 }
<a name="l00654"></a><a class="code" href="structAGL__EXT.html#140632c1ed1080f20dd25b1ef221cb73">00654</a>                 *start = <span class="charliteral">'\0'</span>;
<a name="l00655"></a><a class="code" href="structAGL__EXT.html#118155132eec4accf48f34675d06202c">00655</a>                 extension ++;
<a name="l00656"></a><a class="code" href="structAGL__EXT.html#cfbccf137ca9d9ac26bde207ce86c42a">00656</a>                 TRACE(<a class="code" href="alleggl_8c.html#09462782acac95f9a6da67adf659ed6e">PREFIX_I</a> <span class="stringliteral">"%s\n"</span>, buf);
<a name="l00657"></a><a class="code" href="structAGL__EXT.html#6f224b2d8699bbd77046c2fddaab4e53">00657</a>         }
<a name="l00658"></a><a class="code" href="structAGL__EXT.html#205a74e4fe275afbeb32046688391459">00658</a> }
<a name="l00659"></a><a class="code" href="structAGL__EXT.html#4f0ecd59903589084412c9a91ea9e39c">00659</a> 
<a name="l00660"></a>00660 
<a name="l00661"></a>00661 
<a name="l00662"></a><a class="code" href="glext_8c.html#1e1701cdde00c43165960cc1e5997ec0">00662</a> <span class="keywordtype">void</span> <a class="code" href="glext_8c.html#1e1701cdde00c43165960cc1e5997ec0">__allegro_gl_unmanage_extensions</a>() {
<a name="l00663"></a><a class="code" href="structAGL__EXT.html#6f5f668dc896b0878ad993f82bcf7047">00663</a>     <a class="code" href="glext_8c.html#1083872406c5d4eb9419df4a6ee201ba">__allegro_gl_destroy_extensions</a>(<a class="code" href="group__extensions.html#g2d6ebb26eec58470e4242b750656268b" title="List of WGL extensions supported by AllegroGL.">agl_extension_table</a>);
<a name="l00664"></a><a class="code" href="structAGL__EXT.html#b96b265309a8868dae0e03e009e916d4">00664</a> <span class="preprocessor">#ifdef ALLEGRO_MACOSX</span>
<a name="l00665"></a><a class="code" href="structAGL__EXT.html#1bb8c6dbdbf7cb5218909eec994ccd72">00665</a> <span class="preprocessor"></span>    CFRelease(opengl_bundle_ref);
<a name="l00666"></a><a class="code" href="structAGL__EXT.html#34117c2d40f4e778c8bb29dd7af1df0e">00666</a> <span class="preprocessor">#endif</span>
<a name="l00667"></a><a class="code" href="structAGL__EXT.html#1dc65221e5ceb182a15f48b7051a384a">00667</a> <span class="preprocessor"></span><span class="preprocessor">#ifdef ALLEGROGL_HAVE_DYNAMIC_LINK</span>
<a name="l00668"></a><a class="code" href="structAGL__EXT.html#6f1b9efa852a81e6f6bcd29b1ce35a0c">00668</a> <span class="preprocessor"></span>    <span class="keywordflow">if</span> (__agl_handle) {
<a name="l00669"></a><a class="code" href="structAGL__EXT.html#fb3e785457e0ccd04c5a63432ccc0980">00669</a>         dlclose(__agl_handle);
<a name="l00670"></a>00670         __agl_handle = NULL;
<a name="l00671"></a>00671     }
<a name="l00672"></a>00672 <span class="preprocessor">#endif</span>
<a name="l00673"></a><a class="code" href="structAGL__EXT.html#f229f19446f423ddbf8876e0100e8bdf">00673</a> <span class="preprocessor"></span>}
<a name="l00674"></a>00674 
</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Mon Nov 12 11:05:31 2007 for AllegroGL by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address>
</body>
</html>