source: trunk/src/testing/app/volvis/glUE.cpp @ 4

Revision 4, 24.0 KB checked in by ajaworski, 13 years ago (diff)

Added modified SAGE sources

Line 
1/********************************************************************************
2 * Volatile - Volume Visualization Software for SAGE
3 * Copyright (C) 2004 Electronic Visualization Laboratory,
4 * University of Illinois at Chicago
5 *
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 *  * Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 *  * Redistributions in binary form must reproduce the above
14 *    copyright notice, this list of conditions and the following disclaimer
15 *    in the documentation and/or other materials provided with the distribution.
16 *  * Neither the name of the University of Illinois at Chicago nor
17 *    the names of its contributors may be used to endorse or promote
18 *    products derived from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 * Direct questions, comments etc about Volatile to www.evl.uic.edu/cavern/forum
33 *********************************************************************************/
34
35#include "glUE.h"
36#include "global.h"
37#include <string.h>
38
39#ifdef WIN32
40//3D texture
41PFNGLTEXIMAGE3DPROC glTexImage3DEXT;
42
43#ifdef GL_EXT_blend_minmax
44PFNGLBLENDEQUATIONEXTPROC glBlendEquationEXT;
45#endif
46
47#ifdef GL_EXT_color_table
48//palated texture
49PFNGLCOLORTABLEEXTPROC  glColorTableEXT;
50#endif
51
52#ifdef GL_EXT_pixel_texture
53GLPIXELTEXGENEXTFUNCPTR glPixelTexGenEXT;
54#endif
55
56//multi-texture
57#ifdef GL_ARB_multitexture
58PFNGLACTIVETEXTUREARBPROC       glActiveTexture;
59PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTexture;
60PFNGLMULTITEXCOORD1FARBPROC     glMultiTexCoord1fARB;
61PFNGLMULTITEXCOORD1FVARBPROC    glMultiTexCoord1fvARB;
62PFNGLMULTITEXCOORD2FARBPROC     glMultiTexCoord2fARB;
63PFNGLMULTITEXCOORD2FVARBPROC    glMultiTexCoord2fvARB;
64PFNGLMULTITEXCOORD3FARBPROC     glMultiTexCoord3fARB;
65PFNGLMULTITEXCOORD3FVARBPROC    glMultiTexCoord3fvARB;
66#endif
67
68//Secondary color
69#ifdef GL_EXT_secondary_color
70PFNGLSECONDARYCOLOR3FEXTPROC   glSecondaryColor3fEXT;
71#endif
72
73//Register Combiners
74#ifdef GL_NV_register_combiners
75PFNGLCOMBINERPARAMETERFVNVPROC              glCombinerParameterfvNV;
76PFNGLCOMBINERPARAMETERFNVPROC               glCombinerParameterfNV;
77PFNGLCOMBINERPARAMETERIVNVPROC              glCombinerParameterivNV;
78PFNGLCOMBINERPARAMETERINVPROC               glCombinerParameteriNV;
79PFNGLCOMBINERINPUTNVPROC                    glCombinerInputNV;
80PFNGLCOMBINEROUTPUTNVPROC                   glCombinerOutputNV;
81PFNGLFINALCOMBINERINPUTNVPROC               glFinalCombinerInputNV;
82PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC      glGetCombinerInputParameterfvNV;
83PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC      glGetCombinerInputParameterivNV;
84PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC     glGetCombinerOutputParameterfvNV;
85PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC     glGetCombinerOutputParameterivNV;
86PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glGetFinalCombinerInputParameterfvNV;
87PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glGetFinalCombinerInputParameterivNV;
88#endif
89
90//Fragment Shaders
91#ifdef GL_ATI_fragment_shader
92PFNGLGENFRAGMENTSHADERSATIPROC   glGenFragmentShadersATI;
93PFNGLBINDFRAGMENTSHADERATIPROC   glBindFragmentShaderATI;
94PFNGLDELETEFRAGMENTSHADERATIPROC glDeleteFragmentShaderATI;
95PFNGLBEGINFRAGMENTSHADERATIPROC  glBeginFragmentShaderATI;
96PFNGLENDFRAGMENTSHADERATIPROC    glEndFragmentShaderATI;
97PFNGLPASSTEXCOORDATIPROC         glPassTexCoordATI;
98PFNGLSAMPLEMAPATIPROC            glSampleMapATI;
99PFNGLCOLORFRAGMENTOP1ATIPROC     glColorFragmentOp1ATI;
100PFNGLCOLORFRAGMENTOP2ATIPROC     glColorFragmentOp2ATI;
101PFNGLCOLORFRAGMENTOP3ATIPROC     glColorFragmentOp3ATI;
102PFNGLALPHAFRAGMENTOP1ATIPROC     glAlphaFragmentOp1ATI;
103PFNGLALPHAFRAGMENTOP2ATIPROC     glAlphaFragmentOp2ATI;
104PFNGLALPHAFRAGMENTOP3ATIPROC     glAlphaFragmentOp3ATI;
105PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glSetFragmentShaderConstantATI;
106#endif
107
108//env-bump
109#ifdef GL_ATIX_envmap_bumpmap
110PFNGLTEXBUMPPARAMETERIVATIXPROC     glTexBumpParameterivATIX;
111PFNGLTEXBUMPPARAMETERFVATIXPROC     glTexBumpParameterfvATIX;
112PFNGLGETTEXBUMPPARAMETERIVATIXPROC  glGetTexBumpParameterivATIX;
113PFNGLGETTEXBUMPPARAMETERFVATIXPROC  glGetTexBumpParameterfvATIX;
114#endif
115
116//wgl extensions ...
117#ifdef WGL_ARB_pbuffer
118PFNWGLCREATEPBUFFERARBPROC    wglCreatePbufferARB;
119PFNWGLGETPBUFFERDCARBPROC     wglGetPbufferDCARB;
120PFNWGLRELEASEPBUFFERDCARBPROC wglReleasePbufferDCARB;
121PFNWGLDESTROYPBUFFERARBPROC   wglDestroyPbufferARB;
122PFNWGLQUERYPBUFFERARBPROC     wglQueryPbufferARB;
123#endif
124#ifdef WGL_ARB_pixel_format
125PFNWGLGETPIXELFORMATATTRIBIVARBPROC wglGetPixelFormatAttribivARB;
126PFNWGLGETPIXELFORMATATTRIBFVARBPROC wglGetPixelFormatAttribfvARB;
127PFNWGLCHOOSEPIXELFORMATARBPROC      wglChoosePixelFormatARB;
128#endif
129#ifdef WGL_ARB_render_texture //render to texture
130PFNWGLBINDTEXIMAGEARBPROC     wglBindTexImageARB;
131PFNWGLRELEASETEXIMAGEARBPROC  wglReleaseTexImageARB;
132PFNWGLSETPBUFFERATTRIBARBPROC wglSetBufferAttribARB;
133#endif
134
135//////////////////////////////////////////////////////////////////////
136// Construction/Destruction
137//////////////////////////////////////////////////////////////////////
138
139void LoadAllExtensions()
140{
141        cerr << "-----------------------------------------------------" << endl;
142        //-------------------- Open GL spec 1.2 -----------------------------
143        getOGL12();
144  //------------------- Register Combiners ----------------------------
145        getNV20();
146  //------------------- ATI Radeon 8000 -------------------------------
147        getATI8K();
148        //--------------------- wgl extensions ... ---------------------------
149        getWGL();
150        cerr << "-----------------------------------------------------" << endl << endl;
151
152
153}
154#endif
155
156GLboolean QueryExtension(char *extName)
157{
158  /*
159    ** Search for extName in the extensions string. Use of strstr()
160    ** is not sufficient because extension names can be prefixes of
161    ** other extension names. Could use strtok() but the constant
162    ** string returned by glGetString might be in read-only memory.
163    */
164    char *p;
165    char *end;
166    int extNameLen;
167
168    extNameLen = strlen(extName);
169
170    p = (char *)glGetString(GL_EXTENSIONS);
171    if (0 == p) {
172                cerr << "ERROR:: could not query extensions" << endl;
173        return GL_FALSE;
174    }
175
176    end = p + strlen(p);
177
178        if(!strcmp(extName, "Print")){
179                for(int i=0; i< (int)strlen(p); ++i){
180                        cerr << p[i];
181                } cerr << endl;
182                return GL_FALSE;
183        }
184
185    while (p < end) {
186        int n = strcspn(p, " ");
187        if ((extNameLen == n) && (strncmp(extName, p, n) == 0)) {
188            return GL_TRUE;
189        }
190        p += (n + 1);
191    }
192    return GL_FALSE;
193
194}
195
196int checkGfx() {
197        QueryExtension("Print");
198        int r, g, b, a, ar, ag, ab, aa, d, s;
199        GLboolean db,st, aux;
200
201        glGetIntegerv(GL_RED_BITS,           &r);
202        glGetIntegerv(GL_GREEN_BITS,         &g);
203        glGetIntegerv(GL_BLUE_BITS,          &b);
204        glGetIntegerv(GL_ALPHA_BITS,         &a);
205        glGetIntegerv(GL_ACCUM_RED_BITS,     &ar);
206        glGetIntegerv(GL_ACCUM_GREEN_BITS,   &ag);
207        glGetIntegerv(GL_ACCUM_BLUE_BITS,    &ab);
208        glGetIntegerv(GL_ACCUM_ALPHA_BITS,   &aa);
209        glGetIntegerv(GL_DEPTH_BITS,         &d);
210        glGetIntegerv(GL_STENCIL_BITS,       &s);
211        glGetBooleanv(GL_DOUBLEBUFFER,       &db);
212        glGetBooleanv(GL_STEREO,             &st);
213        glGetBooleanv(GL_AUX_BUFFERS,        &aux);
214
215        cerr << "Window Attributes" << endl;
216        cerr << "-----------------" << endl;
217        cerr << "color:    " << r + g + b + a << " bits";
218        cerr << " (" << r << "," << g << "," << b << "," << a << ")" << endl;
219        cerr << "accum:    " << ar+ag+ab+aa   << " bits";
220        cerr << " (" << ar << "," << ag << "," << ab << "," << aa << ")" << endl;
221        cerr << "depth:    " << d << " bits" << endl;
222        cerr << "stencil:  " << s << " bits" << endl;
223        cerr << "double:   ";
224        if(db) cerr << "YES" << endl;
225        else   cerr << "NO" << endl;
226        cerr << "aux:      ";
227        if(aux) cerr << "YES" << endl;
228        else    cerr << "NO" << endl;
229        cerr << "stereo :  ";
230        if(st) cerr << "YES" << endl;
231        else   cerr << "NO" << endl;
232        cerr << "-----------------" << endl;
233        if(QueryExtension("GL_ATI_fragment_shader")){
234                cerr << "PLATFORM:  ATI Radeon 8000 series" << endl;
235                return (int)GPATI8K;
236        }
237        if(QueryExtension("GL_NV_texture_shader")){
238                cerr << "PLATFORM:  nVidia GeForce 3" << endl;
239                return (int)GPNV20;
240        }
241        return 0;
242
243}
244
245//=====================================================================
246int GlErr(char *location, char *glfuncname)
247{
248  GLenum errCode;
249  const GLubyte *errString;
250
251  if((errCode = glGetError()) != GL_NO_ERROR){
252    errString = gluErrorString(errCode);
253    cerr << "OpenGL ERROR : " << location << "::" << glfuncname << " : "
254         << (char *) errString << endl;
255    return 1;
256  }
257  return 0;
258}
259
260//=====================================================================
261int CardProfile()
262{
263
264
265        return 0;
266}
267
268
269#ifdef WIN32
270
271void getOGL12()
272{
273        glTexImage3DEXT = 0;
274
275        if(QueryExtension("GL_EXT_texture3D")){
276                cerr << "3D Texture is available!" << endl;
277                if(!(glTexImage3DEXT =
278                        (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3DEXT"))){
279                        cerr << "*********************************" << endl;
280                        cerr << "wglGetProcAddress(\"glTexImage3DEXT\") failed!" << endl;
281                        cerr << "GetLastError(): " << GetLastError() << endl;
282                        cerr << "*********************************" << endl;
283                }
284        } else if((glTexImage3DEXT = (PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D")))
285                        cerr << "OGL1.2 3D texture is available" << endl;
286        else cerr << "3D texture is NOT available" << endl;
287
288        //-------------------------------------------------------------------
289        //  blending
290#ifdef GL_EXT_blend_minmax
291        glBlendEquationEXT = 0;
292        if(!(glBlendEquationEXT =
293                        (PFNGLBLENDEQUATIONEXTPROC)wglGetProcAddress("glBlendEquationEXT"))){
294                        cerr << "*********************************" << endl;
295                        cerr << "wglGetProcAddress(\"glBlendEquationEXT\") failed!" << endl;
296                        cerr << "GetLastError(): " << GetLastError() << endl;
297                        cerr << "*********************************" << endl;
298                }
299#endif
300
301        //-------------------------------------------------------------------
302        //-------------------- palated textures -----------------------------
303#ifdef GL_EXT_color_table
304        glColorTableEXT = 0;
305        if(QueryExtension("GL_EXT_color_table")){
306                cerr << "Color Table is available" << endl;
307                glColorTableEXT =
308      (PFNGLCOLORTABLEEXTPROC)wglGetProcAddress("glColorTableEXT");
309                if(!glColorTableEXT){
310                        cerr << "*********************************" << endl;
311                        cerr << "wglGetProcAddress(\"glColorTableEXT\") failed!" << endl;
312                        cerr << "GetLastError(): " << GetLastError() << endl;
313                        cerr << "*********************************" << endl;
314                }
315        } else cerr << "Color Table is not available" << endl;
316#endif
317
318
319        //HEY MOFO, THIS DOESN"T GO HERE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
320        //HEY MOFO, THIS DOESN"T GO HERE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
321#ifdef GL_EXT_pixel_texture
322        glPixelTexGenEXT = 0;
323        if(QueryExtension("GL_EXT_pixel_texture")){
324          cerr << "Pixel texture is available" << endl;
325        }
326        else cerr << "Pixel Texture is NOT available" << endl;
327#endif
328
329        //-------------------------------------------------------------------
330        //-------------------- Multi-texture --------------------------------
331#ifdef GL_ARB_multitexture
332        glActiveTexture       = 0;
333        glClientActiveTexture = 0;
334        glMultiTexCoord1fARB  = 0;
335        glMultiTexCoord1fvARB = 0;
336        glMultiTexCoord2fARB  = 0;
337        glMultiTexCoord2fvARB = 0;
338        glMultiTexCoord3fARB  = 0;
339        glMultiTexCoord3fvARB = 0;
340
341        if(QueryExtension("GL_ARB_multitexture")){
342                cerr << "ARB multitexture is available!" << endl;
343                glActiveTexture =
344                        (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
345                glClientActiveTexture =
346                        (PFNGLCLIENTACTIVETEXTUREARBPROC)wglGetProcAddress("glClientActiveTextureARB");
347                glMultiTexCoord1fARB =
348                        (PFNGLMULTITEXCOORD1FARBPROC)wglGetProcAddress("glMultiTexCoord1fARB");
349                glMultiTexCoord1fvARB =
350                        (PFNGLMULTITEXCOORD1FVARBPROC)wglGetProcAddress("glMultiTexCoord1fvARB");
351                glMultiTexCoord2fARB =
352                        (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB");
353                glMultiTexCoord2fvARB =
354                        (PFNGLMULTITEXCOORD2FVARBPROC)wglGetProcAddress("glMultiTexCoord2fvARB");
355                glMultiTexCoord3fARB =
356                        (PFNGLMULTITEXCOORD3FARBPROC)wglGetProcAddress("glMultiTexCoord3fARB");
357                glMultiTexCoord3fvARB =
358                        (PFNGLMULTITEXCOORD3FVARBPROC)wglGetProcAddress("glMultiTexCoord3fvARB");
359
360                if ((!glActiveTexture)||(!glClientActiveTexture)||(!glMultiTexCoord1fARB)||
361                        (!glMultiTexCoord1fvARB)||(!glMultiTexCoord2fARB)||
362                        (!glMultiTexCoord2fvARB)||(!glMultiTexCoord3fARB)||
363                        (!glMultiTexCoord3fvARB)) {
364                        cerr << "*********************************" << endl;
365                        cerr << "wglGetProcAddress(\"glARBmultitexture\") failed!" << endl;
366                        cerr << "GetLastError(): " << GetLastError() << endl;
367                        cerr << "NOTE: You may need to get a new driver from ATI/NVIDIA" << endl;
368                        cerr << (int) glActiveTexture << " " << (int)glClientActiveTexture << endl;
369                        cerr << (int) glMultiTexCoord1fARB << " " << (int) glMultiTexCoord1fvARB << endl
370                                 << (int) glMultiTexCoord2fARB << " " << (int) glMultiTexCoord2fvARB << endl
371                                 << (int) glMultiTexCoord3fARB << " " << (int) glMultiTexCoord3fvARB << endl;
372                        cerr << "*********************************" << endl;
373
374                }
375        } else cerr << "ARB multitexture texture is NOT available" << endl;
376#endif
377        //-------------------------------------------------------------------
378        //------------------- GL_ARB_texture_env_combine --------------------
379        if(QueryExtension("GL_ARB_texture_env_combine")){
380                cerr << "GL_ARB_texture_env_combine is available!" << endl;
381        } else cerr << "GL_ARB_texture_env_combine is NOT available" << endl;
382
383        //-------------------------------------------------------------------
384        //----------------- Secondary color ---------------------------------
385#ifdef GL_EXT_secondary_color
386        glSecondaryColor3fEXT = 0;
387        if(QueryExtension("GL_EXT_secondary_color")){
388                cerr << "Secondary Color is available!" << endl;
389                glSecondaryColor3fEXT =
390                        (PFNGLSECONDARYCOLOR3FEXTPROC)wglGetProcAddress("glSecondaryColor3fEXT");
391                if(!glSecondaryColor3fEXT){
392                        cerr << "Error aquiring Secondary Color function pointer" << endl;
393                }
394        } else {
395                cerr << "Secondary Color is not available" << endl;
396        }
397#endif
398
399}
400
401//=====================================================================
402//=====================================================================
403
404void getNV20()
405{
406#ifdef GL_NV_register_combiners
407        if(QueryExtension("GL_NV_register_combiners")){
408                cerr << "GL_NV_register_combiners is available!" << endl;
409                glCombinerParameterfvNV =
410                        (PFNGLCOMBINERPARAMETERFVNVPROC)wglGetProcAddress("glCombinerParameterfvNV");
411                glCombinerParameterfNV =
412                        (PFNGLCOMBINERPARAMETERFNVPROC)wglGetProcAddress("glCombinerParameterfNV");
413                glCombinerParameterivNV =
414                        (PFNGLCOMBINERPARAMETERIVNVPROC)wglGetProcAddress("glCombinerParameterivNV");
415                glCombinerParameteriNV =
416                        (PFNGLCOMBINERPARAMETERINVPROC)wglGetProcAddress("glCombinerParameteriNV");
417                glCombinerInputNV =
418                        (PFNGLCOMBINERINPUTNVPROC)wglGetProcAddress("glCombinerInputNV");
419                glCombinerOutputNV =
420                        (PFNGLCOMBINEROUTPUTNVPROC)wglGetProcAddress("glCombinerOutputNV");
421                glFinalCombinerInputNV =
422                        (PFNGLFINALCOMBINERINPUTNVPROC)wglGetProcAddress("glFinalCombinerInputNV");
423                glGetCombinerInputParameterfvNV =
424                        (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)wglGetProcAddress("glGetCombinerInputParameterfvNV");
425                glGetCombinerInputParameterivNV =
426                        (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)wglGetProcAddress("glGetCombinerInputParameterivNV");
427                glGetCombinerOutputParameterfvNV =
428                        (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)wglGetProcAddress("glGetCombinerOutputParameterfvNV");
429                glGetCombinerOutputParameterivNV=
430                        (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)wglGetProcAddress("glGetCombinerOutputParameterivNV");
431                glGetFinalCombinerInputParameterfvNV =
432                        (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)wglGetProcAddress("glGetFinalCombinerInputParameterfvNV");
433                glGetFinalCombinerInputParameterivNV =
434                        (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)wglGetProcAddress("glGetFinalCombinerInputParameterivNV");
435                if(!glCombinerParameterfvNV){
436                        cerr << "*********************************" << endl;
437                        cerr << "wglGetProcAddress(\"GL_NV_register_combiners\") failed!" << endl;
438                        cerr << "GetLastError(): " << GetLastError() << endl;
439                        cerr << "*********************************" << endl;
440                }
441        } else cerr << "GL_NV_register_combiners is NOT available" << endl;
442
443#endif
444        //-------------------------------------------------------------------
445
446}
447
448//=====================================================================
449//=====================================================================
450
451void getATI8K()
452{
453#ifdef GL_ATIX_envmap_bumpmap
454        //------------------- GL_ATIX_envmap_bumpmap ------------------------
455        glTexBumpParameterivATIX = 0;
456        glTexBumpParameterfvATIX = 0;
457        glGetTexBumpParameterivATIX = 0;
458        glGetTexBumpParameterivATIX = 0;
459
460        if(QueryExtension("GL_ATIX_envmap_bumpmap")){
461                cerr << "GL_ATIX_envmap_bumpmap is available!" << endl;
462                glTexBumpParameterivATIX=
463                        (PFNGLTEXBUMPPARAMETERIVATIXPROC)wglGetProcAddress("glTexBumpParameterivATIX");
464                glTexBumpParameterfvATIX=
465                        (PFNGLTEXBUMPPARAMETERFVATIXPROC)wglGetProcAddress("glTexBumpParameterfvATIX");
466                glGetTexBumpParameterivATIX=
467                        (PFNGLGETTEXBUMPPARAMETERIVATIXPROC)wglGetProcAddress("glGetTexBumpParameterivATIX");
468                glGetTexBumpParameterfvATIX=
469                        (PFNGLGETTEXBUMPPARAMETERFVATIXPROC)wglGetProcAddress("glGetTexBumpParameterfvATIX");
470
471                if((!glTexBumpParameterivATIX)||(!glTexBumpParameterfvATIX)||
472                        (!glGetTexBumpParameterivATIX)||(!glGetTexBumpParameterfvATIX)){
473                        cerr << "*********************************" << endl;
474                        cerr << "wglGetProcAddress(\"GL_ATIX_envmap_bumpmap\") failed!" << endl;
475                        cerr << "GetLastError(): " << GetLastError() << endl;
476                        cerr << "NOTE: You may need to get a new driver from ATI/NVIDIA" << endl;
477                        cerr << (int)glTexBumpParameterivATIX  << " " <<        (int)glTexBumpParameterfvATIX << endl;
478                        cerr << (int)glGetTexBumpParameterivATIX << " " << (int)glGetTexBumpParameterivATIX << endl;
479                        cerr << "*********************************" << endl;
480                } else { //see what the capabilites are
481                        int matsz;
482                        glGetTexBumpParameterivATIX(GL_BUMP_ROT_MATRIX_SIZE_ATIX, &matsz);
483                        cerr << "    -Bump rot matrix size = " << matsz << endl;
484                        int numtex;
485                        glGetTexBumpParameterivATIX(GL_BUMP_NUM_TEX_UNITS_ATIX, &numtex);
486                        cerr << "    -Number of available texture units = " << numtex << endl;
487                        int texunits[32];
488                        glGetTexBumpParameterivATIX(GL_BUMP_TEX_UNITS_ATIX, texunits);
489                        cerr << "    -Texture unit ids:" << endl;
490                        for(int i=0; i<numtex; ++i){
491                                if(texunits[i] == GL_TEXTURE0_ARB) cerr << "       GL_TEXTURE0_ARB" << endl;
492                                if(texunits[i] == GL_TEXTURE1_ARB) cerr << "       GL_TEXTURE1_ARB" << endl;
493                                if(texunits[i] == GL_TEXTURE2_ARB) cerr << "       GL_TEXTURE2_ARB" << endl;
494                                if(texunits[i] == GL_TEXTURE3_ARB) cerr << "       GL_TEXTURE3_ARB" << endl;
495                                if(texunits[i] == GL_TEXTURE4_ARB) cerr << "       GL_TEXTURE4_ARB" << endl;
496                                if(texunits[i] == GL_TEXTURE5_ARB) cerr << "       GL_TEXTURE5_ARB" << endl;
497                        }
498                }
499        } else  cerr << "GL_ATIX_envmap_bumpmap is NOT available!" << endl;
500#endif //end radeon
501
502#ifdef GL_ATI_fragment_shader
503        //------------------- GL_ATI_fragment_shader ------------------------
504        glGenFragmentShadersATI = 0;
505        glBindFragmentShaderATI = 0;
506        glDeleteFragmentShaderATI = 0;
507        glBeginFragmentShaderATI = 0;
508        glEndFragmentShaderATI = 0;
509        glPassTexCoordATI = 0;
510        glSampleMapATI = 0;
511        glColorFragmentOp1ATI = 0;
512        glColorFragmentOp2ATI = 0;
513        glColorFragmentOp3ATI = 0;
514        glAlphaFragmentOp1ATI = 0;
515        glAlphaFragmentOp2ATI = 0;
516        glAlphaFragmentOp3ATI = 0;
517        glSetFragmentShaderConstantATI = 0;
518
519        if(QueryExtension("GL_ATI_fragment_shader")){
520                cerr << "GL_ATI_fragment_shader is available" << endl;
521                glGenFragmentShadersATI =
522                        (PFNGLGENFRAGMENTSHADERSATIPROC)wglGetProcAddress("glGenFragmentShadersATI");
523                glBindFragmentShaderATI =
524                        (PFNGLBINDFRAGMENTSHADERATIPROC) wglGetProcAddress("glBindFragmentShaderATI");
525                glDeleteFragmentShaderATI=
526                        (PFNGLDELETEFRAGMENTSHADERATIPROC) wglGetProcAddress("glDeleteFragmentShaderATI");
527                glBeginFragmentShaderATI =
528                        (PFNGLBEGINFRAGMENTSHADERATIPROC)  wglGetProcAddress("glBeginFragmentShaderATI");
529                glEndFragmentShaderATI =
530                        (PFNGLENDFRAGMENTSHADERATIPROC)    wglGetProcAddress("glEndFragmentShaderATI");
531                glPassTexCoordATI =
532                        (PFNGLPASSTEXCOORDATIPROC)         wglGetProcAddress("glPassTexCoordATI");
533                glSampleMapATI =
534                        (PFNGLSAMPLEMAPATIPROC)            wglGetProcAddress("glSampleMapATI");
535                glColorFragmentOp1ATI =
536                        (PFNGLCOLORFRAGMENTOP1ATIPROC)     wglGetProcAddress("glColorFragmentOp1ATI");
537                glColorFragmentOp2ATI =
538                        (PFNGLCOLORFRAGMENTOP2ATIPROC)     wglGetProcAddress("glColorFragmentOp2ATI");
539                glColorFragmentOp3ATI =
540                        (PFNGLCOLORFRAGMENTOP3ATIPROC)     wglGetProcAddress("glColorFragmentOp3ATI");
541                glAlphaFragmentOp1ATI =
542                        (PFNGLALPHAFRAGMENTOP1ATIPROC)     wglGetProcAddress("glAlphaFragmentOp1ATI");
543                glAlphaFragmentOp2ATI =
544                        (PFNGLALPHAFRAGMENTOP2ATIPROC)     wglGetProcAddress("glAlphaFragmentOp2ATI");
545                glAlphaFragmentOp3ATI =
546                        (PFNGLALPHAFRAGMENTOP3ATIPROC)     wglGetProcAddress("glAlphaFragmentOp3ATI");
547                glSetFragmentShaderConstantATI =
548                        (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) wglGetProcAddress("glSetFragmentShaderConstantATI");
549        } else {
550                cerr << "GL_ATI_fragment_shader is NOT available!" << endl;
551        }
552
553#endif
554
555}
556
557//=====================================================================
558//=====================================================================
559
560void getWGL()
561{
562#ifdef WGL_ARB_pbuffer
563        if((wglCreatePbufferARB =
564                  (PFNWGLCREATEPBUFFERARBPROC)wglGetProcAddress("wglCreatePbufferARB"))){
565                cerr << "Pbuffer is available!" << endl;
566        }
567        else cerr << "Pbuffer is NOT available!" << endl;
568        wglGetPbufferDCARB =
569                (PFNWGLGETPBUFFERDCARBPROC)wglGetProcAddress("wglGetPbufferDCARB");
570        wglReleasePbufferDCARB =
571                (PFNWGLRELEASEPBUFFERDCARBPROC)wglGetProcAddress("wglReleasePbufferDCARB");
572        wglDestroyPbufferARB =
573                (PFNWGLDESTROYPBUFFERARBPROC)wglGetProcAddress("wglDestroyPbufferARB");
574        wglQueryPbufferARB =
575                (PFNWGLQUERYPBUFFERARBPROC)wglGetProcAddress("wglQueryPbufferARB");
576#endif
577
578#ifdef WGL_ARB_pixel_format
579        if((wglGetPixelFormatAttribivARB=
580                (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)wglGetProcAddress("wglGetPixelFormatAttribivARB"))){
581                cerr << "WGL_ARB_pixel_format is available" << endl;
582        } else cerr << "WGL_ARB_pixel_format is NOT available" << endl;
583        wglGetPixelFormatAttribfvARB=
584                (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)wglGetProcAddress("wglGetPixelFormatAttribfvARB");
585        wglChoosePixelFormatARB=
586                (PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB");
587#endif
588
589#ifdef WGL_ARB_render_texture //render to texture
590        if((wglBindTexImageARB=
591                (PFNWGLBINDTEXIMAGEARBPROC)wglGetProcAddress("wglBindTexImageARB"))){
592                cerr << "WGL_ARB_render_texture is available" << endl;
593        } else cerr << "WGL_ARB_render_texture is NOT available" << endl;
594        wglReleaseTexImageARB=
595                (PFNWGLRELEASETEXIMAGEARBPROC)wglGetProcAddress("wglReleaseTexImageARB");
596        wglSetBufferAttribARB=
597                (PFNWGLSETPBUFFERATTRIBARBPROC)wglGetProcAddress("wglSetBufferAttribARB");
598#endif
599
600}
601
602
603#endif //ifdef WIN32
604
Note: See TracBrowser for help on using the repository browser.