From 6cbac12e8fad6aedd45d9913078d8b0423f449f0 Mon Sep 17 00:00:00 2001 From: Ansgar Philippsen <ansgar.philippsen@gmail.com> Date: Thu, 31 May 2012 16:39:00 -0400 Subject: [PATCH] fixes to allow compilation against Mesa rendering lib instead of system GL --- CMakeLists.txt | 11 ++++++++++- modules/config/CMakeLists.txt | 6 ++++++ modules/config/config.hh.in | 1 + modules/gfx/src/CMakeLists.txt | 28 +++++++++++++++++++--------- modules/gfx/src/glext_include.hh | 8 ++++++++ modules/gfx/src/offscreen_buffer.hh | 4 ++++ modules/gfx/src/shader.cc | 2 ++ 7 files changed, 50 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e65ba2323..03496411d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,8 @@ option(ENABLE_GUI "whether the graphical user interface should be enabled" ON) option(ENABLE_GFX "whether graphics support should be enabled" ON) +option(USE_MESA "use software rendered Mesa instead of hardware GL" + OFF) option(ENABLE_IMG "whether the image processing module should be compiled" ON) option(ENABLE_INFO "whether openstructure should be compiled with support for the info library" @@ -187,7 +189,13 @@ if (ENABLE_INFO) endif() if (ENABLE_GFX) - find_package(OpenGL REQUIRED) + if(USE_MESA) + find_package(Mesa REQUIRED) + set(_USE_MESA ON) + else() + find_package(OpenGL REQUIRED) + set(_USE_MESA OFF) + endif() endif() if (ENABLE_IMG OR ENABLE_GFX) @@ -283,6 +291,7 @@ message(STATUS " Info support (-DENABLE_INFO) : ${_INFO}\n" " Graphical interface (-DENABLE_GUI) : ${_UI}\n" " OpenGL support (-DENABLE_GFX) : ${_OPENGL}\n" + " OpenGL via Mesa (-DUSE_MESA) : ${_USE_MESA}\n" " Image Processing support (-DENABLE_IMG) : ${_IMG}\n" " Shader support (-DUSE_SHADER) : ${_SHADER}\n" " Numpy support (-DUSE_NUMPY) : ${_NUMPY}\n" diff --git a/modules/config/CMakeLists.txt b/modules/config/CMakeLists.txt index 1e637d144..a95554b40 100644 --- a/modules/config/CMakeLists.txt +++ b/modules/config/CMakeLists.txt @@ -16,6 +16,12 @@ else() set(shader_support 0) endif() +if (USE_MESA) + set(mesa_support 1) +else() + set(mesa_support 0) +endif() + if (USE_NUMPY) set(numpy_support 1) else() diff --git a/modules/config/config.hh.in b/modules/config/config.hh.in index c2242500e..3268ebab4 100644 --- a/modules/config/config.hh.in +++ b/modules/config/config.hh.in @@ -24,6 +24,7 @@ */ #define OST_SHADER_SUPPORT_ENABLED @shader_support@ +#define OST_MESA_SUPPORT_ENABLED @mesa_support@ #define OST_PROFILING_ENABLED @profiling_enabled@ #define OST_ANIMATIONS_ENABLED @animations_enabled@ #define OST_IMG_ENABLED @img_enabled@ diff --git a/modules/gfx/src/CMakeLists.txt b/modules/gfx/src/CMakeLists.txt index 9309a6af7..6028b64f8 100644 --- a/modules/gfx/src/CMakeLists.txt +++ b/modules/gfx/src/CMakeLists.txt @@ -180,8 +180,13 @@ else() endif() if (UNIX AND NOT APPLE) - list(APPEND OST_GFX_SOURCES impl/glx_offscreen_buffer.cc) - list(APPEND OST_GFX_IMPL_HEADERS glx_offscreen_buffer.hh) + if(USE_MESA) + list(APPEND OST_GFX_SOURCES impl/mesa_offscreen_buffer.cc) + list(APPEND OST_GFX_IMPL_HEADERS mesa_offscreen_buffer.hh) + else() + list(APPEND OST_GFX_SOURCES impl/glx_offscreen_buffer.cc) + list(APPEND OST_GFX_IMPL_HEADERS glx_offscreen_buffer.hh) + endif() endif() if (APPLE) @@ -200,13 +205,15 @@ if (USE_SHADER) list(APPEND OST_GFX_SOURCES impl/scene_fx.cc) list(APPEND OST_GFX_IMPL_HEADERS scene_fx.hh) if (NOT APPLE) - set(OST_GLEW_HEADERS - glew.h - glxew.h - wglew.h IN_DIR GL - ) - list(APPEND OST_GFX_SOURCES GL/glew.c) - include_directories("${STAGE_DIR}/include/ost/gfx") + if (NOT USE_MESA) + set(OST_GLEW_HEADERS + glew.h + glxew.h + wglew.h IN_DIR GL + ) + list(APPEND OST_GFX_SOURCES GL/glew.c) + include_directories("${STAGE_DIR}/include/ost/gfx") + endif() endif() endif() @@ -226,6 +233,9 @@ module(NAME gfx SOURCES ${OST_GFX_SOURCES} ${OST_GFX_MAP_SOURCES} include_directories(${PNG_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR}) # link against OpenGL and PNG libraries +if(USE_MESA) + link_directories(${OPENGL_LIBRARY_DIR}) +endif() target_link_libraries(ost_gfx ${OPENGL_LIBRARIES} ${PNG_LIBRARIES}) if (USE_SHADER) diff --git a/modules/gfx/src/glext_include.hh b/modules/gfx/src/glext_include.hh index 8188b1265..183f6112c 100644 --- a/modules/gfx/src/glext_include.hh +++ b/modules/gfx/src/glext_include.hh @@ -29,6 +29,12 @@ #include <ost/config.hh> #if OST_SHADER_SUPPORT_ENABLED +#ifdef OST_MESA_SUPPORT_ENABLED +# define OST_GL_VERSION_2_0 1 +# define GL_GLEXT_PROTOTYPES 1 +# include <GL/gl.h> +# include <GL/glext.h> +#else # if OST_MODULE==OST_GFX # define GLEW_BUILD # endif @@ -39,6 +45,7 @@ # include <ost/gfx/GL/wglew.h> # endif #endif +#endif #include <ost/gfx/gl_include.hh> @@ -53,3 +60,4 @@ #endif #endif #endif + diff --git a/modules/gfx/src/offscreen_buffer.hh b/modules/gfx/src/offscreen_buffer.hh index 2714cdbe0..7b716c2f6 100644 --- a/modules/gfx/src/offscreen_buffer.hh +++ b/modules/gfx/src/offscreen_buffer.hh @@ -59,7 +59,11 @@ public: */ #if defined(__linux__) +#if OST_MESA_SUPPORT_ENABLED +#include "impl/mesa_offscreen_buffer.hh" +#else #include "impl/glx_offscreen_buffer.hh" +#endif #elif defined(__APPLE__) #include "impl/cgl_offscreen_buffer.hh" #elif defined(_MSC_VER) diff --git a/modules/gfx/src/shader.cc b/modules/gfx/src/shader.cc index b09c41a70..c3b8b1d79 100644 --- a/modules/gfx/src/shader.cc +++ b/modules/gfx/src/shader.cc @@ -59,12 +59,14 @@ Shader::Shader(): void Shader::PreGLInit() { #if !defined(__APPLE__) +#if !defined(OST_MESA_SUPPORT_ENABLED) GLenum err = glewInit(); if (GLEW_OK != err) { LOG_ERROR("glew failure: " << glewGetErrorString(err)); assert(false); } #endif +#endif } bool Shader::Compile(std::string shader_name, std::string shader_code, -- GitLab