ignatenkobrain pushed to supertuxkart (master). "Update to 0.9 (..more)"

notifications at fedoraproject.org notifications at fedoraproject.org
Thu Apr 23 10:17:59 UTC 2015


>From 3e7da34becc2191ef3b17041cc1f5ea3bb875a14 Mon Sep 17 00:00:00 2001
From: Igor Gnatenko <i.gnatenko.brain at gmail.com>
Date: Thu, 23 Apr 2015 13:16:41 +0300
Subject: Update to 0.9

Signed-off-by: Igor Gnatenko <i.gnatenko.brain at gmail.com>

diff --git a/.gitignore b/.gitignore
index 278f257..4b06274 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ addon0.6.1-1.zip
 /supertuxkart-0.7.3-src.tar.bz2
 /supertuxkart-0.8-src.tar.bz2
 /supertuxkart-0.8.1-src.tar.bz2
+/supertuxkart-0.9-src.tar.xz
diff --git a/0001-fix-.desktop-file-and-install-destinations.patch b/0001-fix-.desktop-file-and-install-destinations.patch
deleted file mode 100644
index 9cfb6c7..0000000
--- a/0001-fix-.desktop-file-and-install-destinations.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 434083d5647ae052693eff559acbd08de09cbc37 Mon Sep 17 00:00:00 2001
-From: Igor Gnatenko <i.gnatenko.brain at gmail.com>
-Date: Sun, 11 May 2014 22:58:04 +0400
-Subject: [PATCH 1/6] fix .desktop file and install destinations
-
-Signed-off-by: Igor Gnatenko <i.gnatenko.brain at gmail.com>
----
- CMakeLists.txt                     |  7 +++----
- data/supertuxkart.desktop          | 13 +++++++++++++
- data/supertuxkart_desktop.template | 14 --------------
- 3 files changed, 16 insertions(+), 18 deletions(-)
- create mode 100644 data/supertuxkart.desktop
- delete mode 100644 data/supertuxkart_desktop.template
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 09edd58..2d87a98 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -292,9 +292,8 @@ endif()
- # ==== Install target ====
- install(TARGETS supertuxkart RUNTIME DESTINATION ${STK_INSTALL_BINARY_DIR} BUNDLE DESTINATION .)
- install(DIRECTORY ${STK_DATA_DIR} DESTINATION ${STK_INSTALL_DATA_DIR} PATTERN ".svn" EXCLUDE)
--install(FILES ${PROJECT_BINARY_DIR}/supertuxkart.desktop DESTINATION share/applications)
--install(FILES data/supertuxkart_32.png data/supertuxkart_128.png DESTINATION share/pixmaps)
-+install(FILES data/supertuxkart.desktop DESTINATION share/applications)
-+install(FILES data/supertuxkart_32.png DESTINATION share/icons/hicolor/32x32/apps RENAME supertuxkart.png)
-+install(FILES data/supertuxkart_128.png DESTINATION share/icons/hicolor/128x128/apps RENAME supertuxkart.png)
- 
- set(PREFIX ${CMAKE_INSTALL_PREFIX})
--configure_file(data/supertuxkart_desktop.template supertuxkart.desktop)
--add_dependencies(supertuxkart supertuxkart.desktop)
-diff --git a/data/supertuxkart.desktop b/data/supertuxkart.desktop
-new file mode 100644
-index 0000000..5fd69ee
---- /dev/null
-+++ b/data/supertuxkart.desktop
-@@ -0,0 +1,13 @@
-+[Desktop Entry]
-+Name=SuperTuxKart
-+Icon=supertuxkart
-+GenericName=A kart racing game
-+GenericName[de_DE]=Ein Kart-Rennspiel
-+GenericName[fr_FR]=Un jeu de karting
-+GenericName[gl]=Xogo de carreiras con karts
-+GenericName[ro_RO]=Un joc de curse cu carturi
-+Exec=supertuxkart-wrapper --no-console
-+Terminal=false
-+StartupNotify=false
-+Type=Application
-+Categories=Game;ActionGame;ArcadeGame;
-diff --git a/data/supertuxkart_desktop.template b/data/supertuxkart_desktop.template
-deleted file mode 100644
-index aeb48ab..0000000
---- a/data/supertuxkart_desktop.template
-+++ /dev/null
-@@ -1,14 +0,0 @@
--[Desktop Entry]
--Name=SuperTuxKart
--Icon=@PREFIX@/share/pixmaps/supertuxkart_128.png
--GenericName=A kart racing game
--GenericName[de_DE]=Ein Kart-Rennspiel
--GenericName[fr_FR]=Un jeu de karting
--GenericName[gl]=Xogo de carreiras con karts
--GenericName[ro_RO]=Un joc de curse cu carturi
--Exec=@PREFIX@/@STK_INSTALL_BINARY_DIR@/supertuxkart --no-console
--Terminal=false
--StartupNotify=false
--Type=Application
--TryExec=@PREFIX@/@STK_INSTALL_BINARY_DIR@/supertuxkart
--Categories=Game;ArcadeGame;
--- 
-1.9.3
-
diff --git a/0002-unbundle-bullet.patch b/0002-unbundle-bullet.patch
deleted file mode 100644
index 47fe557..0000000
--- a/0002-unbundle-bullet.patch
+++ /dev/null
@@ -1,118 +0,0 @@
-From 01468f607b03ba612aa9fb401641e611092915cd Mon Sep 17 00:00:00 2001
-From: Igor Gnatenko <i.gnatenko.brain at gmail.com>
-Date: Sun, 11 May 2014 22:59:28 +0400
-Subject: [PATCH 2/6] unbundle bullet
-
-Signed-off-by: Igor Gnatenko <i.gnatenko.brain at gmail.com>
----
- CMakeLists.txt                | 12 +++++++-----
- src/physics/btKartRaycast.cpp |  4 ++--
- src/physics/physics.cpp       | 32 ++++++++++++++++++++------------
- 3 files changed, 29 insertions(+), 19 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 2d87a98..9672f3f 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -36,9 +36,13 @@ set(STK_INSTALL_BINARY_DIR "bin" CACHE
- set(STK_INSTALL_DATA_DIR "share/supertuxkart" CACHE
-     STRING "Install data folder to this directory, absolute or relative to CMAKE_INSTALL_PREFIX")
- 
-+include(FindPkgConfig)
-+
- # Build the Bullet physics library
--add_subdirectory("${PROJECT_SOURCE_DIR}/lib/bullet")
--include_directories("${PROJECT_SOURCE_DIR}/lib/bullet/src")
-+pkg_search_module(BULLET REQUIRED bullet)
-+include_directories(${BULLET_INCLUDE_DIRS})
-+string(REGEX REPLACE "\\." "" BULLET_VERSION_INT ${BULLET_VERSION})
-+add_definitions(-DBULLET_VERSION=${BULLET_VERSION_INT})
- 
- # Build the ENet UDP network library
- add_subdirectory("${PROJECT_SOURCE_DIR}/lib/enet")
-@@ -222,9 +226,7 @@ endif()
- 
- # Common library dependencies
- target_link_libraries(supertuxkart
--    bulletdynamics
--    bulletcollision
--    bulletmath
-+    ${BULLET_LIBRARIES}
-     enet
-     stkirrlicht
-     ${CURL_LIBRARIES}
-diff --git a/src/physics/btKartRaycast.cpp b/src/physics/btKartRaycast.cpp
-index 13b310f..7c00d42 100644
---- a/src/physics/btKartRaycast.cpp
-+++ b/src/physics/btKartRaycast.cpp
-@@ -63,7 +63,7 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to,
- 
-     if (rayCallback.hasHit())
-     {
--        btRigidBody* body = btRigidBody::upcast(rayCallback.m_collisionObject);
-+        const btRigidBody* body = btRigidBody::upcast(rayCallback.m_collisionObject);
-         if (body && body->hasContactResponse())
-         {
-             result.m_hitPointInWorld = rayCallback.m_hitPointWorld;
-@@ -88,7 +88,7 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to,
-                     result.m_hitNormalInWorld.getZ());
- #endif
-             }
--            return body;
-+            return (void *) body;
-         }
-     }
-     return 0;
-diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp
-index fcff1f0..b49446a 100644
---- a/src/physics/physics.cpp
-+++ b/src/physics/physics.cpp
-@@ -432,14 +432,24 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies,
-                              btStackAlloc* stackAlloc,
-                              btDispatcher* dispatcher)
- {
--    btScalar returnValue=
--        btSequentialImpulseConstraintSolver::solveGroup(bodies, numBodies,
--                                                        manifold, numManifolds,
--                                                        constraints,
--                                                        numConstraints, info,
--                                                        debugDrawer,
--                                                        stackAlloc,
--                                                        dispatcher);
-+    #if BULLET_VERSION >= 282
-+        btScalar returnValue=
-+            btSequentialImpulseConstraintSolver::solveGroup(bodies, numBodies,
-+                                                            manifold, numManifolds,
-+                                                            constraints,
-+                                                            numConstraints, info,
-+                                                            debugDrawer,
-+                                                            dispatcher);
-+    #else
-+        btScalar returnValue=
-+            btSequentialImpulseConstraintSolver::solveGroup(bodies, numBodies,
-+                                                            manifold, numManifolds,
-+                                                            constraints,
-+                                                            numConstraints, info,
-+                                                            debugDrawer,
-+                                                            stackAlloc,
-+                                                            dispatcher);
-+    #endif
-     int currentNumManifolds = m_dispatcher->getNumManifolds();
-     // We can't explode a rocket in a loop, since a rocket might collide with
-     // more than one object, and/or more than once with each object (if there
-@@ -450,10 +460,8 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies,
-         btPersistentManifold* contact_manifold =
-             m_dynamics_world->getDispatcher()->getManifoldByIndexInternal(i);
- 
--        btCollisionObject* objA =
--            static_cast<btCollisionObject*>(contact_manifold->getBody0());
--        btCollisionObject* objB =
--            static_cast<btCollisionObject*>(contact_manifold->getBody1());
-+        const btCollisionObject* objA = contact_manifold->getBody0();
-+        const btCollisionObject* objB = contact_manifold->getBody1();
- 
-         unsigned int num_contacts = contact_manifold->getNumContacts();
-         if(!num_contacts) continue;   // no real collision
--- 
-1.9.3
-
diff --git a/0003-unbundle-enet.patch b/0003-unbundle-enet.patch
deleted file mode 100644
index 9486457..0000000
--- a/0003-unbundle-enet.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From f71003a718a75843a4936702ec3c2bd90e804e3f Mon Sep 17 00:00:00 2001
-From: Igor Gnatenko <i.gnatenko.brain at gmail.com>
-Date: Wed, 14 May 2014 16:28:29 +0400
-Subject: [PATCH 3/6] unbundle enet
-
-Signed-off-by: Igor Gnatenko <i.gnatenko.brain at gmail.com>
----
- CMakeLists.txt       |  6 +++---
- cmake/FindENet.cmake | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 52 insertions(+), 3 deletions(-)
- create mode 100644 cmake/FindENet.cmake
-
-diff --git a/cmake/FindENet.cmake b/cmake/FindENet.cmake
-new file mode 100644
-index 0000000..b6c146c
---- /dev/null
-+++ b/cmake/FindENet.cmake
-@@ -0,0 +1,49 @@
-+# - Try to find enet
-+# Once done this will define
-+#
-+#  ENET_FOUND - system has enet
-+#  ENet_INCLUDE_DIRS - the enet include directory
-+#  ENet_LIBRARIES - the libraries needed to use enet
-+#
-+# $ENETDIR is an environment variable used for finding enet.
-+#
-+#  Borrowed from The Mana World
-+#  http://themanaworld.org/
-+#
-+# Several changes and additions by Fabian 'x3n' Landau
-+# Lots of simplifications by Adrian Friedli
-+#                 > www.orxonox.net <
-+
-+FIND_PATH(ENet_INCLUDE_DIRS enet/enet.h
-+    PATHS
-+    $ENV{ENETDIR}
-+    /usr/local
-+    /usr
-+    PATH_SUFFIXES include
-+    )
-+
-+FIND_LIBRARY(ENet_LIBRARY
-+    NAMES enet
-+    PATHS
-+    $ENV{ENETDIR}
-+    /usr/local
-+    /usr
-+    PATH_SUFFIXES lib
-+    )
-+
-+# handle the QUIETLY and REQUIRED arguments and set ENET_FOUND to TRUE if
-+# all listed variables are TRUE
-+INCLUDE(FindPackageHandleStandardArgs)
-+FIND_PACKAGE_HANDLE_STANDARD_ARGS(ENet DEFAULT_MSG ENet_LIBRARY ENet_INCLUDE_DIRS)
-+
-+IF (ENET_FOUND)
-+    IF(WIN32)
-+        SET(WINDOWS_ENET_DEPENDENCIES "ws2_32;winmm")
-+        SET(ENet_LIBRARIES ${ENet_LIBRARY} ${WINDOWS_ENET_DEPENDENCIES})
-+    ELSE(WIN32)
-+        SET(ENet_LIBRARIES ${ENet_LIBRARY})
-+    ENDIF(WIN32)
-+ENDIF (ENET_FOUND)
-+
-+MARK_AS_ADVANCED(ENet_LIBRARY ENet_LIBRARIES ENet_INCLUDE_DIRS)
-+
--- 
-1.9.3
-
---- a/CMakeLists.txt~	2014-10-15 05:18:41.000000000 -0500
-+++ b/CMakeLists.txt	2014-10-15 05:23:37.792191084 -0500
-@@ -225,7 +226,7 @@
-     bulletdynamics
-     bulletcollision
-     bulletmath
--    enet
-+    ${ENet_LIBRARIES}
-     stkirrlicht
-     ${CURL_LIBRARIES}
-     ${OGGVORBIS_LIBRARIES}
---- a/CMakeLists.txt~	2014-10-15 05:40:11.000000000 -0500
-+++ b/CMakeLists.txt	2014-10-15 05:40:51.372219546 -0500
-@@ -41,8 +41,8 @@
- include_directories("${PROJECT_SOURCE_DIR}/lib/bullet/src")
- 
- # Build the ENet UDP network library
--add_subdirectory("${PROJECT_SOURCE_DIR}/lib/enet")
--include_directories("${PROJECT_SOURCE_DIR}/lib/enet/include")
-+find_package(ENet REQUIRED)
-+include_directories(${ENet_INCLUDE_DIRS})
- 
- # Build the irrlicht library
- add_subdirectory("${PROJECT_SOURCE_DIR}/lib/irrlicht")
diff --git a/0004-unbundle-irrlicht.patch b/0004-unbundle-irrlicht.patch
deleted file mode 100644
index afa30a7..0000000
--- a/0004-unbundle-irrlicht.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From d86ff9a4e8ee4d7df53f26a686a0e4defcd749be Mon Sep 17 00:00:00 2001
-From: Igor Gnatenko <i.gnatenko.brain at gmail.com>
-Date: Wed, 14 May 2014 16:39:13 +0400
-Subject: [PATCH 4/6] unbundle irrlicht
-
-Signed-off-by: Igor Gnatenko <i.gnatenko.brain at gmail.com>
----
- CMakeLists.txt           |  8 ++---
- cmake/FindIrrlicht.cmake | 94 ++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 98 insertions(+), 4 deletions(-)
- create mode 100644 cmake/FindIrrlicht.cmake
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index bd525f8..861b76c 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -49,8 +49,8 @@ find_package(ENet REQUIRED)
- include_directories(${ENet_INCLUDE_DIRS})
- 
- # Build the irrlicht library
--add_subdirectory("${PROJECT_SOURCE_DIR}/lib/irrlicht")
--include_directories("${PROJECT_SOURCE_DIR}/lib/irrlicht/include")
-+find_package(Irrlicht REQUIRED)
-+include_directories(${IRRLICHT_INCLUDE_DIR})
- 
- # Build the Wiiuse library
- # Note: wiiuse MUST be declared after irrlicht, since otherwise
-@@ -228,10 +228,10 @@ endif()
- target_link_libraries(supertuxkart
-     ${BULLET_LIBRARIES}
-     ${ENet_LIBRARIES}
--    stkirrlicht
-+    ${IRRLICHT_LIBRARIES}
-+    IrrXML
-     ${CURL_LIBRARIES}
-     ${OGGVORBIS_LIBRARIES}
--    ${IRRLICHT_XF86VM_LIBRARY}
-     ${OPENAL_LIBRARY}
-     ${OPENGL_LIBRARIES})
- 
-diff --git a/cmake/FindIrrlicht.cmake b/cmake/FindIrrlicht.cmake
-new file mode 100644
-index 0000000..8c94ec2
---- /dev/null
-+++ b/cmake/FindIrrlicht.cmake
-@@ -0,0 +1,94 @@
-+#FindIrrlicht.cmake
-+
-+set(IRRLICHT_SOURCE_DIR "" CACHE PATH "Path to irrlicht source directory (optional)")
-+
-+if( UNIX )
-+	# Unix
-+else( UNIX )
-+	# Windows
-+endif( UNIX )
-+
-+# Find include directory
-+
-+if(NOT IRRLICHT_SOURCE_DIR STREQUAL "")
-+	set(IRRLICHT_SOURCE_DIR_INCLUDE
-+		"${IRRLICHT_SOURCE_DIR}/include"
-+	)
-+
-+	set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a Irrlicht Irrlicht.lib)
-+
-+	if(WIN32)
-+		if(MSVC)
-+			set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-visualstudio")
-+			set(IRRLICHT_LIBRARY_NAMES Irrlicht.lib)
-+		else()
-+			set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-gcc")
-+			set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a libIrrlicht.dll.a)
-+		endif()
-+	else()
-+		set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Linux")
-+		set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a)
-+	endif()
-+
-+	FIND_PATH(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
-+		PATHS
-+		${IRRLICHT_SOURCE_DIR_INCLUDE}
-+		NO_DEFAULT_PATH
-+	)
-+
-+	FIND_LIBRARY(IRRLICHT_LIBRARY NAMES ${IRRLICHT_LIBRARY_NAMES}
-+		PATHS
-+		${IRRLICHT_SOURCE_DIR_LIBS}
-+		NO_DEFAULT_PATH
-+	)
-+
-+else()
-+
-+	FIND_PATH(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
-+		PATHS
-+		/usr/local/include/irrlicht
-+		/usr/include/irrlicht
-+	)
-+
-+	FIND_LIBRARY(IRRLICHT_LIBRARY NAMES libIrrlicht.so Irrlicht
-+		PATHS
-+		/usr/local/lib
-+		/usr/lib
-+    /usr/lib64
-+	)
-+endif()
-+
-+MESSAGE(STATUS "IRRLICHT_SOURCE_DIR = ${IRRLICHT_SOURCE_DIR}")
-+MESSAGE(STATUS "IRRLICHT_INCLUDE_DIR = ${IRRLICHT_INCLUDE_DIR}")
-+MESSAGE(STATUS "IRRLICHT_LIBRARY = ${IRRLICHT_LIBRARY}")
-+
-+# On windows, find the dll for installation
-+if(WIN32)
-+	if(MSVC)
-+		FIND_FILE(IRRLICHT_DLL NAMES Irrlicht.dll
-+			PATHS
-+			"${IRRLICHT_SOURCE_DIR}/bin/Win32-VisualStudio"
-+			DOC "Path of the Irrlicht dll (for installation)"
-+		)
-+	else()
-+		FIND_FILE(IRRLICHT_DLL NAMES Irrlicht.dll
-+			PATHS
-+			"${IRRLICHT_SOURCE_DIR}/bin/Win32-gcc"
-+			DOC "Path of the Irrlicht dll (for installation)"
-+		)
-+	endif()
-+	MESSAGE(STATUS "IRRLICHT_DLL = ${IRRLICHT_DLL}")
-+endif(WIN32)
-+
-+# handle the QUIETLY and REQUIRED arguments and set IRRLICHT_FOUND to TRUE if
-+# all listed variables are TRUE
-+INCLUDE(FindPackageHandleStandardArgs)
-+FIND_PACKAGE_HANDLE_STANDARD_ARGS(IRRLICHT DEFAULT_MSG IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
-+
-+IF(IRRLICHT_FOUND)
-+  SET(IRRLICHT_LIBRARIES ${IRRLICHT_LIBRARY})
-+ELSE(IRRLICHT_FOUND)
-+  SET(IRRLICHT_LIBRARIES)
-+ENDIF(IRRLICHT_FOUND)
-+
-+MARK_AS_ADVANCED(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR IRRLICHT_DLL)
--- 
-1.9.3
-
diff --git a/0006-Adding-a-Wiimote-with-other-one-alredy-placed-Bug-12.patch b/0006-Adding-a-Wiimote-with-other-one-alredy-placed-Bug-12.patch
deleted file mode 100644
index 38a3226..0000000
--- a/0006-Adding-a-Wiimote-with-other-one-alredy-placed-Bug-12.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From 1eb131f4d3b7f9cb160c2c525208e75780c439ac Mon Sep 17 00:00:00 2001
-From: pgabor <peterffy95 at gmail.com>
-Date: Sat, 15 Mar 2014 21:15:04 +0100
-Subject: [PATCH 6/6] Adding a Wiimote with other one alredy placed - Bug:
- #1209 fixed
-
-(cherry picked from commit f84f49dfc8ae9b407ecb2794aef0cef26de531b7)
----
- src/input/wiimote_manager.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 77 insertions(+), 1 deletion(-)
-
-diff --git a/src/input/wiimote_manager.cpp b/src/input/wiimote_manager.cpp
-index 61be4e0..0203c74 100644
---- a/src/input/wiimote_manager.cpp
-+++ b/src/input/wiimote_manager.cpp
-@@ -17,6 +17,7 @@
- //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- 
- #ifdef ENABLE_WIIUSE
-+#define WCONST
- 
- #include "input/wiimote_manager.hpp"
- 
-@@ -60,24 +61,99 @@ WiimoteManager::~WiimoteManager()
-  */
- void WiimoteManager::launchDetection(int timeout)
- {
-+  // It's only needed on systems with bluez, because wiiuse_find does not find alredy connected wiimotes
-+#ifdef WIIUSE_BLUEZ
-+    //Cleans up the config and the disconnected wiimotes
-+    int number_previous_wiimotes = 0;
-+    wiimote_t** previous_wiimotes = (wiimote_t**) malloc(sizeof(struct wiimote_t*) * MAX_WIIMOTES);
-+    memset(previous_wiimotes,0,sizeof(struct wiimote_t*) * MAX_WIIMOTES);
-+    for (unsigned int i = 0; i < m_wiimotes.size(); i++)
-+    {
-+      if (WIIMOTE_IS_CONNECTED(m_all_wiimote_handles[i]))
-+      {
-+        previous_wiimotes[i]=m_all_wiimote_handles[i];
-+        m_all_wiimote_handles[i] = NULL;
-+        number_previous_wiimotes++;
-+      }
-+    }
-+
-+    //To prevent segmentation fault, have to delete NULLs
-+    wiimote_t** deletable_wiimotes = (wiimote_t**) malloc(sizeof(struct wiimote_t*) * (m_wiimotes.size()-number_previous_wiimotes));
-+    memset(deletable_wiimotes,0,sizeof(struct wiimote_t*) * (m_wiimotes.size()-number_previous_wiimotes));
-+    int number_deletables = 0;
-+    for (unsigned int i = 0; i < m_wiimotes.size(); i++)
-+    {
-+      if (m_all_wiimote_handles[i] != NULL)
-+      {
-+        deletable_wiimotes[number_deletables++] = m_all_wiimote_handles[i];
-+      }
-+    }
-+    m_all_wiimote_handles = wiiuse_init(MAX_WIIMOTES);
-+    wiiuse_cleanup(deletable_wiimotes, number_deletables);
-+
-+#endif
-+
-     // Stop WiiUse, remove wiimotes, gamepads, gamepad configs.
-     cleanup();
- 
--    m_all_wiimote_handles =  wiiuse_init(MAX_WIIMOTES);
-+    m_all_wiimote_handles = wiiuse_init(MAX_WIIMOTES);
- 
-     // Detect wiimotes
-     int nb_found_wiimotes = wiiuse_find(m_all_wiimote_handles, MAX_WIIMOTES, timeout);
- 
-+#ifndef WIIUSE_BLUEZ
-     // Couldn't find any wiimote?
-     if(nb_found_wiimotes == 0)
-         return;
-+#endif
-+
-+#ifdef WIIUSE_BLUEZ
-+    // Couldn't find any wiimote?
-+    if(nb_found_wiimotes + number_previous_wiimotes == 0)
-+        return;
-+#endif
- 
-     // Try to connect to all found wiimotes
-     int nb_wiimotes = wiiuse_connect(m_all_wiimote_handles, nb_found_wiimotes);
- 
-+#ifndef WIIUSE_BLUEZ
-     // Couldn't connect to any wiimote?
-     if(nb_wiimotes == 0)
-         return;
-+#endif
-+
-+#ifdef WIIUSE_BLUEZ
-+    // Couldn't connect to any wiimote?
-+    if(nb_wiimotes + number_previous_wiimotes == 0)
-+        return;
-+
-+    //Merges previous and new wiimote's list
-+    int number_merged_wiimotes = 0;
-+    for (int i = 0; i < number_previous_wiimotes && i + nb_wiimotes < MAX_WIIMOTES; i++)
-+    {
-+      m_all_wiimote_handles[i+nb_wiimotes] = previous_wiimotes[i];
-+      previous_wiimotes[i] = NULL;
-+      m_all_wiimote_handles[i]->unid = nb_wiimotes+i+1;
-+      number_merged_wiimotes++;
-+    }
-+    nb_wiimotes += number_merged_wiimotes;
-+
-+    //To prevent segmentation fault, have to delete NULLs
-+    number_deletables = 0;
-+    number_deletables = 0;
-+    deletable_wiimotes = (wiimote_t**) malloc(sizeof(struct wiimote_t*) * (number_previous_wiimotes-number_merged_wiimotes));
-+    memset(deletable_wiimotes,0,sizeof(struct wiimote_t*) * (number_previous_wiimotes-number_merged_wiimotes));
-+    for (int i = 0; i < number_previous_wiimotes; i++)
-+    {
-+      if (previous_wiimotes[i] != NULL)
-+      {
-+        deletable_wiimotes[number_deletables++] = previous_wiimotes[i];
-+      }
-+    }
-+    // Cleans up wiimotes which ones didn't fit in limit
-+    wiiuse_cleanup(deletable_wiimotes, number_deletables);
-+
-+#endif
- 
-     // ---------------------------------------------------
-     // Create or find a GamepadConfig for all wiimotes
--- 
-1.9.3
-
diff --git a/sources b/sources
index 9d1ca13..973bc45 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-aa31ecf883dc35859eec76c667f1a6d6  supertuxkart-0.8.1-src.tar.bz2
+ae07569ab02c88ca4d49017df7731923  supertuxkart-0.9-src.tar.xz
diff --git a/supertuxkart-fhs.patch b/supertuxkart-fhs.patch
deleted file mode 100644
index 7bb001d..0000000
--- a/supertuxkart-fhs.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -up SuperTuxKart-0.8/src/Makefile.am~ SuperTuxKart-0.8/src/Makefile.am
---- SuperTuxKart-0.8/src/Makefile.am~	2012-10-24 02:16:11.000000000 +0200
-+++ SuperTuxKart-0.8/src/Makefile.am	2013-08-04 16:46:50.822215408 +0200
-@@ -5,8 +5,7 @@ SUBDIRS = ide
- bindir=$(prefix)/games
- bin_PROGRAMS = supertuxkart
- 
--AM_CPPFLAGS = -DSUPERTUXKART_DATADIR="\"$(datadir)/games/$(PACKAGE)/\""  \
-- -I$(srcdir)/../lib/bullet/src/ -I$(srcdir)/../lib/enet/include/
-+AM_CPPFLAGS = -DSUPERTUXKART_DATADIR="\"$(datadir)/$(PACKAGE)/\""
- 
- supertuxkart_SOURCES = \
-  main.cpp \
diff --git a/supertuxkart-mesa-fix.patch b/supertuxkart-mesa-fix.patch
deleted file mode 100644
index e6d3d22..0000000
--- a/supertuxkart-mesa-fix.patch
+++ /dev/null
@@ -1,5191 +0,0 @@
---- lib/irrlicht/source/Irrlicht/COpenGLExtensionHandler.h	2013-11-13 17:55:29.000000000 -0600
-+++ lib/irrlicht/source/Irrlicht/COpenGLExtensionHandler.h	2014-10-15 09:24:51.307589643 -0500
-@@ -1,2591 +1,2597 @@
--// Copyright (C) 2002-2012 Nikolaus Gebhardt
--// This file is part of the "Irrlicht Engine".
--// For conditions of distribution and use, see copyright notice in Irrlicht.h
--
--#ifndef __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
--#define __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
--
--#include "IrrCompileConfig.h"
--#ifdef _IRR_COMPILE_WITH_OPENGL_
--
--#include "EDriverFeatures.h"
--#include "irrTypes.h"
--#include "os.h"
--
--#if defined(_IRR_WINDOWS_API_)
--	// include windows headers for HWND
--	#define WIN32_LEAN_AND_MEAN
--	#include <windows.h>
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--		#define GL_GLEXT_LEGACY 1
--	#endif
--	#include <GL/gl.h>
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--		#include "glext.h"
--	#endif
--	#include "wglext.h"
--
--	#ifdef _MSC_VER
--		#pragma comment(lib, "OpenGL32.lib")
--	#endif
--
--#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
--	#include "CIrrDeviceMacOSX.h"
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--		#define GL_GLEXT_LEGACY 1
--	#endif
--	#include <OpenGL/gl.h>
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--		#include "glext.h"
--	#endif
--#elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && !defined(_IRR_COMPILE_WITH_X11_DEVICE_)
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--		#define GL_GLEXT_LEGACY 1
--		#define GLX_GLXEXT_LEGACY 1
--	#else
--		#define GL_GLEXT_PROTOTYPES 1
--		#define GLX_GLXEXT_PROTOTYPES 1
--	#endif
--	#define NO_SDL_GLEXT
--	#include <SDL/SDL_video.h>
--	#include <SDL/SDL_opengl.h>
--	#include "glext.h"
--#else
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--		#define GL_GLEXT_LEGACY 1
--		#define GLX_GLXEXT_LEGACY 1
--	#else
--		#define GL_GLEXT_PROTOTYPES 1
--		#define GLX_GLXEXT_PROTOTYPES 1
--	#endif
--	#include <GL/gl.h>
--	#include <GL/glx.h>
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--	#include "glext.h"
--	#undef GLX_ARB_get_proc_address // avoid problems with local glxext.h
--	#include "glxext.h"
--	#endif
--#endif
--
--#ifndef GL_ARB_shader_objects
--/* GL types for program/shader text and shader object handles */
--typedef char GLcharARB;
--typedef unsigned int GLhandleARB;
--#endif
--
--#ifndef GL_VERSION_2_0
--/* GL type for program/shader text */
--typedef char GLchar;
--#endif
--
--
--namespace irr
--{
--namespace video
--{
--
--
--static const char* const OpenGLFeatureStrings[] = {
--	"GL_3DFX_multisample",
--	"GL_3DFX_tbuffer",
--	"GL_3DFX_texture_compression_FXT1",
--	"GL_AMD_blend_minmax_factor",
--	"GL_AMD_conservative_depth",
--	"GL_AMD_debug_output",
--	"GL_AMD_depth_clamp_separate",
--	"GL_AMD_draw_buffers_blend",
--	"GL_AMD_multi_draw_indirect",
--	"GL_AMD_name_gen_delete",
--	"GL_AMD_performance_monitor",
--	"GL_AMD_sample_positions",
--	"GL_AMD_seamless_cubemap_per_texture",
--	"GL_AMD_shader_stencil_export",
--	"GL_AMD_texture_texture4",
--	"GL_AMD_transform_feedback3_lines_triangles",
--	"GL_AMD_vertex_shader_tesselator",
--	"GL_APPLE_aux_depth_stencil",
--	"GL_APPLE_client_storage",
--	"GL_APPLE_element_array",
--	"GL_APPLE_fence",
--	"GL_APPLE_float_pixels",
--	"GL_APPLE_flush_buffer_range",
--	"GL_APPLE_object_purgeable",
--	"GL_APPLE_rgb_422",
--	"GL_APPLE_row_bytes",
--	"GL_APPLE_specular_vector",
--	"GL_APPLE_texture_range",
--	"GL_APPLE_transform_hint",
--	"GL_APPLE_vertex_array_object",
--	"GL_APPLE_vertex_array_range",
--	"GL_APPLE_vertex_program_evaluators",
--	"GL_APPLE_ycbcr_422",
--	"GL_ARB_base_instance",
--	"GL_ARB_blend_func_extended",
--	"GL_ARB_cl_event",
--	"GL_ARB_color_buffer_float",
--	"GL_ARB_compatibility",
--	"GL_ARB_compressed_texture_pixel_storage",
--	"GL_ARB_conservative_depth",
--	"GL_ARB_copy_buffer",
--	"GL_ARB_debug_output",
--	"GL_ARB_depth_buffer_float",
--	"GL_ARB_depth_clamp",
--	"GL_ARB_depth_texture",
--	"GL_ARB_draw_buffers",
--	"GL_ARB_draw_buffers_blend",
--	"GL_ARB_draw_elements_base_vertex",
--	"GL_ARB_draw_indirect",
--	"GL_ARB_draw_instanced",
--	"GL_ARB_ES2_compatibility",
--	"GL_ARB_explicit_attrib_location",
--	"GL_ARB_fragment_coord_conventions",
--	"GL_ARB_fragment_program",
--	"GL_ARB_fragment_program_shadow",
--	"GL_ARB_fragment_shader",
--	"GL_ARB_framebuffer_object",
--	"GL_ARB_framebuffer_sRGB",
--	"GL_ARB_get_program_binary",
--	"GL_ARB_geometry_shader4",
--	"GL_ARB_gpu_shader5",
--	"GL_ARB_gpu_shader_fp64",
--	"GL_ARB_half_float_pixel",
--	"GL_ARB_half_float_vertex",
--	"GL_ARB_imaging",
--	"GL_ARB_instanced_arrays",
--	"GL_ARB_internalformat_query",
--	"GL_ARB_map_buffer_alignment",
--	"GL_ARB_map_buffer_range",
--	"GL_ARB_matrix_palette",
--	"GL_ARB_multisample",
--	"GL_ARB_multitexture",
--	"GL_ARB_occlusion_query",
--	"GL_ARB_occlusion_query2",
--	"GL_ARB_pixel_buffer_object",
--	"GL_ARB_point_parameters",
--	"GL_ARB_point_sprite",
--	"GL_ARB_provoking_vertex",
--	"GL_ARB_robustness",
--	"GL_ARB_sample_shading",
--	"GL_ARB_sampler_objects",
--	"GL_ARB_seamless_cube_map",
--	"GL_ARB_separate_shader_objects",
--	"GL_ARB_shader_atomic_counters",
--	"GL_ARB_shader_bit_encoding",
--	"GL_ARB_shader_image_load_store",
--	"GL_ARB_shader_objects",
--	"GL_ARB_shader_precision",
--	"GL_ARB_shader_stencil_export",
--	"GL_ARB_shader_subroutine",
--	"GL_ARB_shader_texture_lod",
--	"GL_ARB_shading_language_100",
--	"GL_ARB_shading_language_420pack",
--	"GL_ARB_shading_language_include",
--	"GL_ARB_shading_language_packing",
--	"GL_ARB_shadow",
--	"GL_ARB_shadow_ambient",
--	"GL_ARB_sync",
--	"GL_ARB_tessellation_shader",
--	"GL_ARB_texture_border_clamp",
--	"GL_ARB_texture_buffer_object",
--	"GL_ARB_texture_buffer_object_rgb32",
--	"GL_ARB_texture_compression",
--	"GL_ARB_texture_compression_bptc",
--	"GL_ARB_texture_compression_rgtc",
--	"GL_ARB_texture_cube_map",
--	"GL_ARB_texture_cube_map_array",
--	"GL_ARB_texture_env_add",
--	"GL_ARB_texture_env_combine",
--	"GL_ARB_texture_env_crossbar",
--	"GL_ARB_texture_env_dot3",
--	"GL_ARB_texture_float",
--	"GL_ARB_texture_gather",
--	"GL_ARB_texture_mirrored_repeat",
--	"GL_ARB_texture_multisample",
--	"GL_ARB_texture_non_power_of_two",
--	"GL_ARB_texture_query_lod",
--	"GL_ARB_texture_rectangle",
--	"GL_ARB_texture_rg",
--	"GL_ARB_texture_rgb10_a2ui",
--	"GL_ARB_texture_storage",
--	"GL_ARB_texture_swizzle",
--	"GL_ARB_timer_query",
--	"GL_ARB_transform_feedback2",
--	"GL_ARB_transform_feedback3",
--	"GL_ARB_transform_feedback_instanced",
--	"GL_ARB_transpose_matrix",
--	"GL_ARB_uniform_buffer_object",
--	"GL_ARB_vertex_array_bgra",
--	"GL_ARB_vertex_array_object",
--	"GL_ARB_vertex_attrib_64bit",
--	"GL_ARB_vertex_blend",
--	"GL_ARB_vertex_buffer_object",
--	"GL_ARB_vertex_program",
--	"GL_ARB_vertex_shader",
--	"GL_ARB_vertex_type_2_10_10_10_rev",
--	"GL_ARB_viewport_array",
--	"GL_ARB_window_pos",
--	"GL_ATI_draw_buffers",
--	"GL_ATI_element_array",
--	"GL_ATI_envmap_bumpmap",
--	"GL_ATI_fragment_shader",
--	"GL_ATI_map_object_buffer",
--	"GL_ATI_meminfo",
--	"GL_ATI_pixel_format_float",
--	"GL_ATI_pn_triangles",
--	"GL_ATI_separate_stencil",
--	"GL_ATI_text_fragment_shader",
--	"GL_ATI_texture_env_combine3",
--	"GL_ATI_texture_float",
--	"GL_ATI_texture_mirror_once",
--	"GL_ATI_vertex_array_object",
--	"GL_ATI_vertex_attrib_array_object",
--	"GL_ATI_vertex_streams",
--	"GL_EXT_422_pixels",
--	"GL_EXT_abgr",
--	"GL_EXT_bgra",
--	"GL_EXT_bindable_uniform",
--	"GL_EXT_blend_color",
--	"GL_EXT_blend_equation_separate",
--	"GL_EXT_blend_func_separate",
--	"GL_EXT_blend_logic_op",
--	"GL_EXT_blend_minmax",
--	"GL_EXT_blend_subtract",
--	"GL_EXT_clip_volume_hint",
--	"GL_EXT_cmyka",
--	"GL_EXT_color_subtable",
--	"GL_EXT_compiled_vertex_array",
--	"GL_EXT_convolution",
--	"GL_EXT_coordinate_frame",
--	"GL_EXT_copy_texture",
--	"GL_EXT_cull_vertex",
--	"GL_EXT_depth_bounds_test",
--	"GL_EXT_direct_state_access",
--	"GL_EXT_draw_buffers2",
--	"GL_EXT_draw_instanced",
--	"GL_EXT_draw_range_elements",
--	"GL_EXT_fog_coord",
--	"GL_EXT_framebuffer_blit",
--	"GL_EXT_framebuffer_multisample",
--	"GL_EXT_framebuffer_multisample_blit_scaled",
--	"GL_EXT_framebuffer_object",
--	"GL_EXT_framebuffer_sRGB",
--	"GL_EXT_geometry_shader4",
--	"GL_EXT_gpu_program_parameters",
--	"GL_EXT_gpu_shader4",
--	"GL_EXT_histogram",
--	"GL_EXT_index_array_formats",
--	"GL_EXT_index_func",
--	"GL_EXT_index_material",
--	"GL_EXT_index_texture",
--	"GL_EXT_light_texture",
--	"GL_EXT_misc_attribute",
--	"GL_EXT_multi_draw_arrays",
--	"GL_EXT_multisample",
--	"GL_EXT_packed_depth_stencil",
--	"GL_EXT_packed_float",
--	"GL_EXT_packed_pixels",
--	"GL_EXT_paletted_texture",
--	"GL_EXT_pixel_buffer_object",
--	"GL_EXT_pixel_transform",
--	"GL_EXT_pixel_transform_color_table",
--	"GL_EXT_point_parameters",
--	"GL_EXT_polygon_offset",
--	"GL_EXT_provoking_vertex",
--	"GL_EXT_rescale_normal",
--	"GL_EXT_secondary_color",
--	"GL_EXT_separate_shader_objects",
--	"GL_EXT_separate_specular_color",
--	"GL_EXT_shader_image_load_store",
--	"GL_EXT_shadow_funcs",
--	"GL_EXT_shared_texture_palette",
--	"GL_EXT_stencil_clear_tag",
--	"GL_EXT_stencil_two_side",
--	"GL_EXT_stencil_wrap",
--	"GL_EXT_subtexture",
--	"GL_EXT_texture",
--	"GL_EXT_texture3D",
--	"GL_EXT_texture_array",
--	"GL_EXT_texture_buffer_object",
--	"GL_EXT_texture_compression_latc",
--	"GL_EXT_texture_compression_rgtc",
--	"GL_EXT_texture_compression_s3tc",
--	"GL_EXT_texture_cube_map",
--	"GL_EXT_texture_env_add",
--	"GL_EXT_texture_env_combine",
--	"GL_EXT_texture_env_dot3",
--	"GL_EXT_texture_filter_anisotropic",
--	"GL_EXT_texture_integer",
--	"GL_EXT_texture_lod_bias",
--	"GL_EXT_texture_mirror_clamp",
--	"GL_EXT_texture_object",
--	"GL_EXT_texture_perturb_normal",
--	"GL_EXT_texture_shared_exponent",
--	"GL_EXT_texture_snorm",
--	"GL_EXT_texture_sRGB",
--	"GL_EXT_texture_sRGB_decode",
--	"GL_EXT_texture_swizzle",
--	"GL_EXT_timer_query",
--	"GL_EXT_transform_feedback",
--	"GL_EXT_vertex_array",
--	"GL_EXT_vertex_array_bgra",
--	"GL_EXT_vertex_attrib_64bit",
--	"GL_EXT_vertex_shader",
--	"GL_EXT_vertex_weighting",
--	"GL_EXT_x11_sync_object",
--	"GL_FfdMaskSGIX",
--	"GL_GREMEDY_frame_terminator",
--	"GL_GREMEDY_string_marker",
--	"GL_HP_convolution_border_modes",
--	"GL_HP_image_transform",
--	"GL_HP_occlusion_test",
--	"GL_HP_texture_lighting",
--	"GL_IBM_cull_vertex",
--	"GL_IBM_multimode_draw_arrays",
--	"GL_IBM_rasterpos_clip",
--	"GL_IBM_texture_mirrored_repeat",
--	"GL_IBM_vertex_array_lists",
--	"GL_INGR_blend_func_separate",
--	"GL_INGR_color_clamp",
--	"GL_INGR_interlace_read",
--	"GL_INGR_palette_buffer",
--	"GL_INTEL_parallel_arrays",
--	"GL_INTEL_texture_scissor",
--	"GL_MESA_pack_invert",
--	"GL_MESA_resize_buffers",
--	"GL_MESA_window_pos",
--	"GL_MESAX_texture_stack",
--	"GL_MESA_ycbcr_texture",
--	"GL_NV_blend_square",
--	"GL_NV_conditional_render",
--	"GL_NV_copy_depth_to_color",
--	"GL_NV_copy_image",
--	"GL_NV_depth_buffer_float",
--	"GL_NV_depth_clamp",
--	"GL_NV_evaluators",
--	"GL_NV_explicit_multisample",
--	"GL_NV_fence",
--	"GL_NV_float_buffer",
--	"GL_NV_fog_distance",
--	"GL_NV_fragment_program",
--	"GL_NV_fragment_program2",
--	"GL_NV_fragment_program4",
--	"GL_NV_fragment_program_option",
--	"GL_NV_framebuffer_multisample_coverage",
--	"GL_NV_geometry_program4",
--	"GL_NV_geometry_shader4",
--	"GL_NV_gpu_program4",
--	"GL_NV_gpu_program5",
--	"GL_NV_gpu_shader5",
--	"GL_NV_half_float",
--	"GL_NV_light_max_exponent",
--	"GL_NV_multisample_coverage",
--	"GL_NV_multisample_filter_hint",
--	"GL_NV_occlusion_query",
--	"GL_NV_packed_depth_stencil",
--	"GL_NV_parameter_buffer_object",
--	"GL_NV_parameter_buffer_object2",
--	"GL_NV_pixel_data_range",
--	"GL_NV_point_sprite",
--	"GL_NV_present_video",
--	"GL_NV_primitive_restart",
--	"GL_NV_register_combiners",
--	"GL_NV_register_combiners2",
--	"GL_NV_shader_buffer_load",
--	"GL_NV_shader_buffer_store",
--	"GL_NV_tessellation_program5",
--	"GL_NV_texgen_emboss",
--	"GL_NV_texgen_reflection",
--	"GL_NV_texture_barrier",
--	"GL_NV_texture_compression_vtc",
--	"GL_NV_texture_env_combine4",
--	"GL_NV_texture_expand_normal",
--	"GL_NV_texture_multisample",
--	"GL_NV_texture_rectangle",
--	"GL_NV_texture_shader",
--	"GL_NV_texture_shader2",
--	"GL_NV_texture_shader3",
--	"GL_NV_transform_feedback",
--	"GL_NV_transform_feedback2",
--	"GL_NV_vdpau_interop",
--	"GL_NV_vertex_array_range",
--	"GL_NV_vertex_array_range2",
--	"GL_NV_vertex_attrib_integer_64bit",
--	"GL_NV_vertex_buffer_unified_memory",
--	"GL_NV_vertex_program",
--	"GL_NV_vertex_program1_1",
--	"GL_NV_vertex_program2",
--	"GL_NV_vertex_program2_option",
--	"GL_NV_vertex_program3",
--	"GL_NV_vertex_program4",
--	"GL_NV_video_capture",
--	"GL_OES_read_format",
--	"GL_OML_interlace",
--	"GL_OML_resample",
--	"GL_OML_subsample",
--	"GL_PGI_misc_hints",
--	"GL_PGI_vertex_hints",
--	"GL_REND_screen_coordinates",
--	"GL_S3_s3tc",
--	"GL_SGI_color_matrix",
--	"GL_SGI_color_table",
--	"GL_SGI_depth_pass_instrument",
--	"GL_SGIS_detail_texture",
--	"GL_SGIS_fog_function",
--	"GL_SGIS_generate_mipmap",
--	"GL_SGIS_multisample",
--	"GL_SGIS_pixel_texture",
--	"GL_SGIS_point_line_texgen",
--	"GL_SGIS_point_parameters",
--	"GL_SGIS_sharpen_texture",
--	"GL_SGIS_texture4D",
--	"GL_SGIS_texture_border_clamp",
--	"GL_SGIS_texture_color_mask",
--	"GL_SGIS_texture_edge_clamp",
--	"GL_SGIS_texture_filter4",
--	"GL_SGIS_texture_lod",
--	"GL_SGIS_texture_select",
--	"GL_SGI_texture_color_table",
--	"GL_SGIX_async",
--	"GL_SGIX_async_histogram",
--	"GL_SGIX_async_pixel",
--	"GL_SGIX_blend_alpha_minmax",
--	"GL_SGIX_calligraphic_fragment",
--	"GL_SGIX_clipmap",
--	"GL_SGIX_convolution_accuracy",
--	"GL_SGIX_depth_pass_instrument",
--	"GL_SGIX_depth_texture",
--	"GL_SGIX_flush_raster",
--	"GL_SGIX_fog_offset",
--	"GL_SGIX_fog_scale",
--	"GL_SGIX_fragment_lighting",
--	"GL_SGIX_framezoom",
--	"GL_SGIX_igloo_interface",
--	"GL_SGIX_impact_pixel_texture",
--	"GL_SGIX_instruments",
--	"GL_SGIX_interlace",
--	"GL_SGIX_ir_instrument1",
--	"GL_SGIX_list_priority",
--	"GL_SGIX_pixel_texture",
--	"GL_SGIX_pixel_tiles",
--	"GL_SGIX_polynomial_ffd",
--	"GL_SGIX_reference_plane",
--	"GL_SGIX_resample",
--	"GL_SGIX_scalebias_hint",
--	"GL_SGIX_shadow",
--	"GL_SGIX_shadow_ambient",
--	"GL_SGIX_sprite",
--	"GL_SGIX_subsample",
--	"GL_SGIX_tag_sample_buffer",
--	"GL_SGIX_texture_add_env",
--	"GL_SGIX_texture_coordinate_clamp",
--	"GL_SGIX_texture_lod_bias",
--	"GL_SGIX_texture_multi_buffer",
--	"GL_SGIX_texture_scale_bias",
--	"GL_SGIX_texture_select",
--	"GL_SGIX_vertex_preclip",
--	"GL_SGIX_ycrcb",
--	"GL_SGIX_ycrcba",
--	"GL_SGIX_ycrcb_subsample",
--	"GL_SUN_convolution_border_modes",
--	"GL_SUN_global_alpha",
--	"GL_SUN_mesh_array",
--	"GL_SUN_slice_accum",
--	"GL_SUN_triangle_list",
--	"GL_SUN_vertex",
--	"GL_SUNX_constant_data",
--	"GL_WIN_phong_shading",
--	"GL_WIN_specular_fog",
--	// unofficial stuff
--	"GL_NVX_gpu_memory_info"
--};
--
--
--class COpenGLExtensionHandler
--{
--	public:
--	enum EOpenGLFeatures {
--		IRR_3DFX_multisample = 0,
--		IRR_3DFX_tbuffer,
--		IRR_3DFX_texture_compression_FXT1,
--		IRR_AMD_blend_minmax_factor,
--		IRR_AMD_conservative_depth,
--		IRR_AMD_debug_output,
--		IRR_AMD_depth_clamp_separate,
--		IRR_AMD_draw_buffers_blend,
--		IRR_AMD_multi_draw_indirect,
--		IRR_AMD_name_gen_delete,
--		IRR_AMD_performance_monitor,
--		IRR_AMD_sample_positions,
--		IRR_AMD_seamless_cubemap_per_texture,
--		IRR_AMD_shader_stencil_export,
--		IRR_AMD_texture_texture4,
--		IRR_AMD_transform_feedback3_lines_triangles,
--		IRR_AMD_vertex_shader_tesselator,
--		IRR_APPLE_aux_depth_stencil,
--		IRR_APPLE_client_storage,
--		IRR_APPLE_element_array,
--		IRR_APPLE_fence,
--		IRR_APPLE_float_pixels,
--		IRR_APPLE_flush_buffer_range,
--		IRR_APPLE_object_purgeable,
--		IRR_APPLE_rgb_422,
--		IRR_APPLE_row_bytes,
--		IRR_APPLE_specular_vector,
--		IRR_APPLE_texture_range,
--		IRR_APPLE_transform_hint,
--		IRR_APPLE_vertex_array_object,
--		IRR_APPLE_vertex_array_range,
--		IRR_APPLE_vertex_program_evaluators,
--		IRR_APPLE_ycbcr_422,
--		IRR_ARB_base_instance,
--		IRR_ARB_blend_func_extended,
--		IRR_ARB_cl_event,
--		IRR_ARB_color_buffer_float,
--		IRR_ARB_compatibility,
--		IRR_ARB_compressed_texture_pixel_storage,
--		IRR_ARB_conservative_depth,
--		IRR_ARB_copy_buffer,
--		IRR_ARB_debug_output,
--		IRR_ARB_depth_buffer_float,
--		IRR_ARB_depth_clamp,
--		IRR_ARB_depth_texture,
--		IRR_ARB_draw_buffers,
--		IRR_ARB_draw_buffers_blend,
--		IRR_ARB_draw_elements_base_vertex,
--		IRR_ARB_draw_indirect,
--		IRR_ARB_draw_instanced,
--		IRR_ARB_ES2_compatibility,
--		IRR_ARB_explicit_attrib_location,
--		IRR_ARB_fragment_coord_conventions,
--		IRR_ARB_fragment_program,
--		IRR_ARB_fragment_program_shadow,
--		IRR_ARB_fragment_shader,
--		IRR_ARB_framebuffer_object,
--		IRR_ARB_framebuffer_sRGB,
--		IRR_ARB_get_program_binary,
--		IRR_ARB_geometry_shader4,
--		IRR_ARB_gpu_shader5,
--		IRR_ARB_gpu_shader_fp64,
--		IRR_ARB_half_float_pixel,
--		IRR_ARB_half_float_vertex,
--		IRR_ARB_imaging,
--		IRR_ARB_instanced_arrays,
--		IRR_ARB_internalformat_query,
--		IRR_ARB_map_buffer_alignment,
--		IRR_ARB_map_buffer_range,
--		IRR_ARB_matrix_palette,
--		IRR_ARB_multisample,
--		IRR_ARB_multitexture,
--		IRR_ARB_occlusion_query,
--		IRR_ARB_occlusion_query2,
--		IRR_ARB_pixel_buffer_object,
--		IRR_ARB_point_parameters,
--		IRR_ARB_point_sprite,
--		IRR_ARB_provoking_vertex,
--		IRR_ARB_robustness,
--		IRR_ARB_sample_shading,
--		IRR_ARB_sampler_objects,
--		IRR_ARB_seamless_cube_map,
--		IRR_ARB_separate_shader_objects,
--		IRR_ARB_shader_atomic_counters,
--		IRR_ARB_shader_bit_encoding,
--		IRR_ARB_shader_image_load_store,
--		IRR_ARB_shader_objects,
--		IRR_ARB_shader_precision,
--		IRR_ARB_shader_stencil_export,
--		IRR_ARB_shader_subroutine,
--		IRR_ARB_shader_texture_lod,
--		IRR_ARB_shading_language_100,
--		IRR_ARB_shading_language_420pack,
--		IRR_ARB_shading_language_include,
--		IRR_ARB_shading_language_packing,
--		IRR_ARB_shadow,
--		IRR_ARB_shadow_ambient,
--		IRR_ARB_sync,
--		IRR_ARB_tessellation_shader,
--		IRR_ARB_texture_border_clamp,
--		IRR_ARB_texture_buffer_object,
--		IRR_ARB_texture_buffer_object_rgb32,
--		IRR_ARB_texture_compression,
--		IRR_ARB_texture_compression_bptc,
--		IRR_ARB_texture_compression_rgtc,
--		IRR_ARB_texture_cube_map,
--		IRR_ARB_texture_cube_map_array,
--		IRR_ARB_texture_env_add,
--		IRR_ARB_texture_env_combine,
--		IRR_ARB_texture_env_crossbar,
--		IRR_ARB_texture_env_dot3,
--		IRR_ARB_texture_float,
--		IRR_ARB_texture_gather,
--		IRR_ARB_texture_mirrored_repeat,
--		IRR_ARB_texture_multisample,
--		IRR_ARB_texture_non_power_of_two,
--		IRR_ARB_texture_query_lod,
--		IRR_ARB_texture_rectangle,
--		IRR_ARB_texture_rg,
--		IRR_ARB_texture_rgb10_a2ui,
--		IRR_ARB_texture_storage,
--		IRR_ARB_texture_swizzle,
--		IRR_ARB_timer_query,
--		IRR_ARB_transform_feedback2,
--		IRR_ARB_transform_feedback3,
--		IRR_ARB_transform_feedback_instanced,
--		IRR_ARB_transpose_matrix,
--		IRR_ARB_uniform_buffer_object,
--		IRR_ARB_vertex_array_bgra,
--		IRR_ARB_vertex_array_object,
--		IRR_ARB_vertex_attrib_64bit,
--		IRR_ARB_vertex_blend,
--		IRR_ARB_vertex_buffer_object,
--		IRR_ARB_vertex_program,
--		IRR_ARB_vertex_shader,
--		IRR_ARB_vertex_type_2_10_10_10_rev,
--		IRR_ARB_viewport_array,
--		IRR_ARB_window_pos,
--		IRR_ATI_draw_buffers,
--		IRR_ATI_element_array,
--		IRR_ATI_envmap_bumpmap,
--		IRR_ATI_fragment_shader,
--		IRR_ATI_map_object_buffer,
--		IRR_ATI_meminfo,
--		IRR_ATI_pixel_format_float,
--		IRR_ATI_pn_triangles,
--		IRR_ATI_separate_stencil,
--		IRR_ATI_text_fragment_shader,
--		IRR_ATI_texture_env_combine3,
--		IRR_ATI_texture_float,
--		IRR_ATI_texture_mirror_once,
--		IRR_ATI_vertex_array_object,
--		IRR_ATI_vertex_attrib_array_object,
--		IRR_ATI_vertex_streams,
--		IRR_EXT_422_pixels,
--		IRR_EXT_abgr,
--		IRR_EXT_bgra,
--		IRR_EXT_bindable_uniform,
--		IRR_EXT_blend_color,
--		IRR_EXT_blend_equation_separate,
--		IRR_EXT_blend_func_separate,
--		IRR_EXT_blend_logic_op,
--		IRR_EXT_blend_minmax,
--		IRR_EXT_blend_subtract,
--		IRR_EXT_clip_volume_hint,
--		IRR_EXT_cmyka,
--		IRR_EXT_color_subtable,
--		IRR_EXT_compiled_vertex_array,
--		IRR_EXT_convolution,
--		IRR_EXT_coordinate_frame,
--		IRR_EXT_copy_texture,
--		IRR_EXT_cull_vertex,
--		IRR_EXT_depth_bounds_test,
--		IRR_EXT_direct_state_access,
--		IRR_EXT_draw_buffers2,
--		IRR_EXT_draw_instanced,
--		IRR_EXT_draw_range_elements,
--		IRR_EXT_fog_coord,
--		IRR_EXT_framebuffer_blit,
--		IRR_EXT_framebuffer_multisample,
--		IRR_EXT_framebuffer_multisample_blit_scaled,
--		IRR_EXT_framebuffer_object,
--		IRR_EXT_framebuffer_sRGB,
--		IRR_EXT_geometry_shader4,
--		IRR_EXT_gpu_program_parameters,
--		IRR_EXT_gpu_shader4,
--		IRR_EXT_histogram,
--		IRR_EXT_index_array_formats,
--		IRR_EXT_index_func,
--		IRR_EXT_index_material,
--		IRR_EXT_index_texture,
--		IRR_EXT_light_texture,
--		IRR_EXT_misc_attribute,
--		IRR_EXT_multi_draw_arrays,
--		IRR_EXT_multisample,
--		IRR_EXT_packed_depth_stencil,
--		IRR_EXT_packed_float,
--		IRR_EXT_packed_pixels,
--		IRR_EXT_paletted_texture,
--		IRR_EXT_pixel_buffer_object,
--		IRR_EXT_pixel_transform,
--		IRR_EXT_pixel_transform_color_table,
--		IRR_EXT_point_parameters,
--		IRR_EXT_polygon_offset,
--		IRR_EXT_provoking_vertex,
--		IRR_EXT_rescale_normal,
--		IRR_EXT_secondary_color,
--		IRR_EXT_separate_shader_objects,
--		IRR_EXT_separate_specular_color,
--		IRR_EXT_shader_image_load_store,
--		IRR_EXT_shadow_funcs,
--		IRR_EXT_shared_texture_palette,
--		IRR_EXT_stencil_clear_tag,
--		IRR_EXT_stencil_two_side,
--		IRR_EXT_stencil_wrap,
--		IRR_EXT_subtexture,
--		IRR_EXT_texture,
--		IRR_EXT_texture3D,
--		IRR_EXT_texture_array,
--		IRR_EXT_texture_buffer_object,
--		IRR_EXT_texture_compression_latc,
--		IRR_EXT_texture_compression_rgtc,
--		IRR_EXT_texture_compression_s3tc,
--		IRR_EXT_texture_cube_map,
--		IRR_EXT_texture_env_add,
--		IRR_EXT_texture_env_combine,
--		IRR_EXT_texture_env_dot3,
--		IRR_EXT_texture_filter_anisotropic,
--		IRR_EXT_texture_integer,
--		IRR_EXT_texture_lod_bias,
--		IRR_EXT_texture_mirror_clamp,
--		IRR_EXT_texture_object,
--		IRR_EXT_texture_perturb_normal,
--		IRR_EXT_texture_shared_exponent,
--		IRR_EXT_texture_snorm,
--		IRR_EXT_texture_sRGB,
--		IRR_EXT_texture_sRGB_decode,
--		IRR_EXT_texture_swizzle,
--		IRR_EXT_timer_query,
--		IRR_EXT_transform_feedback,
--		IRR_EXT_vertex_array,
--		IRR_EXT_vertex_array_bgra,
--		IRR_EXT_vertex_attrib_64bit,
--		IRR_EXT_vertex_shader,
--		IRR_EXT_vertex_weighting,
--		IRR_EXT_x11_sync_object,
--		IRR_FfdMaskSGIX,
--		IRR_GREMEDY_frame_terminator,
--		IRR_GREMEDY_string_marker,
--		IRR_HP_convolution_border_modes,
--		IRR_HP_image_transform,
--		IRR_HP_occlusion_test,
--		IRR_HP_texture_lighting,
--		IRR_IBM_cull_vertex,
--		IRR_IBM_multimode_draw_arrays,
--		IRR_IBM_rasterpos_clip,
--		IRR_IBM_texture_mirrored_repeat,
--		IRR_IBM_vertex_array_lists,
--		IRR_INGR_blend_func_separate,
--		IRR_INGR_color_clamp,
--		IRR_INGR_interlace_read,
--		IRR_INGR_palette_buffer,
--		IRR_INTEL_parallel_arrays,
--		IRR_INTEL_texture_scissor,
--		IRR_MESA_pack_invert,
--		IRR_MESA_resize_buffers,
--		IRR_MESA_window_pos,
--		IRR_MESAX_texture_stack,
--		IRR_MESA_ycbcr_texture,
--		IRR_NV_blend_square,
--		IRR_NV_conditional_render,
--		IRR_NV_copy_depth_to_color,
--		IRR_NV_copy_image,
--		IRR_NV_depth_buffer_float,
--		IRR_NV_depth_clamp,
--		IRR_NV_evaluators,
--		IRR_NV_explicit_multisample,
--		IRR_NV_fence,
--		IRR_NV_float_buffer,
--		IRR_NV_fog_distance,
--		IRR_NV_fragment_program,
--		IRR_NV_fragment_program2,
--		IRR_NV_fragment_program4,
--		IRR_NV_fragment_program_option,
--		IRR_NV_framebuffer_multisample_coverage,
--		IRR_NV_geometry_program4,
--		IRR_NV_geometry_shader4,
--		IRR_NV_gpu_program4,
--		IRR_NV_gpu_program5,
--		IRR_NV_gpu_shader5,
--		IRR_NV_half_float,
--		IRR_NV_light_max_exponent,
--		IRR_NV_multisample_coverage,
--		IRR_NV_multisample_filter_hint,
--		IRR_NV_occlusion_query,
--		IRR_NV_packed_depth_stencil,
--		IRR_NV_parameter_buffer_object,
--		IRR_NV_parameter_buffer_object2,
--		IRR_NV_pixel_data_range,
--		IRR_NV_point_sprite,
--		IRR_NV_present_video,
--		IRR_NV_primitive_restart,
--		IRR_NV_register_combiners,
--		IRR_NV_register_combiners2,
--		IRR_NV_shader_buffer_load,
--		IRR_NV_shader_buffer_store,
--		IRR_NV_tessellation_program5,
--		IRR_NV_texgen_emboss,
--		IRR_NV_texgen_reflection,
--		IRR_NV_texture_barrier,
--		IRR_NV_texture_compression_vtc,
--		IRR_NV_texture_env_combine4,
--		IRR_NV_texture_expand_normal,
--		IRR_NV_texture_multisample,
--		IRR_NV_texture_rectangle,
--		IRR_NV_texture_shader,
--		IRR_NV_texture_shader2,
--		IRR_NV_texture_shader3,
--		IRR_NV_transform_feedback,
--		IRR_NV_transform_feedback2,
--		IRR_NV_vdpau_interop,
--		IRR_NV_vertex_array_range,
--		IRR_NV_vertex_array_range2,
--		IRR_NV_vertex_attrib_integer_64bit,
--		IRR_NV_vertex_buffer_unified_memory,
--		IRR_NV_vertex_program,
--		IRR_NV_vertex_program1_1,
--		IRR_NV_vertex_program2,
--		IRR_NV_vertex_program2_option,
--		IRR_NV_vertex_program3,
--		IRR_NV_vertex_program4,
--		IRR_NV_video_capture,
--		IRR_OES_read_format,
--		IRR_OML_interlace,
--		IRR_OML_resample,
--		IRR_OML_subsample,
--		IRR_PGI_misc_hints,
--		IRR_PGI_vertex_hints,
--		IRR_REND_screen_coordinates,
--		IRR_S3_s3tc,
--		IRR_SGI_color_matrix,
--		IRR_SGI_color_table,
--		IRR_SGI_depth_pass_instrument,
--		IRR_SGIS_detail_texture,
--		IRR_SGIS_fog_function,
--		IRR_SGIS_generate_mipmap,
--		IRR_SGIS_multisample,
--		IRR_SGIS_pixel_texture,
--		IRR_SGIS_point_line_texgen,
--		IRR_SGIS_point_parameters,
--		IRR_SGIS_sharpen_texture,
--		IRR_SGIS_texture4D,
--		IRR_SGIS_texture_border_clamp,
--		IRR_SGIS_texture_color_mask,
--		IRR_SGIS_texture_edge_clamp,
--		IRR_SGIS_texture_filter4,
--		IRR_SGIS_texture_lod,
--		IRR_SGIS_texture_select,
--		IRR_SGI_texture_color_table,
--		IRR_SGIX_async,
--		IRR_SGIX_async_histogram,
--		IRR_SGIX_async_pixel,
--		IRR_SGIX_blend_alpha_minmax,
--		IRR_SGIX_calligraphic_fragment,
--		IRR_SGIX_clipmap,
--		IRR_SGIX_convolution_accuracy,
--		IRR_SGIX_depth_pass_instrument,
--		IRR_SGIX_depth_texture,
--		IRR_SGIX_flush_raster,
--		IRR_SGIX_fog_offset,
--		IRR_SGIX_fog_scale,
--		IRR_SGIX_fragment_lighting,
--		IRR_SGIX_framezoom,
--		IRR_SGIX_igloo_interface,
--		IRR_SGIX_impact_pixel_texture,
--		IRR_SGIX_instruments,
--		IRR_SGIX_interlace,
--		IRR_SGIX_ir_instrument1,
--		IRR_SGIX_list_priority,
--		IRR_SGIX_pixel_texture,
--		IRR_SGIX_pixel_tiles,
--		IRR_SGIX_polynomial_ffd,
--		IRR_SGIX_reference_plane,
--		IRR_SGIX_resample,
--		IRR_SGIX_scalebias_hint,
--		IRR_SGIX_shadow,
--		IRR_SGIX_shadow_ambient,
--		IRR_SGIX_sprite,
--		IRR_SGIX_subsample,
--		IRR_SGIX_tag_sample_buffer,
--		IRR_SGIX_texture_add_env,
--		IRR_SGIX_texture_coordinate_clamp,
--		IRR_SGIX_texture_lod_bias,
--		IRR_SGIX_texture_multi_buffer,
--		IRR_SGIX_texture_scale_bias,
--		IRR_SGIX_texture_select,
--		IRR_SGIX_vertex_preclip,
--		IRR_SGIX_ycrcb,
--		IRR_SGIX_ycrcba,
--		IRR_SGIX_ycrcb_subsample,
--		IRR_SUN_convolution_border_modes,
--		IRR_SUN_global_alpha,
--		IRR_SUN_mesh_array,
--		IRR_SUN_slice_accum,
--		IRR_SUN_triangle_list,
--		IRR_SUN_vertex,
--		IRR_SUNX_constant_data,
--		IRR_WIN_phong_shading,
--		IRR_WIN_specular_fog,
--		IRR_NVX_gpu_memory_info,
--		IRR_OpenGL_Feature_Count
--	};
--
--
--	// constructor
--	COpenGLExtensionHandler();
--
--	// deferred initialization
--	void initExtensions(bool stencilBuffer);
--
--	//! queries the features of the driver, returns true if feature is available
--	bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const;
--
--	//! queries the features of the driver, returns true if feature is available
--	bool queryOpenGLFeature(EOpenGLFeatures feature) const
--	{
--		return FeatureAvailable[feature];
--	}
--
--	//! show all features with availablity
--	void dump() const;
--
--	void dumpFramebufferFormats() const;
--
--	// Some variables for properties
--	bool StencilBuffer;
--	bool MultiTextureExtension;
--	bool TextureCompressionExtension;
--
--	// Some non-boolean properties
--	//! Maxmimum texture layers supported by the fixed pipeline
--	u8 MaxSupportedTextures;
--	//! Maxmimum texture layers supported by the engine
--	u8 MaxTextureUnits;
--	//! Maximum hardware lights supported
--	u8 MaxLights;
--	//! Maximal Anisotropy
--	u8 MaxAnisotropy;
--	//! Number of user clipplanes
--	u8 MaxUserClipPlanes;
--	//! Number of auxiliary buffers
--	u8 MaxAuxBuffers;
--	//! Number of rendertargets available as MRTs
--	u8 MaxMultipleRenderTargets;
--	//! Optimal number of indices per meshbuffer
--	u32 MaxIndices;
--	//! Maximal texture dimension
--	u32 MaxTextureSize;
--	//! Maximal vertices handled by geometry shaders
--	u32 MaxGeometryVerticesOut;
--	//! Maximal LOD Bias
--	f32 MaxTextureLODBias;
--	//! Minimal and maximal supported thickness for lines without smoothing
--	GLfloat DimAliasedLine[2];
--	//! Minimal and maximal supported thickness for points without smoothing
--	GLfloat DimAliasedPoint[2];
--	//! Minimal and maximal supported thickness for lines with smoothing
--	GLfloat DimSmoothedLine[2];
--	//! Minimal and maximal supported thickness for points with smoothing
--	GLfloat DimSmoothedPoint[2];
--
--	//! OpenGL version as Integer: 100*Major+Minor, i.e. 2.1 becomes 201
--	u16 Version;
--	//! GLSL version as Integer: 100*Major+Minor
--	u16 ShaderLanguageVersion;
--
--	bool OcclusionQuerySupport;
--
--	// public access to the (loaded) extensions.
--	// general functions
--	void extGlActiveTexture(GLenum texture);
--	void extGlClientActiveTexture(GLenum texture);
--	void extGlPointParameterf(GLint loc, GLfloat f);
--	void extGlPointParameterfv(GLint loc, const GLfloat *v);
--	void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
--	void extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
--	void extGlCompressedTexImage2D(GLenum target, GLint level,
--		GLenum internalformat, GLsizei width, GLsizei height,
--		GLint border, GLsizei imageSize, const void* data);
--
--	// shader programming
--	void extGlGenPrograms(GLsizei n, GLuint *programs);
--	void extGlBindProgram(GLenum target, GLuint program);
--	void extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
--	void extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string);
--	void extGlDeletePrograms(GLsizei n, const GLuint *programs);
--	void extGlProgramLocalParameter4fv(GLenum, GLuint, const GLfloat *);
--	GLhandleARB extGlCreateShaderObject(GLenum shaderType);
--	GLuint extGlCreateShader(GLenum shaderType);
--	// note: Due to the type confusion between shader_objects and OpenGL 2.0
--	// we have to add the ARB extension for proper method definitions in case
--	// that handleARB and uint are the same type
--	void extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
--	void extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
--	// note: Due to the type confusion between shader_objects and OpenGL 2.0
--	// we have to add the ARB extension for proper method definitions in case
--	// that handleARB and uint are the same type
--	void extGlCompileShaderARB(GLhandleARB shader);
--	void extGlCompileShader(GLuint shader);
--	GLhandleARB extGlCreateProgramObject(void);
--	GLuint extGlCreateProgram(void);
--	void extGlAttachObject(GLhandleARB program, GLhandleARB shader);
--	void extGlAttachShader(GLuint program, GLuint shader);
--	void extGlLinkProgramARB(GLhandleARB program);
--	// note: Due to the type confusion between shader_objects and OpenGL 2.0
--	// we have to add the ARB extension for proper method definitions in case
--	// that handleARB and uint are the same type
--	void extGlLinkProgram(GLuint program);
--	void extGlUseProgramObject(GLhandleARB prog);
--	void extGlUseProgram(GLuint prog);
--	void extGlDeleteObject(GLhandleARB object);
--	void extGlDeleteProgram(GLuint object);
--	void extGlDeleteShader(GLuint shader);
--	void extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
--	void extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders);
--	void extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
--	void extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
--	void extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
--	void extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param);
--	void extGlGetShaderiv(GLuint shader, GLenum type, GLint *param);
--	void extGlGetProgramiv(GLuint program, GLenum type, GLint *param);
--	GLint extGlGetUniformLocationARB(GLhandleARB program, const char *name);
--	GLint extGlGetUniformLocation(GLuint program, const char *name);
--	void extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v);
--	void extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v);
--	void extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v);
--	void extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v);
--	void extGlUniform1bv(GLint loc, GLsizei count, const bool *v);
--	void extGlUniform2bv(GLint loc, GLsizei count, const bool *v);
--	void extGlUniform3bv(GLint loc, GLsizei count, const bool *v);
--	void extGlUniform4bv(GLint loc, GLsizei count, const bool *v);
--	void extGlUniform1iv(GLint loc, GLsizei count, const GLint *v);
--	void extGlUniform2iv(GLint loc, GLsizei count, const GLint *v);
--	void extGlUniform3iv(GLint loc, GLsizei count, const GLint *v);
--	void extGlUniform4iv(GLint loc, GLsizei count, const GLint *v);
--	void extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
--	void extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
--	void extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
--	void extGlGetActiveUniformARB(GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
--	void extGlGetActiveUniform(GLuint program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
--
--	// framebuffer objects
--	void extGlBindFramebuffer(GLenum target, GLuint framebuffer);
--	void extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
--	void extGlGenFramebuffers(GLsizei n, GLuint *framebuffers);
--	GLenum extGlCheckFramebufferStatus(GLenum target);
--	void extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
--	void extGlBindRenderbuffer(GLenum target, GLuint renderbuffer);
--	void extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers);
--	void extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers);
--	void extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
--	void extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
--	void extGlGenerateMipmap(GLenum target);
--	void extGlActiveStencilFace(GLenum face);
--	void extGlDrawBuffers(GLsizei n, const GLenum *bufs);
--
--	// vertex buffer object
--	void extGlGenBuffers(GLsizei n, GLuint *buffers);
--	void extGlBindBuffer(GLenum target, GLuint buffer);
--	void extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
--	void extGlDeleteBuffers(GLsizei n, const GLuint *buffers);
--	void extGlBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
--	void extGlGetBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
--	void *extGlMapBuffer (GLenum target, GLenum access);
--	GLboolean extGlUnmapBuffer (GLenum target);
--	GLboolean extGlIsBuffer (GLuint buffer);
--	void extGlGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
--	void extGlGetBufferPointerv (GLenum target, GLenum pname, GLvoid **params);
--	void extGlProvokingVertex(GLenum mode);
--	void extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
--	void extGlEnableIndexed(GLenum target, GLuint index);
--	void extGlDisableIndexed(GLenum target, GLuint index);
--	void extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst);
--	void extGlBlendEquationIndexed(GLuint buf, GLenum mode);
--	void extGlProgramParameteri(GLhandleARB program, GLenum pname, GLint value);
--
--	// occlusion query
--	void extGlGenQueries(GLsizei n, GLuint *ids);
--	void extGlDeleteQueries(GLsizei n, const GLuint *ids);
--	GLboolean extGlIsQuery(GLuint id);
--	void extGlBeginQuery(GLenum target, GLuint id);
--	void extGlEndQuery(GLenum target);
--	void extGlGetQueryiv(GLenum target, GLenum pname, GLint *params);
--	void extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params);
--	void extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
--
--	// generic vsync setting method for several extensions
--	void extGlSwapInterval(int interval);
--
--	// blend operations
--	void extGlBlendEquation(GLenum mode);
--
--	// the global feature array
--	bool FeatureAvailable[IRR_OpenGL_Feature_Count];
--
--	protected:
--	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--		PFNGLACTIVETEXTUREARBPROC pGlActiveTextureARB;
--		PFNGLCLIENTACTIVETEXTUREARBPROC	pGlClientActiveTextureARB;
--		PFNGLGENPROGRAMSARBPROC pGlGenProgramsARB;
--		PFNGLGENPROGRAMSNVPROC pGlGenProgramsNV;
--		PFNGLBINDPROGRAMARBPROC pGlBindProgramARB;
--		PFNGLBINDPROGRAMNVPROC pGlBindProgramNV;
--		PFNGLDELETEPROGRAMSARBPROC pGlDeleteProgramsARB;
--		PFNGLDELETEPROGRAMSNVPROC pGlDeleteProgramsNV;
--		PFNGLPROGRAMSTRINGARBPROC pGlProgramStringARB;
--		PFNGLLOADPROGRAMNVPROC pGlLoadProgramNV;
--		PFNGLPROGRAMLOCALPARAMETER4FVARBPROC pGlProgramLocalParameter4fvARB;
--		PFNGLCREATESHADEROBJECTARBPROC pGlCreateShaderObjectARB;
--		PFNGLSHADERSOURCEARBPROC pGlShaderSourceARB;
--		PFNGLCOMPILESHADERARBPROC pGlCompileShaderARB;
--		PFNGLCREATEPROGRAMOBJECTARBPROC pGlCreateProgramObjectARB;
--		PFNGLATTACHOBJECTARBPROC pGlAttachObjectARB;
--		PFNGLLINKPROGRAMARBPROC pGlLinkProgramARB;
--		PFNGLUSEPROGRAMOBJECTARBPROC pGlUseProgramObjectARB;
--		PFNGLDELETEOBJECTARBPROC pGlDeleteObjectARB;
--		PFNGLCREATEPROGRAMPROC pGlCreateProgram;
--		PFNGLUSEPROGRAMPROC pGlUseProgram;
--		PFNGLDELETEPROGRAMPROC pGlDeleteProgram;
--		PFNGLDELETESHADERPROC pGlDeleteShader;
--		PFNGLGETATTACHEDOBJECTSARBPROC pGlGetAttachedObjectsARB;
--		PFNGLGETATTACHEDSHADERSPROC pGlGetAttachedShaders;
--		PFNGLCREATESHADERPROC pGlCreateShader;
--		PFNGLSHADERSOURCEPROC pGlShaderSource;
--		PFNGLCOMPILESHADERPROC pGlCompileShader;
--		PFNGLATTACHSHADERPROC pGlAttachShader;
--		PFNGLLINKPROGRAMPROC pGlLinkProgram;
--		PFNGLGETINFOLOGARBPROC pGlGetInfoLogARB;
--		PFNGLGETSHADERINFOLOGPROC pGlGetShaderInfoLog;
--		PFNGLGETPROGRAMINFOLOGPROC pGlGetProgramInfoLog;
--		PFNGLGETOBJECTPARAMETERIVARBPROC pGlGetObjectParameterivARB;
--		PFNGLGETSHADERIVPROC pGlGetShaderiv;
--		PFNGLGETSHADERIVPROC pGlGetProgramiv;
--		PFNGLGETUNIFORMLOCATIONARBPROC pGlGetUniformLocationARB;
--		PFNGLGETUNIFORMLOCATIONPROC pGlGetUniformLocation;
--		PFNGLUNIFORM1FVARBPROC pGlUniform1fvARB;
--		PFNGLUNIFORM2FVARBPROC pGlUniform2fvARB;
--		PFNGLUNIFORM3FVARBPROC pGlUniform3fvARB;
--		PFNGLUNIFORM4FVARBPROC pGlUniform4fvARB;
--		PFNGLUNIFORM1IVARBPROC pGlUniform1ivARB;
--		PFNGLUNIFORM2IVARBPROC pGlUniform2ivARB;
--		PFNGLUNIFORM3IVARBPROC pGlUniform3ivARB;
--		PFNGLUNIFORM4IVARBPROC pGlUniform4ivARB;
--		PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;
--		PFNGLUNIFORMMATRIX3FVARBPROC pGlUniformMatrix3fvARB;
--		PFNGLUNIFORMMATRIX4FVARBPROC pGlUniformMatrix4fvARB;
--		PFNGLGETACTIVEUNIFORMARBPROC pGlGetActiveUniformARB;
--		PFNGLGETACTIVEUNIFORMPROC pGlGetActiveUniform;
--		PFNGLPOINTPARAMETERFARBPROC  pGlPointParameterfARB;
--		PFNGLPOINTPARAMETERFVARBPROC pGlPointParameterfvARB;
--		PFNGLSTENCILFUNCSEPARATEPROC pGlStencilFuncSeparate;
--		PFNGLSTENCILOPSEPARATEPROC pGlStencilOpSeparate;
--		PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
--		PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
--		PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
--		// ARB framebuffer object
--		PFNGLBINDFRAMEBUFFERPROC pGlBindFramebuffer;
--		PFNGLDELETEFRAMEBUFFERSPROC pGlDeleteFramebuffers;
--		PFNGLGENFRAMEBUFFERSPROC pGlGenFramebuffers;
--		PFNGLCHECKFRAMEBUFFERSTATUSPROC pGlCheckFramebufferStatus;
--		PFNGLFRAMEBUFFERTEXTURE2DPROC pGlFramebufferTexture2D;
--		PFNGLBINDRENDERBUFFERPROC pGlBindRenderbuffer;
--		PFNGLDELETERENDERBUFFERSPROC pGlDeleteRenderbuffers;
--		PFNGLGENRENDERBUFFERSPROC pGlGenRenderbuffers;
--		PFNGLRENDERBUFFERSTORAGEPROC pGlRenderbufferStorage;
--		PFNGLFRAMEBUFFERRENDERBUFFERPROC pGlFramebufferRenderbuffer;
--		PFNGLGENERATEMIPMAPPROC pGlGenerateMipmap;
--		// EXT framebuffer object
--		PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
--		PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
--		PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
--		PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC pGlCheckFramebufferStatusEXT;
--		PFNGLFRAMEBUFFERTEXTURE2DEXTPROC pGlFramebufferTexture2DEXT;
--		PFNGLBINDRENDERBUFFEREXTPROC pGlBindRenderbufferEXT;
--		PFNGLDELETERENDERBUFFERSEXTPROC pGlDeleteRenderbuffersEXT;
--		PFNGLGENRENDERBUFFERSEXTPROC pGlGenRenderbuffersEXT;
--		PFNGLRENDERBUFFERSTORAGEEXTPROC pGlRenderbufferStorageEXT;
--		PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC pGlFramebufferRenderbufferEXT;
--		PFNGLGENERATEMIPMAPEXTPROC pGlGenerateMipmapEXT;
--		PFNGLACTIVESTENCILFACEEXTPROC pGlActiveStencilFaceEXT;
--		PFNGLDRAWBUFFERSARBPROC pGlDrawBuffersARB;
--		PFNGLDRAWBUFFERSATIPROC pGlDrawBuffersATI;
--		PFNGLGENBUFFERSARBPROC pGlGenBuffersARB;
--		PFNGLBINDBUFFERARBPROC pGlBindBufferARB;
--		PFNGLBUFFERDATAARBPROC pGlBufferDataARB;
--		PFNGLDELETEBUFFERSARBPROC pGlDeleteBuffersARB;
--		PFNGLBUFFERSUBDATAARBPROC pGlBufferSubDataARB;
--		PFNGLGETBUFFERSUBDATAARBPROC pGlGetBufferSubDataARB;
--		PFNGLMAPBUFFERARBPROC pGlMapBufferARB;
--		PFNGLUNMAPBUFFERARBPROC pGlUnmapBufferARB;
--		PFNGLISBUFFERARBPROC pGlIsBufferARB;
--		PFNGLGETBUFFERPARAMETERIVARBPROC pGlGetBufferParameterivARB;
--		PFNGLGETBUFFERPOINTERVARBPROC pGlGetBufferPointervARB;
--		PFNGLPROVOKINGVERTEXPROC pGlProvokingVertexARB;
--		PFNGLPROVOKINGVERTEXEXTPROC pGlProvokingVertexEXT;
--		PFNGLCOLORMASKINDEXEDEXTPROC pGlColorMaskIndexedEXT;
--		PFNGLENABLEINDEXEDEXTPROC pGlEnableIndexedEXT;
--		PFNGLDISABLEINDEXEDEXTPROC pGlDisableIndexedEXT;
--		PFNGLBLENDFUNCINDEXEDAMDPROC pGlBlendFuncIndexedAMD;
--		PFNGLBLENDFUNCIPROC pGlBlendFunciARB;
--		PFNGLBLENDEQUATIONINDEXEDAMDPROC pGlBlendEquationIndexedAMD;
--		PFNGLBLENDEQUATIONIPROC pGlBlendEquationiARB;
--		PFNGLPROGRAMPARAMETERIARBPROC pGlProgramParameteriARB;
--		PFNGLPROGRAMPARAMETERIEXTPROC pGlProgramParameteriEXT;
--		PFNGLGENQUERIESARBPROC pGlGenQueriesARB;
--		PFNGLDELETEQUERIESARBPROC pGlDeleteQueriesARB;
--		PFNGLISQUERYARBPROC pGlIsQueryARB;
--		PFNGLBEGINQUERYARBPROC pGlBeginQueryARB;
--		PFNGLENDQUERYARBPROC pGlEndQueryARB;
--		PFNGLGETQUERYIVARBPROC pGlGetQueryivARB;
--		PFNGLGETQUERYOBJECTIVARBPROC pGlGetQueryObjectivARB;
--		PFNGLGETQUERYOBJECTUIVARBPROC pGlGetQueryObjectuivARB;
--		PFNGLGENOCCLUSIONQUERIESNVPROC pGlGenOcclusionQueriesNV;
--		PFNGLDELETEOCCLUSIONQUERIESNVPROC pGlDeleteOcclusionQueriesNV;
--		PFNGLISOCCLUSIONQUERYNVPROC pGlIsOcclusionQueryNV;
--		PFNGLBEGINOCCLUSIONQUERYNVPROC pGlBeginOcclusionQueryNV;
--		PFNGLENDOCCLUSIONQUERYNVPROC pGlEndOcclusionQueryNV;
--		PFNGLGETOCCLUSIONQUERYIVNVPROC pGlGetOcclusionQueryivNV;
--		PFNGLGETOCCLUSIONQUERYUIVNVPROC pGlGetOcclusionQueryuivNV;
--		PFNGLBLENDEQUATIONEXTPROC pGlBlendEquationEXT;
--		PFNGLBLENDEQUATIONPROC pGlBlendEquation;
--		#if defined(WGL_EXT_swap_control)
--		PFNWGLSWAPINTERVALEXTPROC pWglSwapIntervalEXT;
--		#endif
--		#if defined(GLX_SGI_swap_control)
--		PFNGLXSWAPINTERVALSGIPROC pGlxSwapIntervalSGI;
--		#endif
--		#if defined(GLX_EXT_swap_control)
--		PFNGLXSWAPINTERVALEXTPROC pGlxSwapIntervalEXT;
--		#endif
--		#if defined(GLX_MESA_swap_control)
--		PFNGLXSWAPINTERVALMESAPROC pGlxSwapIntervalMESA;
--		#endif
--	#endif
--};
--
--inline void COpenGLExtensionHandler::extGlActiveTexture(GLenum texture)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (MultiTextureExtension && pGlActiveTextureARB)
--		pGlActiveTextureARB(texture);
--#else
--	if (MultiTextureExtension)
--#ifdef GL_ARB_multitexture
--		glActiveTextureARB(texture);
--#else
--		glActiveTexture(texture);
--#endif
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlClientActiveTexture(GLenum texture)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (MultiTextureExtension && pGlClientActiveTextureARB)
--		pGlClientActiveTextureARB(texture);
--#else
--	if (MultiTextureExtension)
--		glClientActiveTextureARB(texture);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGenPrograms(GLsizei n, GLuint *programs)
--{
--	if (programs)
--		memset(programs,0,n*sizeof(GLuint));
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGenProgramsARB)
--		pGlGenProgramsARB(n, programs);
--	else if (pGlGenProgramsNV)
--		pGlGenProgramsNV(n, programs);
--#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
--	glGenProgramsARB(n,programs);
--#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
--	glGenProgramsNV(n,programs);
--#else
--	os::Printer::log("glGenPrograms not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBindProgram(GLenum target, GLuint program)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBindProgramARB)
--		pGlBindProgramARB(target, program);
--	else if (pGlBindProgramNV)
--		pGlBindProgramNV(target, program);
--#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
--	glBindProgramARB(target, program);
--#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
--	glBindProgramNV(target, program);
--#else
--	os::Printer::log("glBindProgram not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlProgramStringARB)
--		pGlProgramStringARB(target, format, len, string);
--#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
--	glProgramStringARB(target,format,len,string);
--#else
--	os::Printer::log("glProgramString not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlLoadProgramNV)
--		pGlLoadProgramNV(target, id, len, string);
--#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
--	glLoadProgramNV(target,id,len,string);
--#else
--	os::Printer::log("glLoadProgram not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeletePrograms(GLsizei n, const GLuint *programs)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteProgramsARB)
--		pGlDeleteProgramsARB(n, programs);
--	else if (pGlDeleteProgramsNV)
--		pGlDeleteProgramsNV(n, programs);
--#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
--	glDeleteProgramsARB(n,programs);
--#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
--	glDeleteProgramsNV(n,programs);
--#else
--	os::Printer::log("glDeletePrograms not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlProgramLocalParameter4fv(GLenum n, GLuint i, const GLfloat *f)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlProgramLocalParameter4fvARB)
--		pGlProgramLocalParameter4fvARB(n,i,f);
--#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
--	glProgramLocalParameter4fvARB(n,i,f);
--#else
--	os::Printer::log("glProgramLocalParameter4fv not supported", ELL_ERROR);
--#endif
--}
--
--inline GLhandleARB COpenGLExtensionHandler::extGlCreateShaderObject(GLenum shaderType)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCreateShaderObjectARB)
--		return pGlCreateShaderObjectARB(shaderType);
--#elif defined(GL_ARB_shader_objects)
--	return glCreateShaderObjectARB(shaderType);
--#else
--	os::Printer::log("glCreateShaderObject not supported", ELL_ERROR);
--#endif
--	return 0;
--}
--
--inline GLuint COpenGLExtensionHandler::extGlCreateShader(GLenum shaderType)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCreateShader)
--		return pGlCreateShader(shaderType);
--#elif defined(GL_VERSION_2_0)
--	return glCreateShader(shaderType);
--#else
--	os::Printer::log("glCreateShader not supported", ELL_ERROR);
--#endif
--	return 0;
--}
--
--inline void COpenGLExtensionHandler::extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlShaderSourceARB)
--		pGlShaderSourceARB(shader, numOfStrings, strings, lenOfStrings);
--#elif defined(GL_ARB_shader_objects)
--	glShaderSourceARB(shader, numOfStrings, strings, (GLint *)lenOfStrings);
--#else
--	os::Printer::log("glShaderSource not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlShaderSource)
--		pGlShaderSource(shader, numOfStrings, strings, lenOfStrings);
--#elif defined(GL_VERSION_2_0)
--	glShaderSource(shader, numOfStrings, strings, (GLint *)lenOfStrings);
--#else
--	os::Printer::log("glShaderSource not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlCompileShaderARB(GLhandleARB shader)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCompileShaderARB)
--		pGlCompileShaderARB(shader);
--#elif defined(GL_ARB_shader_objects)
--	glCompileShaderARB(shader);
--#else
--	os::Printer::log("glCompileShader not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlCompileShader(GLuint shader)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCompileShader)
--		pGlCompileShader(shader);
--#elif defined(GL_VERSION_2_0)
--	glCompileShader(shader);
--#else
--	os::Printer::log("glCompileShader not supported", ELL_ERROR);
--#endif
--}
--
--inline GLhandleARB COpenGLExtensionHandler::extGlCreateProgramObject(void)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCreateProgramObjectARB)
--		return pGlCreateProgramObjectARB();
--#elif defined(GL_ARB_shader_objects)
--	return glCreateProgramObjectARB();
--#else
--	os::Printer::log("glCreateProgramObject not supported", ELL_ERROR);
--#endif
--	return 0;
--}
--
--inline GLuint COpenGLExtensionHandler::extGlCreateProgram(void)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCreateProgram)
--		return pGlCreateProgram();
--#elif defined(GL_VERSION_2_0)
--	return glCreateProgram();
--#else
--	os::Printer::log("glCreateProgram not supported", ELL_ERROR);
--#endif
--	return 0;
--}
--
--inline void COpenGLExtensionHandler::extGlAttachObject(GLhandleARB program, GLhandleARB shader)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlAttachObjectARB)
--		pGlAttachObjectARB(program, shader);
--#elif defined(GL_ARB_shader_objects)
--	glAttachObjectARB(program, shader);
--#else
--	os::Printer::log("glAttachObject not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlAttachShader(GLuint program, GLuint shader)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlAttachShader)
--		pGlAttachShader(program, shader);
--#elif defined(GL_VERSION_2_0)
--	glAttachShader(program, shader);
--#else
--	os::Printer::log("glAttachShader not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlLinkProgramARB(GLhandleARB program)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlLinkProgramARB)
--		pGlLinkProgramARB(program);
--#elif defined(GL_ARB_shader_objects)
--	glLinkProgramARB(program);
--#else
--	os::Printer::log("glLinkProgram not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlLinkProgram(GLuint program)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlLinkProgram)
--		pGlLinkProgram(program);
--#elif defined(GL_VERSION_2_0)
--	glLinkProgram(program);
--#else
--	os::Printer::log("glLinkProgram not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUseProgramObject(GLhandleARB prog)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUseProgramObjectARB)
--		pGlUseProgramObjectARB(prog);
--#elif defined(GL_ARB_shader_objects)
--	glUseProgramObjectARB(prog);
--#else
--	os::Printer::log("glUseProgramObject not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUseProgram(GLuint prog)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUseProgram)
--		pGlUseProgram(prog);
--#elif defined(GL_VERSION_2_0)
--	glUseProgram(prog);
--#else
--	os::Printer::log("glUseProgram not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeleteObject(GLhandleARB object)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteObjectARB)
--		pGlDeleteObjectARB(object);
--#elif defined(GL_ARB_shader_objects)
--	glDeleteObjectARB(object);
--#else
--	os::Printer::log("glDeleteObject not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeleteProgram(GLuint object)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteProgram)
--		pGlDeleteProgram(object);
--#elif defined(GL_VERSION_2_0)
--	glDeleteProgram(object);
--#else
--	os::Printer::log("glDeleteProgram not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeleteShader(GLuint shader)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteShader)
--		pGlDeleteShader(shader);
--#elif defined(GL_VERSION_2_0)
--	glDeleteShader(shader);
--#else
--	os::Printer::log("glDeleteShader not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders)
--{
--	if (count)
--		*count=0;
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetAttachedObjectsARB)
--		pGlGetAttachedObjectsARB(program, maxcount, count, shaders);
--#elif defined(GL_ARB_shader_objects)
--	glGetAttachedObjectsARB(program, maxcount, count, shaders);
--#else
--	os::Printer::log("glGetAttachedObjects not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
--{
--	if (count)
--		*count=0;
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetAttachedShaders)
--		pGlGetAttachedShaders(program, maxcount, count, shaders);
--#elif defined(GL_VERSION_2_0)
--	glGetAttachedShaders(program, maxcount, count, shaders);
--#else
--	os::Printer::log("glGetAttachedShaders not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog)
--{
--	if (length)
--		*length=0;
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetInfoLogARB)
--		pGlGetInfoLogARB(object, maxLength, length, infoLog);
--#elif defined(GL_ARB_shader_objects)
--	glGetInfoLogARB(object, maxLength, length, infoLog);
--#else
--	os::Printer::log("glGetInfoLog not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
--{
--	if (length)
--		*length=0;
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetShaderInfoLog)
--		pGlGetShaderInfoLog(shader, maxLength, length, infoLog);
--#elif defined(GL_VERSION_2_0)
--	glGetShaderInfoLog(shader, maxLength, length, infoLog);
--#else
--	os::Printer::log("glGetShaderInfoLog not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
--{
--	if (length)
--		*length=0;
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetProgramInfoLog)
--		pGlGetProgramInfoLog(program, maxLength, length, infoLog);
--#elif defined(GL_VERSION_2_0)
--	glGetProgramInfoLog(program, maxLength, length, infoLog);
--#else
--	os::Printer::log("glGetProgramInfoLog not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetObjectParameterivARB)
--		pGlGetObjectParameterivARB(object, type, param);
--#elif defined(GL_ARB_shader_objects)
--	glGetObjectParameterivARB(object, type, param);
--#else
--	os::Printer::log("glGetObjectParameteriv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetShaderiv(GLuint shader, GLenum type, GLint *param)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetShaderiv)
--		pGlGetShaderiv(shader, type, param);
--#elif defined(GL_VERSION_2_0)
--	glGetShaderiv(shader, type, param);
--#else
--	os::Printer::log("glGetShaderiv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetProgramiv(GLuint program, GLenum type, GLint *param)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetProgramiv)
--		pGlGetProgramiv(program, type, param);
--#elif defined(GL_VERSION_2_0)
--	glGetProgramiv(program, type, param);
--#else
--	os::Printer::log("glGetProgramiv not supported", ELL_ERROR);
--#endif
--}
--
--inline GLint COpenGLExtensionHandler::extGlGetUniformLocationARB(GLhandleARB program, const char *name)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetUniformLocationARB)
--		return pGlGetUniformLocationARB(program, name);
--#elif defined(GL_ARB_shader_objects)
--	return glGetUniformLocationARB(program, name);
--#else
--	os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
--#endif
--	return 0;
--}
--
--inline GLint COpenGLExtensionHandler::extGlGetUniformLocation(GLuint program, const char *name)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetUniformLocation)
--		return pGlGetUniformLocation(program, name);
--#elif defined(GL_VERSION_2_0)
--	return glGetUniformLocation(program, name);
--#else
--	os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
--#endif
--	return 0;
--}
--
--inline void COpenGLExtensionHandler::extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform1fvARB)
--		pGlUniform1fvARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform1fvARB(loc, count, v);
--#else
--	os::Printer::log("glUniform1fv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform2fvARB)
--		pGlUniform2fvARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform2fvARB(loc, count, v);
--#else
--	os::Printer::log("glUniform2fv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform3fvARB)
--		pGlUniform3fvARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform3fvARB(loc, count, v);
--#else
--	os::Printer::log("glUniform3fv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform4fvARB)
--		pGlUniform4fvARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform4fvARB(loc, count, v);
--#else
--	os::Printer::log("glUniform4fv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniform1iv(GLint loc, GLsizei count, const GLint *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform1ivARB)
--		pGlUniform1ivARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform1ivARB(loc, count, v);
--#else
--	os::Printer::log("glUniform1iv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniform2iv(GLint loc, GLsizei count, const GLint *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform2ivARB)
--		pGlUniform2ivARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform2ivARB(loc, count, v);
--#else
--	os::Printer::log("glUniform2iv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniform3iv(GLint loc, GLsizei count, const GLint *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform3ivARB)
--		pGlUniform3ivARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform3ivARB(loc, count, v);
--#else
--	os::Printer::log("glUniform3iv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniform4iv(GLint loc, GLsizei count, const GLint *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniform4ivARB)
--		pGlUniform4ivARB(loc, count, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniform4ivARB(loc, count, v);
--#else
--	os::Printer::log("glUniform4iv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniformMatrix2fvARB)
--		pGlUniformMatrix2fvARB(loc, count, transpose, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniformMatrix2fvARB(loc, count, transpose, v);
--#else
--	os::Printer::log("glUniformMatrix2fv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniformMatrix3fvARB)
--		pGlUniformMatrix3fvARB(loc, count, transpose, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniformMatrix3fvARB(loc, count, transpose, v);
--#else
--	os::Printer::log("glUniformMatrix3fv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUniformMatrix4fvARB)
--		pGlUniformMatrix4fvARB(loc, count, transpose, v);
--#elif defined(GL_ARB_shader_objects)
--	glUniformMatrix4fvARB(loc, count, transpose, v);
--#else
--	os::Printer::log("glUniformMatrix4fv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetActiveUniformARB(GLhandleARB program,
--		GLuint index, GLsizei maxlength, GLsizei *length,
--		GLint *size, GLenum *type, GLcharARB *name)
--{
--	if (length)
--		*length=0;
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetActiveUniformARB)
--		pGlGetActiveUniformARB(program, index, maxlength, length, size, type, name);
--#elif defined(GL_ARB_shader_objects)
--	glGetActiveUniformARB(program, index, maxlength, length, size, type, name);
--#else
--	os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetActiveUniform(GLuint program,
--		GLuint index, GLsizei maxlength, GLsizei *length,
--		GLint *size, GLenum *type, GLchar *name)
--{
--	if (length)
--		*length=0;
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetActiveUniform)
--		pGlGetActiveUniform(program, index, maxlength, length, size, type, name);
--#elif defined(GL_VERSION_2_0)
--	glGetActiveUniform(program, index, maxlength, length, size, type, name);
--#else
--	os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlPointParameterf(GLint loc, GLfloat f)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlPointParameterfARB)
--		pGlPointParameterfARB(loc, f);
--#elif defined(GL_ARB_point_parameters)
--	glPointParameterfARB(loc, f);
--#else
--	os::Printer::log("glPointParameterf not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlPointParameterfv(GLint loc, const GLfloat *v)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlPointParameterfvARB)
--		pGlPointParameterfvARB(loc, v);
--#elif defined(GL_ARB_point_parameters)
--	glPointParameterfvARB(loc, v);
--#else
--	os::Printer::log("glPointParameterfv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlStencilFuncSeparate)
--		pGlStencilFuncSeparate(frontfunc, backfunc, ref, mask);
--	else if (pGlStencilFuncSeparateATI)
--		pGlStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
--#elif defined(GL_VERSION_2_0)
--	glStencilFuncSeparate(frontfunc, backfunc, ref, mask);
--#elif defined(GL_ATI_separate_stencil)
--	glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
--#else
--	os::Printer::log("glStencilFuncSeparate not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlStencilOpSeparate)
--		pGlStencilOpSeparate(face, fail, zfail, zpass);
--	else if (pGlStencilOpSeparateATI)
--		pGlStencilOpSeparateATI(face, fail, zfail, zpass);
--#elif defined(GL_VERSION_2_0)
--	glStencilOpSeparate(face, fail, zfail, zpass);
--#elif defined(GL_ATI_separate_stencil)
--	glStencilOpSeparateATI(face, fail, zfail, zpass);
--#else
--	os::Printer::log("glStencilOpSeparate not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width,
--		GLsizei height, GLint border, GLsizei imageSize, const void* data)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCompressedTexImage2D)
--		pGlCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
--#elif defined(GL_ARB_texture_compression)
--	glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
--#else
--	os::Printer::log("glCompressedTexImage2D not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBindFramebuffer(GLenum target, GLuint framebuffer)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBindFramebuffer)
--		pGlBindFramebuffer(target, framebuffer);
--	else if (pGlBindFramebufferEXT)
--		pGlBindFramebufferEXT(target, framebuffer);
--#elif defined(GL_ARB_framebuffer_object)
--	glBindFramebuffer(target, framebuffer);
--#elif defined(GL_EXT_framebuffer_object)
--	glBindFramebufferEXT(target, framebuffer);
--#else
--	os::Printer::log("glBindFramebuffer not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteFramebuffers)
--		pGlDeleteFramebuffers(n, framebuffers);
--	else if (pGlDeleteFramebuffersEXT)
--		pGlDeleteFramebuffersEXT(n, framebuffers);
--#elif defined(GL_ARB_framebuffer_object)
--	glDeleteFramebuffers(n, framebuffers);
--#elif defined(GL_EXT_framebuffer_object)
--	glDeleteFramebuffersEXT(n, framebuffers);
--#else
--	os::Printer::log("glDeleteFramebuffers not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
--{
--	if (framebuffers)
--		memset(framebuffers,0,n*sizeof(GLuint));
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGenFramebuffers)
--		pGlGenFramebuffers(n, framebuffers);
--	else if (pGlGenFramebuffersEXT)
--		pGlGenFramebuffersEXT(n, framebuffers);
--#elif defined(GL_ARB_framebuffer_object)
--	glGenFramebuffers(n, framebuffers);
--#elif defined(GL_EXT_framebuffer_object)
--	glGenFramebuffersEXT(n, framebuffers);
--#else
--	os::Printer::log("glGenFramebuffers not supported", ELL_ERROR);
--#endif
--}
--
--inline GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatus(GLenum target)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlCheckFramebufferStatus)
--		return pGlCheckFramebufferStatus(target);
--	else if (pGlCheckFramebufferStatusEXT)
--		return pGlCheckFramebufferStatusEXT(target);
--	else
--		return 0;
--#elif defined(GL_ARB_framebuffer_object)
--	return glCheckFramebufferStatus(target);
--#elif defined(GL_EXT_framebuffer_object)
--	return glCheckFramebufferStatusEXT(target);
--#else
--	os::Printer::log("glCheckFramebufferStatus not supported", ELL_ERROR);
--	return 0;
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlFramebufferTexture2D)
--		pGlFramebufferTexture2D(target, attachment, textarget, texture, level);
--	else if (pGlFramebufferTexture2DEXT)
--		pGlFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
--#elif defined(GL_ARB_framebuffer_object)
--	glFramebufferTexture2D(target, attachment, textarget, texture, level);
--#elif defined(GL_EXT_framebuffer_object)
--	glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
--#else
--	os::Printer::log("glFramebufferTexture2D not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBindRenderbuffer(GLenum target, GLuint renderbuffer)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBindRenderbuffer)
--		pGlBindRenderbuffer(target, renderbuffer);
--	else if (pGlBindRenderbufferEXT)
--		pGlBindRenderbufferEXT(target, renderbuffer);
--#elif defined(GL_ARB_framebuffer_object)
--	glBindRenderbuffer(target, renderbuffer);
--#elif defined(GL_EXT_framebuffer_object)
--	glBindRenderbufferEXT(target, renderbuffer);
--#else
--	os::Printer::log("glBindRenderbuffer not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteRenderbuffers)
--		pGlDeleteRenderbuffers(n, renderbuffers);
--	else if (pGlDeleteRenderbuffersEXT)
--		pGlDeleteRenderbuffersEXT(n, renderbuffers);
--#elif defined(GL_ARB_framebuffer_object)
--	glDeleteRenderbuffers(n, renderbuffers);
--#elif defined(GL_EXT_framebuffer_object)
--	glDeleteRenderbuffersEXT(n, renderbuffers);
--#else
--	os::Printer::log("glDeleteRenderbuffers not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
--{
--	if (renderbuffers)
--		memset(renderbuffers,0,n*sizeof(GLuint));
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGenRenderbuffers)
--		pGlGenRenderbuffers(n, renderbuffers);
--	else if (pGlGenRenderbuffersEXT)
--		pGlGenRenderbuffersEXT(n, renderbuffers);
--#elif defined(GL_ARB_framebuffer_object)
--	glGenRenderbuffers(n, renderbuffers);
--#elif defined(GL_EXT_framebuffer_object)
--	glGenRenderbuffersEXT(n, renderbuffers);
--#else
--	os::Printer::log("glGenRenderbuffers not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlRenderbufferStorage)
--		pGlRenderbufferStorage(target, internalformat, width, height);
--	else if (pGlRenderbufferStorageEXT)
--		pGlRenderbufferStorageEXT(target, internalformat, width, height);
--#elif defined(GL_ARB_framebuffer_object)
--	glRenderbufferStorage(target, internalformat, width, height);
--#elif defined(GL_EXT_framebuffer_object)
--	glRenderbufferStorageEXT(target, internalformat, width, height);
--#else
--	os::Printer::log("glRenderbufferStorage not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlFramebufferRenderbuffer)
--		pGlFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
--	else if (pGlFramebufferRenderbufferEXT)
--		pGlFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
--#elif defined(GL_ARB_framebuffer_object)
--	glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
--#elif defined(GL_EXT_framebuffer_object)
--	glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
--#else
--	os::Printer::log("glFramebufferRenderbuffer not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGenerateMipmap(GLenum target)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGenerateMipmap)
--		pGlGenerateMipmap(target);
--	else if (pGlGenerateMipmapEXT)
--		pGlGenerateMipmapEXT(target);
--#elif defined(GL_ARB_framebuffer_object)
--	glGenerateMipmap(target);
--#elif defined(GL_EXT_framebuffer_object)
--	glGenerateMipmapEXT(target);
--#else
--	os::Printer::log("glGenerateMipmap not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlActiveStencilFace(GLenum face)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlActiveStencilFaceEXT)
--		pGlActiveStencilFaceEXT(face);
--#elif defined(GL_EXT_stencil_two_side)
--	glActiveStencilFaceEXT(face);
--#else
--	os::Printer::log("glActiveStencilFace not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDrawBuffers(GLsizei n, const GLenum *bufs)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDrawBuffersARB)
--		pGlDrawBuffersARB(n, bufs);
--	else if (pGlDrawBuffersATI)
--		pGlDrawBuffersATI(n, bufs);
--#elif defined(GL_ARB_draw_buffers)
--	glDrawBuffersARB(n, bufs);
--#elif defined(GL_ATI_draw_buffers)
--	glDrawBuffersATI(n, bufs);
--#else
--	os::Printer::log("glDrawBuffers not supported", ELL_ERROR);
--#endif
--}
--
--
--inline void COpenGLExtensionHandler::extGlGenBuffers(GLsizei n, GLuint *buffers)
--{
--	if (buffers)
--		memset(buffers,0,n*sizeof(GLuint));
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGenBuffersARB)
--		pGlGenBuffersARB(n, buffers);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glGenBuffers(n, buffers);
--#else
--	os::Printer::log("glGenBuffers not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBindBuffer(GLenum target, GLuint buffer)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBindBufferARB)
--		pGlBindBufferARB(target, buffer);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glBindBuffer(target, buffer);
--#else
--	os::Printer::log("glBindBuffer not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBufferDataARB)
--		pGlBufferDataARB(target, size, data, usage);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glBufferData(target, size, data, usage);
--#else
--	os::Printer::log("glBufferData not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeleteBuffers(GLsizei n, const GLuint *buffers)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteBuffersARB)
--		pGlDeleteBuffersARB(n, buffers);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glDeleteBuffers(n, buffers);
--#else
--	os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBufferSubDataARB)
--		pGlBufferSubDataARB(target, offset, size, data);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glBufferSubData(target, offset, size, data);
--#else
--	os::Printer::log("glBufferSubData not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetBufferSubDataARB)
--		pGlGetBufferSubDataARB(target, offset, size, data);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glGetBufferSubData(target, offset, size, data);
--#else
--	os::Printer::log("glGetBufferSubData not supported", ELL_ERROR);
--#endif
--}
--
--inline void *COpenGLExtensionHandler::extGlMapBuffer(GLenum target, GLenum access)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlMapBufferARB)
--		return pGlMapBufferARB(target, access);
--	return 0;
--#elif defined(GL_ARB_vertex_buffer_object)
--	return glMapBuffer(target, access);
--#else
--	os::Printer::log("glMapBuffer not supported", ELL_ERROR);
--	return 0;
--#endif
--}
--
--inline GLboolean COpenGLExtensionHandler::extGlUnmapBuffer(GLenum target)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlUnmapBufferARB)
--		return pGlUnmapBufferARB(target);
--	return false;
--#elif defined(GL_ARB_vertex_buffer_object)
--	return glUnmapBuffer(target);
--#else
--	os::Printer::log("glUnmapBuffer not supported", ELL_ERROR);
--	return false;
--#endif
--}
--
--inline GLboolean COpenGLExtensionHandler::extGlIsBuffer(GLuint buffer)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlIsBufferARB)
--		return pGlIsBufferARB(buffer);
--	return false;
--#elif defined(GL_ARB_vertex_buffer_object)
--	return glIsBuffer(buffer);
--#else
--	os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
--	return false;
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetBufferParameterivARB)
--		pGlGetBufferParameterivARB(target, pname, params);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glGetBufferParameteriv(target, pname, params);
--#else
--	os::Printer::log("glGetBufferParameteriv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetBufferPointerv(GLenum target, GLenum pname, GLvoid **params)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetBufferPointervARB)
--		pGlGetBufferPointervARB(target, pname, params);
--#elif defined(GL_ARB_vertex_buffer_object)
--	glGetBufferPointerv(target, pname, params);
--#else
--	os::Printer::log("glGetBufferPointerv not supported", ELL_ERROR);
--#endif
--}
--
--
--inline void COpenGLExtensionHandler::extGlProvokingVertex(GLenum mode)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (FeatureAvailable[IRR_ARB_provoking_vertex] && pGlProvokingVertexARB)
--		pGlProvokingVertexARB(mode);
--	else if (FeatureAvailable[IRR_EXT_provoking_vertex] && pGlProvokingVertexEXT)
--		pGlProvokingVertexEXT(mode);
--#elif defined(GL_ARB_provoking_vertex)
--	glProvokingVertex(mode);
--#elif defined(GL_EXT_provoking_vertex)
--	glProvokingVertexEXT(mode);
--#else
--	os::Printer::log("glProvokingVertex not supported", ELL_ERROR);
--#endif
--}
--
--
--inline void COpenGLExtensionHandler::extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlColorMaskIndexedEXT)
--		pGlColorMaskIndexedEXT(buf, r, g, b, a);
--#elif defined(GL_EXT_draw_buffers2)
--	glColorMaskIndexedEXT(buf, r, g, b, a);
--#else
--	os::Printer::log("glColorMaskIndexed not supported", ELL_ERROR);
--#endif
--}
--
--
--inline void COpenGLExtensionHandler::extGlEnableIndexed(GLenum target, GLuint index)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlEnableIndexedEXT)
--		pGlEnableIndexedEXT(target, index);
--#elif defined(GL_EXT_draw_buffers2)
--	glEnableIndexedEXT(target, index);
--#else
--	os::Printer::log("glEnableIndexed not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDisableIndexed(GLenum target, GLuint index)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlDisableIndexedEXT)
--		pGlDisableIndexedEXT(target, index);
--#elif defined(GL_EXT_draw_buffers2)
--	glDisableIndexedEXT(target, index);
--#else
--	os::Printer::log("glDisableIndexed not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFunciARB)
--		pGlBlendFunciARB(buf, src, dst);
--	else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendFuncIndexedAMD)
--		pGlBlendFuncIndexedAMD(buf, src, dst);
--#elif defined(GL_ARB_draw_buffers_blend)
--	glBlendFunciARB(buf, src, dst);
--#elif defined(GL_AMD_draw_buffers_blend)
--	glBlendFuncIndexedAMD(buf, src, dst);
--#else
--	os::Printer::log("glBlendFuncIndexed not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBlendEquationIndexed(GLuint buf, GLenum mode)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationiARB)
--		pGlBlendEquationiARB(buf, mode);
--	else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendEquationIndexedAMD)
--		pGlBlendEquationIndexedAMD(buf, mode);
--#elif defined(GL_ARB_draw_buffers_blend)
--	glBlendEquationiARB(buf, mode);
--#elif defined(GL_AMD_draw_buffers_blend)
--	glBlendEquationIndexedAMD(buf, mode);
--#else
--	os::Printer::log("glBlendEquationIndexed not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlProgramParameteri(GLhandleARB program, GLenum pname, GLint value)
--{
--#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
--	if (queryFeature(EVDF_GEOMETRY_SHADER))
--	{
--		if (pGlProgramParameteriARB)
--			pGlProgramParameteriARB(program, pname, value);
--		else if (pGlProgramParameteriEXT)
--			pGlProgramParameteriEXT(program, pname, value);
--	}
--#elif defined(GL_ARB_geometry_shader4)
--	glProgramParameteriARB(program, pname, value);
--#elif defined(GL_EXT_geometry_shader4)
--    #ifdef __clang__
--    glProgramParameteriEXT((long)program, pname, value);
--    #else
--	glProgramParameteriEXT((long GLuint)program, pname, value);
--    #endif
--#elif defined(GL_NV_geometry_program4) || defined(GL_NV_geometry_shader4)
--	glProgramParameteriNV(program, pname, value);
--#else
--	os::Printer::log("glProgramParameteri not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGenQueries(GLsizei n, GLuint *ids)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGenQueriesARB)
--		pGlGenQueriesARB(n, ids);
--	else if (pGlGenOcclusionQueriesNV)
--		pGlGenOcclusionQueriesNV(n, ids);
--#elif defined(GL_ARB_occlusion_query)
--	glGenQueriesARB(n, ids);
--#elif defined(GL_NV_occlusion_query)
--	glGenOcclusionQueriesNV(n, ids);
--#else
--	os::Printer::log("glGenQueries not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlDeleteQueries(GLsizei n, const GLuint *ids)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlDeleteQueriesARB)
--		pGlDeleteQueriesARB(n, ids);
--	else if (pGlDeleteOcclusionQueriesNV)
--		pGlDeleteOcclusionQueriesNV(n, ids);
--#elif defined(GL_ARB_occlusion_query)
--	glDeleteQueriesARB(n, ids);
--#elif defined(GL_NV_occlusion_query)
--	glDeleteOcclusionQueriesNV(n, ids);
--#else
--	os::Printer::log("glDeleteQueries not supported", ELL_ERROR);
--#endif
--}
--
--inline GLboolean COpenGLExtensionHandler::extGlIsQuery(GLuint id)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlIsQueryARB)
--		return pGlIsQueryARB(id);
--	else if (pGlIsOcclusionQueryNV)
--		return pGlIsOcclusionQueryNV(id);
--	return false;
--#elif defined(GL_ARB_occlusion_query)
--	return glIsQueryARB(id);
--#elif defined(GL_NV_occlusion_query)
--	return glIsOcclusionQueryNV(id);
--#else
--	return false;
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBeginQuery(GLenum target, GLuint id)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBeginQueryARB)
--		pGlBeginQueryARB(target, id);
--	else if (pGlBeginOcclusionQueryNV)
--		pGlBeginOcclusionQueryNV(id);
--#elif defined(GL_ARB_occlusion_query)
--	glBeginQueryARB(target, id);
--#elif defined(GL_NV_occlusion_query)
--	glBeginOcclusionQueryNV(id);
--#else
--	os::Printer::log("glBeginQuery not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlEndQuery(GLenum target)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlEndQueryARB)
--		pGlEndQueryARB(target);
--	else if (pGlEndOcclusionQueryNV)
--		pGlEndOcclusionQueryNV();
--#elif defined(GL_ARB_occlusion_query)
--	glEndQueryARB(target);
--#elif defined(GL_NV_occlusion_query)
--	glEndOcclusionQueryNV();
--#else
--	os::Printer::log("glEndQuery not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetQueryiv(GLenum target, GLenum pname, GLint *params)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetQueryivARB)
--		pGlGetQueryivARB(target, pname, params);
--#elif defined(GL_ARB_occlusion_query)
--	glGetQueryivARB(target, pname, params);
--#else
--	os::Printer::log("glGetQueryivARB not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetQueryObjectivARB)
--		pGlGetQueryObjectivARB(id, pname, params);
--	else if (pGlGetOcclusionQueryivNV)
--		pGlGetOcclusionQueryivNV(id, pname, params);
--#elif defined(GL_ARB_occlusion_query)
--	glGetQueryObjectivARB(id, pname, params);
--#elif defined(GL_NV_occlusion_query)
--	glGetOcclusionQueryivNV(id, pname, params);
--#else
--	os::Printer::log("glGetQueryObjectiv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlGetQueryObjectuivARB)
--		pGlGetQueryObjectuivARB(id, pname, params);
--	else if (pGlGetOcclusionQueryuivNV)
--		pGlGetOcclusionQueryuivNV(id, pname, params);
--#elif defined(GL_ARB_occlusion_query)
--	glGetQueryObjectuivARB(id, pname, params);
--#elif defined(GL_NV_occlusion_query)
--	glGetOcclusionQueryuivNV(id, pname, params);
--#else
--	os::Printer::log("glGetQueryObjectuiv not supported", ELL_ERROR);
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlSwapInterval(int interval)
--{
--	// we have wglext, so try to use that
--#if defined(_IRR_WINDOWS_API_) && defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)
--#ifdef WGL_EXT_swap_control
--	if (pWglSwapIntervalEXT)
--		pWglSwapIntervalEXT(interval);
--#endif
--#endif
--#ifdef _IRR_COMPILE_WITH_X11_DEVICE_
--	//TODO: Check GLX_EXT_swap_control and GLX_MESA_swap_control
--#ifdef GLX_SGI_swap_control
--	// does not work with interval==0
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (interval && pGlxSwapIntervalSGI)
--		pGlxSwapIntervalSGI(interval);
--#else
--	if (interval)
--		glXSwapIntervalSGI(interval);
--#endif
--#elif defined(GLX_EXT_swap_control)
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	Display *dpy = glXGetCurrentDisplay();
--	GLXDrawable drawable = glXGetCurrentDrawable();
--
--	if (pGlxSwapIntervalEXT)
--		pGlxSwapIntervalEXT(dpy, drawable, interval);
--#else
--	pGlXSwapIntervalEXT(dpy, drawable, interval);
--#endif
--#elif defined(GLX_MESA_swap_control)
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlxSwapIntervalMESA)
--		pGlxSwapIntervalMESA(interval);
--#else
--	pGlXSwapIntervalMESA(interval);
--#endif
--#endif
--#endif
--}
--
--inline void COpenGLExtensionHandler::extGlBlendEquation(GLenum mode)
--{
--#ifdef _IRR_OPENGL_USE_EXTPOINTER_
--	if (pGlBlendEquation)
--		pGlBlendEquation(mode);
--	else if (pGlBlendEquationEXT)
--		pGlBlendEquationEXT(mode);
--#elif defined(GL_EXT_blend_minmax) || defined(GL_EXT_blend_subtract) || defined(GL_EXT_blend_logic_op)
--	glBlendEquationEXT(mode);
--#elif defined(GL_VERSION_1_2)
--	glBlendEquation(mode);
--#else
--	os::Printer::log("glBlendEquation not supported", ELL_ERROR);
--#endif
--}
--
--
--}
--}
--
--#endif
--
--#endif
--
-+// Copyright (C) 2002-2012 Nikolaus Gebhardt
-+// This file is part of the "Irrlicht Engine".
-+// For conditions of distribution and use, see copyright notice in Irrlicht.h
-+
-+#ifndef __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
-+#define __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
-+
-+#include "IrrCompileConfig.h"
-+#ifdef _IRR_COMPILE_WITH_OPENGL_
-+
-+#include "EDriverFeatures.h"
-+#include "irrTypes.h"
-+#include "os.h"
-+
-+#if defined(_IRR_WINDOWS_API_)
-+	// include windows headers for HWND
-+	#define WIN32_LEAN_AND_MEAN
-+	#include <windows.h>
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+		#define GL_GLEXT_LEGACY 1
-+	#endif
-+	#include <GL/gl.h>
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+                typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
-+		#include "glext.h"
-+	#endif
-+	#include "wglext.h"
-+
-+	#ifdef _MSC_VER
-+		#pragma comment(lib, "OpenGL32.lib")
-+	#endif
-+
-+#elif defined(_IRR_COMPILE_WITH_OSX_DEVICE_)
-+	#include "MacOSX/CIrrDeviceMacOSX.h"
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+		#define GL_GLEXT_LEGACY 1
-+	#endif
-+	#include <OpenGL/gl.h>
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+                typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
-+		#include "glext.h"
-+	#endif
-+#elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && !defined(_IRR_COMPILE_WITH_X11_DEVICE_)
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+		#define GL_GLEXT_LEGACY 1
-+		#define GLX_GLXEXT_LEGACY 1
-+	#else
-+		#define GL_GLEXT_PROTOTYPES 1
-+		#define GLX_GLXEXT_PROTOTYPES 1
-+	#endif
-+	#define NO_SDL_GLEXT
-+	#include <SDL/SDL_video.h>
-+	#include <SDL/SDL_opengl.h>
-+        typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
-+	#include "glext.h"
-+#else
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+		#define GL_GLEXT_LEGACY 1
-+		#define GLX_GLXEXT_LEGACY 1
-+	#else
-+		#define GL_GLEXT_PROTOTYPES 1
-+		#define GLX_GLXEXT_PROTOTYPES 1
-+	#endif
-+	#include <GL/gl.h>
-+	#include <GL/glx.h>
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+        typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
-+	#include <GL/glext.h>
-+	#undef GLX_ARB_get_proc_address // avoid problems with local glxext.h
-+	#include <GL/glxext.h>
-+	#endif
-+#endif
-+
-+#ifndef GL_ARB_shader_objects
-+/* GL types for program/shader text and shader object handles */
-+typedef char GLcharARB;
-+typedef unsigned int GLhandleARB;
-+#endif
-+
-+#ifndef GL_VERSION_2_0
-+/* GL type for program/shader text */
-+typedef char GLchar;
-+#endif
-+
-+
-+namespace irr
-+{
-+namespace video
-+{
-+
-+
-+static const char* const OpenGLFeatureStrings[] = {
-+	"GL_3DFX_multisample",
-+	"GL_3DFX_tbuffer",
-+	"GL_3DFX_texture_compression_FXT1",
-+	"GL_AMD_blend_minmax_factor",
-+	"GL_AMD_conservative_depth",
-+	"GL_AMD_debug_output",
-+	"GL_AMD_depth_clamp_separate",
-+	"GL_AMD_draw_buffers_blend",
-+	"GL_AMD_multi_draw_indirect",
-+	"GL_AMD_name_gen_delete",
-+	"GL_AMD_performance_monitor",
-+	"GL_AMD_sample_positions",
-+	"GL_AMD_seamless_cubemap_per_texture",
-+	"GL_AMD_shader_stencil_export",
-+	"GL_AMD_texture_texture4",
-+	"GL_AMD_transform_feedback3_lines_triangles",
-+	"GL_AMD_vertex_shader_tesselator",
-+	"GL_APPLE_aux_depth_stencil",
-+	"GL_APPLE_client_storage",
-+	"GL_APPLE_element_array",
-+	"GL_APPLE_fence",
-+	"GL_APPLE_float_pixels",
-+	"GL_APPLE_flush_buffer_range",
-+	"GL_APPLE_object_purgeable",
-+	"GL_APPLE_rgb_422",
-+	"GL_APPLE_row_bytes",
-+	"GL_APPLE_specular_vector",
-+	"GL_APPLE_texture_range",
-+	"GL_APPLE_transform_hint",
-+	"GL_APPLE_vertex_array_object",
-+	"GL_APPLE_vertex_array_range",
-+	"GL_APPLE_vertex_program_evaluators",
-+	"GL_APPLE_ycbcr_422",
-+	"GL_ARB_base_instance",
-+	"GL_ARB_blend_func_extended",
-+	"GL_ARB_cl_event",
-+	"GL_ARB_color_buffer_float",
-+	"GL_ARB_compatibility",
-+	"GL_ARB_compressed_texture_pixel_storage",
-+	"GL_ARB_conservative_depth",
-+	"GL_ARB_copy_buffer",
-+	"GL_ARB_debug_output",
-+	"GL_ARB_depth_buffer_float",
-+	"GL_ARB_depth_clamp",
-+	"GL_ARB_depth_texture",
-+	"GL_ARB_draw_buffers",
-+	"GL_ARB_draw_buffers_blend",
-+	"GL_ARB_draw_elements_base_vertex",
-+	"GL_ARB_draw_indirect",
-+	"GL_ARB_draw_instanced",
-+	"GL_ARB_ES2_compatibility",
-+	"GL_ARB_explicit_attrib_location",
-+	"GL_ARB_fragment_coord_conventions",
-+	"GL_ARB_fragment_program",
-+	"GL_ARB_fragment_program_shadow",
-+	"GL_ARB_fragment_shader",
-+	"GL_ARB_framebuffer_object",
-+	"GL_ARB_framebuffer_sRGB",
-+	"GL_ARB_get_program_binary",
-+	"GL_ARB_geometry_shader4",
-+	"GL_ARB_gpu_shader5",
-+	"GL_ARB_gpu_shader_fp64",
-+	"GL_ARB_half_float_pixel",
-+	"GL_ARB_half_float_vertex",
-+	"GL_ARB_imaging",
-+	"GL_ARB_instanced_arrays",
-+	"GL_ARB_internalformat_query",
-+	"GL_ARB_map_buffer_alignment",
-+	"GL_ARB_map_buffer_range",
-+	"GL_ARB_matrix_palette",
-+	"GL_ARB_multisample",
-+	"GL_ARB_multitexture",
-+	"GL_ARB_occlusion_query",
-+	"GL_ARB_occlusion_query2",
-+	"GL_ARB_pixel_buffer_object",
-+	"GL_ARB_point_parameters",
-+	"GL_ARB_point_sprite",
-+	"GL_ARB_provoking_vertex",
-+	"GL_ARB_robustness",
-+	"GL_ARB_sample_shading",
-+	"GL_ARB_sampler_objects",
-+	"GL_ARB_seamless_cube_map",
-+	"GL_ARB_separate_shader_objects",
-+	"GL_ARB_shader_atomic_counters",
-+	"GL_ARB_shader_bit_encoding",
-+	"GL_ARB_shader_image_load_store",
-+	"GL_ARB_shader_objects",
-+	"GL_ARB_shader_precision",
-+	"GL_ARB_shader_stencil_export",
-+	"GL_ARB_shader_subroutine",
-+	"GL_ARB_shader_texture_lod",
-+	"GL_ARB_shading_language_100",
-+	"GL_ARB_shading_language_420pack",
-+	"GL_ARB_shading_language_include",
-+	"GL_ARB_shading_language_packing",
-+	"GL_ARB_shadow",
-+	"GL_ARB_shadow_ambient",
-+	"GL_ARB_sync",
-+	"GL_ARB_tessellation_shader",
-+	"GL_ARB_texture_border_clamp",
-+	"GL_ARB_texture_buffer_object",
-+	"GL_ARB_texture_buffer_object_rgb32",
-+	"GL_ARB_texture_compression",
-+	"GL_ARB_texture_compression_bptc",
-+	"GL_ARB_texture_compression_rgtc",
-+	"GL_ARB_texture_cube_map",
-+	"GL_ARB_texture_cube_map_array",
-+	"GL_ARB_texture_env_add",
-+	"GL_ARB_texture_env_combine",
-+	"GL_ARB_texture_env_crossbar",
-+	"GL_ARB_texture_env_dot3",
-+	"GL_ARB_texture_float",
-+	"GL_ARB_texture_gather",
-+	"GL_ARB_texture_mirrored_repeat",
-+	"GL_ARB_texture_multisample",
-+	"GL_ARB_texture_non_power_of_two",
-+	"GL_ARB_texture_query_lod",
-+	"GL_ARB_texture_rectangle",
-+	"GL_ARB_texture_rg",
-+	"GL_ARB_texture_rgb10_a2ui",
-+	"GL_ARB_texture_storage",
-+	"GL_ARB_texture_swizzle",
-+	"GL_ARB_timer_query",
-+	"GL_ARB_transform_feedback2",
-+	"GL_ARB_transform_feedback3",
-+	"GL_ARB_transform_feedback_instanced",
-+	"GL_ARB_transpose_matrix",
-+	"GL_ARB_uniform_buffer_object",
-+	"GL_ARB_vertex_array_bgra",
-+	"GL_ARB_vertex_array_object",
-+	"GL_ARB_vertex_attrib_64bit",
-+	"GL_ARB_vertex_blend",
-+	"GL_ARB_vertex_buffer_object",
-+	"GL_ARB_vertex_program",
-+	"GL_ARB_vertex_shader",
-+	"GL_ARB_vertex_type_2_10_10_10_rev",
-+	"GL_ARB_viewport_array",
-+	"GL_ARB_window_pos",
-+	"GL_ATI_draw_buffers",
-+	"GL_ATI_element_array",
-+	"GL_ATI_envmap_bumpmap",
-+	"GL_ATI_fragment_shader",
-+	"GL_ATI_map_object_buffer",
-+	"GL_ATI_meminfo",
-+	"GL_ATI_pixel_format_float",
-+	"GL_ATI_pn_triangles",
-+	"GL_ATI_separate_stencil",
-+	"GL_ATI_text_fragment_shader",
-+	"GL_ATI_texture_env_combine3",
-+	"GL_ATI_texture_float",
-+	"GL_ATI_texture_mirror_once",
-+	"GL_ATI_vertex_array_object",
-+	"GL_ATI_vertex_attrib_array_object",
-+	"GL_ATI_vertex_streams",
-+	"GL_EXT_422_pixels",
-+	"GL_EXT_abgr",
-+	"GL_EXT_bgra",
-+	"GL_EXT_bindable_uniform",
-+	"GL_EXT_blend_color",
-+	"GL_EXT_blend_equation_separate",
-+	"GL_EXT_blend_func_separate",
-+	"GL_EXT_blend_logic_op",
-+	"GL_EXT_blend_minmax",
-+	"GL_EXT_blend_subtract",
-+	"GL_EXT_clip_volume_hint",
-+	"GL_EXT_cmyka",
-+	"GL_EXT_color_subtable",
-+	"GL_EXT_compiled_vertex_array",
-+	"GL_EXT_convolution",
-+	"GL_EXT_coordinate_frame",
-+	"GL_EXT_copy_texture",
-+	"GL_EXT_cull_vertex",
-+	"GL_EXT_depth_bounds_test",
-+	"GL_EXT_direct_state_access",
-+	"GL_EXT_draw_buffers2",
-+	"GL_EXT_draw_instanced",
-+	"GL_EXT_draw_range_elements",
-+	"GL_EXT_fog_coord",
-+	"GL_EXT_framebuffer_blit",
-+	"GL_EXT_framebuffer_multisample",
-+	"GL_EXT_framebuffer_multisample_blit_scaled",
-+	"GL_EXT_framebuffer_object",
-+	"GL_EXT_framebuffer_sRGB",
-+	"GL_EXT_geometry_shader4",
-+	"GL_EXT_gpu_program_parameters",
-+	"GL_EXT_gpu_shader4",
-+	"GL_EXT_histogram",
-+	"GL_EXT_index_array_formats",
-+	"GL_EXT_index_func",
-+	"GL_EXT_index_material",
-+	"GL_EXT_index_texture",
-+	"GL_EXT_light_texture",
-+	"GL_EXT_misc_attribute",
-+	"GL_EXT_multi_draw_arrays",
-+	"GL_EXT_multisample",
-+	"GL_EXT_packed_depth_stencil",
-+	"GL_EXT_packed_float",
-+	"GL_EXT_packed_pixels",
-+	"GL_EXT_paletted_texture",
-+	"GL_EXT_pixel_buffer_object",
-+	"GL_EXT_pixel_transform",
-+	"GL_EXT_pixel_transform_color_table",
-+	"GL_EXT_point_parameters",
-+	"GL_EXT_polygon_offset",
-+	"GL_EXT_provoking_vertex",
-+	"GL_EXT_rescale_normal",
-+	"GL_EXT_secondary_color",
-+	"GL_EXT_separate_shader_objects",
-+	"GL_EXT_separate_specular_color",
-+	"GL_EXT_shader_image_load_store",
-+	"GL_EXT_shadow_funcs",
-+	"GL_EXT_shared_texture_palette",
-+	"GL_EXT_stencil_clear_tag",
-+	"GL_EXT_stencil_two_side",
-+	"GL_EXT_stencil_wrap",
-+	"GL_EXT_subtexture",
-+	"GL_EXT_texture",
-+	"GL_EXT_texture3D",
-+	"GL_EXT_texture_array",
-+	"GL_EXT_texture_buffer_object",
-+	"GL_EXT_texture_compression_latc",
-+	"GL_EXT_texture_compression_rgtc",
-+	"GL_EXT_texture_compression_s3tc",
-+	"GL_EXT_texture_cube_map",
-+	"GL_EXT_texture_env_add",
-+	"GL_EXT_texture_env_combine",
-+	"GL_EXT_texture_env_dot3",
-+	"GL_EXT_texture_filter_anisotropic",
-+	"GL_EXT_texture_integer",
-+	"GL_EXT_texture_lod_bias",
-+	"GL_EXT_texture_mirror_clamp",
-+	"GL_EXT_texture_object",
-+	"GL_EXT_texture_perturb_normal",
-+	"GL_EXT_texture_shared_exponent",
-+	"GL_EXT_texture_snorm",
-+	"GL_EXT_texture_sRGB",
-+	"GL_EXT_texture_sRGB_decode",
-+	"GL_EXT_texture_swizzle",
-+	"GL_EXT_timer_query",
-+	"GL_EXT_transform_feedback",
-+	"GL_EXT_vertex_array",
-+	"GL_EXT_vertex_array_bgra",
-+	"GL_EXT_vertex_attrib_64bit",
-+	"GL_EXT_vertex_shader",
-+	"GL_EXT_vertex_weighting",
-+	"GL_EXT_x11_sync_object",
-+	"GL_FfdMaskSGIX",
-+	"GL_GREMEDY_frame_terminator",
-+	"GL_GREMEDY_string_marker",
-+	"GL_HP_convolution_border_modes",
-+	"GL_HP_image_transform",
-+	"GL_HP_occlusion_test",
-+	"GL_HP_texture_lighting",
-+	"GL_IBM_cull_vertex",
-+	"GL_IBM_multimode_draw_arrays",
-+	"GL_IBM_rasterpos_clip",
-+	"GL_IBM_texture_mirrored_repeat",
-+	"GL_IBM_vertex_array_lists",
-+	"GL_INGR_blend_func_separate",
-+	"GL_INGR_color_clamp",
-+	"GL_INGR_interlace_read",
-+	"GL_INGR_palette_buffer",
-+	"GL_INTEL_parallel_arrays",
-+	"GL_INTEL_texture_scissor",
-+	"GL_MESA_pack_invert",
-+	"GL_MESA_resize_buffers",
-+	"GL_MESA_window_pos",
-+	"GL_MESAX_texture_stack",
-+	"GL_MESA_ycbcr_texture",
-+	"GL_NV_blend_square",
-+	"GL_NV_conditional_render",
-+	"GL_NV_copy_depth_to_color",
-+	"GL_NV_copy_image",
-+	"GL_NV_depth_buffer_float",
-+	"GL_NV_depth_clamp",
-+	"GL_NV_evaluators",
-+	"GL_NV_explicit_multisample",
-+	"GL_NV_fence",
-+	"GL_NV_float_buffer",
-+	"GL_NV_fog_distance",
-+	"GL_NV_fragment_program",
-+	"GL_NV_fragment_program2",
-+	"GL_NV_fragment_program4",
-+	"GL_NV_fragment_program_option",
-+	"GL_NV_framebuffer_multisample_coverage",
-+	"GL_NV_geometry_program4",
-+	"GL_NV_geometry_shader4",
-+	"GL_NV_gpu_program4",
-+	"GL_NV_gpu_program5",
-+	"GL_NV_gpu_shader5",
-+	"GL_NV_half_float",
-+	"GL_NV_light_max_exponent",
-+	"GL_NV_multisample_coverage",
-+	"GL_NV_multisample_filter_hint",
-+	"GL_NV_occlusion_query",
-+	"GL_NV_packed_depth_stencil",
-+	"GL_NV_parameter_buffer_object",
-+	"GL_NV_parameter_buffer_object2",
-+	"GL_NV_pixel_data_range",
-+	"GL_NV_point_sprite",
-+	"GL_NV_present_video",
-+	"GL_NV_primitive_restart",
-+	"GL_NV_register_combiners",
-+	"GL_NV_register_combiners2",
-+	"GL_NV_shader_buffer_load",
-+	"GL_NV_shader_buffer_store",
-+	"GL_NV_tessellation_program5",
-+	"GL_NV_texgen_emboss",
-+	"GL_NV_texgen_reflection",
-+	"GL_NV_texture_barrier",
-+	"GL_NV_texture_compression_vtc",
-+	"GL_NV_texture_env_combine4",
-+	"GL_NV_texture_expand_normal",
-+	"GL_NV_texture_multisample",
-+	"GL_NV_texture_rectangle",
-+	"GL_NV_texture_shader",
-+	"GL_NV_texture_shader2",
-+	"GL_NV_texture_shader3",
-+	"GL_NV_transform_feedback",
-+	"GL_NV_transform_feedback2",
-+	"GL_NV_vdpau_interop",
-+	"GL_NV_vertex_array_range",
-+	"GL_NV_vertex_array_range2",
-+	"GL_NV_vertex_attrib_integer_64bit",
-+	"GL_NV_vertex_buffer_unified_memory",
-+	"GL_NV_vertex_program",
-+	"GL_NV_vertex_program1_1",
-+	"GL_NV_vertex_program2",
-+	"GL_NV_vertex_program2_option",
-+	"GL_NV_vertex_program3",
-+	"GL_NV_vertex_program4",
-+	"GL_NV_video_capture",
-+	"GL_OES_read_format",
-+	"GL_OML_interlace",
-+	"GL_OML_resample",
-+	"GL_OML_subsample",
-+	"GL_PGI_misc_hints",
-+	"GL_PGI_vertex_hints",
-+	"GL_REND_screen_coordinates",
-+	"GL_S3_s3tc",
-+	"GL_SGI_color_matrix",
-+	"GL_SGI_color_table",
-+	"GL_SGI_depth_pass_instrument",
-+	"GL_SGIS_detail_texture",
-+	"GL_SGIS_fog_function",
-+	"GL_SGIS_generate_mipmap",
-+	"GL_SGIS_multisample",
-+	"GL_SGIS_pixel_texture",
-+	"GL_SGIS_point_line_texgen",
-+	"GL_SGIS_point_parameters",
-+	"GL_SGIS_sharpen_texture",
-+	"GL_SGIS_texture4D",
-+	"GL_SGIS_texture_border_clamp",
-+	"GL_SGIS_texture_color_mask",
-+	"GL_SGIS_texture_edge_clamp",
-+	"GL_SGIS_texture_filter4",
-+	"GL_SGIS_texture_lod",
-+	"GL_SGIS_texture_select",
-+	"GL_SGI_texture_color_table",
-+	"GL_SGIX_async",
-+	"GL_SGIX_async_histogram",
-+	"GL_SGIX_async_pixel",
-+	"GL_SGIX_blend_alpha_minmax",
-+	"GL_SGIX_calligraphic_fragment",
-+	"GL_SGIX_clipmap",
-+	"GL_SGIX_convolution_accuracy",
-+	"GL_SGIX_depth_pass_instrument",
-+	"GL_SGIX_depth_texture",
-+	"GL_SGIX_flush_raster",
-+	"GL_SGIX_fog_offset",
-+	"GL_SGIX_fog_scale",
-+	"GL_SGIX_fragment_lighting",
-+	"GL_SGIX_framezoom",
-+	"GL_SGIX_igloo_interface",
-+	"GL_SGIX_impact_pixel_texture",
-+	"GL_SGIX_instruments",
-+	"GL_SGIX_interlace",
-+	"GL_SGIX_ir_instrument1",
-+	"GL_SGIX_list_priority",
-+	"GL_SGIX_pixel_texture",
-+	"GL_SGIX_pixel_tiles",
-+	"GL_SGIX_polynomial_ffd",
-+	"GL_SGIX_reference_plane",
-+	"GL_SGIX_resample",
-+	"GL_SGIX_scalebias_hint",
-+	"GL_SGIX_shadow",
-+	"GL_SGIX_shadow_ambient",
-+	"GL_SGIX_sprite",
-+	"GL_SGIX_subsample",
-+	"GL_SGIX_tag_sample_buffer",
-+	"GL_SGIX_texture_add_env",
-+	"GL_SGIX_texture_coordinate_clamp",
-+	"GL_SGIX_texture_lod_bias",
-+	"GL_SGIX_texture_multi_buffer",
-+	"GL_SGIX_texture_scale_bias",
-+	"GL_SGIX_texture_select",
-+	"GL_SGIX_vertex_preclip",
-+	"GL_SGIX_ycrcb",
-+	"GL_SGIX_ycrcba",
-+	"GL_SGIX_ycrcb_subsample",
-+	"GL_SUN_convolution_border_modes",
-+	"GL_SUN_global_alpha",
-+	"GL_SUN_mesh_array",
-+	"GL_SUN_slice_accum",
-+	"GL_SUN_triangle_list",
-+	"GL_SUN_vertex",
-+	"GL_SUNX_constant_data",
-+	"GL_WIN_phong_shading",
-+	"GL_WIN_specular_fog",
-+	// unofficial stuff
-+	"GL_NVX_gpu_memory_info"
-+};
-+
-+
-+class COpenGLExtensionHandler
-+{
-+	public:
-+	enum EOpenGLFeatures {
-+		IRR_3DFX_multisample = 0,
-+		IRR_3DFX_tbuffer,
-+		IRR_3DFX_texture_compression_FXT1,
-+		IRR_AMD_blend_minmax_factor,
-+		IRR_AMD_conservative_depth,
-+		IRR_AMD_debug_output,
-+		IRR_AMD_depth_clamp_separate,
-+		IRR_AMD_draw_buffers_blend,
-+		IRR_AMD_multi_draw_indirect,
-+		IRR_AMD_name_gen_delete,
-+		IRR_AMD_performance_monitor,
-+		IRR_AMD_sample_positions,
-+		IRR_AMD_seamless_cubemap_per_texture,
-+		IRR_AMD_shader_stencil_export,
-+		IRR_AMD_texture_texture4,
-+		IRR_AMD_transform_feedback3_lines_triangles,
-+		IRR_AMD_vertex_shader_tesselator,
-+		IRR_APPLE_aux_depth_stencil,
-+		IRR_APPLE_client_storage,
-+		IRR_APPLE_element_array,
-+		IRR_APPLE_fence,
-+		IRR_APPLE_float_pixels,
-+		IRR_APPLE_flush_buffer_range,
-+		IRR_APPLE_object_purgeable,
-+		IRR_APPLE_rgb_422,
-+		IRR_APPLE_row_bytes,
-+		IRR_APPLE_specular_vector,
-+		IRR_APPLE_texture_range,
-+		IRR_APPLE_transform_hint,
-+		IRR_APPLE_vertex_array_object,
-+		IRR_APPLE_vertex_array_range,
-+		IRR_APPLE_vertex_program_evaluators,
-+		IRR_APPLE_ycbcr_422,
-+		IRR_ARB_base_instance,
-+		IRR_ARB_blend_func_extended,
-+		IRR_ARB_cl_event,
-+		IRR_ARB_color_buffer_float,
-+		IRR_ARB_compatibility,
-+		IRR_ARB_compressed_texture_pixel_storage,
-+		IRR_ARB_conservative_depth,
-+		IRR_ARB_copy_buffer,
-+		IRR_ARB_debug_output,
-+		IRR_ARB_depth_buffer_float,
-+		IRR_ARB_depth_clamp,
-+		IRR_ARB_depth_texture,
-+		IRR_ARB_draw_buffers,
-+		IRR_ARB_draw_buffers_blend,
-+		IRR_ARB_draw_elements_base_vertex,
-+		IRR_ARB_draw_indirect,
-+		IRR_ARB_draw_instanced,
-+		IRR_ARB_ES2_compatibility,
-+		IRR_ARB_explicit_attrib_location,
-+		IRR_ARB_fragment_coord_conventions,
-+		IRR_ARB_fragment_program,
-+		IRR_ARB_fragment_program_shadow,
-+		IRR_ARB_fragment_shader,
-+		IRR_ARB_framebuffer_object,
-+		IRR_ARB_framebuffer_sRGB,
-+		IRR_ARB_get_program_binary,
-+		IRR_ARB_geometry_shader4,
-+		IRR_ARB_gpu_shader5,
-+		IRR_ARB_gpu_shader_fp64,
-+		IRR_ARB_half_float_pixel,
-+		IRR_ARB_half_float_vertex,
-+		IRR_ARB_imaging,
-+		IRR_ARB_instanced_arrays,
-+		IRR_ARB_internalformat_query,
-+		IRR_ARB_map_buffer_alignment,
-+		IRR_ARB_map_buffer_range,
-+		IRR_ARB_matrix_palette,
-+		IRR_ARB_multisample,
-+		IRR_ARB_multitexture,
-+		IRR_ARB_occlusion_query,
-+		IRR_ARB_occlusion_query2,
-+		IRR_ARB_pixel_buffer_object,
-+		IRR_ARB_point_parameters,
-+		IRR_ARB_point_sprite,
-+		IRR_ARB_provoking_vertex,
-+		IRR_ARB_robustness,
-+		IRR_ARB_sample_shading,
-+		IRR_ARB_sampler_objects,
-+		IRR_ARB_seamless_cube_map,
-+		IRR_ARB_separate_shader_objects,
-+		IRR_ARB_shader_atomic_counters,
-+		IRR_ARB_shader_bit_encoding,
-+		IRR_ARB_shader_image_load_store,
-+		IRR_ARB_shader_objects,
-+		IRR_ARB_shader_precision,
-+		IRR_ARB_shader_stencil_export,
-+		IRR_ARB_shader_subroutine,
-+		IRR_ARB_shader_texture_lod,
-+		IRR_ARB_shading_language_100,
-+		IRR_ARB_shading_language_420pack,
-+		IRR_ARB_shading_language_include,
-+		IRR_ARB_shading_language_packing,
-+		IRR_ARB_shadow,
-+		IRR_ARB_shadow_ambient,
-+		IRR_ARB_sync,
-+		IRR_ARB_tessellation_shader,
-+		IRR_ARB_texture_border_clamp,
-+		IRR_ARB_texture_buffer_object,
-+		IRR_ARB_texture_buffer_object_rgb32,
-+		IRR_ARB_texture_compression,
-+		IRR_ARB_texture_compression_bptc,
-+		IRR_ARB_texture_compression_rgtc,
-+		IRR_ARB_texture_cube_map,
-+		IRR_ARB_texture_cube_map_array,
-+		IRR_ARB_texture_env_add,
-+		IRR_ARB_texture_env_combine,
-+		IRR_ARB_texture_env_crossbar,
-+		IRR_ARB_texture_env_dot3,
-+		IRR_ARB_texture_float,
-+		IRR_ARB_texture_gather,
-+		IRR_ARB_texture_mirrored_repeat,
-+		IRR_ARB_texture_multisample,
-+		IRR_ARB_texture_non_power_of_two,
-+		IRR_ARB_texture_query_lod,
-+		IRR_ARB_texture_rectangle,
-+		IRR_ARB_texture_rg,
-+		IRR_ARB_texture_rgb10_a2ui,
-+		IRR_ARB_texture_storage,
-+		IRR_ARB_texture_swizzle,
-+		IRR_ARB_timer_query,
-+		IRR_ARB_transform_feedback2,
-+		IRR_ARB_transform_feedback3,
-+		IRR_ARB_transform_feedback_instanced,
-+		IRR_ARB_transpose_matrix,
-+		IRR_ARB_uniform_buffer_object,
-+		IRR_ARB_vertex_array_bgra,
-+		IRR_ARB_vertex_array_object,
-+		IRR_ARB_vertex_attrib_64bit,
-+		IRR_ARB_vertex_blend,
-+		IRR_ARB_vertex_buffer_object,
-+		IRR_ARB_vertex_program,
-+		IRR_ARB_vertex_shader,
-+		IRR_ARB_vertex_type_2_10_10_10_rev,
-+		IRR_ARB_viewport_array,
-+		IRR_ARB_window_pos,
-+		IRR_ATI_draw_buffers,
-+		IRR_ATI_element_array,
-+		IRR_ATI_envmap_bumpmap,
-+		IRR_ATI_fragment_shader,
-+		IRR_ATI_map_object_buffer,
-+		IRR_ATI_meminfo,
-+		IRR_ATI_pixel_format_float,
-+		IRR_ATI_pn_triangles,
-+		IRR_ATI_separate_stencil,
-+		IRR_ATI_text_fragment_shader,
-+		IRR_ATI_texture_env_combine3,
-+		IRR_ATI_texture_float,
-+		IRR_ATI_texture_mirror_once,
-+		IRR_ATI_vertex_array_object,
-+		IRR_ATI_vertex_attrib_array_object,
-+		IRR_ATI_vertex_streams,
-+		IRR_EXT_422_pixels,
-+		IRR_EXT_abgr,
-+		IRR_EXT_bgra,
-+		IRR_EXT_bindable_uniform,
-+		IRR_EXT_blend_color,
-+		IRR_EXT_blend_equation_separate,
-+		IRR_EXT_blend_func_separate,
-+		IRR_EXT_blend_logic_op,
-+		IRR_EXT_blend_minmax,
-+		IRR_EXT_blend_subtract,
-+		IRR_EXT_clip_volume_hint,
-+		IRR_EXT_cmyka,
-+		IRR_EXT_color_subtable,
-+		IRR_EXT_compiled_vertex_array,
-+		IRR_EXT_convolution,
-+		IRR_EXT_coordinate_frame,
-+		IRR_EXT_copy_texture,
-+		IRR_EXT_cull_vertex,
-+		IRR_EXT_depth_bounds_test,
-+		IRR_EXT_direct_state_access,
-+		IRR_EXT_draw_buffers2,
-+		IRR_EXT_draw_instanced,
-+		IRR_EXT_draw_range_elements,
-+		IRR_EXT_fog_coord,
-+		IRR_EXT_framebuffer_blit,
-+		IRR_EXT_framebuffer_multisample,
-+		IRR_EXT_framebuffer_multisample_blit_scaled,
-+		IRR_EXT_framebuffer_object,
-+		IRR_EXT_framebuffer_sRGB,
-+		IRR_EXT_geometry_shader4,
-+		IRR_EXT_gpu_program_parameters,
-+		IRR_EXT_gpu_shader4,
-+		IRR_EXT_histogram,
-+		IRR_EXT_index_array_formats,
-+		IRR_EXT_index_func,
-+		IRR_EXT_index_material,
-+		IRR_EXT_index_texture,
-+		IRR_EXT_light_texture,
-+		IRR_EXT_misc_attribute,
-+		IRR_EXT_multi_draw_arrays,
-+		IRR_EXT_multisample,
-+		IRR_EXT_packed_depth_stencil,
-+		IRR_EXT_packed_float,
-+		IRR_EXT_packed_pixels,
-+		IRR_EXT_paletted_texture,
-+		IRR_EXT_pixel_buffer_object,
-+		IRR_EXT_pixel_transform,
-+		IRR_EXT_pixel_transform_color_table,
-+		IRR_EXT_point_parameters,
-+		IRR_EXT_polygon_offset,
-+		IRR_EXT_provoking_vertex,
-+		IRR_EXT_rescale_normal,
-+		IRR_EXT_secondary_color,
-+		IRR_EXT_separate_shader_objects,
-+		IRR_EXT_separate_specular_color,
-+		IRR_EXT_shader_image_load_store,
-+		IRR_EXT_shadow_funcs,
-+		IRR_EXT_shared_texture_palette,
-+		IRR_EXT_stencil_clear_tag,
-+		IRR_EXT_stencil_two_side,
-+		IRR_EXT_stencil_wrap,
-+		IRR_EXT_subtexture,
-+		IRR_EXT_texture,
-+		IRR_EXT_texture3D,
-+		IRR_EXT_texture_array,
-+		IRR_EXT_texture_buffer_object,
-+		IRR_EXT_texture_compression_latc,
-+		IRR_EXT_texture_compression_rgtc,
-+		IRR_EXT_texture_compression_s3tc,
-+		IRR_EXT_texture_cube_map,
-+		IRR_EXT_texture_env_add,
-+		IRR_EXT_texture_env_combine,
-+		IRR_EXT_texture_env_dot3,
-+		IRR_EXT_texture_filter_anisotropic,
-+		IRR_EXT_texture_integer,
-+		IRR_EXT_texture_lod_bias,
-+		IRR_EXT_texture_mirror_clamp,
-+		IRR_EXT_texture_object,
-+		IRR_EXT_texture_perturb_normal,
-+		IRR_EXT_texture_shared_exponent,
-+		IRR_EXT_texture_snorm,
-+		IRR_EXT_texture_sRGB,
-+		IRR_EXT_texture_sRGB_decode,
-+		IRR_EXT_texture_swizzle,
-+		IRR_EXT_timer_query,
-+		IRR_EXT_transform_feedback,
-+		IRR_EXT_vertex_array,
-+		IRR_EXT_vertex_array_bgra,
-+		IRR_EXT_vertex_attrib_64bit,
-+		IRR_EXT_vertex_shader,
-+		IRR_EXT_vertex_weighting,
-+		IRR_EXT_x11_sync_object,
-+		IRR_FfdMaskSGIX,
-+		IRR_GREMEDY_frame_terminator,
-+		IRR_GREMEDY_string_marker,
-+		IRR_HP_convolution_border_modes,
-+		IRR_HP_image_transform,
-+		IRR_HP_occlusion_test,
-+		IRR_HP_texture_lighting,
-+		IRR_IBM_cull_vertex,
-+		IRR_IBM_multimode_draw_arrays,
-+		IRR_IBM_rasterpos_clip,
-+		IRR_IBM_texture_mirrored_repeat,
-+		IRR_IBM_vertex_array_lists,
-+		IRR_INGR_blend_func_separate,
-+		IRR_INGR_color_clamp,
-+		IRR_INGR_interlace_read,
-+		IRR_INGR_palette_buffer,
-+		IRR_INTEL_parallel_arrays,
-+		IRR_INTEL_texture_scissor,
-+		IRR_MESA_pack_invert,
-+		IRR_MESA_resize_buffers,
-+		IRR_MESA_window_pos,
-+		IRR_MESAX_texture_stack,
-+		IRR_MESA_ycbcr_texture,
-+		IRR_NV_blend_square,
-+		IRR_NV_conditional_render,
-+		IRR_NV_copy_depth_to_color,
-+		IRR_NV_copy_image,
-+		IRR_NV_depth_buffer_float,
-+		IRR_NV_depth_clamp,
-+		IRR_NV_evaluators,
-+		IRR_NV_explicit_multisample,
-+		IRR_NV_fence,
-+		IRR_NV_float_buffer,
-+		IRR_NV_fog_distance,
-+		IRR_NV_fragment_program,
-+		IRR_NV_fragment_program2,
-+		IRR_NV_fragment_program4,
-+		IRR_NV_fragment_program_option,
-+		IRR_NV_framebuffer_multisample_coverage,
-+		IRR_NV_geometry_program4,
-+		IRR_NV_geometry_shader4,
-+		IRR_NV_gpu_program4,
-+		IRR_NV_gpu_program5,
-+		IRR_NV_gpu_shader5,
-+		IRR_NV_half_float,
-+		IRR_NV_light_max_exponent,
-+		IRR_NV_multisample_coverage,
-+		IRR_NV_multisample_filter_hint,
-+		IRR_NV_occlusion_query,
-+		IRR_NV_packed_depth_stencil,
-+		IRR_NV_parameter_buffer_object,
-+		IRR_NV_parameter_buffer_object2,
-+		IRR_NV_pixel_data_range,
-+		IRR_NV_point_sprite,
-+		IRR_NV_present_video,
-+		IRR_NV_primitive_restart,
-+		IRR_NV_register_combiners,
-+		IRR_NV_register_combiners2,
-+		IRR_NV_shader_buffer_load,
-+		IRR_NV_shader_buffer_store,
-+		IRR_NV_tessellation_program5,
-+		IRR_NV_texgen_emboss,
-+		IRR_NV_texgen_reflection,
-+		IRR_NV_texture_barrier,
-+		IRR_NV_texture_compression_vtc,
-+		IRR_NV_texture_env_combine4,
-+		IRR_NV_texture_expand_normal,
-+		IRR_NV_texture_multisample,
-+		IRR_NV_texture_rectangle,
-+		IRR_NV_texture_shader,
-+		IRR_NV_texture_shader2,
-+		IRR_NV_texture_shader3,
-+		IRR_NV_transform_feedback,
-+		IRR_NV_transform_feedback2,
-+		IRR_NV_vdpau_interop,
-+		IRR_NV_vertex_array_range,
-+		IRR_NV_vertex_array_range2,
-+		IRR_NV_vertex_attrib_integer_64bit,
-+		IRR_NV_vertex_buffer_unified_memory,
-+		IRR_NV_vertex_program,
-+		IRR_NV_vertex_program1_1,
-+		IRR_NV_vertex_program2,
-+		IRR_NV_vertex_program2_option,
-+		IRR_NV_vertex_program3,
-+		IRR_NV_vertex_program4,
-+		IRR_NV_video_capture,
-+		IRR_OES_read_format,
-+		IRR_OML_interlace,
-+		IRR_OML_resample,
-+		IRR_OML_subsample,
-+		IRR_PGI_misc_hints,
-+		IRR_PGI_vertex_hints,
-+		IRR_REND_screen_coordinates,
-+		IRR_S3_s3tc,
-+		IRR_SGI_color_matrix,
-+		IRR_SGI_color_table,
-+		IRR_SGI_depth_pass_instrument,
-+		IRR_SGIS_detail_texture,
-+		IRR_SGIS_fog_function,
-+		IRR_SGIS_generate_mipmap,
-+		IRR_SGIS_multisample,
-+		IRR_SGIS_pixel_texture,
-+		IRR_SGIS_point_line_texgen,
-+		IRR_SGIS_point_parameters,
-+		IRR_SGIS_sharpen_texture,
-+		IRR_SGIS_texture4D,
-+		IRR_SGIS_texture_border_clamp,
-+		IRR_SGIS_texture_color_mask,
-+		IRR_SGIS_texture_edge_clamp,
-+		IRR_SGIS_texture_filter4,
-+		IRR_SGIS_texture_lod,
-+		IRR_SGIS_texture_select,
-+		IRR_SGI_texture_color_table,
-+		IRR_SGIX_async,
-+		IRR_SGIX_async_histogram,
-+		IRR_SGIX_async_pixel,
-+		IRR_SGIX_blend_alpha_minmax,
-+		IRR_SGIX_calligraphic_fragment,
-+		IRR_SGIX_clipmap,
-+		IRR_SGIX_convolution_accuracy,
-+		IRR_SGIX_depth_pass_instrument,
-+		IRR_SGIX_depth_texture,
-+		IRR_SGIX_flush_raster,
-+		IRR_SGIX_fog_offset,
-+		IRR_SGIX_fog_scale,
-+		IRR_SGIX_fragment_lighting,
-+		IRR_SGIX_framezoom,
-+		IRR_SGIX_igloo_interface,
-+		IRR_SGIX_impact_pixel_texture,
-+		IRR_SGIX_instruments,
-+		IRR_SGIX_interlace,
-+		IRR_SGIX_ir_instrument1,
-+		IRR_SGIX_list_priority,
-+		IRR_SGIX_pixel_texture,
-+		IRR_SGIX_pixel_tiles,
-+		IRR_SGIX_polynomial_ffd,
-+		IRR_SGIX_reference_plane,
-+		IRR_SGIX_resample,
-+		IRR_SGIX_scalebias_hint,
-+		IRR_SGIX_shadow,
-+		IRR_SGIX_shadow_ambient,
-+		IRR_SGIX_sprite,
-+		IRR_SGIX_subsample,
-+		IRR_SGIX_tag_sample_buffer,
-+		IRR_SGIX_texture_add_env,
-+		IRR_SGIX_texture_coordinate_clamp,
-+		IRR_SGIX_texture_lod_bias,
-+		IRR_SGIX_texture_multi_buffer,
-+		IRR_SGIX_texture_scale_bias,
-+		IRR_SGIX_texture_select,
-+		IRR_SGIX_vertex_preclip,
-+		IRR_SGIX_ycrcb,
-+		IRR_SGIX_ycrcba,
-+		IRR_SGIX_ycrcb_subsample,
-+		IRR_SUN_convolution_border_modes,
-+		IRR_SUN_global_alpha,
-+		IRR_SUN_mesh_array,
-+		IRR_SUN_slice_accum,
-+		IRR_SUN_triangle_list,
-+		IRR_SUN_vertex,
-+		IRR_SUNX_constant_data,
-+		IRR_WIN_phong_shading,
-+		IRR_WIN_specular_fog,
-+		IRR_NVX_gpu_memory_info,
-+		IRR_OpenGL_Feature_Count
-+	};
-+
-+
-+	// constructor
-+	COpenGLExtensionHandler();
-+
-+	// deferred initialization
-+	void initExtensions(bool stencilBuffer);
-+
-+	//! queries the features of the driver, returns true if feature is available
-+	bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const;
-+
-+	//! queries the features of the driver, returns true if feature is available
-+	bool queryOpenGLFeature(EOpenGLFeatures feature) const
-+	{
-+	  if (COpenGLExtensionHandler::IRR_EXT_packed_depth_stencil)
-+		 return true;
-+		return FeatureAvailable[feature];
-+	}
-+
-+	//! show all features with availablity
-+	void dump() const;
-+
-+	void dumpFramebufferFormats() const;
-+
-+	// Some variables for properties
-+	bool StencilBuffer;
-+	bool MultiTextureExtension;
-+	bool TextureCompressionExtension;
-+
-+	// Some non-boolean properties
-+	//! Maxmimum texture layers supported by the fixed pipeline
-+	u8 MaxSupportedTextures;
-+	//! Maxmimum texture layers supported by the engine
-+	u8 MaxTextureUnits;
-+	//! Maximum hardware lights supported
-+	u8 MaxLights;
-+	//! Maximal Anisotropy
-+	u8 MaxAnisotropy;
-+	//! Number of user clipplanes
-+	u8 MaxUserClipPlanes;
-+	//! Number of auxiliary buffers
-+	u8 MaxAuxBuffers;
-+	//! Number of rendertargets available as MRTs
-+	u8 MaxMultipleRenderTargets;
-+	//! Optimal number of indices per meshbuffer
-+	u32 MaxIndices;
-+	//! Maximal texture dimension
-+	u32 MaxTextureSize;
-+	//! Maximal vertices handled by geometry shaders
-+	u32 MaxGeometryVerticesOut;
-+	//! Maximal LOD Bias
-+	f32 MaxTextureLODBias;
-+	//! Minimal and maximal supported thickness for lines without smoothing
-+	GLfloat DimAliasedLine[2];
-+	//! Minimal and maximal supported thickness for points without smoothing
-+	GLfloat DimAliasedPoint[2];
-+	//! Minimal and maximal supported thickness for lines with smoothing
-+	GLfloat DimSmoothedLine[2];
-+	//! Minimal and maximal supported thickness for points with smoothing
-+	GLfloat DimSmoothedPoint[2];
-+
-+	//! OpenGL version as Integer: 100*Major+Minor, i.e. 2.1 becomes 201
-+	u16 Version;
-+	//! GLSL version as Integer: 100*Major+Minor
-+	u16 ShaderLanguageVersion;
-+
-+	bool OcclusionQuerySupport;
-+
-+	// public access to the (loaded) extensions.
-+	// general functions
-+	void extGlActiveTexture(GLenum texture);
-+	void extGlClientActiveTexture(GLenum texture);
-+	void extGlPointParameterf(GLint loc, GLfloat f);
-+	void extGlPointParameterfv(GLint loc, const GLfloat *v);
-+	void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
-+	void extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
-+	void extGlCompressedTexImage2D(GLenum target, GLint level,
-+		GLenum internalformat, GLsizei width, GLsizei height,
-+		GLint border, GLsizei imageSize, const void* data);
-+
-+	// shader programming
-+	void extGlGenPrograms(GLsizei n, GLuint *programs);
-+	void extGlBindProgram(GLenum target, GLuint program);
-+	void extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
-+	void extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string);
-+	void extGlDeletePrograms(GLsizei n, const GLuint *programs);
-+	void extGlProgramLocalParameter4fv(GLenum, GLuint, const GLfloat *);
-+	GLhandleARB extGlCreateShaderObject(GLenum shaderType);
-+	GLuint extGlCreateShader(GLenum shaderType);
-+	// note: Due to the type confusion between shader_objects and OpenGL 2.0
-+	// we have to add the ARB extension for proper method definitions in case
-+	// that handleARB and uint are the same type
-+	void extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
-+	void extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings);
-+	// note: Due to the type confusion between shader_objects and OpenGL 2.0
-+	// we have to add the ARB extension for proper method definitions in case
-+	// that handleARB and uint are the same type
-+	void extGlCompileShaderARB(GLhandleARB shader);
-+	void extGlCompileShader(GLuint shader);
-+	GLhandleARB extGlCreateProgramObject(void);
-+	GLuint extGlCreateProgram(void);
-+	void extGlAttachObject(GLhandleARB program, GLhandleARB shader);
-+	void extGlAttachShader(GLuint program, GLuint shader);
-+	void extGlLinkProgramARB(GLhandleARB program);
-+	// note: Due to the type confusion between shader_objects and OpenGL 2.0
-+	// we have to add the ARB extension for proper method definitions in case
-+	// that handleARB and uint are the same type
-+	void extGlLinkProgram(GLuint program);
-+	void extGlUseProgramObject(GLhandleARB prog);
-+	void extGlUseProgram(GLuint prog);
-+	void extGlDeleteObject(GLhandleARB object);
-+	void extGlDeleteProgram(GLuint object);
-+	void extGlDeleteShader(GLuint shader);
-+	void extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
-+	void extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders);
-+	void extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
-+	void extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
-+	void extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
-+	void extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param);
-+	void extGlGetShaderiv(GLuint shader, GLenum type, GLint *param);
-+	void extGlGetProgramiv(GLuint program, GLenum type, GLint *param);
-+	GLint extGlGetUniformLocationARB(GLhandleARB program, const char *name);
-+	GLint extGlGetUniformLocation(GLuint program, const char *name);
-+	void extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v);
-+	void extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v);
-+	void extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v);
-+	void extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v);
-+	void extGlUniform1bv(GLint loc, GLsizei count, const bool *v);
-+	void extGlUniform2bv(GLint loc, GLsizei count, const bool *v);
-+	void extGlUniform3bv(GLint loc, GLsizei count, const bool *v);
-+	void extGlUniform4bv(GLint loc, GLsizei count, const bool *v);
-+	void extGlUniform1iv(GLint loc, GLsizei count, const GLint *v);
-+	void extGlUniform2iv(GLint loc, GLsizei count, const GLint *v);
-+	void extGlUniform3iv(GLint loc, GLsizei count, const GLint *v);
-+	void extGlUniform4iv(GLint loc, GLsizei count, const GLint *v);
-+	void extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
-+	void extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
-+	void extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
-+	void extGlGetActiveUniformARB(GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
-+	void extGlGetActiveUniform(GLuint program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
-+
-+	// framebuffer objects
-+	void extGlBindFramebuffer(GLenum target, GLuint framebuffer);
-+	void extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers);
-+	void extGlGenFramebuffers(GLsizei n, GLuint *framebuffers);
-+	GLenum extGlCheckFramebufferStatus(GLenum target);
-+	void extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-+	void extGlBindRenderbuffer(GLenum target, GLuint renderbuffer);
-+	void extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers);
-+	void extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers);
-+	void extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-+	void extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-+	void extGlGenerateMipmap(GLenum target);
-+	void extGlActiveStencilFace(GLenum face);
-+	void extGlDrawBuffers(GLsizei n, const GLenum *bufs);
-+
-+	// vertex buffer object
-+	void extGlGenBuffers(GLsizei n, GLuint *buffers);
-+	void extGlBindBuffer(GLenum target, GLuint buffer);
-+	void extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
-+	void extGlDeleteBuffers(GLsizei n, const GLuint *buffers);
-+	void extGlBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
-+	void extGlGetBufferSubData (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
-+	void *extGlMapBuffer (GLenum target, GLenum access);
-+	GLboolean extGlUnmapBuffer (GLenum target);
-+	GLboolean extGlIsBuffer (GLuint buffer);
-+	void extGlGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
-+	void extGlGetBufferPointerv (GLenum target, GLenum pname, GLvoid **params);
-+	void extGlProvokingVertex(GLenum mode);
-+	void extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
-+	void extGlEnableIndexed(GLenum target, GLuint index);
-+	void extGlDisableIndexed(GLenum target, GLuint index);
-+	void extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst);
-+	void extGlBlendEquationIndexed(GLuint buf, GLenum mode);
-+	void extGlProgramParameteri(GLhandleARB program, GLenum pname, GLint value);
-+
-+	// occlusion query
-+	void extGlGenQueries(GLsizei n, GLuint *ids);
-+	void extGlDeleteQueries(GLsizei n, const GLuint *ids);
-+	GLboolean extGlIsQuery(GLuint id);
-+	void extGlBeginQuery(GLenum target, GLuint id);
-+	void extGlEndQuery(GLenum target);
-+	void extGlGetQueryiv(GLenum target, GLenum pname, GLint *params);
-+	void extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params);
-+	void extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
-+
-+	// generic vsync setting method for several extensions
-+	void extGlSwapInterval(int interval);
-+
-+	// blend operations
-+	void extGlBlendEquation(GLenum mode);
-+
-+	// the global feature array
-+	bool FeatureAvailable[IRR_OpenGL_Feature_Count];
-+
-+	protected:
-+	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+		PFNGLACTIVETEXTUREARBPROC pGlActiveTextureARB;
-+		PFNGLCLIENTACTIVETEXTUREARBPROC	pGlClientActiveTextureARB;
-+		PFNGLGENPROGRAMSARBPROC pGlGenProgramsARB;
-+		PFNGLGENPROGRAMSNVPROC pGlGenProgramsNV;
-+		PFNGLBINDPROGRAMARBPROC pGlBindProgramARB;
-+		PFNGLBINDPROGRAMNVPROC pGlBindProgramNV;
-+		PFNGLDELETEPROGRAMSARBPROC pGlDeleteProgramsARB;
-+		PFNGLDELETEPROGRAMSNVPROC pGlDeleteProgramsNV;
-+		PFNGLPROGRAMSTRINGARBPROC pGlProgramStringARB;
-+		PFNGLLOADPROGRAMNVPROC pGlLoadProgramNV;
-+		PFNGLPROGRAMLOCALPARAMETER4FVARBPROC pGlProgramLocalParameter4fvARB;
-+		PFNGLCREATESHADEROBJECTARBPROC pGlCreateShaderObjectARB;
-+		PFNGLSHADERSOURCEARBPROC pGlShaderSourceARB;
-+		PFNGLCOMPILESHADERARBPROC pGlCompileShaderARB;
-+		PFNGLCREATEPROGRAMOBJECTARBPROC pGlCreateProgramObjectARB;
-+		PFNGLATTACHOBJECTARBPROC pGlAttachObjectARB;
-+		PFNGLLINKPROGRAMARBPROC pGlLinkProgramARB;
-+		PFNGLUSEPROGRAMOBJECTARBPROC pGlUseProgramObjectARB;
-+		PFNGLDELETEOBJECTARBPROC pGlDeleteObjectARB;
-+		PFNGLCREATEPROGRAMPROC pGlCreateProgram;
-+		PFNGLUSEPROGRAMPROC pGlUseProgram;
-+		PFNGLDELETEPROGRAMPROC pGlDeleteProgram;
-+		PFNGLDELETESHADERPROC pGlDeleteShader;
-+		PFNGLGETATTACHEDOBJECTSARBPROC pGlGetAttachedObjectsARB;
-+		PFNGLGETATTACHEDSHADERSPROC pGlGetAttachedShaders;
-+		PFNGLCREATESHADERPROC pGlCreateShader;
-+		PFNGLSHADERSOURCEPROC pGlShaderSource;
-+		PFNGLCOMPILESHADERPROC pGlCompileShader;
-+		PFNGLATTACHSHADERPROC pGlAttachShader;
-+		PFNGLLINKPROGRAMPROC pGlLinkProgram;
-+		PFNGLGETINFOLOGARBPROC pGlGetInfoLogARB;
-+		PFNGLGETSHADERINFOLOGPROC pGlGetShaderInfoLog;
-+		PFNGLGETPROGRAMINFOLOGPROC pGlGetProgramInfoLog;
-+		PFNGLGETOBJECTPARAMETERIVARBPROC pGlGetObjectParameterivARB;
-+		PFNGLGETSHADERIVPROC pGlGetShaderiv;
-+		PFNGLGETSHADERIVPROC pGlGetProgramiv;
-+		PFNGLGETUNIFORMLOCATIONARBPROC pGlGetUniformLocationARB;
-+		PFNGLGETUNIFORMLOCATIONPROC pGlGetUniformLocation;
-+		PFNGLUNIFORM1FVARBPROC pGlUniform1fvARB;
-+		PFNGLUNIFORM2FVARBPROC pGlUniform2fvARB;
-+		PFNGLUNIFORM3FVARBPROC pGlUniform3fvARB;
-+		PFNGLUNIFORM4FVARBPROC pGlUniform4fvARB;
-+		PFNGLUNIFORM1IVARBPROC pGlUniform1ivARB;
-+		PFNGLUNIFORM2IVARBPROC pGlUniform2ivARB;
-+		PFNGLUNIFORM3IVARBPROC pGlUniform3ivARB;
-+		PFNGLUNIFORM4IVARBPROC pGlUniform4ivARB;
-+		PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;
-+		PFNGLUNIFORMMATRIX3FVARBPROC pGlUniformMatrix3fvARB;
-+		PFNGLUNIFORMMATRIX4FVARBPROC pGlUniformMatrix4fvARB;
-+		PFNGLGETACTIVEUNIFORMARBPROC pGlGetActiveUniformARB;
-+		PFNGLGETACTIVEUNIFORMPROC pGlGetActiveUniform;
-+		PFNGLPOINTPARAMETERFARBPROC  pGlPointParameterfARB;
-+		PFNGLPOINTPARAMETERFVARBPROC pGlPointParameterfvARB;
-+		PFNGLSTENCILFUNCSEPARATEPROC pGlStencilFuncSeparate;
-+		PFNGLSTENCILOPSEPARATEPROC pGlStencilOpSeparate;
-+		PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
-+		PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
-+		PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
-+		// ARB framebuffer object
-+		PFNGLBINDFRAMEBUFFERPROC pGlBindFramebuffer;
-+		PFNGLDELETEFRAMEBUFFERSPROC pGlDeleteFramebuffers;
-+		PFNGLGENFRAMEBUFFERSPROC pGlGenFramebuffers;
-+		PFNGLCHECKFRAMEBUFFERSTATUSPROC pGlCheckFramebufferStatus;
-+		PFNGLFRAMEBUFFERTEXTURE2DPROC pGlFramebufferTexture2D;
-+		PFNGLBINDRENDERBUFFERPROC pGlBindRenderbuffer;
-+		PFNGLDELETERENDERBUFFERSPROC pGlDeleteRenderbuffers;
-+		PFNGLGENRENDERBUFFERSPROC pGlGenRenderbuffers;
-+		PFNGLRENDERBUFFERSTORAGEPROC pGlRenderbufferStorage;
-+		PFNGLFRAMEBUFFERRENDERBUFFERPROC pGlFramebufferRenderbuffer;
-+		PFNGLGENERATEMIPMAPPROC pGlGenerateMipmap;
-+		// EXT framebuffer object
-+		PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
-+		PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
-+		PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
-+		PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC pGlCheckFramebufferStatusEXT;
-+		PFNGLFRAMEBUFFERTEXTURE2DEXTPROC pGlFramebufferTexture2DEXT;
-+		PFNGLBINDRENDERBUFFEREXTPROC pGlBindRenderbufferEXT;
-+		PFNGLDELETERENDERBUFFERSEXTPROC pGlDeleteRenderbuffersEXT;
-+		PFNGLGENRENDERBUFFERSEXTPROC pGlGenRenderbuffersEXT;
-+		PFNGLRENDERBUFFERSTORAGEEXTPROC pGlRenderbufferStorageEXT;
-+		PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC pGlFramebufferRenderbufferEXT;
-+		PFNGLGENERATEMIPMAPEXTPROC pGlGenerateMipmapEXT;
-+		PFNGLACTIVESTENCILFACEEXTPROC pGlActiveStencilFaceEXT;
-+		PFNGLDRAWBUFFERSARBPROC pGlDrawBuffersARB;
-+		PFNGLDRAWBUFFERSATIPROC pGlDrawBuffersATI;
-+		PFNGLGENBUFFERSARBPROC pGlGenBuffersARB;
-+		PFNGLBINDBUFFERARBPROC pGlBindBufferARB;
-+		PFNGLBUFFERDATAARBPROC pGlBufferDataARB;
-+		PFNGLDELETEBUFFERSARBPROC pGlDeleteBuffersARB;
-+		PFNGLBUFFERSUBDATAARBPROC pGlBufferSubDataARB;
-+		PFNGLGETBUFFERSUBDATAARBPROC pGlGetBufferSubDataARB;
-+		PFNGLMAPBUFFERARBPROC pGlMapBufferARB;
-+		PFNGLUNMAPBUFFERARBPROC pGlUnmapBufferARB;
-+		PFNGLISBUFFERARBPROC pGlIsBufferARB;
-+		PFNGLGETBUFFERPARAMETERIVARBPROC pGlGetBufferParameterivARB;
-+		PFNGLGETBUFFERPOINTERVARBPROC pGlGetBufferPointervARB;
-+		PFNGLPROVOKINGVERTEXPROC pGlProvokingVertexARB;
-+		PFNGLPROVOKINGVERTEXEXTPROC pGlProvokingVertexEXT;
-+		PFNGLCOLORMASKINDEXEDEXTPROC pGlColorMaskIndexedEXT;
-+		PFNGLENABLEINDEXEDEXTPROC pGlEnableIndexedEXT;
-+		PFNGLDISABLEINDEXEDEXTPROC pGlDisableIndexedEXT;
-+		PFNGLBLENDFUNCINDEXEDAMDPROC pGlBlendFuncIndexedAMD;
-+		PFNGLBLENDFUNCIPROC pGlBlendFunciARB;
-+		PFNGLBLENDEQUATIONINDEXEDAMDPROC pGlBlendEquationIndexedAMD;
-+		PFNGLBLENDEQUATIONIPROC pGlBlendEquationiARB;
-+		PFNGLPROGRAMPARAMETERIARBPROC pGlProgramParameteriARB;
-+		PFNGLPROGRAMPARAMETERIEXTPROC pGlProgramParameteriEXT;
-+		PFNGLGENQUERIESARBPROC pGlGenQueriesARB;
-+		PFNGLDELETEQUERIESARBPROC pGlDeleteQueriesARB;
-+		PFNGLISQUERYARBPROC pGlIsQueryARB;
-+		PFNGLBEGINQUERYARBPROC pGlBeginQueryARB;
-+		PFNGLENDQUERYARBPROC pGlEndQueryARB;
-+		PFNGLGETQUERYIVARBPROC pGlGetQueryivARB;
-+		PFNGLGETQUERYOBJECTIVARBPROC pGlGetQueryObjectivARB;
-+		PFNGLGETQUERYOBJECTUIVARBPROC pGlGetQueryObjectuivARB;
-+		PFNGLGENOCCLUSIONQUERIESNVPROC pGlGenOcclusionQueriesNV;
-+		PFNGLDELETEOCCLUSIONQUERIESNVPROC pGlDeleteOcclusionQueriesNV;
-+		PFNGLISOCCLUSIONQUERYNVPROC pGlIsOcclusionQueryNV;
-+		PFNGLBEGINOCCLUSIONQUERYNVPROC pGlBeginOcclusionQueryNV;
-+		PFNGLENDOCCLUSIONQUERYNVPROC pGlEndOcclusionQueryNV;
-+		PFNGLGETOCCLUSIONQUERYIVNVPROC pGlGetOcclusionQueryivNV;
-+		PFNGLGETOCCLUSIONQUERYUIVNVPROC pGlGetOcclusionQueryuivNV;
-+		PFNGLBLENDEQUATIONEXTPROC pGlBlendEquationEXT;
-+		PFNGLBLENDEQUATIONPROC pGlBlendEquation;
-+		#if defined(WGL_EXT_swap_control)
-+		PFNWGLSWAPINTERVALEXTPROC pWglSwapIntervalEXT;
-+		#endif
-+		#if defined(GLX_SGI_swap_control)
-+		PFNGLXSWAPINTERVALSGIPROC pGlxSwapIntervalSGI;
-+		#endif
-+		#if defined(GLX_EXT_swap_control)
-+		PFNGLXSWAPINTERVALEXTPROC pGlxSwapIntervalEXT;
-+		#endif
-+		#if defined(GLX_MESA_swap_control)
-+		PFNGLXSWAPINTERVALMESAPROC pGlxSwapIntervalMESA;
-+		#endif
-+	#endif
-+};
-+
-+inline void COpenGLExtensionHandler::extGlActiveTexture(GLenum texture)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (MultiTextureExtension && pGlActiveTextureARB)
-+		pGlActiveTextureARB(texture);
-+#else
-+	if (MultiTextureExtension)
-+#ifdef GL_ARB_multitexture
-+		glActiveTextureARB(texture);
-+#else
-+		glActiveTexture(texture);
-+#endif
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlClientActiveTexture(GLenum texture)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (MultiTextureExtension && pGlClientActiveTextureARB)
-+		pGlClientActiveTextureARB(texture);
-+#else
-+	if (MultiTextureExtension)
-+		glClientActiveTextureARB(texture);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGenPrograms(GLsizei n, GLuint *programs)
-+{
-+	if (programs)
-+		memset(programs,0,n*sizeof(GLuint));
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGenProgramsARB)
-+		pGlGenProgramsARB(n, programs);
-+	else if (pGlGenProgramsNV)
-+		pGlGenProgramsNV(n, programs);
-+#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
-+	glGenProgramsARB(n,programs);
-+#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
-+	glGenProgramsNV(n,programs);
-+#else
-+	os::Printer::log("glGenPrograms not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBindProgram(GLenum target, GLuint program)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBindProgramARB)
-+		pGlBindProgramARB(target, program);
-+	else if (pGlBindProgramNV)
-+		pGlBindProgramNV(target, program);
-+#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
-+	glBindProgramARB(target, program);
-+#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
-+	glBindProgramNV(target, program);
-+#else
-+	os::Printer::log("glBindProgram not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlProgramString(GLenum target, GLenum format, GLsizei len, const GLvoid *string)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlProgramStringARB)
-+		pGlProgramStringARB(target, format, len, string);
-+#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
-+	glProgramStringARB(target,format,len,string);
-+#else
-+	os::Printer::log("glProgramString not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlLoadProgram(GLenum target, GLuint id, GLsizei len, const GLubyte *string)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlLoadProgramNV)
-+		pGlLoadProgramNV(target, id, len, string);
-+#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
-+	glLoadProgramNV(target,id,len,string);
-+#else
-+	os::Printer::log("glLoadProgram not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeletePrograms(GLsizei n, const GLuint *programs)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteProgramsARB)
-+		pGlDeleteProgramsARB(n, programs);
-+	else if (pGlDeleteProgramsNV)
-+		pGlDeleteProgramsNV(n, programs);
-+#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
-+	glDeleteProgramsARB(n,programs);
-+#elif defined(GL_NV_vertex_program) || defined(GL_NV_fragment_program)
-+	glDeleteProgramsNV(n,programs);
-+#else
-+	os::Printer::log("glDeletePrograms not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlProgramLocalParameter4fv(GLenum n, GLuint i, const GLfloat *f)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlProgramLocalParameter4fvARB)
-+		pGlProgramLocalParameter4fvARB(n,i,f);
-+#elif defined(GL_ARB_vertex_program) || defined(GL_ARB_fragment_program)
-+	glProgramLocalParameter4fvARB(n,i,f);
-+#else
-+	os::Printer::log("glProgramLocalParameter4fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline GLhandleARB COpenGLExtensionHandler::extGlCreateShaderObject(GLenum shaderType)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCreateShaderObjectARB)
-+		return pGlCreateShaderObjectARB(shaderType);
-+#elif defined(GL_ARB_shader_objects)
-+	return glCreateShaderObjectARB(shaderType);
-+#else
-+	os::Printer::log("glCreateShaderObject not supported", ELL_ERROR);
-+#endif
-+	return 0;
-+}
-+
-+inline GLuint COpenGLExtensionHandler::extGlCreateShader(GLenum shaderType)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCreateShader)
-+		return pGlCreateShader(shaderType);
-+#elif defined(GL_VERSION_2_0)
-+	return glCreateShader(shaderType);
-+#else
-+	os::Printer::log("glCreateShader not supported", ELL_ERROR);
-+#endif
-+	return 0;
-+}
-+
-+inline void COpenGLExtensionHandler::extGlShaderSourceARB(GLhandleARB shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlShaderSourceARB)
-+		pGlShaderSourceARB(shader, numOfStrings, strings, lenOfStrings);
-+#elif defined(GL_ARB_shader_objects)
-+	glShaderSourceARB(shader, numOfStrings, strings, (GLint *)lenOfStrings);
-+#else
-+	os::Printer::log("glShaderSource not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlShaderSource(GLuint shader, GLsizei numOfStrings, const char **strings, const GLint *lenOfStrings)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlShaderSource)
-+		pGlShaderSource(shader, numOfStrings, strings, lenOfStrings);
-+#elif defined(GL_VERSION_2_0)
-+	glShaderSource(shader, numOfStrings, strings, (GLint *)lenOfStrings);
-+#else
-+	os::Printer::log("glShaderSource not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlCompileShaderARB(GLhandleARB shader)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCompileShaderARB)
-+		pGlCompileShaderARB(shader);
-+#elif defined(GL_ARB_shader_objects)
-+	glCompileShaderARB(shader);
-+#else
-+	os::Printer::log("glCompileShader not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlCompileShader(GLuint shader)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCompileShader)
-+		pGlCompileShader(shader);
-+#elif defined(GL_VERSION_2_0)
-+	glCompileShader(shader);
-+#else
-+	os::Printer::log("glCompileShader not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline GLhandleARB COpenGLExtensionHandler::extGlCreateProgramObject(void)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCreateProgramObjectARB)
-+		return pGlCreateProgramObjectARB();
-+#elif defined(GL_ARB_shader_objects)
-+	return glCreateProgramObjectARB();
-+#else
-+	os::Printer::log("glCreateProgramObject not supported", ELL_ERROR);
-+#endif
-+	return 0;
-+}
-+
-+inline GLuint COpenGLExtensionHandler::extGlCreateProgram(void)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCreateProgram)
-+		return pGlCreateProgram();
-+#elif defined(GL_VERSION_2_0)
-+	return glCreateProgram();
-+#else
-+	os::Printer::log("glCreateProgram not supported", ELL_ERROR);
-+#endif
-+	return 0;
-+}
-+
-+inline void COpenGLExtensionHandler::extGlAttachObject(GLhandleARB program, GLhandleARB shader)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlAttachObjectARB)
-+		pGlAttachObjectARB(program, shader);
-+#elif defined(GL_ARB_shader_objects)
-+	glAttachObjectARB(program, shader);
-+#else
-+	os::Printer::log("glAttachObject not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlAttachShader(GLuint program, GLuint shader)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlAttachShader)
-+		pGlAttachShader(program, shader);
-+#elif defined(GL_VERSION_2_0)
-+	glAttachShader(program, shader);
-+#else
-+	os::Printer::log("glAttachShader not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlLinkProgramARB(GLhandleARB program)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlLinkProgramARB)
-+		pGlLinkProgramARB(program);
-+#elif defined(GL_ARB_shader_objects)
-+	glLinkProgramARB(program);
-+#else
-+	os::Printer::log("glLinkProgram not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlLinkProgram(GLuint program)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlLinkProgram)
-+		pGlLinkProgram(program);
-+#elif defined(GL_VERSION_2_0)
-+	glLinkProgram(program);
-+#else
-+	os::Printer::log("glLinkProgram not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUseProgramObject(GLhandleARB prog)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUseProgramObjectARB)
-+		pGlUseProgramObjectARB(prog);
-+#elif defined(GL_ARB_shader_objects)
-+	glUseProgramObjectARB(prog);
-+#else
-+	os::Printer::log("glUseProgramObject not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUseProgram(GLuint prog)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUseProgram)
-+		pGlUseProgram(prog);
-+#elif defined(GL_VERSION_2_0)
-+	glUseProgram(prog);
-+#else
-+	os::Printer::log("glUseProgram not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeleteObject(GLhandleARB object)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteObjectARB)
-+		pGlDeleteObjectARB(object);
-+#elif defined(GL_ARB_shader_objects)
-+	glDeleteObjectARB(object);
-+#else
-+	os::Printer::log("glDeleteObject not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeleteProgram(GLuint object)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteProgram)
-+		pGlDeleteProgram(object);
-+#elif defined(GL_VERSION_2_0)
-+	glDeleteProgram(object);
-+#else
-+	os::Printer::log("glDeleteProgram not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeleteShader(GLuint shader)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteShader)
-+		pGlDeleteShader(shader);
-+#elif defined(GL_VERSION_2_0)
-+	glDeleteShader(shader);
-+#else
-+	os::Printer::log("glDeleteShader not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetAttachedObjects(GLhandleARB program, GLsizei maxcount, GLsizei* count, GLhandleARB* shaders)
-+{
-+	if (count)
-+		*count=0;
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetAttachedObjectsARB)
-+		pGlGetAttachedObjectsARB(program, maxcount, count, shaders);
-+#elif defined(GL_ARB_shader_objects)
-+	glGetAttachedObjectsARB(program, maxcount, count, shaders);
-+#else
-+	os::Printer::log("glGetAttachedObjects not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
-+{
-+	if (count)
-+		*count=0;
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetAttachedShaders)
-+		pGlGetAttachedShaders(program, maxcount, count, shaders);
-+#elif defined(GL_VERSION_2_0)
-+	glGetAttachedShaders(program, maxcount, count, shaders);
-+#else
-+	os::Printer::log("glGetAttachedShaders not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetInfoLog(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog)
-+{
-+	if (length)
-+		*length=0;
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetInfoLogARB)
-+		pGlGetInfoLogARB(object, maxLength, length, infoLog);
-+#elif defined(GL_ARB_shader_objects)
-+	glGetInfoLogARB(object, maxLength, length, infoLog);
-+#else
-+	os::Printer::log("glGetInfoLog not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
-+{
-+	if (length)
-+		*length=0;
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetShaderInfoLog)
-+		pGlGetShaderInfoLog(shader, maxLength, length, infoLog);
-+#elif defined(GL_VERSION_2_0)
-+	glGetShaderInfoLog(shader, maxLength, length, infoLog);
-+#else
-+	os::Printer::log("glGetShaderInfoLog not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
-+{
-+	if (length)
-+		*length=0;
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetProgramInfoLog)
-+		pGlGetProgramInfoLog(program, maxLength, length, infoLog);
-+#elif defined(GL_VERSION_2_0)
-+	glGetProgramInfoLog(program, maxLength, length, infoLog);
-+#else
-+	os::Printer::log("glGetProgramInfoLog not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetObjectParameteriv(GLhandleARB object, GLenum type, GLint *param)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetObjectParameterivARB)
-+		pGlGetObjectParameterivARB(object, type, param);
-+#elif defined(GL_ARB_shader_objects)
-+	glGetObjectParameterivARB(object, type, param);
-+#else
-+	os::Printer::log("glGetObjectParameteriv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetShaderiv(GLuint shader, GLenum type, GLint *param)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetShaderiv)
-+		pGlGetShaderiv(shader, type, param);
-+#elif defined(GL_VERSION_2_0)
-+	glGetShaderiv(shader, type, param);
-+#else
-+	os::Printer::log("glGetShaderiv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetProgramiv(GLuint program, GLenum type, GLint *param)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetProgramiv)
-+		pGlGetProgramiv(program, type, param);
-+#elif defined(GL_VERSION_2_0)
-+	glGetProgramiv(program, type, param);
-+#else
-+	os::Printer::log("glGetProgramiv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline GLint COpenGLExtensionHandler::extGlGetUniformLocationARB(GLhandleARB program, const char *name)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetUniformLocationARB)
-+		return pGlGetUniformLocationARB(program, name);
-+#elif defined(GL_ARB_shader_objects)
-+	return glGetUniformLocationARB(program, name);
-+#else
-+	os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
-+#endif
-+	return 0;
-+}
-+
-+inline GLint COpenGLExtensionHandler::extGlGetUniformLocation(GLuint program, const char *name)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetUniformLocation)
-+		return pGlGetUniformLocation(program, name);
-+#elif defined(GL_VERSION_2_0)
-+	return glGetUniformLocation(program, name);
-+#else
-+	os::Printer::log("glGetUniformLocation not supported", ELL_ERROR);
-+#endif
-+	return 0;
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform1fv(GLint loc, GLsizei count, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform1fvARB)
-+		pGlUniform1fvARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform1fvARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform1fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform2fv(GLint loc, GLsizei count, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform2fvARB)
-+		pGlUniform2fvARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform2fvARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform2fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform3fv(GLint loc, GLsizei count, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform3fvARB)
-+		pGlUniform3fvARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform3fvARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform3fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform4fv(GLint loc, GLsizei count, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform4fvARB)
-+		pGlUniform4fvARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform4fvARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform4fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform1iv(GLint loc, GLsizei count, const GLint *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform1ivARB)
-+		pGlUniform1ivARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform1ivARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform1iv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform2iv(GLint loc, GLsizei count, const GLint *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform2ivARB)
-+		pGlUniform2ivARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform2ivARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform2iv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform3iv(GLint loc, GLsizei count, const GLint *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform3ivARB)
-+		pGlUniform3ivARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform3ivARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform3iv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniform4iv(GLint loc, GLsizei count, const GLint *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniform4ivARB)
-+		pGlUniform4ivARB(loc, count, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniform4ivARB(loc, count, v);
-+#else
-+	os::Printer::log("glUniform4iv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniformMatrix2fvARB)
-+		pGlUniformMatrix2fvARB(loc, count, transpose, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniformMatrix2fvARB(loc, count, transpose, v);
-+#else
-+	os::Printer::log("glUniformMatrix2fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniformMatrix3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniformMatrix3fvARB)
-+		pGlUniformMatrix3fvARB(loc, count, transpose, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniformMatrix3fvARB(loc, count, transpose, v);
-+#else
-+	os::Printer::log("glUniformMatrix3fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUniformMatrix4fvARB)
-+		pGlUniformMatrix4fvARB(loc, count, transpose, v);
-+#elif defined(GL_ARB_shader_objects)
-+	glUniformMatrix4fvARB(loc, count, transpose, v);
-+#else
-+	os::Printer::log("glUniformMatrix4fv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetActiveUniformARB(GLhandleARB program,
-+		GLuint index, GLsizei maxlength, GLsizei *length,
-+		GLint *size, GLenum *type, GLcharARB *name)
-+{
-+	if (length)
-+		*length=0;
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetActiveUniformARB)
-+		pGlGetActiveUniformARB(program, index, maxlength, length, size, type, name);
-+#elif defined(GL_ARB_shader_objects)
-+	glGetActiveUniformARB(program, index, maxlength, length, size, type, name);
-+#else
-+	os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetActiveUniform(GLuint program,
-+		GLuint index, GLsizei maxlength, GLsizei *length,
-+		GLint *size, GLenum *type, GLchar *name)
-+{
-+	if (length)
-+		*length=0;
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetActiveUniform)
-+		pGlGetActiveUniform(program, index, maxlength, length, size, type, name);
-+#elif defined(GL_VERSION_2_0)
-+	glGetActiveUniform(program, index, maxlength, length, size, type, name);
-+#else
-+	os::Printer::log("glGetActiveUniform not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlPointParameterf(GLint loc, GLfloat f)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlPointParameterfARB)
-+		pGlPointParameterfARB(loc, f);
-+#elif defined(GL_ARB_point_parameters)
-+	glPointParameterfARB(loc, f);
-+#else
-+	os::Printer::log("glPointParameterf not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlPointParameterfv(GLint loc, const GLfloat *v)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlPointParameterfvARB)
-+		pGlPointParameterfvARB(loc, v);
-+#elif defined(GL_ARB_point_parameters)
-+	glPointParameterfvARB(loc, v);
-+#else
-+	os::Printer::log("glPointParameterfv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlStencilFuncSeparate)
-+		pGlStencilFuncSeparate(frontfunc, backfunc, ref, mask);
-+	else if (pGlStencilFuncSeparateATI)
-+		pGlStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
-+#elif defined(GL_VERSION_2_0)
-+	glStencilFuncSeparate(frontfunc, backfunc, ref, mask);
-+#elif defined(GL_ATI_separate_stencil)
-+	glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
-+#else
-+	os::Printer::log("glStencilFuncSeparate not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlStencilOpSeparate)
-+		pGlStencilOpSeparate(face, fail, zfail, zpass);
-+	else if (pGlStencilOpSeparateATI)
-+		pGlStencilOpSeparateATI(face, fail, zfail, zpass);
-+#elif defined(GL_VERSION_2_0)
-+	glStencilOpSeparate(face, fail, zfail, zpass);
-+#elif defined(GL_ATI_separate_stencil)
-+	glStencilOpSeparateATI(face, fail, zfail, zpass);
-+#else
-+	os::Printer::log("glStencilOpSeparate not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width,
-+		GLsizei height, GLint border, GLsizei imageSize, const void* data)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCompressedTexImage2D)
-+		pGlCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
-+#elif defined(GL_ARB_texture_compression)
-+	glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
-+#else
-+	os::Printer::log("glCompressedTexImage2D not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBindFramebuffer(GLenum target, GLuint framebuffer)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBindFramebuffer)
-+		pGlBindFramebuffer(target, framebuffer);
-+	else if (pGlBindFramebufferEXT)
-+		pGlBindFramebufferEXT(target, framebuffer);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glBindFramebuffer(target, framebuffer);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glBindFramebufferEXT(target, framebuffer);
-+#else
-+	os::Printer::log("glBindFramebuffer not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteFramebuffers)
-+		pGlDeleteFramebuffers(n, framebuffers);
-+	else if (pGlDeleteFramebuffersEXT)
-+		pGlDeleteFramebuffersEXT(n, framebuffers);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glDeleteFramebuffers(n, framebuffers);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glDeleteFramebuffersEXT(n, framebuffers);
-+#else
-+	os::Printer::log("glDeleteFramebuffers not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
-+{
-+	if (framebuffers)
-+		memset(framebuffers,0,n*sizeof(GLuint));
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGenFramebuffers)
-+		pGlGenFramebuffers(n, framebuffers);
-+	else if (pGlGenFramebuffersEXT)
-+		pGlGenFramebuffersEXT(n, framebuffers);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glGenFramebuffers(n, framebuffers);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glGenFramebuffersEXT(n, framebuffers);
-+#else
-+	os::Printer::log("glGenFramebuffers not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatus(GLenum target)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlCheckFramebufferStatus)
-+		return pGlCheckFramebufferStatus(target);
-+	else if (pGlCheckFramebufferStatusEXT)
-+		return pGlCheckFramebufferStatusEXT(target);
-+	else
-+		return 0;
-+#elif defined(GL_ARB_framebuffer_object)
-+	return glCheckFramebufferStatus(target);
-+#elif defined(GL_EXT_framebuffer_object)
-+	return glCheckFramebufferStatusEXT(target);
-+#else
-+	os::Printer::log("glCheckFramebufferStatus not supported", ELL_ERROR);
-+	return 0;
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlFramebufferTexture2D)
-+		pGlFramebufferTexture2D(target, attachment, textarget, texture, level);
-+	else if (pGlFramebufferTexture2DEXT)
-+		pGlFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glFramebufferTexture2D(target, attachment, textarget, texture, level);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
-+#else
-+	os::Printer::log("glFramebufferTexture2D not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBindRenderbuffer(GLenum target, GLuint renderbuffer)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBindRenderbuffer)
-+		pGlBindRenderbuffer(target, renderbuffer);
-+	else if (pGlBindRenderbufferEXT)
-+		pGlBindRenderbufferEXT(target, renderbuffer);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glBindRenderbuffer(target, renderbuffer);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glBindRenderbufferEXT(target, renderbuffer);
-+#else
-+	os::Printer::log("glBindRenderbuffer not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteRenderbuffers)
-+		pGlDeleteRenderbuffers(n, renderbuffers);
-+	else if (pGlDeleteRenderbuffersEXT)
-+		pGlDeleteRenderbuffersEXT(n, renderbuffers);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glDeleteRenderbuffers(n, renderbuffers);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glDeleteRenderbuffersEXT(n, renderbuffers);
-+#else
-+	os::Printer::log("glDeleteRenderbuffers not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
-+{
-+	if (renderbuffers)
-+		memset(renderbuffers,0,n*sizeof(GLuint));
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGenRenderbuffers)
-+		pGlGenRenderbuffers(n, renderbuffers);
-+	else if (pGlGenRenderbuffersEXT)
-+		pGlGenRenderbuffersEXT(n, renderbuffers);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glGenRenderbuffers(n, renderbuffers);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glGenRenderbuffersEXT(n, renderbuffers);
-+#else
-+	os::Printer::log("glGenRenderbuffers not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlRenderbufferStorage)
-+		pGlRenderbufferStorage(target, internalformat, width, height);
-+	else if (pGlRenderbufferStorageEXT)
-+		pGlRenderbufferStorageEXT(target, internalformat, width, height);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glRenderbufferStorage(target, internalformat, width, height);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glRenderbufferStorageEXT(target, internalformat, width, height);
-+#else
-+	os::Printer::log("glRenderbufferStorage not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlFramebufferRenderbuffer)
-+		pGlFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
-+	else if (pGlFramebufferRenderbufferEXT)
-+		pGlFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
-+#else
-+	os::Printer::log("glFramebufferRenderbuffer not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGenerateMipmap(GLenum target)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGenerateMipmap)
-+		pGlGenerateMipmap(target);
-+	else if (pGlGenerateMipmapEXT)
-+		pGlGenerateMipmapEXT(target);
-+#elif defined(GL_ARB_framebuffer_object)
-+	glGenerateMipmap(target);
-+#elif defined(GL_EXT_framebuffer_object)
-+	glGenerateMipmapEXT(target);
-+#else
-+	os::Printer::log("glGenerateMipmap not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlActiveStencilFace(GLenum face)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlActiveStencilFaceEXT)
-+		pGlActiveStencilFaceEXT(face);
-+#elif defined(GL_EXT_stencil_two_side)
-+	glActiveStencilFaceEXT(face);
-+#else
-+	os::Printer::log("glActiveStencilFace not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDrawBuffers(GLsizei n, const GLenum *bufs)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDrawBuffersARB)
-+		pGlDrawBuffersARB(n, bufs);
-+	else if (pGlDrawBuffersATI)
-+		pGlDrawBuffersATI(n, bufs);
-+#elif defined(GL_ARB_draw_buffers)
-+	glDrawBuffersARB(n, bufs);
-+#elif defined(GL_ATI_draw_buffers)
-+	glDrawBuffersATI(n, bufs);
-+#else
-+	os::Printer::log("glDrawBuffers not supported", ELL_ERROR);
-+#endif
-+}
-+
-+
-+inline void COpenGLExtensionHandler::extGlGenBuffers(GLsizei n, GLuint *buffers)
-+{
-+	if (buffers)
-+		memset(buffers,0,n*sizeof(GLuint));
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGenBuffersARB)
-+		pGlGenBuffersARB(n, buffers);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glGenBuffers(n, buffers);
-+#else
-+	os::Printer::log("glGenBuffers not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBindBuffer(GLenum target, GLuint buffer)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBindBufferARB)
-+		pGlBindBufferARB(target, buffer);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glBindBuffer(target, buffer);
-+#else
-+	os::Printer::log("glBindBuffer not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBufferData(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBufferDataARB)
-+		pGlBufferDataARB(target, size, data, usage);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glBufferData(target, size, data, usage);
-+#else
-+	os::Printer::log("glBufferData not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeleteBuffers(GLsizei n, const GLuint *buffers)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteBuffersARB)
-+		pGlDeleteBuffersARB(n, buffers);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glDeleteBuffers(n, buffers);
-+#else
-+	os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBufferSubDataARB)
-+		pGlBufferSubDataARB(target, offset, size, data);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glBufferSubData(target, offset, size, data);
-+#else
-+	os::Printer::log("glBufferSubData not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetBufferSubData(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetBufferSubDataARB)
-+		pGlGetBufferSubDataARB(target, offset, size, data);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glGetBufferSubData(target, offset, size, data);
-+#else
-+	os::Printer::log("glGetBufferSubData not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void *COpenGLExtensionHandler::extGlMapBuffer(GLenum target, GLenum access)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlMapBufferARB)
-+		return pGlMapBufferARB(target, access);
-+	return 0;
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	return glMapBuffer(target, access);
-+#else
-+	os::Printer::log("glMapBuffer not supported", ELL_ERROR);
-+	return 0;
-+#endif
-+}
-+
-+inline GLboolean COpenGLExtensionHandler::extGlUnmapBuffer(GLenum target)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlUnmapBufferARB)
-+		return pGlUnmapBufferARB(target);
-+	return false;
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	return glUnmapBuffer(target);
-+#else
-+	os::Printer::log("glUnmapBuffer not supported", ELL_ERROR);
-+	return false;
-+#endif
-+}
-+
-+inline GLboolean COpenGLExtensionHandler::extGlIsBuffer(GLuint buffer)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlIsBufferARB)
-+		return pGlIsBufferARB(buffer);
-+	return false;
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	return glIsBuffer(buffer);
-+#else
-+	os::Printer::log("glDeleteBuffers not supported", ELL_ERROR);
-+	return false;
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetBufferParameterivARB)
-+		pGlGetBufferParameterivARB(target, pname, params);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glGetBufferParameteriv(target, pname, params);
-+#else
-+	os::Printer::log("glGetBufferParameteriv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetBufferPointerv(GLenum target, GLenum pname, GLvoid **params)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetBufferPointervARB)
-+		pGlGetBufferPointervARB(target, pname, params);
-+#elif defined(GL_ARB_vertex_buffer_object)
-+	glGetBufferPointerv(target, pname, params);
-+#else
-+	os::Printer::log("glGetBufferPointerv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+
-+inline void COpenGLExtensionHandler::extGlProvokingVertex(GLenum mode)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (FeatureAvailable[IRR_ARB_provoking_vertex] && pGlProvokingVertexARB)
-+		pGlProvokingVertexARB(mode);
-+	else if (FeatureAvailable[IRR_EXT_provoking_vertex] && pGlProvokingVertexEXT)
-+		pGlProvokingVertexEXT(mode);
-+#elif defined(GL_ARB_provoking_vertex)
-+	glProvokingVertex(mode);
-+#elif defined(GL_EXT_provoking_vertex)
-+	glProvokingVertexEXT(mode);
-+#else
-+	os::Printer::log("glProvokingVertex not supported", ELL_ERROR);
-+#endif
-+}
-+
-+
-+inline void COpenGLExtensionHandler::extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlColorMaskIndexedEXT)
-+		pGlColorMaskIndexedEXT(buf, r, g, b, a);
-+#elif defined(GL_EXT_draw_buffers2)
-+	glColorMaskIndexedEXT(buf, r, g, b, a);
-+#else
-+	os::Printer::log("glColorMaskIndexed not supported", ELL_ERROR);
-+#endif
-+}
-+
-+
-+inline void COpenGLExtensionHandler::extGlEnableIndexed(GLenum target, GLuint index)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlEnableIndexedEXT)
-+		pGlEnableIndexedEXT(target, index);
-+#elif defined(GL_EXT_draw_buffers2)
-+	glEnableIndexedEXT(target, index);
-+#else
-+	os::Printer::log("glEnableIndexed not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDisableIndexed(GLenum target, GLuint index)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlDisableIndexedEXT)
-+		pGlDisableIndexedEXT(target, index);
-+#elif defined(GL_EXT_draw_buffers2)
-+	glDisableIndexedEXT(target, index);
-+#else
-+	os::Printer::log("glDisableIndexed not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFunciARB)
-+		pGlBlendFunciARB(buf, src, dst);
-+	else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendFuncIndexedAMD)
-+		pGlBlendFuncIndexedAMD(buf, src, dst);
-+#elif defined(GL_ARB_draw_buffers_blend)
-+	glBlendFunciARB(buf, src, dst);
-+#elif defined(GL_AMD_draw_buffers_blend)
-+	glBlendFuncIndexedAMD(buf, src, dst);
-+#else
-+	os::Printer::log("glBlendFuncIndexed not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBlendEquationIndexed(GLuint buf, GLenum mode)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationiARB)
-+		pGlBlendEquationiARB(buf, mode);
-+	else if (FeatureAvailable[IRR_AMD_draw_buffers_blend] && pGlBlendEquationIndexedAMD)
-+		pGlBlendEquationIndexedAMD(buf, mode);
-+#elif defined(GL_ARB_draw_buffers_blend)
-+	glBlendEquationiARB(buf, mode);
-+#elif defined(GL_AMD_draw_buffers_blend)
-+	glBlendEquationIndexedAMD(buf, mode);
-+#else
-+	os::Printer::log("glBlendEquationIndexed not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlProgramParameteri(GLhandleARB program, GLenum pname, GLint value)
-+{
-+#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
-+	if (queryFeature(EVDF_GEOMETRY_SHADER))
-+	{
-+		if (pGlProgramParameteriARB)
-+			pGlProgramParameteriARB(program, pname, value);
-+		else if (pGlProgramParameteriEXT)
-+			pGlProgramParameteriEXT(program, pname, value);
-+	}
-+#elif defined(GL_ARB_geometry_shader4)
-+	glProgramParameteriARB(program, pname, value);
-+#elif defined(GL_EXT_geometry_shader4)
-+    #ifdef __clang__
-+    glProgramParameteriEXT((long)program, pname, value);
-+    #else
-+	glProgramParameteriEXT((long GLuint)program, pname, value);
-+    #endif
-+#elif defined(GL_NV_geometry_program4) || defined(GL_NV_geometry_shader4)
-+	glProgramParameteriNV(program, pname, value);
-+#else
-+	os::Printer::log("glProgramParameteri not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGenQueries(GLsizei n, GLuint *ids)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGenQueriesARB)
-+		pGlGenQueriesARB(n, ids);
-+	else if (pGlGenOcclusionQueriesNV)
-+		pGlGenOcclusionQueriesNV(n, ids);
-+#elif defined(GL_ARB_occlusion_query)
-+	glGenQueriesARB(n, ids);
-+#elif defined(GL_NV_occlusion_query)
-+	glGenOcclusionQueriesNV(n, ids);
-+#else
-+	os::Printer::log("glGenQueries not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlDeleteQueries(GLsizei n, const GLuint *ids)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlDeleteQueriesARB)
-+		pGlDeleteQueriesARB(n, ids);
-+	else if (pGlDeleteOcclusionQueriesNV)
-+		pGlDeleteOcclusionQueriesNV(n, ids);
-+#elif defined(GL_ARB_occlusion_query)
-+	glDeleteQueriesARB(n, ids);
-+#elif defined(GL_NV_occlusion_query)
-+	glDeleteOcclusionQueriesNV(n, ids);
-+#else
-+	os::Printer::log("glDeleteQueries not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline GLboolean COpenGLExtensionHandler::extGlIsQuery(GLuint id)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlIsQueryARB)
-+		return pGlIsQueryARB(id);
-+	else if (pGlIsOcclusionQueryNV)
-+		return pGlIsOcclusionQueryNV(id);
-+	return false;
-+#elif defined(GL_ARB_occlusion_query)
-+	return glIsQueryARB(id);
-+#elif defined(GL_NV_occlusion_query)
-+	return glIsOcclusionQueryNV(id);
-+#else
-+	return false;
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBeginQuery(GLenum target, GLuint id)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBeginQueryARB)
-+		pGlBeginQueryARB(target, id);
-+	else if (pGlBeginOcclusionQueryNV)
-+		pGlBeginOcclusionQueryNV(id);
-+#elif defined(GL_ARB_occlusion_query)
-+	glBeginQueryARB(target, id);
-+#elif defined(GL_NV_occlusion_query)
-+	glBeginOcclusionQueryNV(id);
-+#else
-+	os::Printer::log("glBeginQuery not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlEndQuery(GLenum target)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlEndQueryARB)
-+		pGlEndQueryARB(target);
-+	else if (pGlEndOcclusionQueryNV)
-+		pGlEndOcclusionQueryNV();
-+#elif defined(GL_ARB_occlusion_query)
-+	glEndQueryARB(target);
-+#elif defined(GL_NV_occlusion_query)
-+	glEndOcclusionQueryNV();
-+#else
-+	os::Printer::log("glEndQuery not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetQueryiv(GLenum target, GLenum pname, GLint *params)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetQueryivARB)
-+		pGlGetQueryivARB(target, pname, params);
-+#elif defined(GL_ARB_occlusion_query)
-+	glGetQueryivARB(target, pname, params);
-+#else
-+	os::Printer::log("glGetQueryivARB not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetQueryObjectivARB)
-+		pGlGetQueryObjectivARB(id, pname, params);
-+	else if (pGlGetOcclusionQueryivNV)
-+		pGlGetOcclusionQueryivNV(id, pname, params);
-+#elif defined(GL_ARB_occlusion_query)
-+	glGetQueryObjectivARB(id, pname, params);
-+#elif defined(GL_NV_occlusion_query)
-+	glGetOcclusionQueryivNV(id, pname, params);
-+#else
-+	os::Printer::log("glGetQueryObjectiv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlGetQueryObjectuivARB)
-+		pGlGetQueryObjectuivARB(id, pname, params);
-+	else if (pGlGetOcclusionQueryuivNV)
-+		pGlGetOcclusionQueryuivNV(id, pname, params);
-+#elif defined(GL_ARB_occlusion_query)
-+	glGetQueryObjectuivARB(id, pname, params);
-+#elif defined(GL_NV_occlusion_query)
-+	glGetOcclusionQueryuivNV(id, pname, params);
-+#else
-+	os::Printer::log("glGetQueryObjectuiv not supported", ELL_ERROR);
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlSwapInterval(int interval)
-+{
-+	// we have wglext, so try to use that
-+#if defined(_IRR_WINDOWS_API_) && defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)
-+#ifdef WGL_EXT_swap_control
-+	if (pWglSwapIntervalEXT)
-+		pWglSwapIntervalEXT(interval);
-+#endif
-+#endif
-+#ifdef _IRR_COMPILE_WITH_X11_DEVICE_
-+	//TODO: Check GLX_EXT_swap_control and GLX_MESA_swap_control
-+#ifdef GLX_SGI_swap_control
-+	// does not work with interval==0
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (interval && pGlxSwapIntervalSGI)
-+		pGlxSwapIntervalSGI(interval);
-+#else
-+	if (interval)
-+		glXSwapIntervalSGI(interval);
-+#endif
-+#elif defined(GLX_EXT_swap_control)
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	Display *dpy = glXGetCurrentDisplay();
-+	GLXDrawable drawable = glXGetCurrentDrawable();
-+
-+	if (pGlxSwapIntervalEXT)
-+		pGlxSwapIntervalEXT(dpy, drawable, interval);
-+#else
-+	pGlXSwapIntervalEXT(dpy, drawable, interval);
-+#endif
-+#elif defined(GLX_MESA_swap_control)
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlxSwapIntervalMESA)
-+		pGlxSwapIntervalMESA(interval);
-+#else
-+	pGlXSwapIntervalMESA(interval);
-+#endif
-+#endif
-+#endif
-+}
-+
-+inline void COpenGLExtensionHandler::extGlBlendEquation(GLenum mode)
-+{
-+#ifdef _IRR_OPENGL_USE_EXTPOINTER_
-+	if (pGlBlendEquation)
-+		pGlBlendEquation(mode);
-+	else if (pGlBlendEquationEXT)
-+		pGlBlendEquationEXT(mode);
-+#elif defined(GL_EXT_blend_minmax) || defined(GL_EXT_blend_subtract) || defined(GL_EXT_blend_logic_op)
-+	glBlendEquationEXT(mode);
-+#elif defined(GL_VERSION_1_2)
-+	glBlendEquation(mode);
-+#else
-+	os::Printer::log("glBlendEquation not supported", ELL_ERROR);
-+#endif
-+}
-+
-+
-+}
-+}
-+
-+#endif
-+
-+#endif
-+
diff --git a/supertuxkart-unbundle-enet.patch b/supertuxkart-unbundle-enet.patch
new file mode 100644
index 0000000..bb8eed6
--- /dev/null
+++ b/supertuxkart-unbundle-enet.patch
@@ -0,0 +1,76 @@
+diff -uNr supertuxkart-0.9.orig/cmake/FindENet.cmake supertuxkart-0.9/cmake/FindENet.cmake
+--- supertuxkart-0.9.orig/cmake/FindENet.cmake	1970-01-01 03:00:00.000000000 +0300
++++ supertuxkart-0.9/cmake/FindENet.cmake	2015-04-23 12:40:36.636115363 +0300
+@@ -0,0 +1,49 @@
++# - Try to find enet
++# Once done this will define
++#
++#  ENET_FOUND - system has enet
++#  ENet_INCLUDE_DIRS - the enet include directory
++#  ENet_LIBRARIES - the libraries needed to use enet
++#
++# $ENETDIR is an environment variable used for finding enet.
++#
++#  Borrowed from The Mana World
++#  http://themanaworld.org/
++#
++# Several changes and additions by Fabian 'x3n' Landau
++# Lots of simplifications by Adrian Friedli
++#                 > www.orxonox.net <
++
++FIND_PATH(ENet_INCLUDE_DIRS enet/enet.h
++    PATHS
++    $ENV{ENETDIR}
++    /usr/local
++    /usr
++    PATH_SUFFIXES include
++    )
++
++FIND_LIBRARY(ENet_LIBRARY
++    NAMES enet
++    PATHS
++    $ENV{ENETDIR}
++    /usr/local
++    /usr
++    PATH_SUFFIXES lib
++    )
++
++# handle the QUIETLY and REQUIRED arguments and set ENET_FOUND to TRUE if
++# all listed variables are TRUE
++INCLUDE(FindPackageHandleStandardArgs)
++FIND_PACKAGE_HANDLE_STANDARD_ARGS(ENet DEFAULT_MSG ENet_LIBRARY ENet_INCLUDE_DIRS)
++
++IF (ENET_FOUND)
++    IF(WIN32)
++        SET(WINDOWS_ENET_DEPENDENCIES "ws2_32;winmm")
++        SET(ENet_LIBRARIES ${ENet_LIBRARY} ${WINDOWS_ENET_DEPENDENCIES})
++    ELSE(WIN32)
++        SET(ENet_LIBRARIES ${ENet_LIBRARY})
++    ENDIF(WIN32)
++ENDIF (ENET_FOUND)
++
++MARK_AS_ADVANCED(ENet_LIBRARY ENet_LIBRARIES ENet_INCLUDE_DIRS)
++
+diff -uNr supertuxkart-0.9.orig/CMakeLists.txt supertuxkart-0.9/CMakeLists.txt
+--- supertuxkart-0.9.orig/CMakeLists.txt	2015-04-23 12:40:21.133663270 +0300
++++ supertuxkart-0.9/CMakeLists.txt	2015-04-23 12:40:54.166626600 +0300
+@@ -61,8 +61,8 @@
+ include_directories("${PROJECT_SOURCE_DIR}/lib/bullet/src")
+ 
+ # Build the ENet UDP network library
+-add_subdirectory("${PROJECT_SOURCE_DIR}/lib/enet")
+-include_directories("${PROJECT_SOURCE_DIR}/lib/enet/include")
++find_package(ENet REQUIRED)
++include_directories(${ENet_INCLUDE_DIRS})
+ 
+ # Build glew library
+ add_subdirectory("${PROJECT_SOURCE_DIR}/lib/glew")
+@@ -306,7 +306,7 @@
+     bulletdynamics
+     bulletcollision
+     bulletmath
+-    enet
++    ${ENet_LIBRARIES}
+     glew
+     stkirrlicht
+     angelscript
diff --git a/supertuxkart-unbundle-wiiuse.patch b/supertuxkart-unbundle-wiiuse.patch
new file mode 100644
index 0000000..a201fec
--- /dev/null
+++ b/supertuxkart-unbundle-wiiuse.patch
@@ -0,0 +1,128 @@
+diff -uNr supertuxkart-0.9.orig/cmake/FindWiiUse.cmake supertuxkart-0.9/cmake/FindWiiUse.cmake
+--- supertuxkart-0.9.orig/cmake/FindWiiUse.cmake	1970-01-01 03:00:00.000000000 +0300
++++ supertuxkart-0.9/cmake/FindWiiUse.cmake	2015-04-23 12:53:36.498155119 +0300
+@@ -0,0 +1,99 @@
++# - try to find WiiUse library
++#
++# Cache Variables: (probably not for direct use in your scripts)
++#  WIIUSE_INCLUDE_DIR
++#  WIIUSE_LIBRARY
++#
++# Non-cache variables you might use in your CMakeLists.txt:
++#  WIIUSE_FOUND
++#  WIIUSE_INCLUDE_DIRS
++#  WIIUSE_LIBRARIES
++#  WIIUSE_RUNTIME_LIBRARIES - aka the dll for installing
++#  WIIUSE_RUNTIME_LIBRARY_DIRS
++#
++# Requires these CMake modules:
++#  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
++#
++# Original Author:
++# 2009-2010 Ryan Pavlik <rpavlik at iastate.edu> <abiryan at ryand.net>
++# http://academic.cleardefinition.com
++# Iowa State University HCI Graduate Program/VRAC
++#
++# Copyright Iowa State University 2009-2010.
++# Distributed under the Boost Software License, Version 1.0.
++# (See accompanying file LICENSE_1_0.txt or copy at
++# http://www.boost.org/LICENSE_1_0.txt)
++
++set(WIIUSE_ROOT_DIR
++	"${WIIUSE_ROOT_DIR}"
++	CACHE
++	PATH
++	"Directory to search for WiiUse")
++
++if(CMAKE_SIZEOF_VOID_P MATCHES "8")
++	set(_LIBSUFFIXES /lib64 /lib)
++else()
++	set(_LIBSUFFIXES /lib)
++endif()
++
++find_library(WIIUSE_LIBRARY
++	NAMES
++	wiiuse
++	PATHS
++	"${WIIUSE_ROOT_DIR}"
++	PATH_SUFFIXES
++	"${_LIBSUFFIXES}")
++
++get_filename_component(_libdir "${WIIUSE_LIBRARY}" PATH)
++
++find_path(WIIUSE_INCLUDE_DIR
++	NAMES
++	wiiuse.h
++	HINTS
++	"${_libdir}"
++	"${_libdir}/.."
++	PATHS
++	"${WIIUSE_ROOT_DIR}"
++	PATH_SUFFIXES
++	include/)
++
++set(_deps_check)
++if(WIN32)
++	find_file(WIIUSE_RUNTIME_LIBRARY
++		NAMES
++		wiiuse.dll
++		HINTS
++		"${_libdir}"
++		"${_libdir}/.."
++		PATH_SUFFIXES
++		bin)
++
++	set(WIIUSE_RUNTIME_LIBRARIES "${WIIUSE_RUNTIME_LIBRARY}")
++	get_filename_component(WIIUSE_RUNTIME_LIBRARY_DIRS
++		"${WIIUSE_RUNTIME_LIBRARY}"
++		PATH)
++	list(APPEND _deps_check WIIUSE_RUNTIME_LIBRARY)
++else()
++	set(WIIUSE_RUNTIME_LIBRARY "${WIIUSE_LIBRARY}")
++	set(WIIUSE_RUNTIME_LIBRARIES "${WIIUSE_RUNTIME_LIBRARY}")
++	get_filename_component(WIIUSE_RUNTIME_LIBRARY_DIRS
++		"${WIIUSE_LIBRARY}"
++		PATH)
++endif()
++
++include(FindPackageHandleStandardArgs)
++find_package_handle_standard_args(WiiUse
++	DEFAULT_MSG
++	WIIUSE_LIBRARY
++	WIIUSE_INCLUDE_DIR
++	${_deps_check})
++
++if(WIIUSE_FOUND)
++	set(WIIUSE_LIBRARIES "${WIIUSE_LIBRARY}")
++	set(WIIUSE_INCLUDE_DIRS "${WIIUSE_INCLUDE_DIR}")
++	mark_as_advanced(WIIUSE_ROOT_DIR)
++endif()
++
++mark_as_advanced(WIIUSE_INCLUDE_DIR
++	WIIUSE_LIBRARY
++	WIIUSE_RUNTIME_LIBRARY)
+diff -uNr supertuxkart-0.9.orig/CMakeLists.txt supertuxkart-0.9/CMakeLists.txt
+--- supertuxkart-0.9.orig/CMakeLists.txt	2015-04-21 14:32:11.300162506 +0300
++++ supertuxkart-0.9/CMakeLists.txt	2015-04-23 12:53:36.497155090 +0300
+@@ -104,10 +104,9 @@
+ # (at least on VS) irrlicht will find wiiuse io.h file because
+ # of the added include directory.
+ if(USE_WIIUSE)
+-    if(WIIUSE_BUILD)
+-        add_subdirectory("${PROJECT_SOURCE_DIR}/lib/wiiuse")
+-    endif()
+     include_directories("${PROJECT_SOURCE_DIR}/lib/wiiuse")
++    find_package(WiiUse REQUIRED)
++    include_directories(${WIIUSE_INCLUDE_DIR})
+ endif()
+ 
+ # Set include paths
+@@ -358,7 +357,7 @@
+             target_link_libraries(supertuxkart ${PROJECT_SOURCE_DIR}/dependencies/lib/wiiuse.lib)
+         endif()
+     else()
+-        target_link_libraries(supertuxkart wiiuse bluetooth)
++        target_link_libraries(supertuxkart ${WIIUSE_LIBRARIES})
+     endif()
+     add_definitions(-DENABLE_WIIUSE)
+ 
diff --git a/supertuxkart.spec b/supertuxkart.spec
index 6909e11..1f68d2b 100644
--- a/supertuxkart.spec
+++ b/supertuxkart.spec
@@ -1,22 +1,15 @@
 Name:           supertuxkart
-Version:        0.8.1
-Release:        11%{?dist}
+Version:        0.9
+Release:        1%{?dist}
 Summary:        Kids 3D go-kart racing game featuring Tux
 Group:          Amusements/Games
 License:        GPLv2+ and GPLv3 and CC-BY-SA
 URL:            http://supertuxkart.sourceforge.net/
-Source0:        http://downloads.sourceforge.net/%{name}/%{name}-%{version}-src.tar.bz2
+Source0:        http://downloads.sourceforge.net/%{name}/%{name}-%{version}-src.tar.xz
 Source1:        %{name}.6
 Source2:        supertuxkart-0.7.3-license-clarification.txt
-Patch0:         supertuxkart-fhs.patch
-# tracked in github.com/ignatenkobrain/stk-code/ in fedora-0.8.1 branch
-Patch1:         0001-fix-.desktop-file-and-install-destinations.patch
-#Patch2:         0002-unbundle-bullet.patch
-Patch3:         0003-unbundle-enet.patch
-#Patch4:         0004-unbundle-irrlicht.patch
-Patch5:         0005-unbundle-wiiuse.patch
-Patch6:         0006-Adding-a-Wiimote-with-other-one-alredy-placed-Bug-12.patch
-Patch7:		supertuxkart-mesa-fix.patch
+Patch0:         supertuxkart-unbundle-wiiuse.patch
+Patch1:         supertuxkart-unbundle-enet.patch
 BuildRequires:  cmake
 BuildRequires:  libvorbis-devel freeglut-devel desktop-file-utils
 BuildRequires:  openal-soft-devel freealut-devel >= 1.1.0-10 libtool
@@ -24,7 +17,7 @@ BuildRequires:  libcurl-devel enet-devel fribidi-devel
 BuildRequires:  wiiuse-devel bluez-libs-devel
 Requires:       hicolor-icon-theme opengl-games-utils
 # Provide so that yum install tuxkart will work, obsolete for auto upgrade
-Provides:       tuxkart = 0.8.1-1
+Provides:       tuxkart = %{version}-%{release}
 Obsoletes:      tuxkart < 0.4.0-6
 Requires:       %{name}-data = %{version}
 
@@ -48,15 +41,10 @@ BuildArch:      noarch
 This package contains the data files for SuperTuxKart.
 
 %prep
-%setup -q -n SuperTuxKart-%{version}
+%setup -q
 cp -p %{SOURCE2} .
 %patch0 -p1
 %patch1 -p1
-#%patch2 -p1
-%patch3 -p1
-#%patch4 -p1
-%patch5 -p1
-%patch7 -p0
 # Delete bundled libs
 rm -rf lib/enet lib/wiiuse
 #sed -i -e '/setAnimationStrength/s/^/\/\//' src/karts/kart_model.cpp
@@ -67,7 +55,7 @@ cd build
 LDFLAGS="$LDFLAGS -lX11"
 export LDFLAGS
 %cmake ../
-make %{?_smp_mflags}
+make VERBOSE=1 %{?_smp_mflags}
 
 %install
 cd build
@@ -80,56 +68,6 @@ install -p -m 644 %{SOURCE1} %{buildroot}%{_mandir}/man6
 mkdir -p %{buildroot}%{_libdir}
 install -m755 lib/irrlicht/libstkirrlicht.so %{buildroot}%{_libdir}/libstkirrlicht.so
 
-# Register as an application to be visible in the software center
-#
-# NOTE: It would be *awesome* if this file was maintained by the upstream
-# project, translated and installed into the right place during `make install`.
-#
-# See http://www.freedesktop.org/software/appstream/docs/ for more details.
-#
-mkdir -p $RPM_BUILD_ROOT%{_datadir}/appdata
-cat > $RPM_BUILD_ROOT%{_datadir}/appdata/%{name}.appdata.xml <<EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright 2014 Richard Hughes <richard at hughsie.com> -->
-<!--
-BugReportURL: https://github.com/supertuxkart/stk-code/issues/1545
-SentUpstream: 2014-09-18
--->
-<application>
-  <id type="desktop">supertuxkart.desktop</id>
-  <metadata_license>CC0-1.0</metadata_license>
-  <summary>A racing game</summary>
-  <description>
-    <p>
-      SuperTuxKart is a fun 3D kart racing game.
-      You can play with up to 4 friends on one PC, racing against each other or
-      just try to beat the computer.
-    </p>
-    <p>
-      See the great lighthouse or drive through the sand and visit the pyramids.
-      Race underground or in space, watching the stars passing by.
-      Have some rest under the palms on the beach (watching the other karts
-      overtaking you :) ).
-      But don't eat the bananas! Watch for bowling balls, plungers, bubble gum
-      and cakes thrown by opponents.
-    </p>
-    <p>
-      You can do a single race against other karts, compete in one of several
-      Grand Prix, try to beat the high score in time trials on your own, play
-      battle mode against your friends, and more!
-    </p>
-  </description>
-  <url type="homepage">http://supertuxkart.sourceforge.net/</url>
-  <screenshots>
-    <screenshot type="default">http://supertuxkart.sourceforge.net/persistent/images/4/4d/SuperTuxKart_0.8_screenshot.jpg</screenshot>
-    <screenshot>http://supertuxkart.sourceforge.net/persistent/images/1/1f/SuperTuxKart_0.8_screenshot4.jpg</screenshot>
-  </screenshots>
-  <!-- FIXME: change this to an upstream email address for spec updates
-  <updatecontact>someone_who_cares at upstream_project.org</updatecontact>
-   -->
-</application>
-EOF
-
 %post
 touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
 /sbin/ldconfig
@@ -148,18 +86,23 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 desktop-file-validate %{buildroot}%{_datadir}/applications/*%{name}.desktop
 
 %files
-%doc AUTHORS COPYING ChangeLog README TODO supertuxkart-0.7.3-license-clarification.txt
+%doc AUTHORS COPYING CHANGELOG.md README.md supertuxkart-0.7.3-license-clarification.txt
 %{_bindir}/%{name}*
 %{_mandir}/man6/%{name}.6.gz
 %{_datadir}/appdata/*%{name}.appdata.xml
 %{_datadir}/applications/*%{name}.desktop
 %{_datadir}/icons/hicolor/*/apps/%{name}.png
+%{_datadir}/pixmaps/%{name}_*.png
 %{_libdir}/libstkirrlicht.so
 
 %files data
 %{_datadir}/%{name}
 
 %changelog
+* Thu Apr 23 2015 Igor Gnatenko <i.gnatenko.brain at gmail.com> - 0.9-1
+- Update to 0.9
+- Drop old patches
+
 * Mon Apr 06 2015 Jon Ciesla <limburgher at gmail.com> - 0.8.1-11
 - Fix FTBFS.
 
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/supertuxkart.git/commit/?h=master&id=3e7da34becc2191ef3b17041cc1f5ea3bb875a14


More information about the scm-commits mailing list