summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2012-07-28 23:36:12 +0200
committerPiotr Dziwinski <piotrdz@gmail.com>2012-07-28 23:36:12 +0200
commit72c0188ec37c3783133baf6960d72cb3c9d12a6c (patch)
tree0aa06fe40a3721238c9bc82090f9478a088ca9b6 /src
parentda63248bb9127cc64b6f174e0de254d6c01b7809 (diff)
downloadcolobot-72c0188ec37c3783133baf6960d72cb3c9d12a6c.tar.gz
colobot-72c0188ec37c3783133baf6960d72cb3c9d12a6c.tar.bz2
colobot-72c0188ec37c3783133baf6960d72cb3c9d12a6c.zip
GLEW
Added GLEW for loading OpenGL extensions
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt24
-rw-r--r--src/common/config.h.cmake2
-rw-r--r--src/graphics/opengl/gldevice.cpp36
3 files changed, 57 insertions, 5 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index da8463b..3896e40 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -11,18 +11,40 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
set(PLATFORM_WINDOWS 1)
set(PLATFORM_LINUX 0)
set(PLATFORM_OTHER 0)
+ # On Windows, GLEW is required
+ if (${USE_GLEW} MATCHES "auto")
+ set(USE_GLEW 1)
+ endif()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set(PLATFORM_WINDOWS 0)
set(PLATFORM_LINUX 1)
set(PLATFORM_OTHER 0)
+ # On Linux, we should be fine without GLEW
+ if (${USE_GLEW} MATCHES "auto")
+ set(USE_GLEW 0)
+ endif()
# for clock_gettime
set(PLATFORM_LIBS "-lrt")
else()
set(PLATFORM_WINDOWS 0)
set(PLATFORM_LINUX 0)
set(PLATFORM_OTHER 1)
+ # Use GLEW to be safe
+ if (${USE_GLEW} MATCHES "auto")
+ set(USE_GLEW 1)
+ endif()
endif()
+set(OPTIONAL_LIBS "")
+set(OPTIONAL_INCLUDE_DIRS "")
+
+if(${USE_GLEW} EQUAL 1)
+ find_package(GLEW REQUIRED)
+ set(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${GLEW_LIBRARY})
+ set(OPTIONAL_INCLUDE_DIRS ${OPTIONAL_INCLUDE_DIRS} ${GLEW_INCLUDE_PATH})
+endif()
+
+
# Configure file
configure_file(common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
@@ -156,6 +178,7 @@ ${SDL_LIBRARY}
${SDLIMAGE_LIBRARY}
${OPENGL_LIBRARY}
${PNG_LIBRARIES}
+${OPTIONAL_LIBS}
${PLATFORM_LIBS}
CBot
)
@@ -165,6 +188,7 @@ ${SDL_INCLUDE_DIR}
${SDL_IMAGE_INCLUDE_DIR}
${SDLTTF_INCLUDE_DIR}
${PNG_INCLUDE_DIRS}
+${OPTIONAL_INCLUDE_DIRS}
)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/CBot)
diff --git a/src/common/config.h.cmake b/src/common/config.h.cmake
index d8bff91..f496db0 100644
--- a/src/common/config.h.cmake
+++ b/src/common/config.h.cmake
@@ -2,7 +2,9 @@
// Macros set by CMake
#cmakedefine DEBUG
+
#cmakedefine PLATFORM_WINDOWS @PLATFORM_WINDOWS@
#cmakedefine PLATFORM_LINUX @PLATFORM_LINUX@
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
+#cmakedefine USE_GLEW @USE_GLEW@
diff --git a/src/graphics/opengl/gldevice.cpp b/src/graphics/opengl/gldevice.cpp
index d31d007..bfe7fd7 100644
--- a/src/graphics/opengl/gldevice.cpp
+++ b/src/graphics/opengl/gldevice.cpp
@@ -16,10 +16,20 @@
// gldevice.cpp
-#include "common/image.h"
#include "graphics/opengl/gldevice.h"
+
+#include "common/config.h"
+#include "common/image.h"
#include "math/geometry.h"
+
+#if defined(USE_GLEW)
+
+// When using GLEW, only glew.h is needed
+#include <GL/glew.h>
+
+#else
+
// Should define prototypes of used extensions as OpenGL functions
#define GL_GLEXT_PROTOTYPES
@@ -27,9 +37,11 @@
#include <GL/glu.h>
#include <GL/glext.h>
+#endif // if defined(GLEW)
+
#include <SDL/SDL.h>
-#include <assert.h>
+#include <cassert>
@@ -73,9 +85,23 @@ std::string Gfx::CGLDevice::GetError()
bool Gfx::CGLDevice::Create()
{
- /* NOTE: extension testing is not done here as the assumed version of OpenGL to be used (1.4+)
- must already have the required extensions. The used extensions are listed here for reference:
- GL_ARB_multitexture, GL_EXT_texture_env_combine, GL_EXT_secondary_color */
+#if defined(USE_GLEW)
+ if (glewInit() != GLEW_OK)
+ {
+ m_error = "GLEW initialization failed";
+ return false;
+ }
+
+ if ( (! GLEW_ARB_multitexture) || (! GLEW_EXT_texture_env_combine) || (! GLEW_EXT_secondary_color) )
+ {
+ m_error = "GLEW reports required extensions not supported";
+ return false;
+ }
+
+#endif
+
+ /* NOTE: when not using GLEW, extension testing is not performed, as it is assumed that
+ glext.h is up-to-date and the OpenGL shared library has the required functions present. */
m_wasInit = true;