• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KWinLibraries

kwinglutils_funcs.cpp

Go to the documentation of this file.
00001 /********************************************************************
00002  KWin - the KDE window manager
00003  This file is part of the KDE project.
00004 
00005 Copyright (C) 2007 Rivo Laks <rivolaks@hot.ee>
00006 
00007 This program is free software; you can redistribute it and/or modify
00008 it under the terms of the GNU General Public License as published by
00009 the Free Software Foundation; either version 2 of the License, or
00010 (at your option) any later version.
00011 
00012 This program 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 General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with this program.  If not, see <http://www.gnu.org/licenses/>.
00019 *********************************************************************/
00020 
00021 #include "kwinglutils.h"
00022 
00023 #include <dlfcn.h>
00024 
00025 
00026 // Resolves given function, using getProcAddress
00027 #define GL_RESOLVE( function )  function = (function ## _func)getProcAddress( #function );
00028 // Same as above but tries to use function "backup" if "function" doesn't exist
00029 // Useful when same functionality is also defined in an extension
00030 #define GL_RESOLVE_WITH_EXT( function, backup ) \
00031   function = (function ## _func)getProcAddress( #function ); \
00032   if( !function ) \
00033     function = (function ## _func)getProcAddress( #backup );
00034 
00035 #ifdef KWIN_HAVE_OPENGL
00036 
00037 namespace KWin
00038 {
00039 
00040 // Function pointers
00041 glXGetProcAddress_func glXGetProcAddress;
00042 // GLX 1.3
00043 glXQueryDrawable_func glXQueryDrawable;
00044 // texture_from_pixmap extension functions
00045 glXReleaseTexImageEXT_func glXReleaseTexImageEXT;
00046 glXBindTexImageEXT_func glXBindTexImageEXT;
00047 // glXCopySubBufferMESA
00048 glXCopySubBuffer_func glXCopySubBuffer;
00049 // video_sync extension functions
00050 glXGetVideoSync_func glXGetVideoSync;
00051 glXWaitVideoSync_func glXWaitVideoSync;
00052 // GLX_SGIX_fbconfig
00053 glXGetFBConfigAttrib_func glXGetFBConfigAttrib;
00054 glXGetVisualFromFBConfig_func glXGetVisualFromFBConfig;
00055 glXCreateWindow_func glXCreateWindow;
00056 glXDestroyWindow_func glXDestroyWindow;
00057 glXCreatePixmap_func glXCreatePixmap;
00058 glXDestroyPixmap_func glXDestroyPixmap;
00059 glXGetFBConfigs_func glXGetFBConfigs;
00060 
00061 // glActiveTexture
00062 glActiveTexture_func glActiveTexture;
00063 // framebuffer_object extension functions
00064 glIsRenderbuffer_func glIsRenderbuffer;
00065 glBindRenderbuffer_func glBindRenderbuffer;
00066 glDeleteRenderbuffers_func glDeleteRenderbuffers;
00067 glGenRenderbuffers_func glGenRenderbuffers;
00068 glRenderbufferStorage_func glRenderbufferStorage;
00069 glGetRenderbufferParameteriv_func glGetRenderbufferParameteriv;
00070 glIsFramebuffer_func glIsFramebuffer;
00071 glBindFramebuffer_func glBindFramebuffer;
00072 glDeleteFramebuffers_func glDeleteFramebuffers;
00073 glGenFramebuffers_func glGenFramebuffers;
00074 glCheckFramebufferStatus_func glCheckFramebufferStatus;
00075 glFramebufferTexture1D_func glFramebufferTexture1D;
00076 glFramebufferTexture2D_func glFramebufferTexture2D;
00077 glFramebufferTexture3D_func glFramebufferTexture3D;
00078 glFramebufferRenderbuffer_func glFramebufferRenderbuffer;
00079 glGetFramebufferAttachmentParameteriv_func glGetFramebufferAttachmentParameteriv;
00080 glGenerateMipmap_func glGenerateMipmap;
00081 // Shader functions
00082 glCreateShader_func glCreateShader;
00083 glShaderSource_func glShaderSource;
00084 glCompileShader_func glCompileShader;
00085 glDeleteShader_func glDeleteShader;
00086 glCreateProgram_func glCreateProgram;
00087 glAttachShader_func glAttachShader;
00088 glLinkProgram_func glLinkProgram;
00089 glUseProgram_func glUseProgram;
00090 glDeleteProgram_func glDeleteProgram;
00091 glGetShaderInfoLog_func glGetShaderInfoLog;
00092 glGetProgramInfoLog_func glGetProgramInfoLog;
00093 glGetProgramiv_func glGetProgramiv;
00094 glGetShaderiv_func glGetShaderiv;
00095 glUniform1f_func glUniform1f;
00096 glUniform1i_func glUniform1i;
00097 glUniform1fv_func glUniform1fv;
00098 glUniform2fv_func glUniform2fv;
00099 glValidateProgram_func glValidateProgram;
00100 glGetUniformLocation_func glGetUniformLocation;
00101 glVertexAttrib1f_func glVertexAttrib1f;
00102 glGetAttribLocation_func glGetAttribLocation;
00103 
00104 
00105 static glXFuncPtr getProcAddress( const char* name )
00106     {
00107     glXFuncPtr ret = NULL;
00108     if( glXGetProcAddress != NULL )
00109         ret = glXGetProcAddress( ( const GLubyte* ) name );
00110     if( ret == NULL )
00111         ret = ( glXFuncPtr ) dlsym( RTLD_DEFAULT, name );
00112     return ret;
00113     }
00114 
00115 void glxResolveFunctions()
00116     {
00117     // handle OpenGL extensions functions
00118     glXGetProcAddress = (glXGetProcAddress_func) getProcAddress( "glXGetProcAddress" );
00119     if( glXGetProcAddress == NULL )
00120         glXGetProcAddress = (glXGetProcAddress_func) getProcAddress( "glXGetProcAddressARB" );
00121     glXQueryDrawable = (glXQueryDrawable_func) getProcAddress( "glXQueryDrawable" );
00122     if( hasGLExtension( "GLX_EXT_texture_from_pixmap" ))
00123         {
00124         glXBindTexImageEXT = (glXBindTexImageEXT_func) getProcAddress( "glXBindTexImageEXT" );
00125         glXReleaseTexImageEXT = (glXReleaseTexImageEXT_func) getProcAddress( "glXReleaseTexImageEXT" );
00126         }
00127     else
00128         {
00129         glXBindTexImageEXT = NULL;
00130         glXReleaseTexImageEXT = NULL;
00131         }
00132     if( hasGLExtension( "GLX_MESA_copy_sub_buffer" ))
00133         glXCopySubBuffer = (glXCopySubBuffer_func) getProcAddress( "glXCopySubBufferMESA" );
00134     else
00135         glXCopySubBuffer = NULL;
00136     if( hasGLExtension( "GLX_SGI_video_sync" ))
00137         {
00138         glXGetVideoSync = (glXGetVideoSync_func) getProcAddress( "glXGetVideoSyncSGI" );
00139         glXWaitVideoSync = (glXWaitVideoSync_func) getProcAddress( "glXWaitVideoSyncSGI" );
00140         }
00141     else
00142         {
00143         glXGetVideoSync = NULL;
00144         glXWaitVideoSync = NULL;
00145         }
00146 
00147     GL_RESOLVE_WITH_EXT( glXGetFBConfigAttrib, glXGetFBConfigAttribSGIX );
00148     GL_RESOLVE_WITH_EXT( glXGetVisualFromFBConfig, glXGetVisualFromFBConfigSGIX );
00149     GL_RESOLVE( glXGetFBConfigs );
00150     GL_RESOLVE( glXCreateWindow );
00151     GL_RESOLVE( glXDestroyWindow );
00152     GL_RESOLVE( glXCreatePixmap );
00153     GL_RESOLVE( glXDestroyPixmap );
00154     }
00155 
00156 void glResolveFunctions()
00157     {
00158     if( hasGLExtension( "GL_ARB_multitexture" ))
00159         {
00160         GL_RESOLVE_WITH_EXT( glActiveTexture, glActiveTextureARB );
00161         // Get number of texture units
00162         glGetIntegerv(GL_MAX_TEXTURE_UNITS, &glTextureUnitsCount);
00163         }
00164     else
00165         {
00166         glActiveTexture = NULL;
00167         glTextureUnitsCount = 0;
00168         }
00169     if( hasGLExtension( "GL_EXT_framebuffer_object" ))
00170         {
00171         glIsRenderbuffer = (glIsRenderbuffer_func) getProcAddress( "glIsRenderbufferEXT" );
00172         glBindRenderbuffer = (glBindRenderbuffer_func) getProcAddress( "glBindRenderbufferEXT" );
00173         glDeleteRenderbuffers = (glDeleteRenderbuffers_func) getProcAddress( "glDeleteRenderbuffersEXT" );
00174         glGenRenderbuffers = (glGenRenderbuffers_func) getProcAddress( "glGenRenderbuffersEXT" );
00175 
00176         glRenderbufferStorage = (glRenderbufferStorage_func) getProcAddress( "glRenderbufferStorageEXT" );
00177 
00178         glGetRenderbufferParameteriv = (glGetRenderbufferParameteriv_func) getProcAddress( "glGetRenderbufferParameterivEXT" );
00179 
00180         glIsFramebuffer = (glIsFramebuffer_func) getProcAddress( "glIsFramebufferEXT" );
00181         glBindFramebuffer = (glBindFramebuffer_func) getProcAddress( "glBindFramebufferEXT" );
00182         glDeleteFramebuffers = (glDeleteFramebuffers_func) getProcAddress( "glDeleteFramebuffersEXT" );
00183         glGenFramebuffers = (glGenFramebuffers_func) getProcAddress( "glGenFramebuffersEXT" );
00184 
00185         glCheckFramebufferStatus = (glCheckFramebufferStatus_func) getProcAddress( "glCheckFramebufferStatusEXT" );
00186 
00187         glFramebufferTexture1D = (glFramebufferTexture1D_func) getProcAddress( "glFramebufferTexture1DEXT" );
00188         glFramebufferTexture2D = (glFramebufferTexture2D_func) getProcAddress( "glFramebufferTexture2DEXT" );
00189         glFramebufferTexture3D = (glFramebufferTexture3D_func) getProcAddress( "glFramebufferTexture3DEXT" );
00190 
00191         glFramebufferRenderbuffer = (glFramebufferRenderbuffer_func) getProcAddress( "glFramebufferRenderbufferEXT" );
00192 
00193         glGetFramebufferAttachmentParameteriv = (glGetFramebufferAttachmentParameteriv_func) getProcAddress( "glGetFramebufferAttachmentParameterivEXT" );
00194 
00195         glGenerateMipmap = (glGenerateMipmap_func) getProcAddress( "glGenerateMipmapEXT" );
00196         }
00197     else
00198         {
00199         glIsRenderbuffer = NULL;
00200         glBindRenderbuffer = NULL;
00201         glDeleteRenderbuffers = NULL;
00202         glGenRenderbuffers = NULL;
00203         glRenderbufferStorage = NULL;
00204         glGetRenderbufferParameteriv = NULL;
00205         glIsFramebuffer = NULL;
00206         glBindFramebuffer = NULL;
00207         glDeleteFramebuffers = NULL;
00208         glGenFramebuffers = NULL;
00209         glCheckFramebufferStatus = NULL;
00210         glFramebufferTexture1D = NULL;
00211         glFramebufferTexture2D = NULL;
00212         glFramebufferTexture3D = NULL;
00213         glFramebufferRenderbuffer = NULL;
00214         glGetFramebufferAttachmentParameteriv = NULL;
00215         glGenerateMipmap = NULL;
00216         }
00217     if( hasGLExtension( "GL_ARB_shading_language_100" ) && hasGLExtension( "GL_ARB_fragment_shader" ))
00218         {
00219         GL_RESOLVE_WITH_EXT( glCreateShader, glCreateShaderObjectARB );
00220         GL_RESOLVE_WITH_EXT( glShaderSource, glShaderSourceARB );
00221         GL_RESOLVE_WITH_EXT( glCompileShader, glCompileShaderARB );
00222         GL_RESOLVE_WITH_EXT( glDeleteShader, glDeleteObjectARB );
00223         GL_RESOLVE_WITH_EXT( glCreateProgram, glCreateProgramObjectARB );
00224         GL_RESOLVE_WITH_EXT( glAttachShader, glAttachObjectARB );
00225         GL_RESOLVE_WITH_EXT( glLinkProgram, glLinkProgramARB );
00226         GL_RESOLVE_WITH_EXT( glUseProgram, glUseProgramObjectARB );
00227         GL_RESOLVE_WITH_EXT( glDeleteProgram, glDeleteObjectARB );
00228         GL_RESOLVE_WITH_EXT( glGetShaderInfoLog, glGetInfoLogARB );
00229         GL_RESOLVE_WITH_EXT( glGetProgramInfoLog, glGetInfoLogARB );
00230         GL_RESOLVE_WITH_EXT( glGetProgramiv, glGetObjectParameterivARB );
00231         GL_RESOLVE_WITH_EXT( glGetShaderiv, glGetObjectParameterivARB );
00232         GL_RESOLVE_WITH_EXT( glUniform1f, glUniform1fARB );
00233         GL_RESOLVE_WITH_EXT( glUniform1i, glUniform1iARB );
00234         GL_RESOLVE_WITH_EXT( glUniform1fv, glUniform1fvARB );
00235         GL_RESOLVE_WITH_EXT( glUniform2fv, glUniform2fvARB );
00236         GL_RESOLVE_WITH_EXT( glValidateProgram, glValidateProgramARB );
00237         GL_RESOLVE_WITH_EXT( glGetUniformLocation, glGetUniformLocationARB );
00238         GL_RESOLVE_WITH_EXT( glVertexAttrib1f, glVertexAttrib1fARB );
00239         GL_RESOLVE_WITH_EXT( glGetAttribLocation, glGetAttribLocationARB );
00240         }
00241     }
00242 
00243 } // namespace
00244 
00245 #endif

KWinLibraries

Skip menu "KWinLibraries"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal