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  http://glc-lib.sourceforge.net
00006 
00007  GLC-lib is free software; you can redistribute it and/or modify
00008  it under the terms of the GNU Lesser General Public License as published by
00009  the Free Software Foundation; either version 3 of the License, or
00010  (at your option) any later version.
00011 
00012  GLC-lib is distributed in the hope that it will be useful,
00013  but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  GNU Lesser General Public License for more details.
00016 
00017  You should have received a copy of the GNU Lesser General Public License
00018  along with GLC-lib; if not, write to the Free Software
00019  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00020 
00021 *****************************************************************************/
00023 
00024 #include "glc_ext.h"
00025 #include <QString>
00026 #include <QGLContext>
00027 #include <QDebug>
00028 #include <QGLShaderProgram>
00029 
00030 #if !defined(Q_OS_MAC)
00031 // ARB_vertex_buffer_object
00032 PFNGLBINDBUFFERARBPROC                          glBindBuffer                    = NULL;
00033 PFNGLDELETEBUFFERSARBPROC                       glDeleteBuffers                 = NULL;
00034 PFNGLGENBUFFERSARBPROC                          glGenBuffers                    = NULL;
00035 PFNGLISBUFFERARBPROC                            glIsBuffer                              = NULL;
00036 PFNGLBUFFERDATAARBPROC                          glBufferData                    = NULL;
00037 PFNGLBUFFERSUBDATAARBPROC                       glBufferSubData                 = NULL;
00038 PFNGLGETBUFFERSUBDATAARBPROC            glGetBufferSubData              = NULL;
00039 PFNGLMAPBUFFERARBPROC                           glMapBuffer                             = NULL;
00040 PFNGLUNMAPBUFFERARBPROC                         glUnmapBuffer                   = NULL;
00041 PFNGLGETBUFFERPARAMETERIVARBPROC        glGetBufferParameteriv  = NULL;
00042 PFNGLGETBUFFERPOINTERVARBPROC           glGetBufferPointerv             = NULL;
00043 // glDrawRangElement
00044 //PFNGLDRAWRANGEELEMENTSPROC                    glDrawRangeElements             = NULL;
00045 
00046 // glMultiDrawElement
00047 PFNGLMULTIDRAWELEMENTSPROC                      glMultiDrawElements             = NULL;
00048 
00049 // GL_point_parameters Point Sprite
00050 PFNGLPOINTPARAMETERFARBPROC                     glPointParameterf               = NULL;
00051 PFNGLPOINTPARAMETERFVARBPROC            glPointParameterfv              = NULL;
00052 
00053 #endif
00054 
00055 //const QString glExtension(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)));
00056 
00057 // Return true if the extension is supported
00058 bool glc::extensionIsSupported(const QString& extension)
00059 {
00060         QString glExtension(reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)));
00061         return glExtension.contains(extension);
00062 }
00063 
00064 // Return true if VBO extension is succesfully loaded
00065 bool glc::loadVboExtension()
00066 {
00067         bool result= true;
00068 #if !defined(Q_OS_MAC)
00069         const QGLContext* pContext= QGLContext::currentContext();
00070     glBindBuffer                                = (PFNGLBINDBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glBindBuffer"));
00071     glDeleteBuffers                             = (PFNGLDELETEBUFFERSARBPROC)pContext->getProcAddress(QLatin1String("glDeleteBuffers"));
00072     glGenBuffers                                = (PFNGLGENBUFFERSARBPROC)pContext->getProcAddress(QLatin1String("glGenBuffers"));
00073     glIsBuffer                                  = (PFNGLISBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glIsBuffer"));
00074     glBufferData                                = (PFNGLBUFFERDATAARBPROC)pContext->getProcAddress(QLatin1String("glBufferData"));
00075     glBufferSubData                             = (PFNGLBUFFERSUBDATAARBPROC)pContext->getProcAddress(QLatin1String("glBufferSubData"));
00076     glGetBufferSubData                  = (PFNGLGETBUFFERSUBDATAARBPROC)pContext->getProcAddress(QLatin1String("glGetBufferSubData"));
00077     glMapBuffer                                 = (PFNGLMAPBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glMapBuffer"));
00078     glUnmapBuffer                               = (PFNGLUNMAPBUFFERARBPROC)pContext->getProcAddress(QLatin1String("glUnmapBuffer"));
00079     glGetBufferParameteriv              = (PFNGLGETBUFFERPARAMETERIVARBPROC)pContext->getProcAddress(QLatin1String("glGetBufferParameteriv"));
00080     glGetBufferPointerv                 = (PFNGLGETBUFFERPOINTERVARBPROC)pContext->getProcAddress(QLatin1String("glGetBufferPointerv"));
00081     //glDrawRangeElements                       = (PFNGLDRAWRANGEELEMENTSPROC)pContext->getProcAddress(QLatin1String("glDrawRangeElements"));
00082     glMultiDrawElements                 = (PFNGLMULTIDRAWELEMENTSPROC)pContext->getProcAddress(QLatin1String("glMultiDrawElements"));
00083 
00084     result= glBindBuffer && glDeleteBuffers && glGenBuffers && glIsBuffer && glBufferData && glBufferSubData &&
00085     glGetBufferSubData && glMapBuffer && glUnmapBuffer && glGetBufferParameteriv && glGetBufferPointerv && glMultiDrawElements;// and glDrawRangeElements;
00086 #endif
00087     return result;
00088 
00089 }
00090 
00091 // Load GLSL extensions
00092 bool glc::loadGlSlExtension()
00093 {
00094     return QGLShaderProgram::hasOpenGLShaderPrograms();
00095 }
00096 
00097 // Load Point Sprite extension
00098 bool glc::loadPointSpriteExtension()
00099 {
00100         bool result= true;
00101 #if !defined(Q_OS_MAC)
00102         const QGLContext* pContext= QGLContext::currentContext();
00103         glPointParameterf                               = (PFNGLPOINTPARAMETERFARBPROC)pContext->getProcAddress(QLatin1String("glPointParameterf"));
00104         if (!glPointParameterf) qDebug() << "not glPointParameterf";
00105         glPointParameterfv                              = (PFNGLPOINTPARAMETERFVARBPROC)pContext->getProcAddress(QLatin1String("glPointParameterfv"));
00106         if (!glPointParameterfv) qDebug() << "not glPointParameterfv";
00107 
00108         result= glPointParameterf && glPointParameterfv;
00109 
00110 #endif
00111     return result;
00112 }
00113 

SourceForge.net Logo

©2005-2011 Laurent Ribon