Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Wilkins <Jason.A.Wilkins@gmail.com>2014-10-08 00:46:19 +0400
committerJason Wilkins <Jason.A.Wilkins@gmail.com>2014-10-08 00:47:32 +0400
commit8d084e8c8f48dd2f07d4a3fbd4a941a7bcc0dcfb (patch)
tree5bf15f4f74f3e5a307cfa3f734b2cd086dca69bd /CMakeLists.txt
parenta8705e99ee8ec9de2f25c3bac1e9895c2f98c224 (diff)
Ghost Context Refactor
https://developer.blender.org/D643 Separates graphics context creation from window code in Ghost so that they can vary separately.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt306
1 files changed, 267 insertions, 39 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3222feb4093..1fb406f650f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -169,14 +169,22 @@ mark_as_advanced(WITH_AUDASPACE)
option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" ON)
if(UNIX AND NOT APPLE)
- option(WITH_X11_XINPUT "Enable X11 Xinput (tablet support and unicode input)" ON)
- option(WITH_X11_XF86VMODE "Enable X11 video mode switching" ON)
- option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
+ set(WITH_X11 ON)
+endif()
- option(WITH_GHOST_XDND "Enable drag'n'drop support on X11 using XDND protocol" ON)
+if(WITH_X11)
+ option(WITH_X11_XINPUT "Enable X11 Xinput (tablet support and unicode input)" ON)
+ option(WITH_X11_XF86VMODE "Enable X11 video mode switching" ON)
+ option(WITH_GHOST_XDND "Enable drag'n'drop support on X11 using XDND protocol" ON)
+endif()
+
+if(UNIX AND NOT APPLE)
+ option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON)
+ option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system" ON)
else()
# not an option for other OS's
set(WITH_SYSTEM_GLEW OFF)
+ set(WITH_SYSTEM_GLES OFF)
endif()
@@ -320,6 +328,42 @@ endif()
# Unit testsing
option(WITH_GTESTS "Enable GTest unit testing" OFF)
+# OpenGL
+
+option(WITH_GLEW_MX "Support multiple GLEW contexts (experimental)" ON )
+option(WITH_GLEW_ES "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
+option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)" OFF)
+option(WITH_GL_PROFILE_COMPAT "Support using the OpenGL 'compatibility' profile. (deprecated)" ON )
+option(WITH_GL_PROFILE_CORE "Support using the OpenGL 3.2+ 'core' profile." OFF)
+option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (thru either EGL or the AGL/WGL/XGL 'es20' profile)" OFF)
+
+mark_as_advanced(
+ WITH_GLEW_MX
+ WITH_GLEW_ES
+ WITH_GL_EGL
+ WITH_GL_PROFILE_COMPAT
+ WITH_GL_PROFILE_CORE
+ WITH_GL_PROFILE_ES20
+)
+
+if (WITH_GL_PROFILE_COMPAT)
+ set(WITH_GLU ON)
+else()
+ set(WITH_GLU OFF)
+endif()
+
+if(WIN32)
+ option(WITH_GL_ANGLE "Link with the ANGLE library, an OpenGL ES 2.0 implementation based on Direct3D, instead of the system OpenGL library." OFF)
+ mark_as_advanced(WITH_GL_ANGLE)
+endif()
+
+if(WITH_GLEW_ES AND WITH_SYSTEM_GLEW)
+ message(WARNING Ignoring WITH_SYSTEM_GLEW and using WITH_GLEW_ES)
+ set(WITH_SYSTEM_GLEW OFF)
+endif()
+
+# Apple
+
if(APPLE)
if(${CMAKE_VERSION} VERSION_LESS 3.0) # else breaks setting CMP0043 policy
cmake_minimum_required(VERSION 2.8.8)
@@ -518,9 +562,10 @@ if(WITH_INSTALL_PORTABLE)
endif()
if(WITH_GHOST_SDL OR WITH_HEADLESS)
- set(WITH_GHOST_XDND OFF)
+ set(WITH_X11 OFF)
+ set(WITH_X11_XINPUT OFF)
set(WITH_X11_XF86VMODE OFF)
- set(WITH_X11_XINPUT OFF)
+ set(WITH_GHOST_XDND OFF)
endif()
TEST_SSE_SUPPORT(COMPILER_SSE_FLAG COMPILER_SSE2_FLAG)
@@ -602,6 +647,35 @@ set(PLATFORM_LINKFLAGS_DEBUG "")
#-----------------------------------------------------------------------------
#Platform specifics
+if(WITH_X11)
+ find_package(X11 REQUIRED)
+
+ find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
+ mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
+
+ list(APPEND PLATFORM_LINKLIBS ${X11_X11_LIB})
+
+ if(WITH_X11_XINPUT)
+ if(X11_Xinput_LIB)
+ list(APPEND PLATFORM_LINKLIBS ${X11_Xinput_LIB})
+ else()
+ set(WITH_X11_XINPUT OFF)
+ endif()
+ endif()
+
+ if(WITH_X11_XF86VMODE)
+ # XXX, why dont cmake make this available?
+ find_library(X11_Xxf86vmode_LIB Xxf86vm ${X11_LIB_SEARCH_PATH})
+ mark_as_advanced(X11_Xxf86vmode_LIB)
+ if(X11_Xxf86vmode_LIB)
+ list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
+ else()
+ set(WITH_X11_XF86VMODE OFF)
+ endif()
+ endif()
+
+endif()
+
if(UNIX AND NOT APPLE)
macro(find_package_wrapper)
string(TOUPPER ${ARGV0} _NAME_UPPER)
@@ -910,33 +984,6 @@ if(UNIX AND NOT APPLE)
# OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm -lpthread)
- if((NOT WITH_HEADLESS) AND (NOT WITH_GHOST_SDL))
- find_package(X11 REQUIRED)
- find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
- mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
-
- list(APPEND PLATFORM_LINKLIBS ${X11_X11_LIB})
-
- if(WITH_X11_XINPUT)
- if(X11_Xinput_LIB)
- list(APPEND PLATFORM_LINKLIBS ${X11_Xinput_LIB})
- else()
- set(WITH_X11_XINPUT OFF)
- endif()
- endif()
-
- if(WITH_X11_XF86VMODE)
- # XXX, why dont cmake make this available?
- find_library(X11_Xxf86vmode_LIB Xxf86vm ${X11_LIB_SEARCH_PATH})
- mark_as_advanced(X11_Xxf86vmode_LIB)
- if(X11_Xxf86vmode_LIB)
- list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
- else()
- set(WITH_X11_XF86VMODE OFF)
- endif()
- endif()
- endif()
-
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
if(NOT WITH_PYTHON_MODULE)
# binreloc is linux only
@@ -2078,10 +2125,123 @@ endif()
#-----------------------------------------------------------------------------
# Configure OpenGL.
+
find_package(OpenGL)
blender_include_dirs_sys("${OPENGL_INCLUDE_DIR}")
-# unset(OPENGL_LIBRARIES CACHE) # not compat with older cmake
-# unset(OPENGL_xmesa_INCLUDE_DIR CACHE) # not compat with older cmake
+
+if(WITH_GLU)
+ list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_glu_LIBRARY}")
+ list(APPEND GL_DEFINITIONS -DWITH_GLU)
+endif()
+
+if(WITH_SYSTEM_GLES)
+ find_package_wrapper(OpenGLES)
+endif()
+
+if(WITH_GL_PROFILE_COMPAT OR WITH_GL_PROFILE_CORE)
+ list(APPEND BLENDER_GL_LIBRARIES "${OPENGL_gl_LIBRARY}")
+
+elseif(WITH_GL_PROFILE_ES20)
+ if(WITH_SYSTEM_GLES)
+ if(NOT OPENGLES_LIBRARY)
+ message(FATAL_ERROR "Unable to find OpenGL ES libraries. Install them or disable WITH_SYSTEM_GLES.")
+ endif()
+
+ list(APPEND BLENDER_GL_LIBRARIES OPENGLES_LIBRARY)
+
+ else()
+ set(OPENGLES_LIBRARY "" CACHE FILEPATH "OpenGL ES 2.0 library file")
+ mark_as_advanced(OPENGLES_LIBRARY)
+
+ list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}")
+
+ if (NOT OPENGLES_LIBRARY)
+ message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_LIBRARY to the file path of an OpenGL ES 2.0 library.")
+ endif()
+
+ endif()
+
+ if(WIN32)
+ # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
+
+ set(OPENGLES_DLL "" CACHE FILEPATH "OpenGL ES 2.0 redistributable DLL file")
+ mark_as_advanced(OPENGLES_DLL)
+
+ if(NOT OPENGLES_DLL)
+ message(FATAL_ERROR "To compile WITH_GL_PROFILE_ES20 you need to set OPENGLES_DLL to the file path of an OpenGL ES 2.0 runtime dynamic link library (DLL).")
+ endif()
+
+ if(WITH_GL_ANGLE)
+ list(APPEND GL_DEFINITIONS -DWITH_ANGLE)
+
+ set(D3DCOMPILER_DLL "" CACHE FILEPATH "Direct3D Compiler redistributable DLL file (needed by ANGLE)")
+
+ get_filename_component(D3DCOMPILER_FILENAME "${D3DCOMPILER_DLL}" NAME)
+ list(APPEND GL_DEFINITIONS "-DD3DCOMPILER=\"\\\"${D3DCOMPILER_FILENAME}\\\"\"")
+
+ mark_as_advanced(D3DCOMPILER_DLL)
+
+ if (D3DCOMPILER_DLL STREQUAL "")
+ message(FATAL_ERROR "To compile WITH_GL_ANGLE you need to set D3DCOMPILER_DLL to the file path of a copy of the DirectX redistributable DLL file: D3DCompiler_46.dll")
+ endif()
+
+ endif()
+
+ endif()
+
+endif()
+
+if(WITH_GL_EGL)
+ list(APPEND GL_DEFINITIONS -DWITH_GL_EGL)
+
+ if(WITH_SYSTEM_GLES)
+ if(NOT OPENGLES_EGL_LIBRARY)
+ message(FATAL_ERROR "Unable to find OpenGL ES libraries. Install them or disable WITH_SYSTEM_GLES.")
+ endif()
+
+ list(APPEND BLENDER_GL_LIBRARIES OPENGLES_EGL_LIBRARY)
+
+ else()
+ set(OPENGLES_EGL_LIBRARY "" CACHE FILEPATH "EGL library file")
+ mark_as_advanced(OPENGLES_EGL_LIBRARY)
+
+ list(APPEND BLENDER_GL_LIBRARIES "${OPENGLES_LIBRARY}" "${OPENGLES_EGL_LIBRARY}")
+
+ if (NOT OPENGLES_EGL_LIBRARY)
+ message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_EGL_LIBRARY to the file path of an EGL library.")
+ endif()
+
+ endif()
+
+ if(WIN32)
+ # Setup paths to files needed to install and redistribute Windows Blender with OpenGL ES
+
+ set(OPENGLES_EGL_DLL "" CACHE FILEPATH "EGL redistributable DLL file")
+ mark_as_advanced(OPENGLES_EGL_DLL)
+
+ if(NOT OPENGLES_EGL_DLL)
+ message(FATAL_ERROR "To compile WITH_GL_EGL you need to set OPENGLES_EGL_DLL to the file path of an EGL runtime dynamic link library (DLL).")
+ endif()
+
+ endif()
+
+endif()
+
+if(WITH_GL_PROFILE_COMPAT)
+ list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_COMPAT)
+endif()
+
+if(WITH_GL_PROFILE_CORE)
+ list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_CORE)
+endif()
+
+if(WITH_GL_PROFILE_ES20)
+ list(APPEND GL_DEFINITIONS -DWITH_GL_PROFILE_ES20)
+endif()
+
+if(WITH_GL_EGL)
+ list(APPEND GL_DEFINITIONS -DWITH_EGL)
+endif()
#-----------------------------------------------------------------------------
# Configure OpenMP.
@@ -2103,19 +2263,76 @@ endif()
#-----------------------------------------------------------------------------
# Configure GLEW
+if(WITH_GLEW_MX)
+ list(APPEND GL_DEFINITIONS -DWITH_GLEW_MX)
+endif()
+
if(WITH_SYSTEM_GLEW)
find_package(GLEW)
+ # Note: There is an assumption here that the system GLEW is not a static library.
+
if(NOT GLEW_FOUND)
- message(FATAL_ERROR "GLEW is required to build blender, install it or disable WITH_SYSTEM_GLEW")
+ message(FATAL_ERROR "GLEW is required to build Blender. Install it or disable WITH_SYSTEM_GLEW.")
endif()
- set(GLEW_INCLUDE_PATH "${GLEW_INCLUDE_DIRS}")
+ if(WITH_GLEW_MX)
+ set(BLENDER_GLEW_LIBRARIES ${GLEW_MX_LIBRARY})
+ else()
+ set(BLENDER_GLEW_LIBRARIES ${GLEW_LIBRARY})
+ endif()
else()
- # set(GLEW_LIBRARY "") # unused
- set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
+ if(WITH_GLEW_ES)
+ set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew-es/include")
+
+ list(APPEND GL_DEFINITIONS -DGLEW_STATIC -DWITH_GLEW_ES)
+
+ # These definitions remove APIs from glew.h, making GLEW smaller, and catching unguarded API usage
+ if(NOT WITH_GL_PROFILE_ES20)
+ # No ES functions are needed
+ list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
+ elseif(NOT (WITH_GL_PROFILE_CORE OR WITH_GL_PROFILE_COMPAT))
+ # ES is enabled, but the other functions are all disabled
+ list(APPEND GL_DEFINITIONS -DGLEW_ES_ONLY)
+ endif()
+
+ if(WITH_GL_PROFILE_ES20)
+ if(WITH_GL_EGL)
+ list(APPEND GL_DEFINITIONS -DGLEW_USE_LIB_ES20)
+ endif()
+
+ # ToDo: This is an experiment to eliminate ES 1 symbols,
+ # GLEW doesn't really properly provide this level of control
+ # (for example, without modification it eliminates too many symbols)
+ # so there are lots of modifications to GLEW to make this work,
+ # and no attempt to make it work beyond Blender at this point.
+ list(APPEND GL_DEFINITIONS -DGL_ES_VERSION_1_0=0 -DGL_ES_VERSION_CL_1_1=0 -DGL_ES_VERSION_CM_1_1=0)
+ endif()
+
+ if(WITH_GL_EGL)
+ list(APPEND GL_DEFINITIONS -DGLEW_INC_EGL)
+ endif()
+
+ set(BLENDER_GLEW_LIBRARIES extern_glew_es bf_intern_glew_mx)
+
+ else()
+ set(GLEW_INCLUDE_PATH "${CMAKE_SOURCE_DIR}/extern/glew/include")
+
+ list(APPEND GL_DEFINITIONS -DGLEW_STATIC)
+
+ # This won't affect the non-experimental glew library,
+ # but is used for conditional compilation elsewhere.
+ list(APPEND GL_DEFINITIONS -DGLEW_NO_ES)
+
+ set(BLENDER_GLEW_LIBRARIES extern_glew)
+
+ endif()
+
endif()
+if(NOT WITH_GLU)
+ list(APPEND GL_DEFINITIONS -DGLEW_NO_GLU)
+endif()
#-----------------------------------------------------------------------------
# Configure Bullet
@@ -2483,6 +2700,17 @@ if(FIRST_RUN)
info_cfg_option(WITH_MOD_FLUID)
info_cfg_option(WITH_MOD_OCEANSIM)
+ info_cfg_text("OpenGL:")
+ info_cfg_option(WITH_GLEW_ES)
+ info_cfg_option(WITH_GLU)
+ info_cfg_option(WITH_GL_EGL)
+ info_cfg_option(WITH_GL_PROFILE_COMPAT)
+ info_cfg_option(WITH_GL_PROFILE_CORE)
+ info_cfg_option(WITH_GL_PROFILE_ES20)
+ if(WIN32)
+ info_cfg_option(WITH_GL_ANGLE)
+ endif()
+
info_cfg_text("Other:")
info_cfg_option(WITH_OPENNL)