From 3c347441e6e58843a88dc1bcb3414b9c4558f2f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 9 Jan 2013 01:16:22 +0100 Subject: [PATCH] Ability to build Magnum for OpenGL ES emulated with desktop OpenGL. --- CMakeLists.txt | 10 ++++++++-- README.md | 3 +++ doc/building.dox | 14 +++++++++++--- modules/FindMagnum.cmake | 22 ++++++++++++++-------- src/CMakeLists.txt | 12 ++++++------ src/Platform/magnum-info.cpp | 3 +++ src/magnumConfigure.h.cmake | 3 ++- 7 files changed, 47 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6753b6ec..ba6c5a807 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ include(CMakeDependentOption) option(TARGET_GLES "Build for OpenGL ES instead of desktop OpenGL" OFF) cmake_dependent_option(TARGET_GLES2 "Build for OpenGL ES 2" ON "TARGET_GLES" OFF) +cmake_dependent_option(TARGET_DESKTOP_GLES "Build for OpenGL ES on desktop" OFF "TARGET_GLES" OFF) # Parts of the library option(WITH_EVERYTHING "Build everything (doesn't include *Application libraries)" ON) @@ -46,12 +47,14 @@ endif() # Check dependencies find_package(Corrade REQUIRED) -if(NOT TARGET_GLES) +if(NOT TARGET_GLES OR TARGET_DESKTOP_GLES) find_package(OpenGL REQUIRED) - find_package(GLEW REQUIRED) else() find_package(OpenGLES2 REQUIRED) endif() +if(NOT TARGET_GLES) + find_package(GLEW REQUIRED) +endif() # Configuration variables (saved later to corradeConfigure.h) if(TARGET_GLES) @@ -60,6 +63,9 @@ endif() if(TARGET_GLES2) set(MAGNUM_TARGET_GLES2 1) endif() +if(TARGET_DESKTOP_GLES) + set(MAGNUM_TARGET_DESKTOP_GLES 1) +endif() # Installation paths set(MAGNUM_BINARY_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/bin) diff --git a/README.md b/README.md index 067288410..5b378b3aa 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,9 @@ installed using these four commands: make make install +See Doxygen documentation for more information about enabling or disabling +additional features and targeting different platforms such as OpenGL ES. + Building and running unit tests ------------------------------- diff --git a/doc/building.dox b/doc/building.dox index 9d2d6ecda..863c405ad 100644 --- a/doc/building.dox +++ b/doc/building.dox @@ -55,9 +55,17 @@ If you want to build with another compiler (e.g. Clang), pass @subsection building-optional Enabling or disabling features -By default the engine is built for desktop OpenGL. If you want to target -OpenGL ES, set `TARGET_GLES` to `ON` or pass `-DTARGET_GLES=ON` to CMake. Note -that some features are available for desktop OpenGL only, see @ref requires-gl. +By default the engine is built for desktop OpenGL. Using `TARGET_*` CMake +parameters you can target other platforms: + + - `TARGET_GLES` - Target OpenGL ES. + - `TARGET_GLES2` - Target OpenGL ES 2.0. Currently enabled by default when + `TARGET_GLES` is set, as no customer OpenGL ES 3.0 platform exists yet. + - `TARGET_DESKTOP_GLES` - Target OpenGL ES on desktop, i.e. use OpenGL ES + emulation in desktop OpenGL library. Might not be supported in all drivers. + +Note that some features are available for desktop OpenGL only, see +@ref requires-gl. By default the engine is built with everything except @ref Platform "application libraries". Using `WITH_*` CMake parameters you can diff --git a/modules/FindMagnum.cmake b/modules/FindMagnum.cmake index 9f2e0e138..8a5ed0983 100644 --- a/modules/FindMagnum.cmake +++ b/modules/FindMagnum.cmake @@ -85,13 +85,19 @@ string(FIND "${_magnumConfigure}" "#define MAGNUM_TARGET_NACL" _TARGET_NACL) if(NOT _TARGET_NACL EQUAL -1) set(MAGNUM_TARGET_NACL 1) endif() +string(FIND "${_magnumConfigure}" "#define MAGNUM_TARGET_DESKTOP_GLES" _TARGET_DESKTOP_GLES) +if(NOT _TARGET_DESKTOP_GLES EQUAL -1) + set(MAGNUM_TARGET_DESKTOP_GLES 1) +endif() -if(NOT MAGNUM_TARGET_GLES) +if(NOT MAGNUM_TARGET_GLES OR MAGNUM_TARGET_DESKTOP_GLES) find_package(OpenGL REQUIRED) - find_package(GLEW REQUIRED) else() find_package(OpenGLES2 REQUIRED) endif() +if(NOT MAGNUM_TARGET_GLES) + find_package(GLEW REQUIRED) +endif() # On Windows, *Application libraries need to have ${MAGNUM_LIBRARY} listed # in dependencies also after *Application.lib static library name to avoid @@ -242,13 +248,13 @@ set(MAGNUM_INCLUDE_DIRS ${MAGNUM_INCLUDE_DIR} set(MAGNUM_LIBRARIES ${MAGNUM_LIBRARY} ${CORRADE_UTILITY_LIBRARY} ${CORRADE_PLUGINMANAGER_LIBRARY}) -if(NOT MAGNUM_TARGET_GLES) - set(MAGNUM_LIBRARIES ${MAGNUM_LIBRARIES} - ${OPENGL_gl_LIBRARY} - ${GLEW_LIBRARY}) +if(NOT MAGNUM_TARGET_GLES OR MAGNUM_TARGET_DESKTOP_GLES) + set(MAGNUM_LIBRARIES ${MAGNUM_LIBRARIES} ${OPENGL_gl_LIBRARY}) else() - set(MAGNUM_LIBRARIES ${MAGNUM_LIBRARIES} - ${OPENGLES2_LIBRARY}) + set(MAGNUM_LIBRARIES ${MAGNUM_LIBRARIES} ${OPENGLES2_LIBRARY}) +endif() +if(NOT MAGNUM_TARGET_GLES) + set(MAGNUM_LIBRARIES ${MAGNUM_LIBRARIES} ${GLEW_LIBRARY}) endif() # Installation dirs diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 48cbbc1b7..bc04c2ab8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -119,13 +119,13 @@ add_library(Magnum SHARED set(Magnum_LIBS ${CORRADE_UTILITY_LIBRARY} ${CORRADE_PLUGINMANAGER_LIBRARY}) -if(NOT TARGET_GLES) - set(Magnum_LIBS ${Magnum_LIBS} - ${OPENGL_gl_LIBRARY} - ${GLEW_LIBRARY}) +if(NOT TARGET_GLES OR TARGET_DESKTOP_GLES) + set(Magnum_LIBS ${Magnum_LIBS} ${OPENGL_gl_LIBRARY}) else() - set(Magnum_LIBS ${Magnum_LIBS} - ${OPENGLES2_LIBRARY}) + set(Magnum_LIBS ${Magnum_LIBS} ${OPENGLES2_LIBRARY}) +endif() +if(NOT TARGET_GLES) + set(Magnum_LIBS ${Magnum_LIBS} ${GLEW_LIBRARY}) endif() target_link_libraries(Magnum ${Magnum_LIBS}) diff --git a/src/Platform/magnum-info.cpp b/src/Platform/magnum-info.cpp index 0cd691d6c..2ad9c5b53 100644 --- a/src/Platform/magnum-info.cpp +++ b/src/Platform/magnum-info.cpp @@ -47,6 +47,9 @@ MagnumInfo::MagnumInfo(int& argc, char** argv): WindowlessGlxApplication(argc, a #ifdef MAGNUM_TARGET_GLES2 d << "MAGNUM_TARGET_GLES2"; #endif + #ifdef MAGNUM_TARGET_DESKTOP_GLES + d << "MAGNUM_TARGET_DESKTOP_GLES"; + #endif #ifdef MAGNUM_TARGET_NACL d << "MAGNUM_TARGET_NACL"; #endif diff --git a/src/magnumConfigure.h.cmake b/src/magnumConfigure.h.cmake index 5738c3961..18f0ef842 100644 --- a/src/magnumConfigure.h.cmake +++ b/src/magnumConfigure.h.cmake @@ -1,3 +1,4 @@ -#cmakedefine MAGNUM_TARGET_NACL #cmakedefine MAGNUM_TARGET_GLES #cmakedefine MAGNUM_TARGET_GLES2 +#cmakedefine MAGNUM_TARGET_DESKTOP_GLES +#cmakedefine MAGNUM_TARGET_NACL