glc_ext.cpp

Go to the documentation of this file.
00001 /****************************************************************************
00002 
00003  This file is part of the GLC-lib library.
00004  Copyright (C) 2005-2008 Laurent Ribon (laumaya@users.sourceforge.net)
00005  Version 2.0.0 Beta 1, packaged on April 2010.
00006 
00007  http://glc-lib.sourceforge.net
00008 
00009  GLC-lib is free software; you can redistribute it and/or modify
00010  it under the terms of the GNU General Public License as published by
00011  the Free Software Foundation; either version 2 of the License, or
00012  (at your option) any later version.
00013 
00014  GLC-lib is distributed in the hope that it will be useful,
00015  but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  GNU General Public License for more details.
00018 
00019  You should have received a copy of the GNU General Public License
00020  along with GLC-lib; if not, write to the Free Software
00021  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00022 
00023 *****************************************************************************/
00025 
00026 #include "glc_ext.h"
00027 #include <QString>
00028 #include <QGLContext>
00029 #include <QDebug>
00030 
00031 #if !defined(Q_OS_MAC)
00032 // ARB_vertex_buffer_object
00033 PFNGLBINDBUFFERARBPROC                          glBindBuffer                    = NULL;
00034 PFNGLDELETEBUFFERSARBPROC                       glDeleteBuffers                 = NULL;
00035 PFNGLGENBUFFERSARBPROC                          glGenBuffers                    = NULL;
00036 PFNGLISBUFFERARBPROC                            glIsBuffer                              = NULL;
00037 PFNGLBUFFERDATAARBPROC                          glBufferData                    = NULL;
00038 PFNGLBUFFERSUBDATAARBPROC                       glBufferSubData                 = NULL;
00039 PFNGLGETBUFFERSUBDATAARBPROC            glGetBufferSubData              = NULL;
00040 PFNGLMAPBUFFERARBPROC                           glMapBuffer                             = NULL;
00041 PFNGLUNMAPBUFFERARBPROC                         glUnmapBuffer                   = NULL;
00042 PFNGLGETBUFFERPARAMETERIVARBPROC        glGetBufferParameteriv  = NULL;
00043 PFNGLGETBUFFERPOINTERVARBPROC           glGetBufferPointerv             = NULL;
00044 // glDrawRangElement
00045 //PFNGLDRAWRANGEELEMENTSPROC                    glDrawRangeElements             = NULL;
00046 
00047 // glMultiDrawElement
00048 PFNGLMULTIDRAWELEMENTSPROC                      glMultiDrawElements             = NULL;
00049 // GL_ARB_shader_objects
00050 PFNGLCREATEPROGRAMOBJECTARBPROC         glCreateProgram                 = NULL;
00051 PFNGLDELETEPROGRAMPROC                          glDeleteProgram                 = NULL;
00052 PFNGLUSEPROGRAMOBJECTARBPROC            glUseProgram                    = NULL;
00053 PFNGLCREATESHADEROBJECTARBPROC          glCreateShader                  = NULL;
00054 PFNGLDELETESHADERPROC                           glDeleteShader                  = NULL;
00055 PFNGLSHADERSOURCEARBPROC                        glShaderSource                  = NULL;
00056 PFNGLCOMPILESHADERARBPROC                       glCompileShader                 = NULL;
00057 PFNGLATTACHOBJECTARBPROC                        glAttachShader                  = NULL;
00058 PFNGLDETACHOBJECTARBPROC                        glDetachShader                  = NULL;
00059 PFNGLLINKPROGRAMARBPROC                         glLinkProgram                   = NULL;
00060 PFNGLGETUNIFORMLOCATIONARBPROC          glGetUniformLocation    = NULL;
00061 PFNGLUNIFORM4FARBPROC                           glUniform4f                             = NULL;
00062 PFNGLUNIFORM1IARBPROC                           glUniform1i                             = NULL;
00063 PFNGLGETSHADERIVPROC                            glGetShaderiv                   = NULL;
00064 PFNGLGETPROGRAMIVARBPROC                        glGetProgramiv                  = NULL;
00065 PFNGLISPROGRAMARBPROC                           glIsProgram                             = NULL;
00066 
00067 // GL_point_parameters Point Sprite
00068 PFNGLPOINTPARAMETERFARBPROC                     glPointParameterf               = NULL;
00069 PFNGLPOINTPARAMETERFVARBPROC            glPointParameterfv              = NULL;
00070 
00071 #endif
00072 
00073 //const QString glExtension(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)));
00074 
00075 // Return true if the extension is supported
00076 bool glc::extensionIsSupported(const QString& extension)
00077 {
00078         QString glExtension(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)));
00079         return glExtension.contains(extension);
00080 }
00081 
00082 // Return true if VBO extension is succesfully loaded
00083 bool glc::loadVboExtension()
00084 {
00085         bool result= true;
00086 #if !defined(Q_OS_MAC)
00087         const QGLContext* pContext= QGLContext::currentContext();
00088     glBindBuffer                                = (PFNGLBINDBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glBindBuffer"));
00089     glDeleteBuffers                             = (PFNGLDELETEBUFFERSARBPROC)pContext->getProcAddress(QLatin1String("glDeleteBuffers"));
00090     glGenBuffers                                = (PFNGLGENBUFFERSARBPROC)pContext->getProcAddress(QLatin1String("glGenBuffers"));
00091     glIsBuffer                                  = (PFNGLISBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glIsBuffer"));
00092     glBufferData                                = (PFNGLBUFFERDATAARBPROC)pContext->getProcAddress(QLatin1String("glBufferData"));
00093     glBufferSubData                             = (PFNGLBUFFERSUBDATAARBPROC)pContext->getProcAddress(QLatin1String("glBufferSubData"));
00094     glGetBufferSubData                  = (PFNGLGETBUFFERSUBDATAARBPROC)pContext->getProcAddress(QLatin1String("glGetBufferSubData"));
00095     glMapBuffer                                 = (PFNGLMAPBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glMapBuffer"));
00096     glUnmapBuffer                               = (PFNGLUNMAPBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glUnmapBuffer"));
00097     glGetBufferParameteriv              = (PFNGLGETBUFFERPARAMETERIVARBPROC)pContext->getProcAddress(QLatin1String("glGetBufferParameteriv"));
00098     glGetBufferPointerv                 = (PFNGLGETBUFFERPOINTERVARBPROC)pContext->getProcAddress(QLatin1String("glGetBufferPointerv"));
00099     //glDrawRangeElements                       = (PFNGLDRAWRANGEELEMENTSPROC)pContext->getProcAddress(QLatin1String("glDrawRangeElements"));
00100     glMultiDrawElements                 = (PFNGLMULTIDRAWELEMENTSPROC)pContext->getProcAddress(QLatin1String("glMultiDrawElements"));
00101 
00102     result= glBindBuffer && glDeleteBuffers && glGenBuffers && glIsBuffer && glBufferData && glBufferSubData &&
00103     glGetBufferSubData && glMapBuffer && glUnmapBuffer && glGetBufferParameteriv && glGetBufferPointerv && glMultiDrawElements;// and glDrawRangeElements;
00104 #endif
00105     return result;
00106 
00107 }
00108 
00109 // Load GLSL extensions
00110 bool glc::loadGlSlExtension()
00111 {
00112         bool result= true;
00113 #if !defined(Q_OS_MAC)
00114         const QGLContext* pContext= QGLContext::currentContext();
00115         glCreateProgram                         = (PFNGLCREATEPROGRAMOBJECTARBPROC)pContext->getProcAddress(QLatin1String("glCreateProgram"));
00116         if (!glCreateProgram) qDebug() << "not glCreateProgram";
00117         glDeleteProgram                         = (PFNGLDELETEPROGRAMPROC)pContext->getProcAddress(QLatin1String("glDeleteProgram"));
00118         if (!glDeleteProgram) qDebug() << "not glDeleteProgram";
00119         glUseProgram                            = (PFNGLUSEPROGRAMOBJECTARBPROC)pContext->getProcAddress(QLatin1String("glUseProgram"));
00120         if (!glUseProgram) qDebug() << "not glUseProgram";
00121         glCreateShader                          = (PFNGLCREATESHADEROBJECTARBPROC)pContext->getProcAddress(QLatin1String("glCreateShader"));
00122         if (!glCreateShader) qDebug() << "not glCreateShader";
00123         glDeleteShader                          = (PFNGLDELETESHADERPROC)pContext->getProcAddress(QLatin1String("glDeleteShader"));
00124         if (!glDeleteShader) qDebug() << "not glDeleteShader";
00125         glShaderSource                          = (PFNGLSHADERSOURCEARBPROC)pContext->getProcAddress(QLatin1String("glShaderSource"));
00126         if (!glShaderSource) qDebug() << "not glShaderSource";
00127         glCompileShader                         = (PFNGLCOMPILESHADERARBPROC)pContext->getProcAddress(QLatin1String("glCompileShader"));
00128         if (!glCompileShader) qDebug() << "not glCompileShader";
00129         glAttachShader                          = (PFNGLATTACHOBJECTARBPROC)pContext->getProcAddress(QLatin1String("glAttachShader"));
00130         if (!glAttachShader) qDebug() << "not glAttachShader";
00131         glDetachShader                          = (PFNGLDETACHOBJECTARBPROC)pContext->getProcAddress(QLatin1String("glDetachShader"));
00132         if (!glDetachShader) qDebug() << "not glDetachShader";
00133         glLinkProgram                           = (PFNGLLINKPROGRAMARBPROC)pContext->getProcAddress(QLatin1String("glLinkProgram"));
00134         if (!glLinkProgram) qDebug() << "not glLinkProgram";
00135         glGetUniformLocation            = (PFNGLGETUNIFORMLOCATIONARBPROC)pContext->getProcAddress(QLatin1String("glGetUniformLocation"));
00136         if (!glGetUniformLocation) qDebug() << "not glGetUniformLocation";
00137         glUniform4f                                     = (PFNGLUNIFORM4FARBPROC)pContext->getProcAddress(QLatin1String("glUniform4f"));
00138         if (!glUniform4f) qDebug() << "not glUniform4f";
00139         glUniform1i                                     = (PFNGLUNIFORM1IARBPROC)pContext->getProcAddress(QLatin1String("glUniform1i"));
00140         if (!glUniform1i) qDebug() << "not glUniform1i";
00141         glGetShaderiv                           = (PFNGLGETSHADERIVPROC)pContext->getProcAddress(QLatin1String("glGetShaderiv"));
00142         if (!glGetShaderiv) qDebug() << "not glGetShaderiv";
00143         glGetProgramiv                          = (PFNGLGETPROGRAMIVARBPROC)pContext->getProcAddress(QLatin1String("glGetProgramiv"));
00144         if (!glGetProgramiv) qDebug() << "not glGetProgramiv";
00145         glIsProgram                                     = (PFNGLISPROGRAMARBPROC)pContext->getProcAddress(QLatin1String("glIsProgram"));
00146 
00147         result= glCreateProgram && glDeleteProgram && glUseProgram && glCreateShader && glDeleteShader &&
00148     glShaderSource && glCompileShader && glAttachShader && glDetachShader && glLinkProgram &&
00149     glGetUniformLocation && glUniform4f && glUniform1i && glGetShaderiv && glGetProgramiv && glIsProgram;
00150 
00151 #endif
00152     return result;
00153 }
00154 
00155 // Load Point Sprite extension
00156 bool glc::loadPointSpriteExtension()
00157 {
00158         bool result= true;
00159 #if !defined(Q_OS_MAC)
00160         const QGLContext* pContext= QGLContext::currentContext();
00161         glPointParameterf                               = (PFNGLPOINTPARAMETERFARBPROC)pContext->getProcAddress(QLatin1String("glPointParameterf"));
00162         if (!glPointParameterf) qDebug() << "not glPointParameterf";
00163         glPointParameterfv                              = (PFNGLPOINTPARAMETERFVARBPROC)pContext->getProcAddress(QLatin1String("glPointParameterfv"));
00164         if (!glPointParameterfv) qDebug() << "not glPointParameterfv";
00165 
00166         result= glPointParameterf && glPointParameterfv;
00167 
00168 #endif
00169     return result;
00170 }
00171 

SourceForge.net Logo

©2005 Laurent Ribon