From 6decda274fd00374121cc5ee9e8bc137185e34a1 Mon Sep 17 00:00:00 2001 From: pradeep Date: Tue, 13 Jun 2017 20:47:33 +0530 Subject: [PATCH 01/55] Use arrayfire fork of freetype Upstream git server is causing HTTP 503 occasionally which is causing our build jobs to hang. --- CMakeModules/build_freetype.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeModules/build_freetype.cmake b/CMakeModules/build_freetype.cmake index 42514cbc..ea9a42a1 100644 --- a/CMakeModules/build_freetype.cmake +++ b/CMakeModules/build_freetype.cmake @@ -26,7 +26,7 @@ ENDIF(UNIX) ExternalProject_Add( ft-ext - GIT_REPOSITORY http://git.sv.nongnu.org/r/freetype/freetype2.git + GIT_REPOSITORY https://github.com/arrayfire/freetype2.git GIT_TAG VER-2-7-1 PREFIX "${prefix}" INSTALL_DIR "${prefix}" From 0f7b58358bcfc1356b9ac13e0f645e8fd2dfe9a5 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 22 Dec 2017 11:19:11 +0530 Subject: [PATCH 02/55] refactor: Use modern CMake(>=3.5.2) features Refactored the library build procedure into a more modular format using new cmake features. --- .gitignore | 2 +- CMakeLists.txt | 168 ++++------- CMakeModules/BuildType.cmake | 17 ++ CMakeModules/ConditionalDirectory.cmake | 6 + CMakeModules/DependencyCheck.cmake | 5 + CMakeModules/FindFontConfig.cmake | 132 ++++++--- CMakeModules/FindFreeImage.cmake | 120 +++++--- CMakeModules/FindFreeType.cmake | 56 ++++ CMakeModules/FindGLFW.cmake | 63 ----- CMakeModules/FindOpenGL.cmake | 227 +++++++++++++++ CMakeModules/FindSDL2.cmake | 107 ++++--- CMakeModules/GLSLtoH.cmake | 38 +-- CMakeModules/Version.cmake | 65 ++--- CMakeModules/build_cl2hpp.cmake | 29 -- CMakeModules/build_freetype.cmake | 64 ++--- CMakeModules/build_glbinding.cmake | 57 ---- CMakeModules/build_glm.cmake | 69 ----- docs/CMakeLists.txt | 50 ++-- examples/CMakeLists.txt | 257 ++++++----------- .../CMakeModules/ConditionalDirectory.cmake | 6 + .../CMakeModules}/FindOpenCL.cmake | 89 +++--- examples/CMakeModules/FindOpenGL.cmake | 227 +++++++++++++++ .../CMakeModules/IfNotThisThenInclude.cmake | 7 + examples/CMakeModules/build_cl2hpp.cmake | 16 ++ examples/cpu/CMakeLists.txt | 12 + examples/cpu/fractal.cpp | 2 +- examples/cuda/CMakeLists.txt | 34 +++ examples/cuda/surface.cu | 4 +- examples/opencl/CMakeLists.txt | 18 ++ examples/opencl/cl_helpers.h | 2 +- include/fg/defines.h | 2 +- include/fg/exception.h | 2 + include/fg/{util.h => update_buffer.h} | 0 include/forge.h | 2 +- src/api/c/CMakeLists.txt | 19 ++ src/api/cpp/CMakeLists.txt | 20 ++ src/api/cpp/exception.cpp | 10 +- src/backend/CMakeLists.txt | 106 ------- src/backend/common/CMakeLists.txt | 25 ++ src/backend/{ => common}/chart.hpp | 0 src/backend/{ => common}/chart_common.hpp | 0 .../{ => common}/chart_renderables.hpp | 0 src/backend/{ => common}/cmap.hpp | 0 src/backend/{ => common}/defines.hpp | 2 +- src/backend/{ => common}/err_common.cpp | 2 + src/backend/{ => common}/err_common.hpp | 0 src/backend/{ => common}/font.hpp | 0 src/backend/{ => common}/handle.cpp | 0 src/backend/{ => common}/handle.hpp | 0 src/backend/{ => common}/image.hpp | 0 src/backend/{ => common}/util.cpp | 0 src/backend/{ => common}/util.hpp | 0 src/backend/{ => common}/window.hpp | 0 src/backend/glsl_shaders/CMakeLists.txt | 21 ++ src/backend/opengl/CMakeLists.txt | 266 ++++++++---------- src/backend/opengl/common.cpp | 2 +- src/backend/opengl/common.hpp | 2 +- src/backend/opengl/font_impl.cpp | 6 +- src/backend/opengl/gl_native_handles.cpp | 4 +- src/backend/opengl/glfw/CMakeLists.txt | 16 ++ src/backend/opengl/sdl/CMakeLists.txt | 16 ++ .../opengl/{util.cpp => update_buffer.cpp} | 4 +- src/backend/opengl/window_impl.cpp | 2 +- 63 files changed, 1411 insertions(+), 1067 deletions(-) create mode 100644 CMakeModules/BuildType.cmake create mode 100644 CMakeModules/ConditionalDirectory.cmake create mode 100644 CMakeModules/DependencyCheck.cmake create mode 100644 CMakeModules/FindFreeType.cmake delete mode 100644 CMakeModules/FindGLFW.cmake create mode 100644 CMakeModules/FindOpenGL.cmake delete mode 100644 CMakeModules/build_cl2hpp.cmake delete mode 100644 CMakeModules/build_glbinding.cmake delete mode 100644 CMakeModules/build_glm.cmake create mode 100644 examples/CMakeModules/ConditionalDirectory.cmake rename {CMakeModules => examples/CMakeModules}/FindOpenCL.cmake (57%) create mode 100644 examples/CMakeModules/FindOpenGL.cmake create mode 100644 examples/CMakeModules/IfNotThisThenInclude.cmake create mode 100644 examples/CMakeModules/build_cl2hpp.cmake create mode 100644 examples/cpu/CMakeLists.txt create mode 100644 examples/cuda/CMakeLists.txt create mode 100644 examples/opencl/CMakeLists.txt rename include/fg/{util.h => update_buffer.h} (100%) create mode 100644 src/api/c/CMakeLists.txt create mode 100644 src/api/cpp/CMakeLists.txt delete mode 100644 src/backend/CMakeLists.txt create mode 100644 src/backend/common/CMakeLists.txt rename src/backend/{ => common}/chart.hpp (100%) rename src/backend/{ => common}/chart_common.hpp (100%) rename src/backend/{ => common}/chart_renderables.hpp (100%) rename src/backend/{ => common}/cmap.hpp (100%) rename src/backend/{ => common}/defines.hpp (96%) rename src/backend/{ => common}/err_common.cpp (99%) rename src/backend/{ => common}/err_common.hpp (100%) rename src/backend/{ => common}/font.hpp (100%) rename src/backend/{ => common}/handle.cpp (100%) rename src/backend/{ => common}/handle.hpp (100%) rename src/backend/{ => common}/image.hpp (100%) rename src/backend/{ => common}/util.cpp (100%) rename src/backend/{ => common}/util.hpp (100%) rename src/backend/{ => common}/window.hpp (100%) create mode 100644 src/backend/glsl_shaders/CMakeLists.txt create mode 100644 src/backend/opengl/glfw/CMakeLists.txt create mode 100644 src/backend/opengl/sdl/CMakeLists.txt rename src/backend/opengl/{util.cpp => update_buffer.cpp} (98%) diff --git a/.gitignore b/.gitignore index bac1956a..4fdd2dcf 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,5 @@ GRTAGS GPATH .dir-locals.el include/fg/version.h -src/backend/version.hpp +src/backend/common/version.hpp docs/details/examples.dox diff --git a/CMakeLists.txt b/CMakeLists.txt index ffa5405a..20150148 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,130 +1,78 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.0) +cmake_minimum_required(VERSION 3.5) -OPTION(USE_HUNTER "Use Hunter cmake package handler" OFF) +project(Forge VERSION 1.1.0 LANGUAGES C CXX) -if(USE_HUNTER) - include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) - - HunterGate( - URL "https://github.com/ruslo/hunter/archive/v0.18.43.tar.gz" - SHA1 "d2c8c42cd07f7cefe18fd9a9b9c13114b1a15a27" -# LOCAL - ) -endif() - -PROJECT(FORGE) - -SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") -INCLUDE(FGInstallDirs) -INCLUDE(Version) - - -############################## BEGIN - CMAKE OPTIONS ########################## -OPTION(BUILD_DOCUMENTATION "Build Documentation" OFF) -OPTION(BUILD_EXAMPLES "Build Examples" ON) -OPTION(USE_FREEIMAGE "Use freeimage to allow saving of charts" ON) - -# Set a default build type if none was specified -IF(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) - # Set the possible values of build type for cmake-gui - SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" - "MinSizeRel" "RelWithDebInfo") -ENDIF() -############################## END - CMAKE OPTIONS ########################## - - -############################## BEGIN - OS Definitions ######################### -IF(UNIX) - ADD_DEFINITIONS(-Wall -std=c++11 -fvisibility=hidden) -ENDIF() +set_property(GLOBAL PROPERTY USE_FOLDERS ON) -IF(UNIX) - IF(APPLE) - ADD_DEFINITIONS(-DOS_MAC) - SET(CMAKE_MACOSX_RPATH ON) - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") - SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") +set(CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}prefix;${CMAKE_PREFIX_PATH}") - LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}" isSystemDir) - IF("${isSystemDir}" STREQUAL "-1") - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") - ENDIF("${isSystemDir}" STREQUAL "-1") - ELSE(APPLE) - ADD_DEFINITIONS(-DOS_LNX) - ENDIF(APPLE) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") -ELSE(UNIX) - ADD_DEFINITIONS(-DOS_WIN -DNOMINMAX) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -ENDIF(UNIX) -############################## END - OS Definitions ########################### +include(BuildType) +include(CMakeDependentOption) +include(ConditionalDirectory) +include(DependencyCheck) +include(Version) +include(FGInstallDirs) +find_package(Doxygen QUIET) +find_package(glbinding REQUIRED) +find_package(glm REQUIRED) +find_package(FreeType) +find_package(FontConfig QUIET) +find_package(X11 QUIET) +find_package(FreeImage QUIET) +find_package(Boost) -INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/include") +option(BUILD_DOCS "Build Documentation" ${DOXYGEN_FOUND}) +option(BUILD_EXAMPLES "Build Examples" ON) +option(WITH_FREEIMAGE "Use FreeImage to add support for + saving framebuffer to disk" ${FreeImage_FOUND}) -## X11 libraries need to be explicitly linked on MacOS -## This is required by both examples and the library itself -## Hence, it is placed here. -SET(X11_LIBS "") -IF(APPLE) - FIND_PACKAGE(X11 REQUIRED) - INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR}) - SET(X11_LIBS ${X11_LIBRARIES}) -ENDIF(APPLE) +if(Boost_FOUND AND NOT TARGET Boost::boost) + add_library(Boost::boost INTERFACE IMPORTED) + set_property(TARGET Boost::boost PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS}) +endif(Boost_FOUND AND NOT TARGET Boost::boost) -ADD_SUBDIRECTORY(src/backend) -IF(BUILD_EXAMPLES) - ADD_SUBDIRECTORY(examples) -ENDIF() +set(WINDOW_TOOLKIT "glfw3" CACHE STRING "Choose Window toolkit") +set_property(CACHE WINDOW_TOOLKIT PROPERTY STRINGS "glfw3" "sdl2") -# Generate documentation -IF(BUILD_DOCUMENTATION) - ADD_SUBDIRECTORY(docs) -ENDIF(BUILD_DOCUMENTATION) - -#-------------------------------------------------------------------- -# Create generated files -#-------------------------------------------------------------------- -INCLUDE(CMakePackageConfigHelpers) +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE + PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() -configure_package_config_file("${PROJECT_SOURCE_DIR}/CMakeModules/ForgeConfig.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/ForgeConfig.cmake" - INSTALL_DESTINATION ${FG_INSTALL_CMAKE_DIR} - PATH_VARS CMAKE_INSTALL_PREFIX - NO_CHECK_REQUIRED_COMPONENTS_MACRO) +add_subdirectory(src/backend/common) +add_subdirectory(src/backend/glsl_shaders) +add_subdirectory(src/api/c) +add_subdirectory(src/api/cpp) +add_subdirectory(src/backend/opengl) -write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ForgeConfigVersion.cmake" - VERSION ${FG_VERSION} - COMPATIBILITY SameMajorVersion) +conditional_directory(BUILD_DOCS docs) +conditional_directory(BUILD_EXAMPLES examples) #-------------------------------------------------------------------- -# Install files other than the library, examples and docs -# The library is installed by src/backend/*/CMakeLists.txt +# Install include folder, docs, examples etc. #-------------------------------------------------------------------- -INSTALL(DIRECTORY "${PROJECT_SOURCE_DIR}/include/" DESTINATION "${FG_INSTALL_INC_DIR}" +install(DIRECTORY include/ + DESTINATION ${FG_INSTALL_INC_DIR} FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" PATTERN ".gitignore" EXCLUDE -) - -INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/ForgeConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/ForgeConfigVersion.cmake" - DESTINATION ${FG_INSTALL_CMAKE_DIR}) - -# We are only installing the source files for examples. -# So this should not depend on the value of BUILD_EXAMPLES -# These examples will be installed without building the executables for the examples -INSTALL(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/examples/" - DESTINATION "${FG_INSTALL_EXAMPLE_DIR}" - COMPONENT examples) + ) -INSTALL(FILES - "${PROJECT_SOURCE_DIR}/CMakeModules/FindOpenCL.cmake" - DESTINATION "${FG_INSTALL_EXAMPLE_DIR}/CMakeModules/" - COMPONENT examples) +#-------------------------------------------------------------------- +# Install examples +#-------------------------------------------------------------------- +# install the examples irrespective of the BUILD_EXAMPLES value +# only the examples source files are installed, so the installation of these +# source files does not depend on BUILD_EXAMPLES +# when BUILD_EXAMPLES is OFF, the examples source is installed without +# building the example executables +install(DIRECTORY examples/ #NOTE The slash at the end is important + DESTINATION ${FG_INSTALL_EXAMPLE_DIR} + COMPONENT examples) diff --git a/CMakeModules/BuildType.cmake b/CMakeModules/BuildType.cmake new file mode 100644 index 00000000..e8ffaffe --- /dev/null +++ b/CMakeModules/BuildType.cmake @@ -0,0 +1,17 @@ +# Created using code snippet at https://blog.kitware.com/cmake-and-the-default-build-type/ + +# Set a default build type if none was specified + +set(default_build_type "Release") +if(EXISTS "${CMAKE_SOURCE_DIR}/.git") + set(default_build_type "Debug") +endif() + +if(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting build type to '${default_build_type}' as none was specified.") + set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE + STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") +endif() diff --git a/CMakeModules/ConditionalDirectory.cmake b/CMakeModules/ConditionalDirectory.cmake new file mode 100644 index 00000000..8ba1cc72 --- /dev/null +++ b/CMakeModules/ConditionalDirectory.cmake @@ -0,0 +1,6 @@ +# Includes the directory if the variable is set +function(conditional_directory variable directory) + if(${variable}) + add_subdirectory(${directory}) + endif() +endfunction() diff --git a/CMakeModules/DependencyCheck.cmake b/CMakeModules/DependencyCheck.cmake new file mode 100644 index 00000000..88a2aadb --- /dev/null +++ b/CMakeModules/DependencyCheck.cmake @@ -0,0 +1,5 @@ +function(dependency_check VAR ERROR_MESSAGE) + if(NOT ${VAR}) + message(SEND_ERROR ${ERROR_MESSAGE}) + endif() +endfunction() diff --git a/CMakeModules/FindFontConfig.cmake b/CMakeModules/FindFontConfig.cmake index 07925e80..0a524ea1 100644 --- a/CMakeModules/FindFontConfig.cmake +++ b/CMakeModules/FindFontConfig.cmake @@ -1,59 +1,107 @@ -#sourced from -#https://github.com/rougier/freetype-gl/blob/master/CMakeModules/FindFontConfig.cmake - -# - Try to find Fontconfig -# Once done this will define +# FindFontConfig.cmake +# Author: Pradeep Garigipati +# +# Finds the fontconfig libraries +# +# Sets the following variables: +# FontConfig_FOUND +# FontConfig_INCLUDE_DIR +# FontConfig_DYNAMIC_LIBRARY +# FontConfig_STATIC_LIBRARY +# +# Usage: +# find_package(FontConfig) +# if (FontConfig_FOUND) +# target_link_libraries(mylib PRIVATE FontConfig::FontConfig) +# endif (FontConfig_FOUND) # -# FONTCONFIG_FOUND - system has Fontconfig -# FONTCONFIG_INCLUDE_DIR - the Fontconfig include directory -# FONTCONFIG_LIBRARY - Link these to use Fontconfig -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# OR if you want to link against the static library: +# +# find_package(FontConfig) +# if (FontConfig_FOUND) +# target_link_libraries(mylib PRIVATE FontConfig::FontConfig_STATIC) +# endif (FontConfig_FOUND) +# +# NOTE: You do not need to include the FontConfig include directories since they +# will be included as part of the target_link_libraries command -IF ( FONTCONFIG_INCLUDE_DIR AND FONTCONFIG_LIBRARY ) - # in cache already - SET(Fontconfig_FIND_QUIETLY TRUE) -ENDIF ( FONTCONFIG_INCLUDE_DIR AND FONTCONFIG_LIBRARY ) +set(PX ${CMAKE_STATIC_LIBRARY_PREFIX}) +set(SX ${CMAKE_STATIC_LIBRARY_SUFFIX}) # use pkg-config to get the directories and then use these values -# in the FIND_PATH() and FIND_LIBRARY() calls -IF (NOT WIN32) - FIND_PACKAGE(PkgConfig) +# in the find_path() and find_library() calls +if (NOT WIN32) + find_package(PkgConfig) + pkg_check_modules(FontConfigPkg QUIET fontconfig) +endif (NOT WIN32) - pkg_check_modules(FONTCONFIG_PKG QUIET fontconfig) -ENDIF (NOT WIN32) - -FIND_PATH(FONTCONFIG_INCLUDE_DIR NAMES fontconfig/fontconfig.h +find_path(FontConfig_INCLUDE_DIR + NAMES fontconfig/fontconfig.h PATHS - /usr/local/include - /usr/X11/include - /usr/include + /usr/include + /usr/local/include + /sw/include + /opt/local/include HINTS - ${FONTCONFIG_PKG_INCLUDE_DIRS} # Generated by pkg-config + ${FontConfigPkg_INCLUDE_DIRS} # Generated by pkg-config ) -IF (DEFINED FONTCONFIG_INCLUDE_DIR-NOTFOUND) - MESSAGE(FATAL_ERROR "FontConfig header files not found") -ENDIF (DEFINED FONTCONFIG_INCLUDE_DIR-NOTFOUND) +find_library(FontConfig_DYNAMIC_LIBRARY + NAMES FontConfig fontconfig ${FontConfigPkg_LIBRARY} + PATHS + /usr/local + /usr/X11 + /usr + /sw + /opt/local + /usr/lib/x86_64-linux-gnu + HINTS + ${FontConfigPkg_LIBRARY_DIRS} # Generated by pkg-config + PATH_SUFFIXES + lib64 + lib + ) -FIND_LIBRARY(FONTCONFIG_LIBRARY NAMES fontconfig ${FONTCONFIG_PKG_LIBRARY} +find_library(FontConfig_STATIC_LIBRARY + NAMES ${PX}fontconfig${SX} ${PX}FontConfig${SX} ${PX}${FontConfigPkg_LIBRARY}${SX} PATHS - /usr/local - /usr/X11 - /usr + /usr/local + /usr/X11 + /usr + /sw + /opt/local + /usr/lib/x86_64-linux-gnu HINTS - ${FONTCONFIG_PKG_LIBRARY_DIRS} # Generated by pkg-config + ${FontConfigPkg_LIBRARY_DIRS} # Generated by pkg-config PATH_SUFFIXES - lib64 - lib + lib64 + lib ) -IF (DEFINED FONTCONFIG_LIBRARY-NOTFOUND) - MESSAGE(FATAL_ERROR "FontConfig library files not found") -ENDIF (DEFINED FONTCONFIG_LIBRARY-NOTFOUND) +mark_as_advanced( + FontConfig_INCLUDE_DIR + FontConfig_DYNAMIC_LIBRARY + FontConfig_STATIC_LIBRARY + ) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(FontConfig + REQUIRED_VARS FontConfig_DYNAMIC_LIBRARY FontConfig_INCLUDE_DIR + ) -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Fontconfig DEFAULT_MSG FONTCONFIG_LIBRARY FONTCONFIG_INCLUDE_DIR) +if (FontConfig_FOUND AND NOT TARGET FontConfig::FontConfig) + add_library(FontConfig::FontConfig UNKNOWN IMPORTED) + set_target_properties(FontConfig::FontConfig PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + IMPORTED_LOCATION ${FontConfig_DYNAMIC_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${FontConfig_INCLUDE_DIR}) -# show the FONTCONFIG_INCLUDE_DIR and FONTCONFIG_LIBRARY variables only in the advanced view -MARK_AS_ADVANCED(FONTCONFIG_INCLUDE_DIR FONTCONFIG_LIBRARY) + if (FontConfig_STATIC_LIBRARY) + add_library(FontConfig::FontConfig_STATIC UNKNOWN IMPORTED) + set_target_properties(FontConfig::FontConfig_STATIC PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + IMPORTED_LOCATION "${FontConfig_STATIC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FontConfig_INCLUDE_DIR}") + endif (FontConfig_STATIC_LIBRARY) +endif () diff --git a/CMakeModules/FindFreeImage.cmake b/CMakeModules/FindFreeImage.cmake index 627ffb39..67745b94 100644 --- a/CMakeModules/FindFreeImage.cmake +++ b/CMakeModules/FindFreeImage.cmake @@ -1,69 +1,97 @@ +# FindFreeImage.cmake +# Author: Umar Arshad +# Modified on 15-JUL-2017 by Pradeep Garigipati # -# Try to find the FreeImage library and include path. -# Once done this will define +# Finds the FreeImage libraries +# Sets the following variables: +# FreeImage_FOUND +# FreeImage_INCLUDE_DIR +# FreeImage_DYNAMIC_LIBRARY +# FreeImage_STATIC_LIBRARY # -# FREEIMAGE_FOUND -# FREEIMAGE_INCLUDE_PATH -# FREEIMAGE_LIBRARY -# FREEIMAGE_STATIC_LIBRARY -# FREEIMAGE_DYNAMIC_LIBRARY +# Usage: +# find_package(FreeImage) +# if (FreeImage_FOUND) +# target_link_libraries(mylib PRIVATE FreeImage::FreeImage) +# endif (FreeImage_FOUND) # +# OR if you want to link against the static library: +# +# find_package(FreeImage) +# if (FreeImage_FOUND) +# target_link_libraries(mylib PRIVATE FreeImage::FreeImage_STATIC) +# endif (FreeImage_FOUND) +# +# NOTE: You do not need to include the FreeImage include directories since they +# will be included as part of the target_link_libraries command -OPTION(USE_FREEIMAGE_STATIC "Use Static FreeImage Lib" OFF) +set(PX ${CMAKE_STATIC_LIBRARY_PREFIX}) +set(SX ${CMAKE_STATIC_LIBRARY_SUFFIX}) -FIND_PATH( FREEIMAGE_INCLUDE_PATH +find_path(FreeImage_INCLUDE_DIR NAMES FreeImage.h HINTS ${PROJECT_SOURCE_DIR}/extern/FreeImage PATHS - /usr/include - /usr/local/include - /sw/include - /opt/local/include + /usr/include + /usr/local/include + /sw/include + /opt/local/include DOC "The directory where FreeImage.h resides") -FIND_LIBRARY( FREEIMAGE_DYNAMIC_LIBRARY +find_library(FreeImage_DYNAMIC_LIBRARY NAMES FreeImage freeimage HINTS ${PROJECT_SOURCE_DIR}/FreeImage PATHS - /usr/lib64 - /usr/lib - /usr/local/lib64 - /usr/local/lib - /sw/lib - /opt/local/lib + /usr/local + /usr/X11 + /usr + /sw + /opt/local + /usr/lib/x86_64-linux-gnu + PATH_SUFFIXES + lib64 + lib DOC "The FreeImage library") -SET(PX ${CMAKE_STATIC_LIBRARY_PREFIX}) -SET(SX ${CMAKE_STATIC_LIBRARY_SUFFIX}) -FIND_LIBRARY( FREEIMAGE_STATIC_LIBRARY +find_library(FreeImage_STATIC_LIBRARY NAMES ${PX}FreeImageLIB${SX} ${PX}FreeImage${SX} ${PX}freeimage${SX} HINTS ${PROJECT_SOURCE_DIR}/FreeImage PATHS - /usr/lib64 - /usr/lib - /usr/local/lib64 - /usr/local/lib - /sw/lib - /opt/local/lib + /usr/local + /usr/X11 + /usr + /sw + /opt/local + /usr/lib/x86_64-linux-gnu + PATH_SUFFIXES + lib64 + lib DOC "The FreeImage library") -UNSET(PX) -UNSET(SX) - -IF(USE_FREEIMAGE_STATIC) - MESSAGE(STATUS "Using Static FreeImage Lib") - ADD_DEFINITIONS(-DFREEIMAGE_LIB) - SET(FREEIMAGE_LIBRARY ${FREEIMAGE_STATIC_LIBRARY}) -ELSE(USE_FREEIMAGE_STATIC) - MESSAGE(STATUS "Using Dynamic FreeImage Lib") - REMOVE_DEFINITIONS(-DFREEIMAGE_LIB) - SET(FREEIMAGE_LIBRARY ${FREEIMAGE_DYNAMIC_LIBRARY}) -ENDIF(USE_FREEIMAGE_STATIC) -MARK_AS_ADVANCED( - FREEIMAGE_DYNAMIC_LIBRARY - FREEIMAGE_STATIC_LIBRARY +mark_as_advanced( + FreeImage_INCLUDE_DIR + FreeImage_DYNAMIC_LIBRARY + FreeImage_STATIC_LIBRARY ) -INCLUDE(FindPackageHandleStandardArgs) +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(FreeImage + REQUIRED_VARS FreeImage_INCLUDE_DIR FreeImage_DYNAMIC_LIBRARY + ) + +if (FreeImage_FOUND AND NOT TARGET FreeImage::FreeImage) + add_library(FreeImage::FreeImage UNKNOWN IMPORTED) + set_target_properties(FreeImage::FreeImage PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + IMPORTED_LOCATION "${FreeImage_DYNAMIC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}") -FIND_PACKAGE_HANDLE_STANDARD_ARGS(FREEIMAGE DEFAULT_MSG FREEIMAGE_INCLUDE_PATH FREEIMAGE_LIBRARY) + if (FreeImage_STATIC_LIBRARY) + add_library(FreeImage::FreeImage_STATIC UNKNOWN IMPORTED) + set_target_properties(FreeImage::FreeImage_STATIC PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + IMPORTED_LOCATION "${FreeImage_STATIC_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}") + endif (FreeImage_STATIC_LIBRARY) +endif () diff --git a/CMakeModules/FindFreeType.cmake b/CMakeModules/FindFreeType.cmake new file mode 100644 index 00000000..afc99867 --- /dev/null +++ b/CMakeModules/FindFreeType.cmake @@ -0,0 +1,56 @@ +# FindFreeType.cmake +# Author: Pradeep Garigipati +# +# Heavy work is done by FindFreetype.cmake that comes along with +# FreeType installation on your system if your OS is OSX/Unix. +# +# If the OS is Windows, the freetype is build as external project +# using the script build_freetype.cmake +# +# Sets the following variables: +# FreeType_FOUND +# FreeType_INCLUDE_DIR +# FreeType_LIBRARY +# +# Usage: +# find_package(FreeType) +# if (FreeType_FOUND) +# target_link_libraries(mylib PRIVATE FreeType::FreeType) +# endif (FreeType_FOUND) +# +# OR if you want to link against the static library: +# +# find_package(FreeType) +# if (FreeType_FOUND) +# target_link_libraries(mylib PRIVATE FreeType::FreeType_STATIC) +# endif (FreeType_FOUND) +# +# NOTE: You do not need to include the Freetype include directories since they +# will be included as part of the target_link_libraries command + +if(WIN32) + include(build_freetype) +else(WIN32) + find_package(Freetype REQUIRED) + set(FreeType_INCLUDE_DIR ${FREETYPE_INCLUDE_DIRS}) + set(FreeType_LIBRARY ${FREETYPE_LIBRARIES}) + + mark_as_advanced( + FreeType_INCLUDE_DIR + FreeType_LIBRARY + ) + + include(FindPackageHandleStandardArgs) + + find_package_handle_standard_args(FreeType + REQUIRED_VARS FreeType_LIBRARY FreeType_INCLUDE_DIR + ) + + if (FreeType_FOUND AND NOT TARGET FreeType::FreeType) + add_library(FreeType::FreeType UNKNOWN IMPORTED) + set_target_properties(FreeType::FreeType PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + IMPORTED_LOCATION "${FreeType_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FreeType_INCLUDE_DIR}") + endif () +endif(WIN32) diff --git a/CMakeModules/FindGLFW.cmake b/CMakeModules/FindGLFW.cmake deleted file mode 100644 index 6886ba34..00000000 --- a/CMakeModules/FindGLFW.cmake +++ /dev/null @@ -1,63 +0,0 @@ -# Sourced from -#https://code.google.com/p/assembly3d/ - -# Locate the glfw library -# This module defines the following variables: -# GLFW_LIBRARY, the name of the library; -# GLFW_INCLUDE_DIR, where to find glfw include files. -# GLFW_FOUND, true if both the GLFW_LIBRARY and GLFW_INCLUDE_DIR have been found. -# -# To help locate the library and include file, you could define an environment variable called -# GLFW_ROOT which points to the root of the glfw library installation. This is pretty useful -# on a Windows platform. -# -# -# Usage example to compile an "executable" target to the glfw library: -# -# FIND_PACKAGE (GLFW REQUIRED) -# INCLUDE_DIRECTORIES (${GLFW_INCLUDE_DIR}) -# ADD_EXECUTABLE (executable ${EXECUTABLE_SRCS}) -# TARGET_LINK_LIBRARIES (executable ${GLFW_LIBRARY}) -# -# TODO: -# Allow the user to select to link to a shared library or to a static library. - -#Search for the include file... -FIND_PATH(GLFW_INCLUDE_DIR GLFW/glfw3.h DOC "Path to GLFW include directory." - HINTS - $ENV{GLFW_ROOT} - PATH_SUFFIX include #For finding the include file under the root of the glfw expanded archive, typically on Windows. - PATHS - /usr/include/ - /usr/local/include/ - # By default headers are under GLFW subfolder - /usr/include/GLFW - /usr/local/include/GLFW - ${GLFW_ROOT_DIR}/include/ # added by ptr -) - -FIND_LIBRARY(GLFW_LIBRARY DOC "Absolute path to GLFW library." - NAMES glfw GLFW.lib glfw3 - HINTS - $ENV{GLFW_ROOT} - PATH_SUFFIXES lib/x64 release debug #For finding the library file under the root of the glfw expanded archive, typically on Windows. - PATHS - /usr/lib - /usr/lib64 - /usr/lib/x86_64-linux-gnu - /usr/lib/arm-linux-gnueabihf - /usr/local/lib - /usr/local/lib64 - /sw/lib - /opt/local/lib - ${GLFW_ROOT_DIR}/lib-msvc100 # added by ptr - ${GLFW_ROOT_DIR}/lib-msvc110 - ${GLFW_ROOT_DIR}/lib-msvc120 - ${GLFW_ROOT_DIR}/lib -) - -SET(GLFW_FOUND 0) -IF(GLFW_LIBRARY AND GLFW_INCLUDE_DIR) - SET(GLFW_FOUND 1) - message(STATUS "GLFW found!") -ENDIF(GLFW_LIBRARY AND GLFW_INCLUDE_DIR) diff --git a/CMakeModules/FindOpenGL.cmake b/CMakeModules/FindOpenGL.cmake new file mode 100644 index 00000000..579277ab --- /dev/null +++ b/CMakeModules/FindOpenGL.cmake @@ -0,0 +1,227 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindOpenGL +# ---------- +# +# FindModule for OpenGL and GLU. +# +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines the :prop_tgt:`IMPORTED` targets: +# +# ``OpenGL::GL`` +# Defined if the system has OpenGL. +# ``OpenGL::GLU`` +# Defined if the system has GLU. +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module sets the following variables: +# +# ``OPENGL_FOUND`` +# True, if the system has OpenGL. +# ``OPENGL_XMESA_FOUND`` +# True, if the system has XMESA. +# ``OPENGL_GLU_FOUND`` +# True, if the system has GLU. +# ``OPENGL_INCLUDE_DIR`` +# Path to the OpenGL include directory. +# ``OPENGL_LIBRARIES`` +# Paths to the OpenGL and GLU libraries. +# +# If you want to use just GL you can use these values: +# +# ``OPENGL_gl_LIBRARY`` +# Path to the OpenGL library. +# ``OPENGL_glu_LIBRARY`` +# Path to the GLU library. +# +# OSX Specific +# ^^^^^^^^^^^^ +# +# On OSX default to using the framework version of OpenGL. People will +# have to change the cache values of OPENGL_glu_LIBRARY and +# OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX. + + +set(_OpenGL_REQUIRED_VARS OPENGL_gl_LIBRARY) + +if (CYGWIN) + + find_path(OPENGL_INCLUDE_DIR GL/gl.h ) + list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR) + + find_library(OPENGL_gl_LIBRARY opengl32 ) + + find_library(OPENGL_glu_LIBRARY glu32 ) + +elseif (WIN32) + + if(BORLAND) + set (OPENGL_gl_LIBRARY import32 CACHE STRING "OpenGL library for win32") + set (OPENGL_glu_LIBRARY import32 CACHE STRING "GLU library for win32") + else() + set (OPENGL_gl_LIBRARY opengl32 CACHE STRING "OpenGL library for win32") + set (OPENGL_glu_LIBRARY glu32 CACHE STRING "GLU library for win32") + endif() + +elseif (APPLE) + + # The OpenGL.framework provides both gl and glu + find_library(OPENGL_gl_LIBRARY OpenGL DOC "OpenGL library for OS X") + find_library(OPENGL_glu_LIBRARY OpenGL DOC + "GLU library for OS X (usually same as OpenGL library)") + find_path(OPENGL_INCLUDE_DIR OpenGL/gl.h DOC "Include for OpenGL on OS X") + list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR) + +else() + if (CMAKE_SYSTEM_NAME MATCHES "HP-UX") + # Handle HP-UX cases where we only want to find OpenGL in either hpux64 + # or hpux32 depending on if we're doing a 64 bit build. + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(_OPENGL_LIB_PATH + /opt/graphics/OpenGL/lib/hpux32/) + else() + set(_OPENGL_LIB_PATH + /opt/graphics/OpenGL/lib/hpux64/ + /opt/graphics/OpenGL/lib/pa20_64) + endif() + elseif(CMAKE_SYSTEM_NAME STREQUAL Haiku) + set(_OPENGL_LIB_PATH + /boot/develop/lib/x86) + set(_OPENGL_INCLUDE_PATH + /boot/develop/headers/os/opengl) + endif() + + # The first line below is to make sure that the proper headers + # are used on a Linux machine with the NVidia drivers installed. + # They replace Mesa with NVidia's own library but normally do not + # install headers and that causes the linking to + # fail since the compiler finds the Mesa headers but NVidia's library. + # Make sure the NVIDIA directory comes BEFORE the others. + # - Atanas Georgiev + + find_path(OPENGL_INCLUDE_DIR GL/gl.h + /usr/share/doc/NVIDIA_GLX-1.0/include + /usr/openwin/share/include + /opt/graphics/OpenGL/include /usr/X11R6/include + ${_OPENGL_INCLUDE_PATH} + ) + list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR) + + find_path(OPENGL_xmesa_INCLUDE_DIR GL/xmesa.h + /usr/share/doc/NVIDIA_GLX-1.0/include + /usr/openwin/share/include + /opt/graphics/OpenGL/include /usr/X11R6/include + ) + + find_library(OPENGL_gl_LIBRARY + NAMES GL MesaGL + PATHS /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib /usr/X11R6/lib + ${_OPENGL_LIB_PATH} + ) + + unset(_OPENGL_INCLUDE_PATH) + unset(_OPENGL_LIB_PATH) + + find_library(OPENGL_glu_LIBRARY + NAMES GLU MesaGLU + PATHS ${OPENGL_gl_LIBRARY} + /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib /usr/X11R6/lib + ) + +endif () + +if(OPENGL_gl_LIBRARY) + + if(OPENGL_xmesa_INCLUDE_DIR) + set( OPENGL_XMESA_FOUND "YES" ) + else() + set( OPENGL_XMESA_FOUND "NO" ) + endif() + + set( OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY} ${OPENGL_LIBRARIES}) + if(OPENGL_glu_LIBRARY) + set( OPENGL_GLU_FOUND "YES" ) + if(NOT "${OPENGL_glu_LIBRARY}" STREQUAL "${OPENGL_gl_LIBRARY}") + set( OPENGL_LIBRARIES ${OPENGL_glu_LIBRARY} ${OPENGL_LIBRARIES} ) + endif() + else() + set( OPENGL_GLU_FOUND "NO" ) + endif() + + # This deprecated setting is for backward compatibility with CMake1.4 + set (OPENGL_LIBRARY ${OPENGL_LIBRARIES}) + +endif() + +# This deprecated setting is for backward compatibility with CMake1.4 +set(OPENGL_INCLUDE_PATH ${OPENGL_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGL REQUIRED_VARS ${_OpenGL_REQUIRED_VARS}) +unset(_OpenGL_REQUIRED_VARS) + +# OpenGL:: targets +if(OPENGL_FOUND) + if(NOT TARGET OpenGL::GL) + if(IS_ABSOLUTE "${OPENGL_gl_LIBRARY}") + add_library(OpenGL::GL UNKNOWN IMPORTED) + if(OPENGL_gl_LIBRARY MATCHES "/([^/]+)\\.framework$") + set(_gl_fw "${OPENGL_gl_LIBRARY}/${CMAKE_MATCH_1}") + if(EXISTS "${_gl_fw}.tbd") + set(_gl_fw "${_gl_fw}.tbd") + endif() + set_target_properties(OpenGL::GL PROPERTIES + IMPORTED_LOCATION "${_gl_fw}") + else() + set_target_properties(OpenGL::GL PROPERTIES + IMPORTED_LOCATION "${OPENGL_gl_LIBRARY}") + endif() + else() + add_library(OpenGL::GL INTERFACE IMPORTED) + set_target_properties(OpenGL::GL PROPERTIES + IMPORTED_LIBNAME "${OPENGL_gl_LIBRARY}") + endif() + set_target_properties(OpenGL::GL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}") + endif() + + if(OPENGL_GLU_FOUND AND NOT TARGET OpenGL::GLU) + if(IS_ABSOLUTE "${OPENGL_glu_LIBRARY}") + add_library(OpenGL::GLU UNKNOWN IMPORTED) + if(OPENGL_glu_LIBRARY MATCHES "/([^/]+)\\.framework$") + set(_glu_fw "${OPENGL_glu_LIBRARY}/${CMAKE_MATCH_1}") + if(EXISTS "${_glu_fw}.tbd") + set(_glu_fw "${_glu_fw}.tbd") + endif() + set_target_properties(OpenGL::GLU PROPERTIES + IMPORTED_LOCATION "${_glu_fw}") + else() + set_target_properties(OpenGL::GLU PROPERTIES + IMPORTED_LOCATION "${OPENGL_glu_LIBRARY}") + endif() + else() + add_library(OpenGL::GLU INTERFACE IMPORTED) + set_target_properties(OpenGL::GLU PROPERTIES + IMPORTED_LIBNAME "${OPENGL_glu_LIBRARY}") + endif() + set_target_properties(OpenGL::GLU PROPERTIES + INTERFACE_LINK_LIBRARIES OpenGL::GL) + endif() +endif() + +mark_as_advanced( + OPENGL_INCLUDE_DIR + OPENGL_xmesa_INCLUDE_DIR + OPENGL_glu_LIBRARY + OPENGL_gl_LIBRARY +) diff --git a/CMakeModules/FindSDL2.cmake b/CMakeModules/FindSDL2.cmake index 1c10bab1..051bcf35 100644 --- a/CMakeModules/FindSDL2.cmake +++ b/CMakeModules/FindSDL2.cmake @@ -1,44 +1,77 @@ -# Uses SDL2_ROOT_DIR variable to look up headers -# and libraries along with standard system paths. This variable -# is quite helpful on windows platform to specify SDL2 installation -# path. -# Up on finding required files, the following variables -# will be set -# SDL2_FOUND -# SDL2_INCLUDE_DIR -# SLD2_LIBRARY +# FindSDL2.cmake +# Author: Pradeep Garigipati +# +# Finds the fontconfig libraries +# +# Sets the following variables: +# SDL2_FOUND +# SDL2_INCLUDE_DIR +# SDL2_LIBRARY +# +# To help locate the library and include file, you could define an environment variable called +# SDL2_ROOT which points to the root of the glfw library installation. This is pretty useful +# on a Windows platform. +# +# Usage: +# find_package(SDL2) +# if (SDL2_FOUND) +# target_link_libraries(mylib PRIVATE SDL2::SDL2) +# endif (SDL2_FOUND) +# +# NOTE: You do not need to include the SDL2 include directories since they +# will be included as part of the target_link_libraries command -FIND_PATH(SDL2_INCLUDE_DIR SDL.h - HINTS - ${SDL2_ROOT_DIR} - $ENV{SDL2_ROOT_DIR} +find_path(SDL2_INCLUDE_DIR + NAMES SDL.h + PATHS + ENV SDL2_ROOT PATH_SUFFIXES - SDL2 - # path suffixes to search inside ENV{SDL2_ROOT_DIR} - include/SDL2 include - ) + SDL2 + include/SDL2 + include + DOC "Path to SDL2 include directory." +) -FIND_LIBRARY(SDL2_LIBRARY +find_library(SDL2_LIBRARY NAMES SDL2 - HINTS - ${SDL2_ROOT_DIR} - $ENV{SDL2_ROOT_DIR} - PATH_SUFFIXES lib/x64 release debug PATHS - /usr/lib - /usr/lib64 - /usr/lib/x86_64-linux-gnu - /usr/lib/arm-linux-gnueabihf - /usr/local/lib - /usr/local/lib64 - /sw/lib - /opt/local/lib - ${SDL2_ROOT_DIR}/lib-msvc100 - ${SDL2_ROOT_DIR}/lib-msvc110 - ${SDL2_ROOT_DIR}/lib-msvc120 - ${SDL2_ROOT_DIR}/lib + ENV SDL2_ROOT + /usr + /usr/local + /usr/lib/x86_64-linux-gnu + /sw + /opt/local + $ENV{SDL2_ROOT}/lib-msvc110 + $ENV{SDL2_ROOT}/lib-msvc120 + PATH_SUFFIXES + lib + lib64 + lib/x64 + release + debug + DOC "Absolute path to SDL2 library." + ) + +if (DEFINED SDL2_INCLUDE_DIR-NOTFOUND OR + DEFINED SDL2_LIBRARY-NOTFOUND) + message(SEND_ERROR "SDL2 not found") +endif () + +mark_as_advanced( + SDL2_INCLUDE_DIR + SDL2_LIBRARY + ) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(SDL2 + REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR ) -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) -MARK_AS_ADVANCED(SDL2_INCLUDE_DIR SDL2_LIBRARY) +if (SDL2_FOUND AND NOT TARGET SDL2::SDL2) + add_library(SDL2::SDL2 UNKNOWN IMPORTED) + set_target_properties(SDL2::SDL2 PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGAE "C" + IMPORTED_LOCATION ${SDL2_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}) +endif () diff --git a/CMakeModules/GLSLtoH.cmake b/CMakeModules/GLSLtoH.cmake index 48bf1069..3a7dd7d2 100644 --- a/CMakeModules/GLSLtoH.cmake +++ b/CMakeModules/GLSLtoH.cmake @@ -23,26 +23,26 @@ # # where ns is the contents of kernel.cl.namespace. -INCLUDE(CMakeParseArguments) +include(CMakeParseArguments) -SET(GLSL2CPP_PROGRAM "glsl2cpp") +set(GLSL2CPP_PROGRAM "glsl2cpp") -FUNCTION(GLSL_TO_H) +macro(convert_glsl_shaders_to_headers) CMAKE_PARSE_ARGUMENTS(RTCS "" "VARNAME;EXTENSION;OUTPUT_DIR;TARGETS;NAMESPACE;EOF" "SOURCES" ${ARGN}) - SET(_output_files "") - FOREACH(_input_file ${RTCS_SOURCES}) - GET_FILENAME_COMPONENT(_path "${_input_file}" PATH) - GET_FILENAME_COMPONENT(_name "${_input_file}" NAME) - GET_FILENAME_COMPONENT(var_name "${_input_file}" NAME_WE) + set(_output_files "") + foreach(_input_file ${RTCS_SOURCES}) + get_filename_component(_path "${_input_file}" PATH) + get_filename_component(_name "${_input_file}" NAME) + get_filename_component(var_name "${_input_file}" NAME_WE) - SET(_namespace "${RTCS_NAMESPACE}") - STRING(REPLACE "." "_" var_name ${var_name}) + set(_namespace "${RTCS_NAMESPACE}") + string(REPLACE "." "_" var_name ${var_name}) - SET(_output_path "${CMAKE_CURRENT_BINARY_DIR}/${RTCS_OUTPUT_DIR}") - SET(_output_file "${_output_path}/${var_name}.${RTCS_EXTENSION}") + set(_output_path "${PROJECT_BINARY_DIR}/${RTCS_OUTPUT_DIR}") + set(_output_file "${_output_path}/${var_name}.${RTCS_EXTENSION}") - ADD_CUSTOM_COMMAND( + add_custom_command( OUTPUT ${_output_file} DEPENDS ${_input_file} ${GLSL2CPP_PROGRAM} COMMAND ${CMAKE_COMMAND} -E make_directory "${_output_path}" @@ -52,10 +52,10 @@ FUNCTION(GLSL_TO_H) COMMENT "Converting ${_input_file} to GLSL source string" ) - LIST(APPEND _output_files ${_output_file}) - ENDFOREACH() - ADD_CUSTOM_TARGET(${RTCS_NAMESPACE}_bin_target DEPENDS ${_output_files}) + list(APPEND _output_files ${_output_file}) + endforeach() + add_custom_target(${RTCS_NAMESPACE}_bin_target DEPENDS ${_output_files}) - SET("${RTCS_VARNAME}" ${_output_files} PARENT_SCOPE) - SET("${RTCS_TARGETS}" ${RTCS_NAMESPACE}_bin_target PARENT_SCOPE) -ENDFUNCTION(GLSL_TO_H) + set("${RTCS_VARNAME}" ${_output_files} PARENT_SCOPE) + set("${RTCS_TARGETS}" ${RTCS_NAMESPACE}_bin_target PARENT_SCOPE) +endmacro(convert_glsl_shaders_to_headers) diff --git a/CMakeModules/Version.cmake b/CMakeModules/Version.cmake index eb41d56e..b3bccc7d 100644 --- a/CMakeModules/Version.cmake +++ b/CMakeModules/Version.cmake @@ -1,57 +1,48 @@ # # Make a version file that includes the Forge version and git revision # -CMAKE_POLICY(PUSH) - -IF("${CMAKE_VERSION}" VERSION_GREATER "3.1" OR "${CMAKE_VERSION}" VERSION_EQUAL "3.1") - CMAKE_POLICY(SET CMP0054 OLD) -ENDIF() - -SET(FG_VERSION_MAJOR "1") -SET(FG_VERSION_MINOR "0") -SET(FG_VERSION_PATCH "1") - -SET(FG_VERSION "${FG_VERSION_MAJOR}.${FG_VERSION_MINOR}.${FG_VERSION_PATCH}") -SET(FG_API_VERSION_CURRENT ${FG_VERSION_MAJOR}${FG_VERSION_MINOR}) +set(FG_VERSION_MAJOR ${Forge_VERSION_MAJOR}) +set(FG_VERSION_MINOR ${Forge_VERSION_MINOR}) +set(FG_VERSION_PATCH ${Forge_VERSION_PATCH}) +set(FG_VERSION "${FG_VERSION_MAJOR}.${FG_VERSION_MINOR}.${FG_VERSION_PATCH}") +set(FG_API_VERSION_CURRENT ${FG_VERSION_MAJOR}${FG_VERSION_MINOR}) # From CMake 3.0.0 CMAKE__COMPILER_ID is AppleClang for OSX machines # that use clang for compilations -IF("${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") - SET(COMPILER_NAME "AppleClang") -ELSEIF("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") - SET(COMPILER_NAME "LLVM Clang") -ELSEIF("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") - SET(COMPILER_NAME "GNU Compiler Collection(GCC/G++)") -ELSEIF("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel") - SET(COMPILER_NAME "Intel Compiler") -ELSEIF("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") - SET(COMPILER_NAME "Microsoft Visual Studio") -ENDIF() - -SET(COMPILER_VERSION "${CMAKE_C_COMPILER_VERSION}") -SET(FG_COMPILER_STRING "${COMPILER_NAME} ${COMPILER_VERSION}") - -EXECUTE_PROCESS( +if("${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") + set(COMPILER_NAME "AppleClang") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") + set(COMPILER_NAME "LLVM Clang") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") + set(COMPILER_NAME "GNU Compiler Collection(GCC/G++)") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel") + set(COMPILER_NAME "Intel Compiler") +elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") + set(COMPILER_NAME "Microsoft Visual Studio") +endif() + +set(COMPILER_VERSION "${CMAKE_C_COMPILER_VERSION}") +set(FG_COMPILER_STRING "${COMPILER_NAME} ${COMPILER_VERSION}") + +execute_process( COMMAND git log -1 --format=%h WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) -IF(NOT GIT_COMMIT_HASH) - MESSAGE(STATUS "No git. Setting hash to default") - SET(GIT_COMMIT_HASH "default") -ENDIF() +if(NOT GIT_COMMIT_HASH) + message(STATUS "No git. Setting hash to default") + set(GIT_COMMIT_HASH "default") +endif() -CONFIGURE_FILE( +configure_file( ${PROJECT_SOURCE_DIR}/CMakeModules/version.h.in ${PROJECT_SOURCE_DIR}/include/fg/version.h ) -CONFIGURE_FILE( +configure_file( ${PROJECT_SOURCE_DIR}/CMakeModules/version.hpp.in - ${PROJECT_SOURCE_DIR}/src/backend/version.hpp + ${PROJECT_BINARY_DIR}/src/backend/common/version.hpp ) - -CMAKE_POLICY(POP) diff --git a/CMakeModules/build_cl2hpp.cmake b/CMakeModules/build_cl2hpp.cmake deleted file mode 100644 index 5fd07130..00000000 --- a/CMakeModules/build_cl2hpp.cmake +++ /dev/null @@ -1,29 +0,0 @@ -INCLUDE(ExternalProject) - -SET(prefix ${PROJECT_BINARY_DIR}/third_party/cl2hpp) - -ExternalProject_Add( - cl2hpp-ext - GIT_REPOSITORY https://github.com/KhronosGroup/OpenCL-CLHPP.git - GIT_TAG 75bb7d0d8b2ffc6aac0a3dcaa22f6622cab81f7c - PREFIX "${prefix}" - INSTALL_DIR "${prefix}/package" - UPDATE_COMMAND "" - CONFIGURE_COMMAND ${CMAKE_COMMAND} -Wno-dev "-G${CMAKE_GENERATOR}" - -DCMAKE_SOURCE_DIR:PATH= - -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} - -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX:PATH= - -DBUILD_DOCS:BOOL=OFF - -DBUILD_EXAMPLES:BOOL=OFF - -DBUILD_TESTS:BOOL=OFF - ) - -ExternalProject_Get_Property(cl2hpp-ext install_dir) - -ADD_CUSTOM_TARGET(cl2hpp DEPENDS "${prefix}/package/CL/cl2.hpp") - -ADD_DEPENDENCIES(cl2hpp cl2hpp-ext) - -SET(CL2HPP_INCLUDE_DIRECTORY ${install_dir}) diff --git a/CMakeModules/build_freetype.cmake b/CMakeModules/build_freetype.cmake index ea9a42a1..719f45a0 100644 --- a/CMakeModules/build_freetype.cmake +++ b/CMakeModules/build_freetype.cmake @@ -1,28 +1,13 @@ -INCLUDE(ExternalProject) +include(ExternalProject) -SET(prefix ${PROJECT_BINARY_DIR}/third_party/ft) +set(LIB_POSTFIX "") +if(CMAKE_BUILD_TYPE MATCHES Debug) + set(LIB_POSTFIX "d") +endif() -SET(LIB_POSTFIX "") -IF (${CMAKE_BUILD_TYPE} STREQUAL "Debug") - SET(LIB_POSTFIX "d") -ENDIF() - -SET(freetype_location - ${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}freetype${LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) - -IF(CMAKE_VERSION VERSION_LESS 3.2) - IF(CMAKE_GENERATOR MATCHES "Ninja") - MESSAGE(WARNING "Building freetype with Ninja has known issues with CMake older than 3.2") - endif() - SET(byproducts) -ELSE() - SET(byproducts BYPRODUCTS ${freetype_location}) -ENDIF() - -IF(UNIX) - SET(CXXFLAGS "${CMAKE_CXX_FLAGS} -w -fPIC") - SET(CFLAGS "${CMAKE_C_FLAGS} -w -fPIC") -ENDIF(UNIX) +set(prefix ${PROJECT_BINARY_DIR}/third_party/ft) +set(ft_filename ${CMAKE_STATIC_LIBRARY_PREFIX}freetype${LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) +SET(freetype_location ${prefix}/lib/${ft_filename}) ExternalProject_Add( ft-ext @@ -37,26 +22,31 @@ ExternalProject_Add( -DWITH_BZip2=OFF -DWITH_PNG=OFF -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} - -DCMAKE_CXX_FLAGS:STRING=${CXXFLAGS} + "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} -w -fPIC" -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS:STRING=${CFLAGS} + "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} -w -fPIC" -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX:PATH= - ${byproducts} + BUILD_BYPRODUCTS ${freetype_location} ) -ADD_LIBRARY(freetype IMPORTED STATIC) - ExternalProject_Get_Property(ft-ext install_dir) -SET_TARGET_PROPERTIES(freetype PROPERTIES IMPORTED_LOCATION ${freetype_location}) +set(FreeType_INCLUDE_DIR ${install_dir}/include/freetype2 CACHE INTERNAL "" FORCE) +set(FreeType_LIBRARY ${freetype_location} CACHE INTERNAL "" FORCE) + +mark_as_advanced(FreeType_INCLUDE_DIR FreeType_LIBRARY) + +include(FindPackageHandleStandardArgs) -ADD_DEPENDENCIES(freetype ft-ext) +find_package_handle_standard_args(FreeType REQUIRED_VARS FreeType_LIBRARY FreeType_INCLUDE_DIR) -# Based on the instructions on freetype site -# for header path inclusion given at below URL -# https://www.freetype.org/freetype2/docs/tutorial/step1.html#section-1 -# we are including /include/freetype2 as FREETYPE_INCLUDE_DIRS -SET(FREETYPE_INCLUDE_DIRS "${install_dir}/include/freetype2" CACHE INTERNAL "" FORCE) -SET(FREETYPE_LIBRARIES ${freetype_location} CACHE INTERNAL "" FORCE) -SET(FREETYPE_FOUND ON CACHE INTERNAL "" FORCE) +if (FreeType_FOUND AND NOT TARGET FreeType::FreeType) + file(MAKE_DIRECTORY ${FreeType_INCLUDE_DIR}) + add_library(FreeType::FreeType STATIC IMPORTED) + set_target_properties(FreeType::FreeType PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + IMPORTED_LOCATION "${FreeType_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${FreeType_INCLUDE_DIR}") + add_dependencies(FreeType::FreeType ft-ext) +endif () diff --git a/CMakeModules/build_glbinding.cmake b/CMakeModules/build_glbinding.cmake deleted file mode 100644 index 48908778..00000000 --- a/CMakeModules/build_glbinding.cmake +++ /dev/null @@ -1,57 +0,0 @@ -INCLUDE(ExternalProject) - -SET(prefix ${PROJECT_BINARY_DIR}/third_party/glb) - -SET(LIB_POSTFIX "") -IF (${CMAKE_BUILD_TYPE} STREQUAL "Debug") - SET(LIB_POSTFIX "d") -ENDIF() - -SET(glbinding_location ${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glbinding${LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) - -IF(CMAKE_VERSION VERSION_LESS 3.2) - IF(CMAKE_GENERATOR MATCHES "Ninja") - MESSAGE(WARNING "Building with Ninja has known issues with CMake older than 3.2") - endif() - SET(byproducts) -ELSE() - SET(byproducts BYPRODUCTS ${glbinding_location}) -ENDIF() - -IF(UNIX) - SET(CXXFLAGS "${CMAKE_CXX_FLAGS} -w -fPIC") - SET(CFLAGS "${CMAKE_C_FLAGS} -w -fPIC") -ENDIF(UNIX) - -ExternalProject_Add( - glb-ext - GIT_REPOSITORY https://github.com/cginternals/glbinding.git - GIT_TAG v2.1.1 - UPDATE_COMMAND "" - PREFIX "${prefix}" - INSTALL_DIR "${prefix}" - CONFIGURE_COMMAND ${CMAKE_COMMAND} -Wno-dev "-G${CMAKE_GENERATOR}" - -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} - -DCMAKE_CXX_FLAGS:STRING=${CXXFLAGS} - -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS:STRING=${CFLAGS} - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX:PATH= - -DBUILD_SHARED_LIBS:BOOL=OFF - -DOPTION_BUILD_TESTS:BOOL=OFF - -DGLFW_LIBRARY_RELEASE:PATH=${GLFW_LIBRARY} - -DGLFW_LIBRARY_DEBUG:PATH=${GLFW_LIBRARY} - ${byproducts} - ) - -ADD_LIBRARY(glbinding IMPORTED STATIC) - -ExternalProject_Get_Property(glb-ext install_dir) - -SET_TARGET_PROPERTIES(glbinding PROPERTIES IMPORTED_LOCATION ${glbinding_location}) - -ADD_DEPENDENCIES(glbinding glb-ext) - -SET(GLBINDING_INCLUDE_DIRS ${install_dir}/include CACHE INTERNAL "" FORCE) -SET(GLBINDING_LIBRARIES ${glbinding_location} CACHE INTERNAL "" FORCE) -SET(GLBINDING_FOUND ON CACHE INTERNAL "" FORCE) diff --git a/CMakeModules/build_glm.cmake b/CMakeModules/build_glm.cmake deleted file mode 100644 index 6fb09790..00000000 --- a/CMakeModules/build_glm.cmake +++ /dev/null @@ -1,69 +0,0 @@ -SET(VER 0.9.7.4) -SET(URL https://github.com/g-truc/glm/archive/${VER}.tar.gz) -SET(MD5 475b0092c3baaf6ac899dc0dcd87f898) -SET(thirdPartyDir "${PROJECT_BINARY_DIR}/third_party") -SET(srcDir "${thirdPartyDir}/glm-${VER}") -SET(archive ${srcDir}.tar.gz) -SET(inflated ${srcDir}-inflated) - -# the config to be used in the code -SET(GLM_INCLUDE_DIRS "${srcDir}") - -# do we have to do it again? -SET(doExtraction ON) -IF(EXISTS "${inflated}") - FILE(READ "${inflated}" extractedMD5) - IF("${extractedMD5}" STREQUAL "${MD5}") - # nope, everything looks fine - return() - ENDIF() -ENDIF() - -# lets get and extract GLM - -MESSAGE(STATUS "GLM...") -IF(EXISTS "${archive}") - FILE(MD5 "${archive}" md5) - IF(NOT "${md5}" STREQUAL "${MD5}") - MESSAGE(" wrong check sum ${md5}, redownloading") - FILE(REMOVE "${archive}") - ENDIF() -ENDIF() - -IF(NOT EXISTS "${archive}") - MESSAGE(STATUS " getting ${URL}") - FILE(DOWNLOAD "${URL}" ${archive} - STATUS rv - SHOW_PROGRESS) -ENDIF() - -MESSAGE(STATUS " validating ${archive}") -FILE(MD5 "${archive}" md5) -IF(NOT "${md5}" STREQUAL "${MD5}") - MESSAGE(WARNING "${archive}: Invalid check sum ${md5}. Expected was ${MD5}") - IF("${md5}" STREQUAL "d41d8cd98f00b204e9800998ecf8427e") - MESSAGE(STATUS "Trying wget ${URL}") - EXECUTE_PROCESS(COMMAND wget -O ${archive} ${URL}) - FILE(MD5 "${archive}" md5_) - IF(NOT "${md5_}" STREQUAL "${MD5}") - MESSAGE(FATAL_ERROR "${archive}: Invalid check sum ${md5_}. Expected was ${MD5}") - ENDIF(NOT "${md5_}" STREQUAL "${MD5}") - MESSAGE(STATUS "wget successful") - ENDIF("${md5}" STREQUAL "d41d8cd98f00b204e9800998ecf8427e") -ENDIF() - -IF(IS_DIRECTORY ${srcDir}) - MESSAGE(STATUS " cleaning ${cleaning}") - FILE(REMOVE_RECURSE ${srcDir}) -ENDIF() - -MESSAGE(STATUS " extracting ${archive}") -FILE(MAKE_DIRECTORY ${srcDir}) -EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar xfz ${archive} - WORKING_DIRECTORY ${thirdPartyDir} - RESULT_VARIABLE rv) -IF(NOT rv EQUAL 0) - MESSAGE(FATAL_ERROR "'${archive}' extraction failed") -ENDIF() - -FILE(WRITE ${inflated} "${MD5}") diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index a568a1e1..03275454 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -1,31 +1,29 @@ -FIND_PACKAGE(Doxygen REQUIRED) - # Documentation -IF(NOT DEFINED FG_INSTALL_DOC_DIR) - SET(FG_INSTALL_DOC_DIR "${FG_INSTALL_DATA_DIR}/doc" CACHE PATH "Installation path for documentation") -ENDIF() +if(NOT DEFINED FG_INSTALL_DOC_DIR) + set(FG_INSTALL_DOC_DIR "${FG_INSTALL_DATA_DIR}/doc" CACHE PATH "Installation path for documentation") +endif() -SET(FG_DOCS_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/doxygen.mk") -SET(FG_DOCS_CONFIG_OUT "${CMAKE_CURRENT_BINARY_DIR}/doxygen.mk.out") +set(FG_DOCS_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/doxygen.mk") +set(FG_DOCS_CONFIG_OUT "${CMAKE_CURRENT_BINARY_DIR}/doxygen.mk.out") -SET(FG_DOCS_LAYOUT "${CMAKE_CURRENT_SOURCE_DIR}/layout.xml") -SET(FG_DOCS_LAYOUT_OUT "${CMAKE_CURRENT_BINARY_DIR}/layout.xml.out") +set(FG_DOCS_LAYOUT "${CMAKE_CURRENT_SOURCE_DIR}/layout.xml") +set(FG_DOCS_LAYOUT_OUT "${CMAKE_CURRENT_BINARY_DIR}/layout.xml.out") -SET(DOCS_DIR "${CMAKE_CURRENT_SOURCE_DIR}") -SET(ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/images") -SET(INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include") -SET(EXAMPLES_DIR "${PROJECT_SOURCE_DIR}/examples") +set(DOCS_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +set(ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/images") +set(INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include") +set(EXAMPLES_DIR "${PROJECT_SOURCE_DIR}/examples") #Re-enable test snippets directory setting when doc examples are added #SET(SNIPPETS_DIR "${PROJECT_SOURCE_DIR}/test") -CONFIGURE_FILE(${FG_DOCS_CONFIG} ${FG_DOCS_CONFIG_OUT}) -CONFIGURE_FILE(${FG_DOCS_LAYOUT} ${FG_DOCS_LAYOUT_OUT}) +configure_file(${FG_DOCS_CONFIG} ${FG_DOCS_CONFIG_OUT}) +configure_file(${FG_DOCS_LAYOUT} ${FG_DOCS_LAYOUT_OUT}) ########################################################### ## This generates a list of the examples cpp files and ## creates a dox file under docs/details/examples.dox ## This is used to generate documentation for examples ########################################################### -FILE(GLOB EXAMPLES_CPP +file(GLOB EXAMPLES_CPP "${EXAMPLES_DIR}/cpu/*.cpp" "${EXAMPLES_DIR}/cuda/*.cu" "${EXAMPLES_DIR}/opencl/*.cpp" @@ -34,24 +32,24 @@ FILE(GLOB EXAMPLES_CPP # Sort alphabetically # Note: example directories will be major sort order -LIST(SORT EXAMPLES_CPP) +list(SORT EXAMPLES_CPP) # Get filenames and write to a string -FOREACH(SRC ${EXAMPLES_CPP}) - GET_FILENAME_COMPONENT(DIR_PATH ${SRC} DIRECTORY) - GET_FILENAME_COMPONENT(DIR_NAME ${DIR_PATH} NAME) - GET_FILENAME_COMPONENT(SRC_NAME ${SRC} NAME) - SET(EXAMPLES_LIST "${EXAMPLES_LIST}\\example ${DIR_NAME}/${SRC_NAME}\n") -ENDFOREACH(SRC ${EXAMPLES_CPP}) +foreach(SRC ${EXAMPLES_CPP}) + get_filename_component(DIR_PATH ${SRC} DIRECTORY) + get_filename_component(DIR_NAME ${DIR_PATH} NAME) + get_filename_component(SRC_NAME ${SRC} NAME) + set(EXAMPLES_LIST "${EXAMPLES_LIST}\\example ${DIR_NAME}/${SRC_NAME}\n") +endforeach(SRC ${EXAMPLES_CPP}) # Write string containing file names to examples.dox -CONFIGURE_FILE( +configure_file( ${PROJECT_SOURCE_DIR}/CMakeModules/examples.dox.in ${DOCS_DIR}/details/examples.dox ) ########################################################### -ADD_CUSTOM_TARGET(docs +add_custom_target(docs ALL COMMAND ${DOXYGEN_EXECUTABLE} ${FG_DOCS_CONFIG_OUT} COMMAND cmake -E copy_directory ${ASSETS_DIR} ${CMAKE_CURRENT_BINARY_DIR}/html @@ -60,7 +58,7 @@ ADD_CUSTOM_TARGET(docs VERBATIM) # Install Doxygen documentation -INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION ${FG_INSTALL_DOC_DIR} COMPONENT documentation PATTERN "*" diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c75d14c8..a7f15de4 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,167 +1,90 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) -PROJECT(Forge-Examples) - -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") - -OPTION(BUILD_EXAMPLES_CUDA "Turn off/on building cuda examples" ON) -OPTION(BUILD_EXAMPLES_OPENCL "Turn off/on building opencl examples" ON) -OPTION(USE_SYSTEM_CL2HPP "Use cl2.hpp header installed on the system" OFF) - -IF(NOT USE_SYSTEM_CL2HPP) - INCLUDE(build_cl2hpp) -ENDIF() - -MACRO(BUILD_EXAMPLE EX_NAME EX_SRC COMPUTE_NAME FG_LIBS COMPUTE_LIBS) - IF(${COMPUTE_NAME} STREQUAL "cuda") - CUDA_ADD_EXECUTABLE(example_${EX_NAME}_${COMPUTE_NAME} ${EX_SRC}) - ELSE() - ADD_EXECUTABLE(example_${EX_NAME}_${COMPUTE_NAME} ${EX_SRC}) - ENDIF() - TARGET_LINK_LIBRARIES(example_${EX_NAME}_${COMPUTE_NAME} ${COMPUTE_LIBS} ${FG_LIBS}) - SET_TARGET_PROPERTIES(example_${EX_NAME}_${COMPUTE_NAME} - PROPERTIES - OUTPUT_NAME ${EX_NAME}_${COMPUTE_NAME} - RUNTIME_OUTPUT_DIRECTORY ${DIR_NAME} - FOLDER "Examples/${COMPUTE_NAME}") - IF(${COMPUTE_NAME} STREQUAL "opencl") - IF(NOT USE_SYSTEM_CL2HPP) - ADD_DEPENDENCIES(example_${EX_NAME}_${COMPUTE_NAME} cl2hpp) - ENDIF() - ENDIF() -ENDMACRO() - -IF(TARGET forge) - - # Building with Forge Source - SET(FORGE_FOUND False) - -ELSE(TARGET forge) - - SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) - FIND_PACKAGE(Forge REQUIRED) - FIND_PACKAGE(OpenGL REQUIRED) - - SET(X11_LIBS "") - - INCLUDE_DIRECTORIES(${FORGE_INCLUDE_DIRS}) - - # OS Definitions - IF(UNIX) - ADD_DEFINITIONS(-Wall -std=c++11 -fvisibility=hidden) - - # GCC 5.3 and above give errors for mempcy from - # This is a (temporary) fix for that - IF("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "5.3.0") - ADD_DEFINITIONS(-D_FORCE_INLINES) - ENDIF() - - # MacOS specific environment settings - IF(APPLE) - ADD_DEFINITIONS(-DOS_MAC) - SET(CMAKE_MACOSX_RPATH ON) - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") - SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - - LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}" isSystemDir) - IF("${isSystemDir}" STREQUAL "-1") - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") - ENDIF("${isSystemDir}" STREQUAL "-1") - - FIND_PACKAGE(X11 REQUIRED) - INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR}) - - ELSE(APPLE) - ADD_DEFINITIONS(-DOS_LNX) - ENDIF(APPLE) - ELSE(UNIX) - ADD_DEFINITIONS(-DOS_WIN -DNOMINMAX) - ENDIF(UNIX) -ENDIF(TARGET forge) - -IF(UNIX) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations -Wno-unused-function") -ENDIF() - -FILE(GLOB CPU_EXAMPLE_SRC_FILES "cpu/*.cpp") -LIST(SORT CPU_EXAMPLE_SRC_FILES) -FOREACH(FILE ${CPU_EXAMPLE_SRC_FILES}) - GET_FILENAME_COMPONENT(EXAMPLE ${FILE} NAME_WE) - GET_FILENAME_COMPONENT(FULL_DIR_NAME ${FILE} PATH) - GET_FILENAME_COMPONENT(DIR_NAME ${FULL_DIR_NAME} NAME) - - IF(TARGET forge) - BUILD_EXAMPLE(${EXAMPLE} ${FILE} ${DIR_NAME} forge "") - ELSE(TARGET forge) - BUILD_EXAMPLE(${EXAMPLE} ${FILE} ${DIR_NAME} ${FORGE_LIBRARIES} "${X11_LIBS};${OPENGL_gl_LIBRARY}") - ENDIF() -ENDFOREACH() - -IF (BUILD_EXAMPLES_CUDA) - FIND_PACKAGE(CUDA QUIET) - IF(CUDA_FOUND) - - IF(UNIX) - # GCC 5.3 and above give errors for mempcy from - # This is a (temporary) fix for that - IF("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "5.3.0") - ADD_DEFINITIONS(-D_FORCE_INLINES) - ENDIF() - # GCC 6.0 and above default to g++14, enabling c++11 features by default - # Enabling c++11 with nvcc 7.5 + gcc 6.x doesn't seem to work - # Only solution for now is to force use c++03 for gcc 6.x - IF("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "6.0.0") - SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler -std=c++98") - ENDIF() - ENDIF(UNIX) - - INCLUDE_DIRECTORIES(${CUDA_INCLUDE_DIRS}) - - FILE(GLOB CUDA_EXAMPLE_SRC_FILES "cuda/*.cu") - LIST(SORT CUDA_EXAMPLE_SRC_FILES) - FOREACH(FILE ${CUDA_EXAMPLE_SRC_FILES}) - GET_FILENAME_COMPONENT(EXAMPLE ${FILE} NAME_WE) - GET_FILENAME_COMPONENT(FULL_DIR_NAME ${FILE} PATH) - GET_FILENAME_COMPONENT(DIR_NAME ${FULL_DIR_NAME} NAME) - - IF(TARGET forge) - BUILD_EXAMPLE(${EXAMPLE} ${FILE} ${DIR_NAME} forge "${CUDA_LIBRARIES}") - ELSE(TARGET forge) - BUILD_EXAMPLE(${EXAMPLE} ${FILE} ${DIR_NAME} ${FORGE_LIBRARIES} - "${X11_LIBS};${OPENGL_gl_LIBRARY};${CUDA_LIBRARIES}") - ENDIF() - ENDFOREACH() - ELSE() - MESSAGE(STATUS "CUDA Toolkit not found, not building CUDA examples.") - ENDIF() -ENDIF() - -IF (BUILD_EXAMPLES_OPENCL) - FIND_PACKAGE(OpenCL QUIET) - IF(OpenCL_FOUND) - FILE(GLOB OpenCL_EXAMPLE_SRC_FILES "opencl/*.cpp") - LIST(SORT OpenCL_EXAMPLE_SRC_FILES) - INCLUDE_DIRECTORIES( - "${CMAKE_CURRENT_SOURCE_DIR}/opencl" - ${OpenCL_INCLUDE_DIRS} - ${CL2HPP_INCLUDE_DIRECTORY} - ) - FOREACH(FILE ${OpenCL_EXAMPLE_SRC_FILES}) - GET_FILENAME_COMPONENT(EXAMPLE ${FILE} NAME_WE) - GET_FILENAME_COMPONENT(FULL_DIR_NAME ${FILE} PATH) - GET_FILENAME_COMPONENT(DIR_NAME ${FULL_DIR_NAME} NAME) - - IF(TARGET forge) - BUILD_EXAMPLE(${EXAMPLE} ${FILE} ${DIR_NAME} forge "${OpenCL_LIBRARIES};${OPENGL_gl_LIBRARY}") - ELSE(TARGET forge) - BUILD_EXAMPLE(${EXAMPLE} ${FILE} ${DIR_NAME} ${FORGE_LIBRARIES} - "${X11_LIBS};${OPENGL_gl_LIBRARY};${OpenCL_LIBRARIES}") - ENDIF() - ENDFOREACH() - ELSE() - MESSAGE(STATUS "OpenCL Libraries not found, not building OpenCL examples.") - ENDIF() -ENDIF() - -MARK_AS_ADVANCED(BUILD_EXAMPLES_CUDA BUILD_EXAMPLES_OPENCL) +cmake_minimum_required(VERSION 3.5) + +project(Forge-Examples LANGUAGES CXX) + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") + +find_package(OpenGL REQUIRED) +find_package(CUDA QUIET) +find_package(OpenCL 1.2 QUIET) + +if(APPLE) + find_package(X11) + if(X11_FOUND AND NOT TARGET X11::x11) + add_library(X11::x11 UNKNOWN IMPORTED) + set_target_properties(X11::x11 PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + IMPORTED_LOCATION "${X11_X11_LIB}" + INTEFACE_INCLUDE_DIRECTORIES "${X11_INCLUDE_DIR}") + endif() +endif() + +option(BUILD_EXAMPLES_CUDA "Turn off/on building cuda examples" ${CUDA_FOUND}) +option(BUILD_EXAMPLES_OPENCL "Turn off/on building opencl examples" ${OpenCL_FOUND}) +mark_as_advanced(BUILD_EXAMPLES_CUDA BUILD_EXAMPLES_OPENCL) + +include(CMakeParseArguments) +include(ConditionalDirectory) +include(CMakeDependentOption) +include(IfNotThisThenInclude) + +cmake_dependent_option(USE_SYSTEM_CL2HPP "Use system cl2.hpp header" OFF "OpenCL_FOUND" OFF) + +include_if_not(USE_SYSTEM_CL2HPP build_cl2hpp) + +add_library(OSCompileFlags INTERFACE) + +if (WIN32) + target_compile_definitions(OSCompileFlags + INTERFACE OS_WIN WIN32_MEAN_AND_LEAN) +elseif (APPLE) + target_compile_definitions(OSCompileFlags INTERFACE OS_MAC) +else(WIN32) + target_compile_definitions(OSCompileFlags INTERFACE OS_LNX) +endif(WIN32) + +if(TARGET forge) + add_library(Forge::forge ALIAS forge) +else() + include(${Forge_BINARY_DIR}/ForgeConfig.cmake) +endif() + +function(add_example target_name source backend) + set(options CXX11) + set(single_value_args "") + set(multiple_value_args INCLUDE_DIRS LIBRARIES) + cmake_parse_arguments(arg "${options}" "${single_value_args}" "${multiple_value_args}" ${ARGN}) + + set(target "example_${target_name}_${backend}") + + string(TOLOWER ${backend} lowerCaseBackend) + + if (${lowerCaseBackend} STREQUAL "cuda" AND ${CMAKE_VERSION} VERSION_LESS "3.10.0") + cuda_add_executable(${target} ${source}) + else () + add_executable(${target} ${source}) + endif () + + set_target_properties(${target} PROPERTIES OUTPUT_NAME "${target_name}") + set_target_properties(${target} PROPERTIES FOLDER Examples/${backend}) + + if (${arg_CXX11}) + set_target_properties(${target} PROPERTIES CXX_STANDARD 11) + endif (${arg_CXX11}) + + target_include_directories(${target} PRIVATE ${arg_INCLUDE_DIRS}) + + target_link_libraries(${target} + OSCompileFlags + OpenGL::GL + Forge::forge + ${arg_LIBRARIES} + $<$:X11::x11> + ) +endfunction() + +add_subdirectory(cpu) +conditional_directory(BUILD_EXAMPLES_CUDA cuda) +conditional_directory(BUILD_EXAMPLES_OPENCL opencl) diff --git a/examples/CMakeModules/ConditionalDirectory.cmake b/examples/CMakeModules/ConditionalDirectory.cmake new file mode 100644 index 00000000..8ba1cc72 --- /dev/null +++ b/examples/CMakeModules/ConditionalDirectory.cmake @@ -0,0 +1,6 @@ +# Includes the directory if the variable is set +function(conditional_directory variable directory) + if(${variable}) + add_subdirectory(${directory}) + endif() +endfunction() diff --git a/CMakeModules/FindOpenCL.cmake b/examples/CMakeModules/FindOpenCL.cmake similarity index 57% rename from CMakeModules/FindOpenCL.cmake rename to examples/CMakeModules/FindOpenCL.cmake index 80fcf493..54c26e5c 100644 --- a/CMakeModules/FindOpenCL.cmake +++ b/examples/CMakeModules/FindOpenCL.cmake @@ -1,10 +1,22 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + #.rst: # FindOpenCL # ---------- # # Try to find OpenCL # -# Once done this will define:: +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if +# OpenCL has been found. +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables:: # # OpenCL_FOUND - True if OpenCL was found # OpenCL_INCLUDE_DIRS - include directories for OpenCL @@ -19,51 +31,6 @@ # OpenCL_LIBRARY - the path to the OpenCL library # -#============================================================================= -# From CMake 3.2 -# Copyright 2014 Matthaeus G. Chajdas -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. - -# CMake - Cross Platform Makefile Generator -# Copyright 2000-2014 Kitware, Inc. -# Copyright 2000-2011 Insight Software Consortium -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# * Neither the names of Kitware, Inc., the Insight Software Consortium, -# nor the names of their contributors may be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#============================================================================= - function(_FIND_OPENCL_VERSION) include(CheckSymbolExists) include(CMakePushCheckState) @@ -72,10 +39,11 @@ function(_FIND_OPENCL_VERSION) CMAKE_PUSH_CHECK_STATE() foreach(VERSION "2_0" "1_2" "1_1" "1_0") set(CMAKE_REQUIRED_INCLUDES "${OpenCL_INCLUDE_DIR}") + if(APPLE) CHECK_SYMBOL_EXISTS( CL_VERSION_${VERSION} - "${OpenCL_INCLUDE_DIR}/OpenCL/cl.h" + "${OpenCL_INCLUDE_DIR}/Headers/cl.h" OPENCL_VERSION_${VERSION}) else() CHECK_SYMBOL_EXISTS( @@ -103,10 +71,10 @@ find_path(OpenCL_INCLUDE_DIR CL/cl.h OpenCL/cl.h PATHS ENV "PROGRAMFILES(X86)" - ENV NVSDKCOMPUTE_ROOT - ENV CUDA_PATH ENV AMDAPPSDKROOT ENV INTELOCLSDKROOT + ENV NVSDKCOMPUTE_ROOT + ENV CUDA_PATH ENV ATISTREAMSDKROOT PATH_SUFFIXES include @@ -121,10 +89,10 @@ if(WIN32) NAMES OpenCL PATHS ENV "PROGRAMFILES(X86)" - ENV CUDA_PATH - ENV NVSDKCOMPUTE_ROOT ENV AMDAPPSDKROOT ENV INTELOCLSDKROOT + ENV CUDA_PATH + ENV NVSDKCOMPUTE_ROOT ENV ATISTREAMSDKROOT PATH_SUFFIXES "AMD APP/lib/x86" @@ -136,10 +104,10 @@ if(WIN32) NAMES OpenCL PATHS ENV "PROGRAMFILES(X86)" - ENV CUDA_PATH - ENV NVSDKCOMPUTE_ROOT ENV AMDAPPSDKROOT ENV INTELOCLSDKROOT + ENV CUDA_PATH + ENV NVSDKCOMPUTE_ROOT ENV ATISTREAMSDKROOT PATH_SUFFIXES "AMD APP/lib/x86_64" @@ -155,7 +123,7 @@ endif() set(OpenCL_LIBRARIES ${OpenCL_LIBRARY}) set(OpenCL_INCLUDE_DIRS ${OpenCL_INCLUDE_DIR}) -#include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +include(FindPackageHandleStandardArgs) find_package_handle_standard_args( OpenCL FOUND_VAR OpenCL_FOUND @@ -166,3 +134,16 @@ mark_as_advanced( OpenCL_INCLUDE_DIR OpenCL_LIBRARY) +if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL) + if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$") + add_library(OpenCL::OpenCL INTERFACE IMPORTED) + set_target_properties(OpenCL::OpenCL PROPERTIES + INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}") + else() + add_library(OpenCL::OpenCL UNKNOWN IMPORTED) + set_target_properties(OpenCL::OpenCL PROPERTIES + IMPORTED_LOCATION "${OpenCL_LIBRARY}") + endif() + set_target_properties(OpenCL::OpenCL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}") +endif() diff --git a/examples/CMakeModules/FindOpenGL.cmake b/examples/CMakeModules/FindOpenGL.cmake new file mode 100644 index 00000000..579277ab --- /dev/null +++ b/examples/CMakeModules/FindOpenGL.cmake @@ -0,0 +1,227 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindOpenGL +# ---------- +# +# FindModule for OpenGL and GLU. +# +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines the :prop_tgt:`IMPORTED` targets: +# +# ``OpenGL::GL`` +# Defined if the system has OpenGL. +# ``OpenGL::GLU`` +# Defined if the system has GLU. +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module sets the following variables: +# +# ``OPENGL_FOUND`` +# True, if the system has OpenGL. +# ``OPENGL_XMESA_FOUND`` +# True, if the system has XMESA. +# ``OPENGL_GLU_FOUND`` +# True, if the system has GLU. +# ``OPENGL_INCLUDE_DIR`` +# Path to the OpenGL include directory. +# ``OPENGL_LIBRARIES`` +# Paths to the OpenGL and GLU libraries. +# +# If you want to use just GL you can use these values: +# +# ``OPENGL_gl_LIBRARY`` +# Path to the OpenGL library. +# ``OPENGL_glu_LIBRARY`` +# Path to the GLU library. +# +# OSX Specific +# ^^^^^^^^^^^^ +# +# On OSX default to using the framework version of OpenGL. People will +# have to change the cache values of OPENGL_glu_LIBRARY and +# OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX. + + +set(_OpenGL_REQUIRED_VARS OPENGL_gl_LIBRARY) + +if (CYGWIN) + + find_path(OPENGL_INCLUDE_DIR GL/gl.h ) + list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR) + + find_library(OPENGL_gl_LIBRARY opengl32 ) + + find_library(OPENGL_glu_LIBRARY glu32 ) + +elseif (WIN32) + + if(BORLAND) + set (OPENGL_gl_LIBRARY import32 CACHE STRING "OpenGL library for win32") + set (OPENGL_glu_LIBRARY import32 CACHE STRING "GLU library for win32") + else() + set (OPENGL_gl_LIBRARY opengl32 CACHE STRING "OpenGL library for win32") + set (OPENGL_glu_LIBRARY glu32 CACHE STRING "GLU library for win32") + endif() + +elseif (APPLE) + + # The OpenGL.framework provides both gl and glu + find_library(OPENGL_gl_LIBRARY OpenGL DOC "OpenGL library for OS X") + find_library(OPENGL_glu_LIBRARY OpenGL DOC + "GLU library for OS X (usually same as OpenGL library)") + find_path(OPENGL_INCLUDE_DIR OpenGL/gl.h DOC "Include for OpenGL on OS X") + list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR) + +else() + if (CMAKE_SYSTEM_NAME MATCHES "HP-UX") + # Handle HP-UX cases where we only want to find OpenGL in either hpux64 + # or hpux32 depending on if we're doing a 64 bit build. + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(_OPENGL_LIB_PATH + /opt/graphics/OpenGL/lib/hpux32/) + else() + set(_OPENGL_LIB_PATH + /opt/graphics/OpenGL/lib/hpux64/ + /opt/graphics/OpenGL/lib/pa20_64) + endif() + elseif(CMAKE_SYSTEM_NAME STREQUAL Haiku) + set(_OPENGL_LIB_PATH + /boot/develop/lib/x86) + set(_OPENGL_INCLUDE_PATH + /boot/develop/headers/os/opengl) + endif() + + # The first line below is to make sure that the proper headers + # are used on a Linux machine with the NVidia drivers installed. + # They replace Mesa with NVidia's own library but normally do not + # install headers and that causes the linking to + # fail since the compiler finds the Mesa headers but NVidia's library. + # Make sure the NVIDIA directory comes BEFORE the others. + # - Atanas Georgiev + + find_path(OPENGL_INCLUDE_DIR GL/gl.h + /usr/share/doc/NVIDIA_GLX-1.0/include + /usr/openwin/share/include + /opt/graphics/OpenGL/include /usr/X11R6/include + ${_OPENGL_INCLUDE_PATH} + ) + list(APPEND _OpenGL_REQUIRED_VARS OPENGL_INCLUDE_DIR) + + find_path(OPENGL_xmesa_INCLUDE_DIR GL/xmesa.h + /usr/share/doc/NVIDIA_GLX-1.0/include + /usr/openwin/share/include + /opt/graphics/OpenGL/include /usr/X11R6/include + ) + + find_library(OPENGL_gl_LIBRARY + NAMES GL MesaGL + PATHS /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib /usr/X11R6/lib + ${_OPENGL_LIB_PATH} + ) + + unset(_OPENGL_INCLUDE_PATH) + unset(_OPENGL_LIB_PATH) + + find_library(OPENGL_glu_LIBRARY + NAMES GLU MesaGLU + PATHS ${OPENGL_gl_LIBRARY} + /opt/graphics/OpenGL/lib + /usr/openwin/lib + /usr/shlib /usr/X11R6/lib + ) + +endif () + +if(OPENGL_gl_LIBRARY) + + if(OPENGL_xmesa_INCLUDE_DIR) + set( OPENGL_XMESA_FOUND "YES" ) + else() + set( OPENGL_XMESA_FOUND "NO" ) + endif() + + set( OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY} ${OPENGL_LIBRARIES}) + if(OPENGL_glu_LIBRARY) + set( OPENGL_GLU_FOUND "YES" ) + if(NOT "${OPENGL_glu_LIBRARY}" STREQUAL "${OPENGL_gl_LIBRARY}") + set( OPENGL_LIBRARIES ${OPENGL_glu_LIBRARY} ${OPENGL_LIBRARIES} ) + endif() + else() + set( OPENGL_GLU_FOUND "NO" ) + endif() + + # This deprecated setting is for backward compatibility with CMake1.4 + set (OPENGL_LIBRARY ${OPENGL_LIBRARIES}) + +endif() + +# This deprecated setting is for backward compatibility with CMake1.4 +set(OPENGL_INCLUDE_PATH ${OPENGL_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenGL REQUIRED_VARS ${_OpenGL_REQUIRED_VARS}) +unset(_OpenGL_REQUIRED_VARS) + +# OpenGL:: targets +if(OPENGL_FOUND) + if(NOT TARGET OpenGL::GL) + if(IS_ABSOLUTE "${OPENGL_gl_LIBRARY}") + add_library(OpenGL::GL UNKNOWN IMPORTED) + if(OPENGL_gl_LIBRARY MATCHES "/([^/]+)\\.framework$") + set(_gl_fw "${OPENGL_gl_LIBRARY}/${CMAKE_MATCH_1}") + if(EXISTS "${_gl_fw}.tbd") + set(_gl_fw "${_gl_fw}.tbd") + endif() + set_target_properties(OpenGL::GL PROPERTIES + IMPORTED_LOCATION "${_gl_fw}") + else() + set_target_properties(OpenGL::GL PROPERTIES + IMPORTED_LOCATION "${OPENGL_gl_LIBRARY}") + endif() + else() + add_library(OpenGL::GL INTERFACE IMPORTED) + set_target_properties(OpenGL::GL PROPERTIES + IMPORTED_LIBNAME "${OPENGL_gl_LIBRARY}") + endif() + set_target_properties(OpenGL::GL PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}") + endif() + + if(OPENGL_GLU_FOUND AND NOT TARGET OpenGL::GLU) + if(IS_ABSOLUTE "${OPENGL_glu_LIBRARY}") + add_library(OpenGL::GLU UNKNOWN IMPORTED) + if(OPENGL_glu_LIBRARY MATCHES "/([^/]+)\\.framework$") + set(_glu_fw "${OPENGL_glu_LIBRARY}/${CMAKE_MATCH_1}") + if(EXISTS "${_glu_fw}.tbd") + set(_glu_fw "${_glu_fw}.tbd") + endif() + set_target_properties(OpenGL::GLU PROPERTIES + IMPORTED_LOCATION "${_glu_fw}") + else() + set_target_properties(OpenGL::GLU PROPERTIES + IMPORTED_LOCATION "${OPENGL_glu_LIBRARY}") + endif() + else() + add_library(OpenGL::GLU INTERFACE IMPORTED) + set_target_properties(OpenGL::GLU PROPERTIES + IMPORTED_LIBNAME "${OPENGL_glu_LIBRARY}") + endif() + set_target_properties(OpenGL::GLU PROPERTIES + INTERFACE_LINK_LIBRARIES OpenGL::GL) + endif() +endif() + +mark_as_advanced( + OPENGL_INCLUDE_DIR + OPENGL_xmesa_INCLUDE_DIR + OPENGL_glu_LIBRARY + OPENGL_gl_LIBRARY +) diff --git a/examples/CMakeModules/IfNotThisThenInclude.cmake b/examples/CMakeModules/IfNotThisThenInclude.cmake new file mode 100644 index 00000000..6ac5f720 --- /dev/null +++ b/examples/CMakeModules/IfNotThisThenInclude.cmake @@ -0,0 +1,7 @@ +# Includes the cmake script if the variable is NOT true +macro(include_if_not variable cmake_script) + if(NOT ${variable}) + include(${cmake_script}) + endif() +endmacro() + diff --git a/examples/CMakeModules/build_cl2hpp.cmake b/examples/CMakeModules/build_cl2hpp.cmake new file mode 100644 index 00000000..bd470e11 --- /dev/null +++ b/examples/CMakeModules/build_cl2hpp.cmake @@ -0,0 +1,16 @@ +if(NOT TARGET cl2hpp-ext) + set(FILE_URL "https://github.com/KhronosGroup/OpenCL-CLHPP/releases/download/v2.0.10/cl2.hpp") + set(CL_HEADER "${PROJECT_BINARY_DIR}/third_party/cl2hpp/include/CL/cl2.hpp") + file(DOWNLOAD ${FILE_URL} ${CL_HEADER}) + get_filename_component(DOWNLOAD_DIR ${CL_HEADER} DIRECTORY) +endif() + +message(STATUS "Found cl2.hpp header at: ${DOWNLOAD_DIR}") + +if (NOT TARGET OpenCL::cl2hpp) + add_library(OpenCL::cl2hpp IMPORTED INTERFACE GLOBAL) + add_dependencies(OpenCL::cl2hpp cl2hpp-ext) + + set_target_properties(OpenCL::cl2hpp PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${DOWNLOAD_DIR}/..") +endif () diff --git a/examples/cpu/CMakeLists.txt b/examples/cpu/CMakeLists.txt new file mode 100644 index 00000000..9f48b949 --- /dev/null +++ b/examples/cpu/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.5) + +project(Forge-CPU-Examples LANGUAGES CXX) + +add_example(bubblechart bubblechart.cpp cpu CXX11) +add_example(field field.cpp cpu) +add_example(fractal fractal.cpp cpu) +add_example(histogram histogram.cpp cpu) +add_example(plot3 plot3.cpp cpu) +add_example(plotting plotting.cpp cpu) +add_example(stream stream.cpp cpu) +add_example(surface surface.cpp cpu) diff --git a/examples/cpu/fractal.cpp b/examples/cpu/fractal.cpp index e519c2e5..777d5716 100644 --- a/examples/cpu/fractal.cpp +++ b/examples/cpu/fractal.cpp @@ -46,7 +46,7 @@ int main(void) * NOTE: THIS IS OPTIONAL STEP, BY DEFAULT WINDOW WILL * HAVE FONT ALREADY SETUP*/ forge::Font fnt; -#ifdef OS_WIN +#if defined(OS_WIN) fnt.loadSystemFont("Calibri"); #else fnt.loadSystemFont("Vera"); diff --git a/examples/cuda/CMakeLists.txt b/examples/cuda/CMakeLists.txt new file mode 100644 index 00000000..56e50ce2 --- /dev/null +++ b/examples/cuda/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 3.5) + +project(Forge-CUDA-Examples LANGUAGES CXX) + +if (${CMAKE_VERSION} VERSION_LESS "3.10.0") + INCLUDE_DIRECTORIES( + ${Forge_SOURCE_DIR}/include + ${CUDA_INCLUDE_DIRS} + ${CMAKE_CURRENT_DIR} + ) +else() + enable_language(CUDA) +endif () + +macro(make_cuda_example target src) + add_example(${target} ${src} cuda CXX11 + INCLUDE_DIRS + ${Forge_SOURCE_DIR}/include + ${CUDA_INCLUDE_DIRS} + ${CMAKE_CURRENT_DIR} + LIBRARIES + ${CUDA_LIBRARIES} + ${Forge_LIBRARIES} + ) +endmacro(make_cuda_example) + +make_cuda_example(bubblechart bubblechart.cu) +make_cuda_example(field field.cu) +make_cuda_example(fractal fractal.cu) +make_cuda_example(histogram histogram.cu) +make_cuda_example(plot3 plot3.cu) +make_cuda_example(plotting plotting.cu) +make_cuda_example(stream stream.cu) +make_cuda_example(surface surface.cu) diff --git a/examples/cuda/surface.cu b/examples/cuda/surface.cu index b9c65b08..d01739dd 100644 --- a/examples/cuda/surface.cu +++ b/examples/cuda/surface.cu @@ -76,8 +76,8 @@ void sincos_surf(float dx, float* out, int i = blockIdx.x * blockDim.x + threadIdx.x; int j = blockIdx.y * blockDim.y + threadIdx.y; - float x= ::XMIN + i*dx; - float y= ::YMIN + j*dx; + float x= XMIN + i*dx; + float y= YMIN + j*dx; if (i static const std::string CL_GL_SHARING_EXT = "cl_APPLE_gl_sharing"; #else diff --git a/include/fg/defines.h b/include/fg/defines.h index b4af133a..84cd4534 100644 --- a/include/fg/defines.h +++ b/include/fg/defines.h @@ -9,7 +9,7 @@ #pragma once -#ifdef OS_WIN +#if defined(OS_WIN) // http://msdn.microsoft.com/en-us/library/b0084kay(v=VS.80).aspx // http://msdn.microsoft.com/en-us/library/3y1sfaz2%28v=VS.80%29.aspx #ifdef FGDLL // libfg diff --git a/include/fg/exception.h b/include/fg/exception.h index da41da7d..1bcdda59 100644 --- a/include/fg/exception.h +++ b/include/fg/exception.h @@ -41,6 +41,8 @@ class FGAPI Error : public std::exception Error(const char * const pMessage, const char * const pFuncName, const char * const pFileName, int pLine, ErrorCode pErrCode); + Error(const Error& error); + virtual ~Error() throw(); virtual const char * what() const throw() { return mMessage; } diff --git a/include/fg/util.h b/include/fg/update_buffer.h similarity index 100% rename from include/fg/util.h rename to include/fg/update_buffer.h diff --git a/include/forge.h b/include/forge.h index d008c557..1c90415e 100644 --- a/include/forge.h +++ b/include/forge.h @@ -31,7 +31,7 @@ they are related to. */ #include "fg/defines.h" -#include "fg/util.h" +#include "fg/update_buffer.h" #include "fg/exception.h" #include "fg/window.h" #include "fg/font.h" diff --git a/src/api/c/CMakeLists.txt b/src/api/c/CMakeLists.txt new file mode 100644 index 00000000..ab2dd075 --- /dev/null +++ b/src/api/c/CMakeLists.txt @@ -0,0 +1,19 @@ +add_library(c_api_interface INTERFACE) + +target_sources(c_api_interface + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/chart.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/exception.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/font.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/histogram.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/image.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/plot.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/surface.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/vector_field.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + ) + +target_include_directories(c_api_interface + INTERFACE + $ + ) diff --git a/src/api/cpp/CMakeLists.txt b/src/api/cpp/CMakeLists.txt new file mode 100644 index 00000000..39d2a410 --- /dev/null +++ b/src/api/cpp/CMakeLists.txt @@ -0,0 +1,20 @@ +add_library(cpp_api_interface INTERFACE) + +target_sources(cpp_api_interface + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/chart.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/error.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/exception.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/font.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/histogram.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/image.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/plot.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/surface.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/vector_field.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + ) + +target_include_directories(cpp_api_interface + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR} + ) diff --git a/src/api/cpp/exception.cpp b/src/api/cpp/exception.cpp index 7e887a87..009e3315 100644 --- a/src/api/cpp/exception.cpp +++ b/src/api/cpp/exception.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include using std::string; using std::stringstream; @@ -21,7 +21,7 @@ using std::cerr; void stringcopy(char* dest, const char* src, size_t len) { -#ifdef OS_WIN +#if defined(OS_WIN) strncpy_s(dest, MAX_ERR_SIZE, src, len); #else strncpy(dest, src, len); @@ -72,6 +72,12 @@ Error::Error(const char * const pMessage, const char * const pFuncName, mMessage[sizeof(mMessage)-1] = '\0'; } +Error::Error(const Error& error) +{ + this->mErrCode = error.err(); + memcpy(this->mMessage, error.what(), 1024); +} + Error::~Error() throw() {} } diff --git a/src/backend/CMakeLists.txt b/src/backend/CMakeLists.txt deleted file mode 100644 index 77e505a1..00000000 --- a/src/backend/CMakeLists.txt +++ /dev/null @@ -1,106 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.0) - -####################### BEGIN - Backend agnostic upstream dependencies ##################### - -if(USE_HUNTER) - hunter_add_package(Boost COMPONENTS system filesystem) - find_package(Boost REQUIRED COMPONENTS system filesystem) - - hunter_add_package(glm) - find_package(glm CONFIG REQUIRED) - - hunter_add_package(freetype) - find_package(freetype REQUIRED) -else() - FIND_PACKAGE(Boost REQUIRED) - - OPTION(USE_SYSTEM_GLM "Use the system GLM library" OFF) - IF(USE_SYSTEM_GLM) - FIND_PACKAGE(glm REQUIRED) - ELSE() - INCLUDE(build_glm) - ENDIF() - - OPTION(USE_SYSTEM_FREETYPE "Use the system Freetype library" OFF) - IF(USE_SYSTEM_FREETYPE) - FIND_PACKAGE(Freetype REQUIRED) - ELSE() - INCLUDE(build_freetype) - ENDIF() -endif() - -INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(${GLM_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS}) - -IF(UNIX) - FIND_PACKAGE(FontConfig REQUIRED) - INCLUDE_DIRECTORIES("${FONTCONFIG_INCLUDE_DIR}") -ENDIF(UNIX) - -if(USE_FREEIMAGE) - FIND_PACKAGE(FreeImage REQUIRED) - - INCLUDE_DIRECTORIES(${FREEIMAGE_INCLUDE_PATH}) - ADD_DEFINITIONS(-DUSE_FREEIMAGE) -endif() - -SET(USE_WINDOW_TOOLKIT "glfw3" CACHE STRING "Choose Window toolkit") -SET_PROPERTY(CACHE USE_WINDOW_TOOLKIT PROPERTY STRINGS "glfw3" "sdl2") - -IF(${USE_WINDOW_TOOLKIT} STREQUAL "glfw3") - #FIXME LATER: glfw3Config.cmake file provided by glfw 3.* - # is found on different locations in different linux/unix - # distributions, thus causing glfw3 not found errors. - # DON'T REPLACE GLFW with glfw3 in find_package command. - FIND_PACKAGE(GLFW REQUIRED) - IF(GLFW_FOUND) - SET(WTK_INCLUDE_DIRS ${GLFW_INCLUDE_DIR}) - SET(WTK_LIBRARIES ${GLFW_LIBRARY}) - ADD_DEFINITIONS(-DUSE_GLFW) - ELSE(GLFW_FOUND) - MESSAGE(FATAL_ERROR "GLFW not found") - ENDIF(GLFW_FOUND) -ENDIF() - -IF(${USE_WINDOW_TOOLKIT} STREQUAL "sdl2") - FIND_PACKAGE(SDL2 REQUIRED) - IF(SDL2_FOUND) - SET(WTK_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) - SET(WTK_LIBRARIES ${SDL2_LIBRARY}) - ADD_DEFINITIONS(-DUSE_SDL) - ELSE(SDL2_FOUND) - MESSAGE(FATAL_ERROR "SDL2 not found") - ENDIF(SDL2_FOUND) -ENDIF() - -####################### END - Backend agnostic upstream dependencies ####################### - -ADD_EXECUTABLE(glsl2cpp "${PROJECT_SOURCE_DIR}/CMakeModules/glsl2cpp.cpp") - -INCLUDE(GLSLtoH) - -SET(glsl_shader_headers "shader_headers") - -FILE(GLOB glsl_shaders "glsl_shaders/*.glsl") - -LIST(SORT glsl_shaders) - -SOURCE_GROUP("src\\backend\\glsl_shaders" FILES ${glsl_shaders}) - -GLSL_TO_H( - SOURCES ${glsl_shaders} - VARNAME shader_files - EXTENSION "hpp" - OUTPUT_DIR ${glsl_shader_headers} - TARGETS glsl_shader_targets - NAMESPACE "glsl" - EOD "0" - ) - -# DON'T REMOVE CURRENT BINARY DIRECTORY FROM -# INCLUDE_DIRECTORIES, IT IS USED TO FIND -# AUTO-GENERATED GLSL HEADERS -INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) - -ADD_SUBDIRECTORY(opengl) diff --git a/src/backend/common/CMakeLists.txt b/src/backend/common/CMakeLists.txt new file mode 100644 index 00000000..1a774793 --- /dev/null +++ b/src/backend/common/CMakeLists.txt @@ -0,0 +1,25 @@ +add_library(backend_interface INTERFACE) + +target_sources(backend_interface + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/chart_common.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/chart.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/chart_renderables.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/cmap.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/defines.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/err_common.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/err_common.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/font.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/handle.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/handle.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/image.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/util.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/util.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/window.hpp + ) + +target_include_directories(backend_interface + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/include + ) diff --git a/src/backend/chart.hpp b/src/backend/common/chart.hpp similarity index 100% rename from src/backend/chart.hpp rename to src/backend/common/chart.hpp diff --git a/src/backend/chart_common.hpp b/src/backend/common/chart_common.hpp similarity index 100% rename from src/backend/chart_common.hpp rename to src/backend/common/chart_common.hpp diff --git a/src/backend/chart_renderables.hpp b/src/backend/common/chart_renderables.hpp similarity index 100% rename from src/backend/chart_renderables.hpp rename to src/backend/common/chart_renderables.hpp diff --git a/src/backend/cmap.hpp b/src/backend/common/cmap.hpp similarity index 100% rename from src/backend/cmap.hpp rename to src/backend/common/cmap.hpp diff --git a/src/backend/defines.hpp b/src/backend/common/defines.hpp similarity index 96% rename from src/backend/defines.hpp rename to src/backend/common/defines.hpp index 6b771008..a3ec6131 100644 --- a/src/backend/defines.hpp +++ b/src/backend/common/defines.hpp @@ -26,7 +26,7 @@ clipFilePath(std::string path, std::string str) } } -#if defined(_WIN32) || defined(_MSC_VER) +#if defined(OS_WIN) #define __PRETTY_FUNCTION__ __FUNCSIG__ #if _MSC_VER < 1900 #define snprintf sprintf_s diff --git a/src/backend/err_common.cpp b/src/backend/common/err_common.cpp similarity index 99% rename from src/backend/err_common.cpp rename to src/backend/common/err_common.cpp index 85bbad21..c4bf2269 100644 --- a/src/backend/err_common.cpp +++ b/src/backend/common/err_common.cpp @@ -14,6 +14,8 @@ #include #include +#include +#include using namespace forge; diff --git a/src/backend/err_common.hpp b/src/backend/common/err_common.hpp similarity index 100% rename from src/backend/err_common.hpp rename to src/backend/common/err_common.hpp diff --git a/src/backend/font.hpp b/src/backend/common/font.hpp similarity index 100% rename from src/backend/font.hpp rename to src/backend/common/font.hpp diff --git a/src/backend/handle.cpp b/src/backend/common/handle.cpp similarity index 100% rename from src/backend/handle.cpp rename to src/backend/common/handle.cpp diff --git a/src/backend/handle.hpp b/src/backend/common/handle.hpp similarity index 100% rename from src/backend/handle.hpp rename to src/backend/common/handle.hpp diff --git a/src/backend/image.hpp b/src/backend/common/image.hpp similarity index 100% rename from src/backend/image.hpp rename to src/backend/common/image.hpp diff --git a/src/backend/util.cpp b/src/backend/common/util.cpp similarity index 100% rename from src/backend/util.cpp rename to src/backend/common/util.cpp diff --git a/src/backend/util.hpp b/src/backend/common/util.hpp similarity index 100% rename from src/backend/util.hpp rename to src/backend/common/util.hpp diff --git a/src/backend/window.hpp b/src/backend/common/window.hpp similarity index 100% rename from src/backend/window.hpp rename to src/backend/common/window.hpp diff --git a/src/backend/glsl_shaders/CMakeLists.txt b/src/backend/glsl_shaders/CMakeLists.txt new file mode 100644 index 00000000..693f5530 --- /dev/null +++ b/src/backend/glsl_shaders/CMakeLists.txt @@ -0,0 +1,21 @@ +add_executable(glsl2cpp "${PROJECT_SOURCE_DIR}/CMakeModules/glsl2cpp.cpp") + +set_target_properties(glsl2cpp PROPERTIES CXX_STANDARD 11) + +include(GLSLtoH) + +file(GLOB glsl_shaders "*.glsl") + +list(SORT glsl_shaders) + +source_group("src\\backend\\glsl_shaders" FILES ${glsl_shaders}) + +convert_glsl_shaders_to_headers( + SOURCES ${glsl_shaders} + VARNAME shader_files + EXTENSION "hpp" + OUTPUT_DIR "shader_headers" + TARGETS glsl_shader_targets + NAMESPACE "glsl" + EOD "0" + ) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 89e70d29..0f309855 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -1,156 +1,128 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.0) - -FIND_PACKAGE(OpenGL REQUIRED) - -INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) - -OPTION(USE_SYSTEM_GLBINDING "Use system glbinding" OFF) -IF(USE_SYSTEM_GLBINDING) - # Point glbinding_DIR (case sensitive) to the location of glbinding-config.cmake - # This file is generally at CMAKE_INSTALL_PREFIX/glbinding-config.cmake of - # the glbinding project - FIND_PACKAGE(glbinding REQUIRED) -ELSE(USE_SYSTEM_GLBINDING) - INCLUDE(build_glbinding) -ENDIF(USE_SYSTEM_GLBINDING) - -IF(WIN32) - ADD_DEFINITIONS(-DFGDLL) -ENDIF(WIN32) - -INCLUDE_DIRECTORIES( - ${CMAKE_INCLUDE_PATH} - ${WTK_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR} - "${PROJECT_SOURCE_DIR}/src/api/c" - "${PROJECT_SOURCE_DIR}/src/api/cpp" - "${PROJECT_SOURCE_DIR}/src/backend" +find_package(OpenGL REQUIRED) + +set(BackendTarget "forge") + +add_library(${BackendTarget} SHARED "") + +set_target_properties(${BackendTarget} PROPERTIES FOLDER Forge) +set_target_properties(${BackendTarget} PROPERTIES POSITION_INDEPENDENT_CODE ON) +set_target_properties(${BackendTarget} PROPERTIES CXX_STANDARD 11) +set_target_properties(${BackendTarget} PROPERTIES LINKER_LANGUAGE CXX) + +if (WIN32) + target_compile_definitions(${BackendTarget} + PUBLIC FGDLL + PRIVATE OS_WIN WIN32_MEAN_AND_LEAN) +elseif (APPLE) + target_compile_definitions(${BackendTarget} PRIVATE OS_MAC) +else(WIN32) + target_compile_definitions(${BackendTarget} PRIVATE OS_LNX) +endif(WIN32) + +target_sources(${BackendTarget} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/backend.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/chart_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/chart_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/colormap_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/colormap_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/common.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/common.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/err_opengl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/err_opengl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/font_atlas_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/font_atlas_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/font_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/font_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/gl_native_handles.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/gl_native_handles.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/histogram_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/histogram_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/image_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/image_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/plot_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/plot_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/surface_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/surface_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/update_buffer.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/vector_field_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/vector_field_impl.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/window_impl.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/window_impl.cpp ) -FILE(GLOB api_headers - "${PROJECT_SOURCE_DIR}/include/*.h" - "${PROJECT_SOURCE_DIR}/include/fg/*.h" +if(${WINDOW_TOOLKIT} STREQUAL "glfw3") + add_subdirectory(glfw) + target_compile_definitions(${BackendTarget} PRIVATE USE_GLFW) +elseif(${WINDOW_TOOLKIT} STREQUAL "sdl2") + add_subdirectory(sdl) + target_compile_definitions(${BackendTarget} PRIVATE USE_SDL) +endif() + +if(WITH_FREEIMAGE) + target_compile_definitions(${BackendTarget} PRIVATE USE_FREEIMAGE) + target_link_libraries(${BackendTarget} PRIVATE FreeImage::FreeImage) +endif() + +target_include_directories(${BackendTarget} + PUBLIC + $ + $ + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${PROJECT_BINARY_DIR} + ${PROJECT_SOURCE_DIR}/include + ${X11_INCLUDE_DIR} ) -FILE(GLOB c_api_headers - "${PROJECT_SOURCE_DIR}/src/api/c/*.hpp" - ) -FILE(GLOB c_api_sources - "${PROJECT_SOURCE_DIR}/src/api/c/*.cpp" - ) -FILE(GLOB cpp_api_headers - "${PROJECT_SOURCE_DIR}/src/api/cpp/*.hpp" - ) -FILE(GLOB cpp_api_sources - "${PROJECT_SOURCE_DIR}/src/api/cpp/*.cpp" - ) - -FILE(GLOB bknd_headers - "${PROJECT_SOURCE_DIR}/src/backend/*.hpp" - ) - -FILE(GLOB bknd_sources - "${PROJECT_SOURCE_DIR}/src/backend/*.cpp" - ) - -FILE(GLOB gl_headers - "*.hpp" - "*.h" +target_link_libraries(${BackendTarget} + PUBLIC + OpenGL::GL + PRIVATE + glbinding::glbinding + glm + FreeType::FreeType + Boost::boost + backend_interface + wtk_interface + c_api_interface + cpp_api_interface ) -FILE(GLOB gl_sources - "*.c" - "*.cpp" +if(UNIX) + target_link_libraries(${BackendTarget} + PRIVATE + FontConfig::FontConfig + ${X11_X11_LIB} + ) +endif(UNIX) + +add_dependencies(${BackendTarget} ${glsl_shader_targets}) + +source_group(include REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/include/*) +source_group("api\\cpp" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/api/cpp/*) +source_group("api\\c" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/api/c/*) +source_group("backend" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/common/*|${CMAKE_CURRENT_SOURCE_DIR}/*) +source_group("backend\\shaders" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/glsl_shaders/*) + +if(${WINDOW_TOOLKIT} STREQUAL "glfw3") + source_group("backend\\glfw" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/opengl/glfw/*) +elseif(${WINDOW_TOOLKIT} STREQUAL "sdl2") + source_group("backend\\sdl2" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/opengl/sdl/*) +endif() + +#-------------------------------------------------------------------- +# Install forget target +#-------------------------------------------------------------------- +install(TARGETS forge + EXPORT ForgeConfig + ARCHIVE DESTINATION ${FG_INSTALL_LIB_DIR} + LIBRARY DESTINATION ${FG_INSTALL_LIB_DIR} + RUNTIME DESTINATION ${FG_INSTALL_BIN_DIR} ) -LIST(SORT c_api_headers) -LIST(SORT c_api_sources) -LIST(SORT cpp_api_headers) -LIST(SORT cpp_api_sources) -LIST(SORT bknd_headers) -LIST(SORT bknd_sources) -LIST(SORT gl_headers) -LIST(SORT gl_sources) - -SOURCE_GROUP(inc FILES ${api_headers}) - -SOURCE_GROUP("src\\api\\c\\headers" FILES ${c_api_headers}) -SOURCE_GROUP("src\\api\\c\\sources" FILES ${c_api_sources}) - -SOURCE_GROUP("src\\api\\cpp\\headers" FILES ${cpp_api_headers}) -SOURCE_GROUP("src\\api\\cpp\\sources" FILES ${cpp_api_sources}) - -SOURCE_GROUP("src\\backend" FILES ${bknd_headers}) -SOURCE_GROUP("src\\backend" FILES ${bknd_sources}) - -SOURCE_GROUP("src\\backend\\opengl\\headers" FILES ${gl_headers}) -SOURCE_GROUP("src\\backend\\opengl\\sources" FILES ${gl_sources}) - -IF(${USE_WINDOW_TOOLKIT} STREQUAL "glfw3") - FILE(GLOB wtk_headers - "glfw/*.hpp") - FILE(GLOB wtk_sources - "glfw/*.cpp") - SOURCE_GROUP("src\\backend\\opengl\\glfw\\headers" FILES ${wtk_headers}) - SOURCE_GROUP("src\\backend\\opengl\\glfw\\sources" FILES ${wtk_sources}) -ELSEIF(${USE_WINDOW_TOOLKIT} STREQUAL "sdl2") - FILE(GLOB wtk_headers - "sdl/*.hpp") - FILE(GLOB wtk_sources - "sdl/*.cpp") - SOURCE_GROUP("src\\backend\\opengl\\sdl\\headers" FILES ${wtk_headers}) - SOURCE_GROUP("src\\backend\\opengl\\sdl\\sources" FILES ${wtk_sources}) -ENDIF() - -ADD_LIBRARY(forge SHARED - ${api_headers} - ${c_api_headers} - ${c_api_sources} - ${cpp_api_headers} - ${cpp_api_sources} - ${bknd_headers} - ${bknd_sources} - ${gl_headers} - ${gl_sources} - ${wtk_headers} - ${wtk_sources} - ) - -TARGET_LINK_LIBRARIES(forge - PRIVATE ${FONTCONFIG_LIBRARY} - PRIVATE ${FREETYPE_LIBRARIES} - PRIVATE ${WTK_LIBRARIES} - PRIVATE ${OPENGL_gl_LIBRARY} - PRIVATE ${FREEIMAGE_LIBRARY} - PRIVATE ${X11_LIBS} - ) - -ADD_DEPENDENCIES(forge ${glsl_shader_targets}) - -IF (NOT USE_SYSTEM_FREETYPE AND NOT USE_HUNTER) - ADD_DEPENDENCIES(forge freetype) -ENDIF() - -IF(USE_SYSTEM_GLBINDING) - TARGET_LINK_LIBRARIES(forge PRIVATE glbinding::glbinding) -ELSE(USE_SYSTEM_GLBINDING) - INCLUDE_DIRECTORIES(${GLBINDING_INCLUDE_DIRS}) - TARGET_LINK_LIBRARIES(forge PRIVATE ${GLBINDING_LIBRARIES}) - ADD_DEPENDENCIES(forge glbinding) -ENDIF(USE_SYSTEM_GLBINDING) - -SET_TARGET_PROPERTIES(forge PROPERTIES - VERSION "${FG_VERSION}" - SOVERSION "${FG_VERSION_MAJOR}") - -INSTALL(TARGETS forge - EXPORT FORGE - DESTINATION "${FG_INSTALL_LIB_DIR}" - COMPONENT libraries) - -EXPORT(TARGETS forge FILE ForgeTargets.cmake) +install(EXPORT ForgeConfig NAMESPACE Forge:: DESTINATION ${FG_INSTALL_CMAKE_DIR}) -INSTALL(EXPORT FORGE DESTINATION "${FG_INSTALL_CMAKE_DIR}" - COMPONENT cmake - FILE ForgeTargets.cmake - ) +#Following ForgeConfig.cmake is built using local build tree +#Don't copy this file anywhere else +export(TARGETS forge NAMESPACE Forge:: FILE ForgeConfig.cmake) diff --git a/src/backend/opengl/common.cpp b/src/backend/opengl/common.cpp index db89dc59..91ec4940 100644 --- a/src/backend/opengl/common.cpp +++ b/src/backend/opengl/common.cpp @@ -214,7 +214,7 @@ float clampTo01(const float pValue) return (pValue < 0.0f ? 0.0f : (pValue>1.0f ? 1.0f : pValue)); } -#ifdef OS_WIN +#if defined(OS_WIN) #include #include diff --git a/src/backend/opengl/common.hpp b/src/backend/opengl/common.hpp index 2f2591c2..f5837f9c 100644 --- a/src/backend/opengl/common.hpp +++ b/src/backend/opengl/common.hpp @@ -110,7 +110,7 @@ gl::GLuint createBuffer(gl::GLenum pTarget, size_t pSize, const T* pPtr, gl::GLe return retVal; } -#ifdef OS_WIN +#if defined(OS_WIN) /* Get the paths to font files in Windows system directory * * @pFiles is the output vector to which font file paths are appended to. diff --git a/src/backend/opengl/font_impl.cpp b/src/backend/opengl/font_impl.cpp index 4f74dbd2..70645fc8 100644 --- a/src/backend/opengl/font_impl.cpp +++ b/src/backend/opengl/font_impl.cpp @@ -36,11 +36,11 @@ static const struct { } FT_Errors[] = #include FT_ERRORS_H -#ifndef OS_WIN +#if !defined(OS_WIN) #include #endif -#ifdef OS_WIN +#if defined(OS_WIN) #include #include #endif @@ -342,7 +342,7 @@ void font_impl::loadSystemFont(const char* const pName) { std::string ttf_file_path; -#ifndef OS_WIN +#if !defined(OS_WIN) // use fontconfig to get the file FcConfig* config = FcInitLoadConfigAndFonts(); if (!config) { diff --git a/src/backend/opengl/gl_native_handles.cpp b/src/backend/opengl/gl_native_handles.cpp index cfa9be44..9065ca3e 100644 --- a/src/backend/opengl/gl_native_handles.cpp +++ b/src/backend/opengl/gl_native_handles.cpp @@ -9,9 +9,9 @@ #include -#ifdef OS_WIN +#if defined(OS_WIN) #include -#elif OS_MAC +#elif defined(OS_MAC) #include #else #include diff --git a/src/backend/opengl/glfw/CMakeLists.txt b/src/backend/opengl/glfw/CMakeLists.txt new file mode 100644 index 00000000..ff6bfca2 --- /dev/null +++ b/src/backend/opengl/glfw/CMakeLists.txt @@ -0,0 +1,16 @@ +find_package(glfw3) + +add_library(wtk_interface INTERFACE) + +target_include_directories(wtk_interface + INTERFACE + ${CMAKE_SOURCE_DIR}/src/backend/opengl + ) + +target_sources(wtk_interface + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/window.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + ) + +target_link_libraries(wtk_interface INTERFACE glfw) diff --git a/src/backend/opengl/sdl/CMakeLists.txt b/src/backend/opengl/sdl/CMakeLists.txt new file mode 100644 index 00000000..f88fb17f --- /dev/null +++ b/src/backend/opengl/sdl/CMakeLists.txt @@ -0,0 +1,16 @@ +find_package(SDL2) + +add_library(wtk_interface INTERFACE) + +target_include_directories(wtk_interface + INTERFACE + ${CMAKE_SOURCE_DIR}/src/backend/opengl + ) + +target_sources(wtk_interface + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/window.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + ) + +target_link_libraries(wtk_interface INTERFACE SDL2::SDL2) diff --git a/src/backend/opengl/util.cpp b/src/backend/opengl/update_buffer.cpp similarity index 98% rename from src/backend/opengl/util.cpp rename to src/backend/opengl/update_buffer.cpp index fd4b67b3..983c8392 100644 --- a/src/backend/opengl/util.cpp +++ b/src/backend/opengl/update_buffer.cpp @@ -7,7 +7,7 @@ * http://arrayfire.com/licenses/BSD-3-Clause ********************************************************/ -#include +#include #include #include @@ -53,7 +53,6 @@ fg_err fg_finish() namespace forge { - void updateVertexBuffer(const unsigned pBufferId, const size_t pBufferSize, const void* pBufferData) @@ -78,5 +77,4 @@ void finish() if (val!=FG_ERR_NONE) FG_ERROR("glFinish failed", val); } - } diff --git a/src/backend/opengl/window_impl.cpp b/src/backend/opengl/window_impl.cpp index 4cd64eb5..c954e3c1 100644 --- a/src/backend/opengl/window_impl.cpp +++ b/src/backend/opengl/window_impl.cpp @@ -157,7 +157,7 @@ window_impl::window_impl(int pWidth, int pHeight, const char* pTitle, /* setup default window font */ mFont = std::make_shared(); -#ifdef OS_WIN +#if defined(OS_WIN) mFont->loadSystemFont("Calibri"); #else mFont->loadSystemFont("Vera"); From 0c07658cf6d0e420327831f1c7722d3cc75b2d6f Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 22 Dec 2017 19:08:32 +0530 Subject: [PATCH 03/55] misc: travis ci configuration file --- .travis.yml | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..be869cc1 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,51 @@ +#----------------------------------------------------------------------------- +# +# Configuration for continuous integration service at travis-ci.org +# +#----------------------------------------------------------------------------- + +sudo: required + +services: + - docker + +language: cpp + +notifications: + email: false + +env: + matrix: + - VER=5 CC_NAME=gcc CXX_NAME=g++ + - VER=4.9 CC_NAME=gcc CXX_NAME=g++ + - VER=3.5 CC_NAME=clang CXX_NAME=clang++ + - VER=3.9 CC_NAME=clang CXX_NAME=clang++ + +before_install: + - docker run -d --name ubuntu-test -v $(pwd):/travis ubuntu:latest tail -f /dev/null + - docker ps + +install: + - docker exec -t ubuntu-test bash -c "apt-get update; + apt-get install -y software-properties-common python-software-properties git-core; + apt-get install -y build-essential cmake cmake-data libboost-thread-dev libboost-date-time-dev; + apt-get install -y libfontconfig1-dev libfreeimage-dev libfreetype6-dev; + apt-get install -y libglfw3-dev; + add-apt-repository -y ppa:ubuntu-toolchain-r/test; + apt-get update; + apt-get install -y $CC_NAME-$VER $CXX_NAME-$VER; + apt-add-repository -y ppa:cginternals/ppa; + apt-get update; + apt-get install -y libglbinding-dev; + apt-get update; + apt-get install -y opencl-headers; + apt-get install -y ocl-icd-opencl-dev; + cd /travis; + git clone --branch 0.9.8.5 https://github.com/g-truc/glm.git; + cd glm && cmake -DCMAKE_INSTALL_PREFIX=/travis/glm/package && make install;" + +script: + - docker exec -t ubuntu-test bash -c "cd /travis; + export GLM_DIR=/travis/glm/package/lib/x86_64-linux-gnu/cmake/glm; + cmake -DCMAKE_C_COMPILER=$CC_NAME-$VER -DCMAKE_CXX_COMPILER=$CXX_NAME-$VER -Dglm_DIR=$GLM_DIR . && + make install" From 122d2aab20b5b4cde46271403f807470429f417d Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 22 Dec 2017 19:08:55 +0530 Subject: [PATCH 04/55] misc: appveyor ci configuration file --- appveyor.yml | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000..c7a79e17 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,153 @@ +# - Indent each level of configuration with 2 spaces. Do not use tabs! +# - All section names are case-sensitive. +# - Section names should be unique on each level. + +#---------------------------------# +# general configuration # +#---------------------------------# + +# version format +version: 1.0.{build}-{branch} + +# branches to build +branches: + # whitelist + only: + - master + + # blacklist + except: + - gh-pages + +# Do not build on tags (GitHub and BitBucket) +skip_tags: true + +# Start builds on tags only (GitHub and BitBucket) +skip_non_tags: false + +# Skipping commits with particular message or from specific user +#skip_commits: +# message: /Created.*\.(png|jpg|jpeg|bmp|gif)/ # Regex for matching commit message +# author: John # Commit author's username, name, email or regexp maching one of these. + +# Including commits with particular message or from specific user +#only_commits: +# message: /build/ # Start a new build if message contains 'build' +# author: jack@company.com # Start a new build for commit of user with email jack@company.com + +# Skipping commits affecting specific files (GitHub only). More details here: /docs/appveyor-yml +#skip_commits: +# files: +# - docs/* +# - '**/*.html' + +# Including commits affecting specific files (GitHub only). More details here: /docs/appveyor-yml +#only_commits: +# files: +# - Project-A/ +# - Project-B/ + +# Do not build feature branch with open Pull Requests +skip_branch_with_pr: true + +# Maximum number of concurrent jobs for the project +max_jobs: 2 + +#---------------------------------# +# environment configuration # +#---------------------------------# + +# Build worker image (VM template) +image: + - Visual Studio 2017 + +environment: + # 0-4 warning levels; 0 is no warnings + MSBUILD_FLAGS: /maxcpucount + BOOST_ROOT: C:/Libraries/boost_1_65_1 + matrix: + - generator: "Visual Studio 14 2015 Win64" + - generator: "Visual Studio 15 2017 Win64" + +install: + - ps: (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-dev.zip', 'c:/projects/glbinding-dev.zip') + - ps: Expand-Archive -LiteralPath C:\projects\glbinding-dev.zip -DestinationPath C:\projects\glbinding + - ps: (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-runtime.zip', 'c:/projects/glbinding-rt.zip') + - ps: Expand-Archive -LiteralPath C:\projects\glbinding-rt.zip -DestinationPath C:\projects\glbinding + - ps: (new-object net.webclient).DownloadFile('https://github.com/g-truc/glm/releases/download/0.9.8.5/glm-0.9.8.5.zip', 'c:/projects/glm.zip') + - ps: Expand-Archive -LiteralPath C:\projects\glm.zip -DestinationPath C:\projects + - ps: (new-object net.webclient).DownloadFile('https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip', 'c:/projects/glfw3.zip') + - ps: Expand-Archive -LiteralPath C:\projects\glfw3.zip -DestinationPath C:\projects + - ps: (new-object net.webclient).DownloadFile('http://downloads.sourceforge.net/freeimage/FreeImage3170Win32Win64.zip', 'c:/projects/freeimage.zip') + - ps: Expand-Archive -LiteralPath C:\projects\freeimage.zip -DestinationPath C:\projects + +# scripts that are called at very beginning, before repo cloning +init: + - date /T & time /T + - git config --global core.autocrlf input + - cmake --version + +# clone directory +clone_folder: c:\projects\forge + +# fetch repository as zip archive +shallow_clone: true # default is "false" + +# set clone depth +clone_depth: 5 # clone entire repository history if not defined + +# this is how to allow failing jobs in the matrix +matrix: + fast_finish: true # set this flag to immediately finish build once one of the jobs fails. + # allow_failures: + # - platform: x86 + # configuration: Debug + # - platform: x64 + # configuration: Release + +# build platform, i.e. x86, x64, Any CPU. This setting is optional. +platform: x64 + +# build Configuration, i.e. Debug, Release, etc. +configuration: + - RelWithDebInfo + # - Debug + # - Release + +build: + parallel: true # enable MSBuild parallel builds + project: c:/projects/forge/build/Forge.sln # path to Visual Studio solution or project + + # MSBuild verbosity level + # verbosity: quiet|minimal|normal|detailed + verbosity: quiet + +# scripts to run before build +before_build: + - cd %APPVEYOR_BUILD_FOLDER% + - cd ../glm + - mkdir build + - cd build + - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../glm/build/package + - cmake --build . --target INSTALL --config %configuration% -- /nologo + - cd %APPVEYOR_BUILD_FOLDER% + - cd ../glfw-3.2.1 + - mkdir build + - cd build + - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../glfw-3.2.1/build/package -DBUILD_SHARED_LIBS=ON -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF + - cmake --build . --target INSTALL --config %configuration% -- /nologo + +# scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services) +before_package: + +# scripts to run after build +after_build: + +# to run your custom scripts instead of automatic MSBuild +build_script: + - cd %APPVEYOR_BUILD_FOLDER% + - mkdir build + - cd build + - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/build/package -DCMAKE_PREFIX_PATH="c:/projects/glbinding;c:/projects/glfw-3.2.1/build/package/lib/cmake/glfw3;c:/projects/glm/build/package/lib/cmake/glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_DYNAMIC_LIBRARY="c:/projects/FreeImage/Dist/x64/FreeImage.lib" -DFreeImage_INCLUDE_DIR="c:/projects/FreeImage/Dist/x64" + - cmake --build . --target ALL_BUILD --config %configuration% -- /nologo + - cmake --build . --target INSTALL --config %configuration% -- /nologo From b0f57c71d8a5ce9eef757aa41b7e05c5a4ccc32b Mon Sep 17 00:00:00 2001 From: pradeep Date: Sat, 23 Dec 2017 18:57:52 +0530 Subject: [PATCH 05/55] misc: Change forge chat channel hyperlink in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a9607239..59b65bfa 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Forge - High Performance Visualizations --------------------------------------- -[![Join the chat at https://gitter.im/arrayfire/forge](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/arrayfire/forge?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[Join the chat at arrayfire-org#forge](https://join.slack.com/t/arrayfire-org/shared_invite/enQtMjI4MjIzMDMzMTczLWM4ODIyZjA3YmY3NWEwMjk2N2Q0YTQyNGMwZmU4ZjkxNGU0MjYzYmUzYTg3ZTM0MDQxOTE2OTJjNGVkOGEwN2M) An OpenGL interop library that can be used with ArrayFire or any other application using CUDA or OpenCL compute backend. The goal of **Forge** is to provide high performance OpenGL visualizations for C/C++ applications that use CUDA/OpenCL. Forge uses OpenGL >=3.3 forward compatible contexts, so please make sure you have capable hardware before trying it out. From 61378304e6200045271a06049e4bb745d82c0010 Mon Sep 17 00:00:00 2001 From: pradeep Date: Sat, 23 Dec 2017 19:20:12 +0530 Subject: [PATCH 06/55] misc: Change ci badges to travis & AppVeyor --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 59b65bfa..29aa80c8 100644 --- a/README.md +++ b/README.md @@ -12,17 +12,18 @@ You can find the most recent and updated documentation [here](http://arrayfire.o ### Build Status | Platform | Linux x86 | Linux armv7l | Linux aarch64 | Windows | OSX | |:--------:|:---------:|:------------:|:-------------:|:-------:|:---:| -| Status | [![Build Status](http://ci.arrayfire.org/buildStatus/icon?job=forge/forge-linux)](http://ci.arrayfire.org/view/All/job/forge/job/forge-linux/) | [![Build Status](http://ci.arrayfire.org/buildStatus/icon?job=forge/forge-tegrax1)](http://ci.arrayfire.org/view/All/job/forge/job/forge-tegrax1/) | [![Build Status](http://ci.arrayfire.org/buildStatus/icon?job=forge/forge-tegrax1)](http://ci.arrayfire.org/view/All/job/forge/job/forge-tegrax1/) | [![Build Status](http://ci.arrayfire.org/buildStatus/icon?job=forge/forge-windows)](http://ci.arrayfire.org/view/All/job/forge/job/forge-windows/) | [![Build Status](http://ci.arrayfire.org/buildStatus/icon?job=forge/forge-osx)](http://ci.arrayfire.org/view/All/job/forge/job/forge-osx/) | +| Status | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | `Unknown` | `Unknown` | [https://ci.appveyor.com/api/projects/status/3xo0bm9706yccg5p/branch/master?svg=true](https://ci.appveyor.com/api/projects/status/3xo0bm9706yccg5p/branch/master?svg=true) | `Unknown` | ### Dependencies * [glbinding](https://github.com/cginternals/glbinding) * [GLFW](http://www.glfw.org/), optionally you can build with [SDL2](https://www.libsdl.org/) alternative too. -* [freetype](http://www.freetype.org/) -* [FreeImage](http://freeimage.sourceforge.net/) - optional. Packages should ideally turn this - option ON. +* [freetype](http://www.freetype.org/). On Windows, freetype is built as a third-party package by + CMake. +* [FreeImage](http://freeimage.sourceforge.net/) - optional. If FreeImage is found, this option is + automatically turned on. * On `Linux` and `OS X`, [fontconfig](http://www.freedesktop.org/wiki/Software/fontconfig/) is required. -Above dependencies are available through package managers on most of the Unix/Linux based distributions. We have provided an option in `CMake` for `Forge` to build it's own internal `freetype` version if you choose to not install it on your machine. +Above dependencies are available through package managers on most of the Unix/Linux based distributions. ### Sample Images | | | From 7ac34bca54f8128ec135a213bf3f8452ca4f2f06 Mon Sep 17 00:00:00 2001 From: pradeep Date: Sat, 23 Dec 2017 20:54:00 +0530 Subject: [PATCH 07/55] misc: fix AppVeyor badge URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 29aa80c8..e53f1429 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ You can find the most recent and updated documentation [here](http://arrayfire.o ### Build Status | Platform | Linux x86 | Linux armv7l | Linux aarch64 | Windows | OSX | |:--------:|:---------:|:------------:|:-------------:|:-------:|:---:| -| Status | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | `Unknown` | `Unknown` | [https://ci.appveyor.com/api/projects/status/3xo0bm9706yccg5p/branch/master?svg=true](https://ci.appveyor.com/api/projects/status/3xo0bm9706yccg5p/branch/master?svg=true) | `Unknown` | +| Status | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | `Unknown` | `Unknown` | [![Build Status](https://ci.appveyor.com/api/projects/status/github/arrayfire/forge?branch=master&svg=true)](https://ci.appveyor.com/project/9prady9/forge-jwb4e) | `Unknown` | ### Dependencies * [glbinding](https://github.com/cginternals/glbinding) From b57328d7e2c3a4d883444b46b9e863147dc352ca Mon Sep 17 00:00:00 2001 From: pradeep Date: Mon, 25 Dec 2017 10:56:40 +0530 Subject: [PATCH 08/55] fix: Remove throw calls from destructors --- src/api/cpp/chart.cpp | 2 +- src/api/cpp/font.cpp | 4 +--- src/api/cpp/histogram.cpp | 4 +--- src/api/cpp/image.cpp | 4 +--- src/api/cpp/plot.cpp | 4 +--- src/api/cpp/surface.cpp | 4 +--- src/api/cpp/vector_field.cpp | 4 +--- src/api/cpp/window.cpp | 4 +--- src/backend/opengl/chart_impl.cpp | 2 -- src/backend/opengl/histogram_impl.cpp | 2 -- src/backend/opengl/image_impl.cpp | 2 -- src/backend/opengl/plot_impl.cpp | 2 -- src/backend/opengl/surface_impl.cpp | 2 -- src/backend/opengl/vector_field_impl.cpp | 2 -- 14 files changed, 8 insertions(+), 34 deletions(-) diff --git a/src/api/cpp/chart.cpp b/src/api/cpp/chart.cpp index 4b6deb45..d2771aa4 100644 --- a/src/api/cpp/chart.cpp +++ b/src/api/cpp/chart.cpp @@ -38,7 +38,7 @@ Chart::Chart(const Chart& pOther) Chart::~Chart() { - FG_THROW(fg_release_chart(get())); + fg_release_chart(get()); } void Chart::setAxesTitles(const char* pX, diff --git a/src/api/cpp/font.cpp b/src/api/cpp/font.cpp index a624329f..006f7f52 100644 --- a/src/api/cpp/font.cpp +++ b/src/api/cpp/font.cpp @@ -15,7 +15,6 @@ namespace forge { - Font::Font() { fg_font temp = 0; @@ -32,7 +31,7 @@ Font::Font(const Font& other) Font::~Font() { - FG_THROW(fg_release_font(get())); + fg_release_font(get()); } void Font::loadFontFile(const char* const pFile) @@ -49,5 +48,4 @@ fg_font Font::get() const { return mValue; } - } diff --git a/src/api/cpp/histogram.cpp b/src/api/cpp/histogram.cpp index 89a654f4..8df5f67f 100644 --- a/src/api/cpp/histogram.cpp +++ b/src/api/cpp/histogram.cpp @@ -15,7 +15,6 @@ namespace forge { - Histogram::Histogram(const unsigned pNBins, const dtype pDataType) { fg_histogram temp = 0; @@ -39,7 +38,7 @@ Histogram::Histogram(const fg_histogram pHandle) Histogram::~Histogram() { - FG_THROW(fg_release_histogram(get())); + fg_release_histogram(get()); } void Histogram::setColor(const Color pColor) @@ -109,5 +108,4 @@ fg_histogram Histogram::get() const { return mValue; } - } diff --git a/src/api/cpp/image.cpp b/src/api/cpp/image.cpp index 09553832..14de3b65 100644 --- a/src/api/cpp/image.cpp +++ b/src/api/cpp/image.cpp @@ -16,7 +16,6 @@ namespace forge { - Image::Image(const unsigned pWidth, const unsigned pHeight, const ChannelFormat pFormat, const dtype pDataType) : mValue(0) @@ -43,7 +42,7 @@ Image::Image(const fg_image pHandle) Image::~Image() { - FG_THROW(fg_release_image(get())); + fg_release_image(get()); } void Image::setAlpha(const float pAlpha) @@ -109,5 +108,4 @@ fg_image Image::get() const { return mValue; } - } diff --git a/src/api/cpp/plot.cpp b/src/api/cpp/plot.cpp index c2b38017..edd54f2c 100644 --- a/src/api/cpp/plot.cpp +++ b/src/api/cpp/plot.cpp @@ -15,7 +15,6 @@ namespace forge { - Plot::Plot(const unsigned pNumPoints, const dtype pDataType, const ChartType pChartType, const PlotType pPlotType, const MarkerType pMarkerType) { @@ -41,7 +40,7 @@ Plot::Plot(const fg_plot pHandle) Plot::~Plot() { - FG_THROW(fg_release_plot(get())); + fg_release_plot(get()); } void Plot::setColor(const Color pColor) @@ -130,5 +129,4 @@ fg_plot Plot::get() const { return mValue; } - } diff --git a/src/api/cpp/surface.cpp b/src/api/cpp/surface.cpp index a9d6624e..1520067c 100644 --- a/src/api/cpp/surface.cpp +++ b/src/api/cpp/surface.cpp @@ -15,7 +15,6 @@ namespace forge { - Surface::Surface(unsigned pNumXPoints, unsigned pNumYPoints, dtype pDataType, PlotType pPlotType, MarkerType pMarkerType) { fg_surface temp = 0; @@ -40,7 +39,7 @@ Surface::Surface(const fg_surface pHandle) Surface::~Surface() { - FG_THROW(fg_release_surface(get())); + fg_release_surface(get()); } void Surface::setColor(const Color pColor) @@ -110,5 +109,4 @@ fg_surface Surface::get() const { return mValue; } - } diff --git a/src/api/cpp/vector_field.cpp b/src/api/cpp/vector_field.cpp index 927d0142..a2bd943a 100644 --- a/src/api/cpp/vector_field.cpp +++ b/src/api/cpp/vector_field.cpp @@ -15,7 +15,6 @@ namespace forge { - VectorField::VectorField(const unsigned pNumPoints, const dtype pDataType, const ChartType pChartType) { fg_vector_field temp = 0; @@ -39,7 +38,7 @@ VectorField::VectorField(const fg_vector_field pHandle) VectorField::~VectorField() { - FG_THROW(fg_release_vector_field(get())); + fg_release_vector_field(get()); } void VectorField::setColor(const Color pColor) @@ -123,5 +122,4 @@ fg_vector_field VectorField::get() const { return mValue; } - } diff --git a/src/api/cpp/window.cpp b/src/api/cpp/window.cpp index 9be9a95f..7cb1320e 100644 --- a/src/api/cpp/window.cpp +++ b/src/api/cpp/window.cpp @@ -15,7 +15,6 @@ namespace forge { - Window::Window(const int pWidth, const int pHeight, const char* pTitle, const Window* pWindow, const bool invisible) : mValue(0) @@ -38,7 +37,7 @@ Window::Window(const Window& other) Window::~Window() { - FG_THROW(fg_release_window(get())); + fg_release_window(get()); } void Window::setFont(Font* pFont) @@ -152,5 +151,4 @@ void Window::saveFrameBuffer(const char* pFullPath) { FG_THROW(fg_save_window_framebuffer(pFullPath, get())); } - } diff --git a/src/backend/opengl/chart_impl.cpp b/src/backend/opengl/chart_impl.cpp index 8a6f193d..e0801a2d 100644 --- a/src/backend/opengl/chart_impl.cpp +++ b/src/backend/opengl/chart_impl.cpp @@ -175,13 +175,11 @@ AbstractChart::AbstractChart(const float pLeftMargin, const float pRightMargin, AbstractChart::~AbstractChart() { - CheckGL("Begin AbstractChart::~AbstractChart"); for (auto it = mVAOMap.begin(); it!=mVAOMap.end(); ++it) { GLuint vao = it->second; glDeleteVertexArrays(1, &vao); } glDeleteBuffers(1, &mDecorVBO); - CheckGL("End AbstractChart::~AbstractChart"); } void AbstractChart::setAxesLimits(const float pXmin, const float pXmax, diff --git a/src/backend/opengl/histogram_impl.cpp b/src/backend/opengl/histogram_impl.cpp index f51a7b36..9b640f16 100644 --- a/src/backend/opengl/histogram_impl.cpp +++ b/src/backend/opengl/histogram_impl.cpp @@ -120,12 +120,10 @@ histogram_impl::histogram_impl(const uint pNBins, const forge::dtype pDataType) histogram_impl::~histogram_impl() { - CheckGL("Begin histogram_impl::~histogram_impl"); for (auto it = mVAOMap.begin(); it!=mVAOMap.end(); ++it) { GLuint vao = it->second; glDeleteVertexArrays(1, &vao); } - CheckGL("End histogram_impl::~histogram_impl"); } void histogram_impl::render(const int pWindowId, diff --git a/src/backend/opengl/image_impl.cpp b/src/backend/opengl/image_impl.cpp index 02aa7ed0..9edd4880 100644 --- a/src/backend/opengl/image_impl.cpp +++ b/src/backend/opengl/image_impl.cpp @@ -100,10 +100,8 @@ image_impl::image_impl(const uint pWidth, const uint pHeight, image_impl::~image_impl() { - CheckGL("Begin image_impl::~image_impl"); glDeleteBuffers(1, &mPBO); glDeleteTextures(1, &mTex); - CheckGL("End image_impl::~image_impl"); } void image_impl::setColorMapUBOParams(const GLuint pUBO, const GLuint pSize) diff --git a/src/backend/opengl/plot_impl.cpp b/src/backend/opengl/plot_impl.cpp index 4a2951f2..464ad394 100644 --- a/src/backend/opengl/plot_impl.cpp +++ b/src/backend/opengl/plot_impl.cpp @@ -165,13 +165,11 @@ plot_impl::plot_impl(const uint pNumPoints, const forge::dtype pDataType, plot_impl::~plot_impl() { - CheckGL("Begin plot_impl::~plot_impl"); for (auto it = mVAOMap.begin(); it!=mVAOMap.end(); ++it) { GLuint vao = it->second; glDeleteVertexArrays(1, &vao); } glDeleteBuffers(1, &mRBO); - CheckGL("End plot_impl::~plot_impl"); } void plot_impl::setMarkerSize(const float pMarkerSize) diff --git a/src/backend/opengl/surface_impl.cpp b/src/backend/opengl/surface_impl.cpp index 580e2112..300fd3fe 100644 --- a/src/backend/opengl/surface_impl.cpp +++ b/src/backend/opengl/surface_impl.cpp @@ -221,13 +221,11 @@ surface_impl::surface_impl(unsigned pNumXPoints, unsigned pNumYPoints, surface_impl::~surface_impl() { - CheckGL("Begin Plot::~Plot"); for (auto it = mVAOMap.begin(); it!=mVAOMap.end(); ++it) { GLuint vao = it->second; glDeleteVertexArrays(1, &vao); } glDeleteBuffers(1, &mIBO); - CheckGL("End Plot::~Plot"); } void surface_impl::render(const int pWindowId, diff --git a/src/backend/opengl/vector_field_impl.cpp b/src/backend/opengl/vector_field_impl.cpp index 03d2b5dc..fbe1a94e 100644 --- a/src/backend/opengl/vector_field_impl.cpp +++ b/src/backend/opengl/vector_field_impl.cpp @@ -154,13 +154,11 @@ vector_field_impl::vector_field_impl(const uint pNumPoints, const forge::dtype p vector_field_impl::~vector_field_impl() { - CheckGL("Begin vector_field_impl::~vector_field_impl"); for (auto it = mVAOMap.begin(); it!=mVAOMap.end(); ++it) { GLuint vao = it->second; glDeleteVertexArrays(1, &vao); } glDeleteBuffers(1, &mDBO); - CheckGL("End vector_field_impl::~vector_field_impl"); } GLuint vector_field_impl::directions() From 30b73af519211be855cd0407ac1aa1b93d3c841b Mon Sep 17 00:00:00 2001 From: pradeep Date: Thu, 4 Jan 2018 09:25:38 +0530 Subject: [PATCH 09/55] Cache AppVeyor dependencies for branch builds --- appveyor.yml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index c7a79e17..44c92648 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -71,15 +71,15 @@ environment: install: - ps: (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-dev.zip', 'c:/projects/glbinding-dev.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glbinding-dev.zip -DestinationPath C:\projects\glbinding + - ps: Expand-Archive -LiteralPath C:\projects\glbinding-dev.zip -DestinationPath C:\projects\dependencies\glbinding - ps: (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-runtime.zip', 'c:/projects/glbinding-rt.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glbinding-rt.zip -DestinationPath C:\projects\glbinding + - ps: Expand-Archive -LiteralPath C:\projects\glbinding-rt.zip -DestinationPath C:\projects\dependencies\glbinding - ps: (new-object net.webclient).DownloadFile('https://github.com/g-truc/glm/releases/download/0.9.8.5/glm-0.9.8.5.zip', 'c:/projects/glm.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glm.zip -DestinationPath C:\projects + - ps: Expand-Archive -LiteralPath C:\projects\glm.zip -DestinationPath C:\projects\dependencies - ps: (new-object net.webclient).DownloadFile('https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip', 'c:/projects/glfw3.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glfw3.zip -DestinationPath C:\projects + - ps: Expand-Archive -LiteralPath C:\projects\glfw3.zip -DestinationPath C:\projects\dependencies - ps: (new-object net.webclient).DownloadFile('http://downloads.sourceforge.net/freeimage/FreeImage3170Win32Win64.zip', 'c:/projects/freeimage.zip') - - ps: Expand-Archive -LiteralPath C:\projects\freeimage.zip -DestinationPath C:\projects + - ps: Expand-Archive -LiteralPath C:\projects\freeimage.zip -DestinationPath C:\projects\dependencies # scripts that are called at very beginning, before repo cloning init: @@ -114,6 +114,9 @@ configuration: # - Debug # - Release +cache: + - C:\projects\dependencies -> appveyor.yml + build: parallel: true # enable MSBuild parallel builds project: c:/projects/forge/build/Forge.sln # path to Visual Studio solution or project @@ -125,16 +128,16 @@ build: # scripts to run before build before_build: - cd %APPVEYOR_BUILD_FOLDER% - - cd ../glm + - cd ../dependencies/glm - mkdir build - cd build - - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../glm/build/package + - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../dependencies/glm/build/package - cmake --build . --target INSTALL --config %configuration% -- /nologo - cd %APPVEYOR_BUILD_FOLDER% - - cd ../glfw-3.2.1 + - cd ../dependencies/glfw-3.2.1 - mkdir build - cd build - - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../glfw-3.2.1/build/package -DBUILD_SHARED_LIBS=ON -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF + - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../dependencies/glfw-3.2.1/build/package -DBUILD_SHARED_LIBS=ON -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF - cmake --build . --target INSTALL --config %configuration% -- /nologo # scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services) @@ -148,6 +151,6 @@ build_script: - cd %APPVEYOR_BUILD_FOLDER% - mkdir build - cd build - - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/build/package -DCMAKE_PREFIX_PATH="c:/projects/glbinding;c:/projects/glfw-3.2.1/build/package/lib/cmake/glfw3;c:/projects/glm/build/package/lib/cmake/glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_DYNAMIC_LIBRARY="c:/projects/FreeImage/Dist/x64/FreeImage.lib" -DFreeImage_INCLUDE_DIR="c:/projects/FreeImage/Dist/x64" + - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/build/package -DCMAKE_PREFIX_PATH="c:/projects/dependencies/glbinding;c:/projects/dependencies/glfw-3.2.1/build/package/lib/cmake/glfw3;c:/projects/dependencies/glm/build/package/lib/cmake/glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_DYNAMIC_LIBRARY="c:/projects/dependencies/FreeImage/Dist/x64/FreeImage.lib" -DFreeImage_INCLUDE_DIR="c:/projects/dependencies/FreeImage/Dist/x64" - cmake --build . --target ALL_BUILD --config %configuration% -- /nologo - cmake --build . --target INSTALL --config %configuration% -- /nologo From 2e4a5818f2a57eaa65e5789c91ef8a149e5bb808 Mon Sep 17 00:00:00 2001 From: pradeep Date: Thu, 18 Jan 2018 22:28:25 +0530 Subject: [PATCH 10/55] misc: Check for AppVeyor cache before installing dependencies --- appveyor.yml | 35 +++++++++++-------------------- appveyor_deps_install.ps1 | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 23 deletions(-) create mode 100644 appveyor_deps_install.ps1 diff --git a/appveyor.yml b/appveyor.yml index 44c92648..338478ef 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -70,16 +70,7 @@ environment: - generator: "Visual Studio 15 2017 Win64" install: - - ps: (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-dev.zip', 'c:/projects/glbinding-dev.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glbinding-dev.zip -DestinationPath C:\projects\dependencies\glbinding - - ps: (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-runtime.zip', 'c:/projects/glbinding-rt.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glbinding-rt.zip -DestinationPath C:\projects\dependencies\glbinding - - ps: (new-object net.webclient).DownloadFile('https://github.com/g-truc/glm/releases/download/0.9.8.5/glm-0.9.8.5.zip', 'c:/projects/glm.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glm.zip -DestinationPath C:\projects\dependencies - - ps: (new-object net.webclient).DownloadFile('https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip', 'c:/projects/glfw3.zip') - - ps: Expand-Archive -LiteralPath C:\projects\glfw3.zip -DestinationPath C:\projects\dependencies - - ps: (new-object net.webclient).DownloadFile('http://downloads.sourceforge.net/freeimage/FreeImage3170Win32Win64.zip', 'c:/projects/freeimage.zip') - - ps: Expand-Archive -LiteralPath C:\projects\freeimage.zip -DestinationPath C:\projects\dependencies + - ps: Invoke-Expression "$env:APPVEYOR_BUILD_FOLDER\appveyor_deps_install.ps1" # scripts that are called at very beginning, before repo cloning init: @@ -127,18 +118,16 @@ build: # scripts to run before build before_build: - - cd %APPVEYOR_BUILD_FOLDER% - - cd ../dependencies/glm - - mkdir build - - cd build - - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../dependencies/glm/build/package - - cmake --build . --target INSTALL --config %configuration% -- /nologo - - cd %APPVEYOR_BUILD_FOLDER% - - cd ../dependencies/glfw-3.2.1 - - mkdir build - - cd build - - cmake .. -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/../dependencies/glfw-3.2.1/build/package -DBUILD_SHARED_LIBS=ON -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF - - cmake --build . --target INSTALL --config %configuration% -- /nologo + - ps: cd "$env:APPVEYOR_BUILD_FOLDER" + - ps: cd ..\dependencies\glm + - ps: if (-Not (Test-Path .\build -PathType Container)) { mkdir build } + - ps: cd build + - ps: if (-Not (Test-Path .\package\lib\cmake\glm\glmConfig.cmake)) { cmake .. -G "$env:generator" -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER\..\dependencies\glm\build\package"; cmake --build . --target INSTALL --config $env:configuration -- /nologo } + - ps: cd "$env:APPVEYOR_BUILD_FOLDER" + - ps: cd ..\dependencies\glfw-3.2.1 + - ps: if (-Not (Test-Path .\build -PathType Container)) { mkdir build } + - ps: cd build + - ps: if (-Not (Test-Path .\package\lib\cmake\glfw3\glfw3Config.cmake)) { cmake .. -G "$env:generator" -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER\..\dependencies\glfw-3.2.1\build\package" -DBUILD_SHARED_LIBS=ON -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF; cmake --build . --target INSTALL --config $env:configuration -- /nologo } # scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services) before_package: @@ -151,6 +140,6 @@ build_script: - cd %APPVEYOR_BUILD_FOLDER% - mkdir build - cd build - - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/build/package -DCMAKE_PREFIX_PATH="c:/projects/dependencies/glbinding;c:/projects/dependencies/glfw-3.2.1/build/package/lib/cmake/glfw3;c:/projects/dependencies/glm/build/package/lib/cmake/glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_DYNAMIC_LIBRARY="c:/projects/dependencies/FreeImage/Dist/x64/FreeImage.lib" -DFreeImage_INCLUDE_DIR="c:/projects/dependencies/FreeImage/Dist/x64" + - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%\build\package -DCMAKE_PREFIX_PATH="c:\projects\dependencies\glbinding;c:\projects\dependencies\glfw-3.2.1\build\package\lib\cmake\glfw3;c:\projects\dependencies\glm\build\package\lib\cmake\glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_DYNAMIC_LIBRARY="c:\projects\dependencies\FreeImage\Dist\x64\FreeImage.lib" -DFreeImage_INCLUDE_DIR="c:\projects\dependencies\FreeImage\Dist\x64" - cmake --build . --target ALL_BUILD --config %configuration% -- /nologo - cmake --build . --target INSTALL --config %configuration% -- /nologo diff --git a/appveyor_deps_install.ps1 b/appveyor_deps_install.ps1 new file mode 100644 index 00000000..515c5516 --- /dev/null +++ b/appveyor_deps_install.ps1 @@ -0,0 +1,44 @@ +if (-Not (Test-Path -Path C:\projects\dependencies\glbinding\lib\glbinding.lib -PathType leaf)) +{ + if (-Not (Test-Path -Path C:\projects\glbinding-dev.zip -PathType leaf)) + { + (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-dev.zip', 'c:/projects/glbinding-dev.zip') + } + Expand-Archive -LiteralPath C:\projects\glbinding-dev.zip -DestinationPath C:\projects\dependencies\glbinding +} + +if (-Not (Test-Path -Path C:\projects\dependencies\glbinding\glbinding.dll -PathType leaf)) +{ + if (-Not (Test-Path -Path C:\projects\glbinding-rt.zip -PathType leaf)) + { + (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-runtime.zip', 'c:/projects/glbinding-rt.zip') + } + Expand-Archive -LiteralPath C:\projects\glbinding-rt.zip -DestinationPath C:\projects\dependencies\glbinding +} + +if (-Not (Test-Path -Path C:\projects\dependencies\glm\build\package\include\glm\glm.hpp -PathType leaf)) +{ + if (-Not (Test-Path -Path C:\projects\glm.zip -PathType leaf)) + { + (new-object net.webclient).DownloadFile('https://github.com/g-truc/glm/releases/download/0.9.8.5/glm-0.9.8.5.zip', 'c:/projects/glm.zip') + } + Expand-Archive -LiteralPath C:\projects\glm.zip -DestinationPath C:\projects\dependencies +} + +if (-Not (Test-Path -Path C:\projects\dependencies\glfw-3.2.1\build\package\lib\glfw3.dll -PathType leaf)) +{ + if (-Not (Test-Path -Path C:\projects\glfw3.zip -PathType leaf)) + { + (new-object net.webclient).DownloadFile('https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip', 'c:/projects/glfw3.zip') + } + Expand-Archive -LiteralPath C:\projects\glfw3.zip -DestinationPath C:\projects\dependencies +} + +if (-Not (Test-Path -Path C:\projects\dependencies\FreeImage\Dist\x64\FreeImage.dll -PathType leaf)) +{ + if (-Not (Test-Path -Path C:\projects\freeimage.zip -PathType leaf)) + { + (new-object net.webclient).DownloadFile('http://downloads.sourceforge.net/freeimage/FreeImage3170Win32Win64.zip', 'c:/projects/freeimage.zip') + } + Expand-Archive -LiteralPath C:\projects\freeimage.zip -DestinationPath C:\projects\dependencies +} \ No newline at end of file From 75e60161c4239856423d54c6a0e500eb7c78b880 Mon Sep 17 00:00:00 2001 From: caseymcc Date: Thu, 18 Jan 2018 15:03:06 -0600 Subject: [PATCH 11/55] feat: add Hunter a CMake package manager Adds Hunter to the CMake setup. Can be enabled buy calling cmake with -DUSE_HUNTER=ON. --- CMakeLists.txt | 30 +++++++++++++++++-- ...{FindFreeType.cmake => Findfreetype.cmake} | 11 ++++--- CMakeModules/build_freetype.cmake | 25 ++++++++-------- examples/CMakeLists.txt | 4 +++ src/backend/opengl/CMakeLists.txt | 2 +- src/backend/opengl/glfw/CMakeLists.txt | 4 +++ src/backend/opengl/sdl/CMakeLists.txt | 4 +++ 7 files changed, 58 insertions(+), 22 deletions(-) rename CMakeModules/{FindFreeType.cmake => Findfreetype.cmake} (82%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 20150148..77e21cd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,18 @@ cmake_minimum_required(VERSION 3.5) +OPTION(USE_HUNTER "Use Hunter cmake package handler" OFF) +if(USE_HUNTER) + include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) + + HunterGate( + URL "https://github.com/ruslo/hunter/archive/v0.19.208.tar.gz" + SHA1 "4128ac8c79c21b250bf825e8119ce0bff05e5132" + ) +endif() + project(Forge VERSION 1.1.0 LANGUAGES C CXX) + set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") @@ -14,14 +25,27 @@ include(DependencyCheck) include(Version) include(FGInstallDirs) +if(USE_HUNTER) + hunter_add_package(glbinding) + hunter_add_package(glm) + hunter_add_package(freetype) + hunter_add_package(Boost) + + find_package(freetype CONFIG REQUIRED) +else() + find_package(freetype REQUIRED) +endif() + find_package(Doxygen QUIET) find_package(glbinding REQUIRED) find_package(glm REQUIRED) -find_package(FreeType) -find_package(FontConfig QUIET) + +if(UNIX) + find_package(FontConfig REQUIRED) +endif() find_package(X11 QUIET) find_package(FreeImage QUIET) -find_package(Boost) +find_package(Boost REQUIRED) option(BUILD_DOCS "Build Documentation" ${DOXYGEN_FOUND}) option(BUILD_EXAMPLES "Build Examples" ON) diff --git a/CMakeModules/FindFreeType.cmake b/CMakeModules/Findfreetype.cmake similarity index 82% rename from CMakeModules/FindFreeType.cmake rename to CMakeModules/Findfreetype.cmake index afc99867..c82c71fc 100644 --- a/CMakeModules/FindFreeType.cmake +++ b/CMakeModules/Findfreetype.cmake @@ -15,19 +15,18 @@ # Usage: # find_package(FreeType) # if (FreeType_FOUND) -# target_link_libraries(mylib PRIVATE FreeType::FreeType) +# target_link_libraries(mylib PRIVATE freetype::freetype) # endif (FreeType_FOUND) # # OR if you want to link against the static library: # # find_package(FreeType) # if (FreeType_FOUND) -# target_link_libraries(mylib PRIVATE FreeType::FreeType_STATIC) +# target_link_libraries(mylib PRIVATE freetype::freetype_STATIC) # endif (FreeType_FOUND) # # NOTE: You do not need to include the Freetype include directories since they # will be included as part of the target_link_libraries command - if(WIN32) include(build_freetype) else(WIN32) @@ -46,9 +45,9 @@ else(WIN32) REQUIRED_VARS FreeType_LIBRARY FreeType_INCLUDE_DIR ) - if (FreeType_FOUND AND NOT TARGET FreeType::FreeType) - add_library(FreeType::FreeType UNKNOWN IMPORTED) - set_target_properties(FreeType::FreeType PROPERTIES + if (FreeType_FOUND AND NOT TARGET freetype::freetype) + add_library(freetype::freetype UNKNOWN IMPORTED) + set_target_properties(freetype::freetype PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGE "C" IMPORTED_LOCATION "${FreeType_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${FreeType_INCLUDE_DIR}") diff --git a/CMakeModules/build_freetype.cmake b/CMakeModules/build_freetype.cmake index 719f45a0..597db960 100644 --- a/CMakeModules/build_freetype.cmake +++ b/CMakeModules/build_freetype.cmake @@ -1,3 +1,4 @@ + include(ExternalProject) set(LIB_POSTFIX "") @@ -32,21 +33,21 @@ ExternalProject_Add( ExternalProject_Get_Property(ft-ext install_dir) -set(FreeType_INCLUDE_DIR ${install_dir}/include/freetype2 CACHE INTERNAL "" FORCE) -set(FreeType_LIBRARY ${freetype_location} CACHE INTERNAL "" FORCE) +set(freetype_INCLUDE_DIR ${install_dir}/include/freetype2 CACHE INTERNAL "" FORCE) +set(freetype_LIBRARY ${freetype_location} CACHE INTERNAL "" FORCE) -mark_as_advanced(FreeType_INCLUDE_DIR FreeType_LIBRARY) +mark_as_advanced(freetype_INCLUDE_DIR freetype_LIBRARY) include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FreeType REQUIRED_VARS FreeType_LIBRARY FreeType_INCLUDE_DIR) - -if (FreeType_FOUND AND NOT TARGET FreeType::FreeType) - file(MAKE_DIRECTORY ${FreeType_INCLUDE_DIR}) - add_library(FreeType::FreeType STATIC IMPORTED) - set_target_properties(FreeType::FreeType PROPERTIES +find_package_handle_standard_args(freetype REQUIRED_VARS freetype_LIBRARY freetype_INCLUDE_DIR) + +if (freetype_FOUND AND NOT TARGET freetype::freetype) + file(MAKE_DIRECTORY ${freetype_INCLUDE_DIR}) + add_library(freetype::freetype STATIC IMPORTED) + set_target_properties(freetype::freetype PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGE "C" - IMPORTED_LOCATION "${FreeType_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${FreeType_INCLUDE_DIR}") - add_dependencies(FreeType::FreeType ft-ext) + IMPORTED_LOCATION "${freetype_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${freetype_INCLUDE_DIR}") + add_dependencies(freetype::freetype ft-ext) endif () diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a7f15de4..783f544f 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -6,6 +6,10 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") +if(USE_HUNTER) + hunter_add_package(OpenCL) +endif() + find_package(OpenGL REQUIRED) find_package(CUDA QUIET) find_package(OpenCL 1.2 QUIET) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 0f309855..0d253511 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -81,7 +81,7 @@ target_link_libraries(${BackendTarget} PRIVATE glbinding::glbinding glm - FreeType::FreeType + freetype::freetype Boost::boost backend_interface wtk_interface diff --git a/src/backend/opengl/glfw/CMakeLists.txt b/src/backend/opengl/glfw/CMakeLists.txt index ff6bfca2..5026651a 100644 --- a/src/backend/opengl/glfw/CMakeLists.txt +++ b/src/backend/opengl/glfw/CMakeLists.txt @@ -1,3 +1,7 @@ +if(USE_HUNTER) + hunter_add_package(glfw) +endif() + find_package(glfw3) add_library(wtk_interface INTERFACE) diff --git a/src/backend/opengl/sdl/CMakeLists.txt b/src/backend/opengl/sdl/CMakeLists.txt index f88fb17f..063fa091 100644 --- a/src/backend/opengl/sdl/CMakeLists.txt +++ b/src/backend/opengl/sdl/CMakeLists.txt @@ -1,3 +1,7 @@ +if(USE_HUNTER) + hunter_add_package(SDL2) +endif() + find_package(SDL2) add_library(wtk_interface INTERFACE) From 38c14c80c606e214762dbad7bc7e747cac6afe77 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 19 Jan 2018 05:27:01 +0530 Subject: [PATCH 12/55] misc: fix MSVC compiler warnings --- examples/cpu/bubblechart.cpp | 8 +- examples/cpu/field.cpp | 4 +- examples/cpu/histogram.cpp | 12 +- examples/cpu/plot3.cpp | 12 +- examples/cpu/plotting.cpp | 8 +- examples/cpu/stream.cpp | 4 +- examples/cpu/surface.cpp | 6 +- examples/cuda/bubblechart.cu | 4 +- examples/cuda/field.cu | 10 +- examples/cuda/plot3.cu | 6 +- examples/cuda/plotting.cu | 4 +- examples/cuda/stream.cu | 2 +- examples/cuda/surface.cu | 4 +- examples/opencl/bubblechart.cpp | 8 +- examples/opencl/cl_helpers.h | 6 +- examples/opencl/field.cpp | 8 +- examples/opencl/fractal.cpp | 4 +- examples/opencl/histogram.cpp | 6 +- examples/opencl/plot3.cpp | 6 +- examples/opencl/plotting.cpp | 4 +- examples/opencl/stream.cpp | 8 +- examples/opencl/surface.cpp | 8 +- include/ComputeCopy.h | 4 + src/backend/common/chart.hpp | 2 +- src/backend/common/cmap.hpp | 4608 ++++++++++++------------ src/backend/common/image.hpp | 2 +- src/backend/opengl/chart_impl.cpp | 16 +- src/backend/opengl/chart_impl.hpp | 4 +- src/backend/opengl/common.hpp | 4 +- src/backend/opengl/font_atlas_impl.cpp | 32 +- src/backend/opengl/font_impl.cpp | 28 +- src/backend/opengl/glfw/window.cpp | 20 +- src/backend/opengl/image_impl.cpp | 2 +- src/backend/opengl/surface_impl.cpp | 8 +- 34 files changed, 2440 insertions(+), 2432 deletions(-) diff --git a/examples/cpu/bubblechart.cpp b/examples/cpu/bubblechart.cpp index 398203c3..188e91ff 100644 --- a/examples/cpu/bubblechart.cpp +++ b/examples/cpu/bubblechart.cpp @@ -51,8 +51,8 @@ int main(void) std::mt19937_64 gen(r()); std::uniform_int_distribution uDist(20, 80); - std::uniform_real_distribution cDist(0.2, 0.6); - std::uniform_real_distribution fDist(0.4, 0.6); + std::uniform_real_distribution cDist(0.2f, 0.6f); + std::uniform_real_distribution fDist(0.4f, 0.6f); auto clr = std::bind(cDist, gen); auto rnd = std::bind(uDist, e1); @@ -80,9 +80,9 @@ int main(void) /* Create several plot objects which creates the necessary * vertex buffer objects to hold the different plot types */ - forge::Plot plt1 = chart.plot(cosData.size()/2, forge::f32, + forge::Plot plt1 = chart.plot((unsigned)(cosData.size()/2), forge::f32, FG_PLOT_LINE, FG_MARKER_TRIANGLE); //or specify a specific plot type - forge::Plot plt2 = chart.plot(tanData.size()/2, forge::f32, + forge::Plot plt2 = chart.plot((unsigned)(tanData.size()/2), forge::f32, FG_PLOT_LINE, FG_MARKER_CIRCLE); //last parameter specifies marker shape /* Set plot colors */ diff --git a/examples/cpu/field.cpp b/examples/cpu/field.cpp index 255695b3..4c5a907d 100644 --- a/examples/cpu/field.cpp +++ b/examples/cpu/field.cpp @@ -17,7 +17,7 @@ const unsigned DIMX = 640; const unsigned DIMY = 480; -const float PI = 3.14159265359; +const float PI = 3.14159265359f; const float MINIMUM = 1.0f; const float MAXIMUM = 20.f; const float STEP = 2.0f; @@ -61,7 +61,7 @@ int main(void) divPoints.setLegend("Convergence Points"); divPoints.setMarkerSize(24); - forge::VectorField field = chart.vectorField(NELEMS*NELEMS, forge::f32); + forge::VectorField field = chart.vectorField((unsigned)(NELEMS*NELEMS), forge::f32); field.setColor(0.f, 0.6f, 0.3f, 1.f); std::vector points; diff --git a/examples/cpu/histogram.cpp b/examples/cpu/histogram.cpp index 355eae02..2e3d9544 100644 --- a/examples/cpu/histogram.cpp +++ b/examples/cpu/histogram.cpp @@ -139,7 +139,7 @@ float interp(float x0, float x1, float alpha) PerlinNoise::PerlinNoise() { - std::srand(std::time(0)); + std::srand((unsigned)(std::time(0))); for(unsigned i=0; i < IMGW; i++) { @@ -216,11 +216,11 @@ void kernel(Bitmap& bmp) float u = x/(float)(bmp.width); float v = y/(float)(bmp.height); - unsigned char noiseVal = 255 * perlin.noise(u, v); - bmp.ptr[offset*4 + 0] = noiseVal; - bmp.ptr[offset*4 + 1] = noiseVal; - bmp.ptr[offset*4 + 2] = noiseVal; - bmp.ptr[offset*4 + 3] = 255; + unsigned char noiseVal = (unsigned char)(255 * perlin.noise(u, v)); + bmp.ptr[offset*4 + 0] = noiseVal; + bmp.ptr[offset*4 + 1] = noiseVal; + bmp.ptr[offset*4 + 2] = noiseVal; + bmp.ptr[offset*4 + 3] = 255; } } } diff --git a/examples/cpu/plot3.cpp b/examples/cpu/plot3.cpp index b1979d01..39a80feb 100644 --- a/examples/cpu/plot3.cpp +++ b/examples/cpu/plot3.cpp @@ -21,8 +21,8 @@ const unsigned DIMY = 800; static const float ZMIN = 0.1f; static const float ZMAX = 10.f; -const float DX = 0.005; -const size_t ZSIZE = (ZMAX-ZMIN)/DX+1; +const float DX = 0.005f; +const size_t ZSIZE = (size_t)((ZMAX-ZMIN)/DX+1); using namespace std; @@ -31,9 +31,9 @@ void generateCurve(float t, float dx, std::vector &vec ) vec.clear(); for (int i=0; i < (int)ZSIZE; ++i) { float z = ZMIN + i*dx; - vec.push_back(cos(z*t+t)/z); - vec.push_back(sin(z*t+t)/z); - vec.push_back(z+0.1*sin(t)); + vec.push_back((float)(cos(z*t+t)/z)); + vec.push_back((float)(sin(z*t+t)/z)); + vec.push_back((float)(z+0.1*sin(t))); } } @@ -74,7 +74,7 @@ int main(void) copyToGLBuffer(handle, (ComputeResourceHandle)function.data(), plot3.verticesSize()); do { - t+=0.01; + t+=0.01f; generateCurve(t, DX, function); copyToGLBuffer(handle, (ComputeResourceHandle)function.data(), plot3.verticesSize()); wnd.draw(chart); diff --git a/examples/cpu/plotting.cpp b/examples/cpu/plotting.cpp index 3a5c0e89..52ed7753 100644 --- a/examples/cpu/plotting.cpp +++ b/examples/cpu/plotting.cpp @@ -58,10 +58,10 @@ int main(void) /* Create several plot objects which creates the necessary * vertex buffer objects to hold the different plot types */ - forge::Plot plt0 = chart.plot(sinData.size()/2, forge::f32); //create a default plot - forge::Plot plt1 = chart.plot(cosData.size()/2, forge::f32, FG_PLOT_LINE, FG_MARKER_NONE); //or specify a specific plot type - forge::Plot plt2 = chart.plot(tanData.size()/2, forge::f32, FG_PLOT_LINE, FG_MARKER_TRIANGLE); //last parameter specifies marker shape - forge::Plot plt3 = chart.plot(logData.size()/2, forge::f32, FG_PLOT_SCATTER, FG_MARKER_CROSS); + forge::Plot plt0 = chart.plot((unsigned)(sinData.size()/2), forge::f32); //create a default plot + forge::Plot plt1 = chart.plot((unsigned)(cosData.size()/2), forge::f32, FG_PLOT_LINE, FG_MARKER_NONE); //or specify a specific plot type + forge::Plot plt2 = chart.plot((unsigned)(tanData.size()/2), forge::f32, FG_PLOT_LINE, FG_MARKER_TRIANGLE); //last parameter specifies marker shape + forge::Plot plt3 = chart.plot((unsigned)(logData.size()/2), forge::f32, FG_PLOT_SCATTER, FG_MARKER_CROSS); /* * Set plot colors diff --git a/examples/cpu/stream.cpp b/examples/cpu/stream.cpp index 0e095b51..bbe7b6ea 100644 --- a/examples/cpu/stream.cpp +++ b/examples/cpu/stream.cpp @@ -17,11 +17,11 @@ const unsigned DIMX = 640; const unsigned DIMY = 480; -const float PI = 3.14159265359; +const float PI = 3.14159265359f; const float MINIMUM = 1.0f; const float MAXIMUM = 20.f; const float STEP = 2.0f; -const int NELEMS = (MAXIMUM-MINIMUM+1)/STEP; +const int NELEMS = (int)((MAXIMUM-MINIMUM+1)/STEP); using namespace std; diff --git a/examples/cpu/surface.cpp b/examples/cpu/surface.cpp index 86a266e0..2272c87a 100644 --- a/examples/cpu/surface.cpp +++ b/examples/cpu/surface.cpp @@ -23,8 +23,8 @@ static const float YMIN = -32.0f; static const float YMAX = 32.0f; const float DX = 0.25; -const size_t XSIZE = (XMAX-XMIN)/DX; -const size_t YSIZE = (YMAX-YMIN)/DX; +const size_t XSIZE = (size_t)((XMAX-XMIN)/DX); +const size_t YSIZE = (size_t)((YMAX-YMIN)/DX); void genSurface(float dx, std::vector &vec ) { @@ -33,7 +33,7 @@ void genSurface(float dx, std::vector &vec ) for(float y=YMIN; y < YMAX; y+=dx) { vec.push_back(x); vec.push_back(y); - float z = sqrt(x*x+y*y) + 2.2204e-16; + float z = sqrt(x*x+y*y) + 2.2204e-16f; vec.push_back(sin(z)/z); } } diff --git a/examples/cuda/bubblechart.cu b/examples/cuda/bubblechart.cu index e59972ae..fca7de2c 100644 --- a/examples/cuda/bubblechart.cu +++ b/examples/cuda/bubblechart.cu @@ -19,10 +19,10 @@ const unsigned DIMX = 1000; const unsigned DIMY = 800; -static const float DX = 0.1; +static const float DX = 0.1f; static const float FRANGE_START = 0.f; static const float FRANGE_END = 2 * 3.141592f; -static const size_t DATA_SIZE = (FRANGE_END - FRANGE_START) / DX; +static const size_t DATA_SIZE = (size_t)((FRANGE_END - FRANGE_START) / DX); curandState_t* state; diff --git a/examples/cuda/field.cu b/examples/cuda/field.cu index 1a9937ec..e7f60de5 100644 --- a/examples/cuda/field.cu +++ b/examples/cuda/field.cu @@ -51,9 +51,9 @@ int main(void) divPoints.setLegend("Convergence Points"); divPoints.setMarkerSize(24); - size_t npoints = NELEMS*NELEMS; + size_t npoints = (size_t)(NELEMS*NELEMS); - forge::VectorField field = chart.vectorField(npoints, forge::f32); + forge::VectorField field = chart.vectorField((unsigned)(npoints), forge::f32); field.setColor(0.f, 0.6f, 0.3f, 1.f); FORGE_CUDA_CHECK(cudaMalloc((void**)&dpoints, 8*sizeof(unsigned))); @@ -113,8 +113,8 @@ void pointGenKernel(float* points, float* dirs, int nelems, float minimum, float void generatePoints(float* points, float* dirs) { static dim3 threads(8, 8); - dim3 blocks(divup(NELEMS, threads.x), - divup(NELEMS, threads.y)); + dim3 blocks(divup((int)(NELEMS), threads.x), + divup((int)(NELEMS), threads.y)); - pointGenKernel<<>>(points, dirs, NELEMS, MINIMUM, STEP); + pointGenKernel<<>>(points, dirs, (int)(NELEMS), MINIMUM, STEP); } diff --git a/examples/cuda/plot3.cu b/examples/cuda/plot3.cu index 8fb951fe..0ef2f7e9 100644 --- a/examples/cuda/plot3.cu +++ b/examples/cuda/plot3.cu @@ -21,8 +21,8 @@ const unsigned DIMY = 800; static const float ZMIN = 0.1f; static const float ZMAX = 10.f; -const float DX = 0.005; -const size_t ZSIZE = (ZMAX-ZMIN)/DX+1; +const float DX = 0.005f; +const size_t ZSIZE = (size_t)((ZMAX-ZMIN)/DX+1); void kernel(float t, float dx, float* dev_out); @@ -64,7 +64,7 @@ int main(void) copyToGLBuffer(handle, (ComputeResourceHandle)dev_out, plot3.verticesSize()); do { - t+=0.01; + t+=0.01f; kernel(t, DX, dev_out); copyToGLBuffer(handle, (ComputeResourceHandle)dev_out, plot3.verticesSize()); wnd.draw(chart); diff --git a/examples/cuda/plotting.cu b/examples/cuda/plotting.cu index 992f3c89..b90715e3 100644 --- a/examples/cuda/plotting.cu +++ b/examples/cuda/plotting.cu @@ -18,10 +18,10 @@ const unsigned DIMX = 1000; const unsigned DIMY = 800; -static const float dx = 0.1; +static const float dx = 0.1f; static const float FRANGE_START = 0.f; static const float FRANGE_END = 2 * 3.141592f; -static const size_t DATA_SIZE = ( FRANGE_END - FRANGE_START ) / dx; +static const size_t DATA_SIZE = (size_t)(( FRANGE_END - FRANGE_START ) / dx); void kernel(float* dev_out, int functionCode); diff --git a/examples/cuda/stream.cu b/examples/cuda/stream.cu index f1f2b2ce..0cc17568 100644 --- a/examples/cuda/stream.cu +++ b/examples/cuda/stream.cu @@ -17,7 +17,7 @@ const unsigned DIMY = 480; const float MINIMUM = 1.0f; const float MAXIMUM = 20.f; const float STEP = 2.0f; -const int NELEMS = (MAXIMUM-MINIMUM+1)/STEP; +const int NELEMS = (int)((MAXIMUM-MINIMUM+1)/STEP); void generateColors(float* colors); diff --git a/examples/cuda/surface.cu b/examples/cuda/surface.cu index d01739dd..79e694dd 100644 --- a/examples/cuda/surface.cu +++ b/examples/cuda/surface.cu @@ -21,8 +21,8 @@ const float YMIN = -8.0f; const float YMAX = 8.f; const float DX = 0.5; -const size_t XSIZE = (XMAX-XMIN)/DX; -const size_t YSIZE = (YMAX-YMIN)/DX; +const size_t XSIZE = (size_t)((XMAX-XMIN)/DX); +const size_t YSIZE = (size_t)((YMAX-YMIN)/DX); void kernel(float dx, float* dev_out); diff --git a/examples/opencl/bubblechart.cpp b/examples/opencl/bubblechart.cpp index a856b135..f8adc528 100644 --- a/examples/opencl/bubblechart.cpp +++ b/examples/opencl/bubblechart.cpp @@ -23,10 +23,10 @@ using namespace std; const unsigned DIMX = 1000; const unsigned DIMY = 800; -static const float DX = 0.1; +static const float DX = 0.1f; static const float FRANGE_START = 0.f; static const float FRANGE_END = 2 * 3.141592f; -static const int DATA_SIZE = (FRANGE_END - FRANGE_START) / DX; +static const int DATA_SIZE = (int)((FRANGE_END - FRANGE_START) / DX); #define USE_FORGE_OPENCL_COPY_HELPERS #include @@ -92,7 +92,7 @@ void kernel(cl::Buffer& devOut, int fnCode, int outFlags, static cl::Program prog; static cl::Kernel randKernel, colorsKernel, mapKernel; - std::srand(std::time(0)); + std::srand((unsigned)(std::time(0))); if (compileFlag) { try { @@ -116,7 +116,7 @@ void kernel(cl::Buffer& devOut, int fnCode, int outFlags, } static const NDRange local(32); - NDRange global(local[0] * divup(DATA_SIZE, local[0])); + NDRange global(local[0] * divup(DATA_SIZE, (int)(local[0]))); mapKernel.setArg(0, devOut); mapKernel.setArg(1, fnCode); diff --git a/examples/opencl/cl_helpers.h b/examples/opencl/cl_helpers.h index eddada3b..c89233c3 100644 --- a/examples/opencl/cl_helpers.h +++ b/examples/opencl/cl_helpers.h @@ -12,10 +12,14 @@ #define CL_HPP_MINIMUM_OPENCL_VERSION 120 #define CL_HPP_TARGET_OPENCL_VERSION 120 +#if defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" +#endif #include +#if defined(__GNUC__) #pragma GCC diagnostic pop +#endif #include #include @@ -84,7 +88,7 @@ bool checkGLInterop(const cl::Platform &plat, const cl::Device &pDevice, const if (err != CL_SUCCESS) return false; - int num = ret / sizeof(cl_device_id); + int num = (int)(ret / sizeof(cl_device_id)); devices.resize(num); // Check if current device is present in the associated devices diff --git a/examples/opencl/field.cpp b/examples/opencl/field.cpp index 131a77e2..ad95601b 100644 --- a/examples/opencl/field.cpp +++ b/examples/opencl/field.cpp @@ -89,8 +89,8 @@ void generatePoints(cl::Buffer& points, cl::Buffer& dirs, } static const NDRange local(8, 8); - NDRange global(local[0] * divup(NELEMS, local[0]), - local[1] * divup(NELEMS, local[1])); + NDRange global(local[0] * divup((int)(NELEMS), (int)(local[0])), + local[1] * divup((int)(NELEMS), (int)(local[1]))); pointGenKernel.setArg(0, points); pointGenKernel.setArg(1, dirs); @@ -120,9 +120,9 @@ int main(void) divPoints.setLegend("Convergence Points"); divPoints.setMarkerSize(24); - size_t npoints = NELEMS*NELEMS; + size_t npoints = (size_t)(NELEMS*NELEMS); - forge::VectorField field = chart.vectorField(npoints, forge::f32); + forge::VectorField field = chart.vectorField((unsigned)(npoints), forge::f32); field.setColor(0.f, 0.6f, 0.3f, 1.f); /* diff --git a/examples/opencl/fractal.cpp b/examples/opencl/fractal.cpp index 752f08fe..cdac5bc5 100644 --- a/examples/opencl/fractal.cpp +++ b/examples/opencl/fractal.cpp @@ -97,8 +97,8 @@ void kernel(cl::Buffer& devOut, cl::CommandQueue& queue) auto juliaOp = cl::KernelFunctor(kern); static const NDRange local(8, 8); - NDRange global(local[0] * divup(DIMX, local[0]), - local[1] * divup(DIMY, local[1])); + NDRange global(local[0] * divup(DIMX, (int)(local[0])), + local[1] * divup(DIMY, (int)(local[1]))); juliaOp(EnqueueArgs(queue, global, local), devOut, DIMX, DIMY); } diff --git a/examples/opencl/histogram.cpp b/examples/opencl/histogram.cpp index 0f703394..d877c481 100644 --- a/examples/opencl/histogram.cpp +++ b/examples/opencl/histogram.cpp @@ -165,7 +165,7 @@ void kernel(cl::Buffer& image, cl::Buffer& base, cl::Buffer& perlin, static cl::Kernel initKernel, computeKernel, normKernel, fillKernel; static cl::Kernel memSetKernel, genHistogram, genHistColors; - std::srand(std::time(0)); + std::srand((unsigned)(std::time(0))); if (compileFlag) { try { @@ -193,8 +193,8 @@ void kernel(cl::Buffer& image, cl::Buffer& base, cl::Buffer& perlin, } static const NDRange local(16, 16); - NDRange global(local[0] * divup(IMGW, local[0]), - local[1] * divup(IMGH, local[1])); + NDRange global(local[0] * divup(IMGW, (int)(local[0])), + local[1] * divup(IMGH, (int)(local[1]))); float persistence = 0.5f; float amp = 1.0f; diff --git a/examples/opencl/plot3.cpp b/examples/opencl/plot3.cpp index 77f56c55..438157a9 100644 --- a/examples/opencl/plot3.cpp +++ b/examples/opencl/plot3.cpp @@ -23,8 +23,8 @@ const unsigned DIMY = 800; static const float ZMIN = 0.1f; static const float ZMAX = 10.f; -const float DX = 0.005; -static const unsigned ZSIZE = (ZMAX-ZMIN)/DX+1; +const float DX = 0.005f; +static const unsigned ZSIZE = (unsigned)((ZMAX-ZMIN)/DX+1); using namespace std; @@ -118,7 +118,7 @@ int main(void) copyToGLBuffer(handle, (ComputeResourceHandle)devOut(), plot3.verticesSize()); do { - t+=0.01; + t+=0.01f; kernel(devOut, queue, t); copyToGLBuffer(handle, (ComputeResourceHandle)devOut(), plot3.verticesSize()); wnd.draw(chart); diff --git a/examples/opencl/plotting.cpp b/examples/opencl/plotting.cpp index 62003284..38da89ed 100644 --- a/examples/opencl/plotting.cpp +++ b/examples/opencl/plotting.cpp @@ -22,10 +22,10 @@ using namespace std; const unsigned DIMX = 1000; const unsigned DIMY = 800; -const float dx = 0.1; +const float dx = 0.1f; const float FRANGE_START = 0.f; const float FRANGE_END = 2 * 3.141592f; -const unsigned DATA_SIZE = ( FRANGE_END - FRANGE_START ) / dx; +const unsigned DATA_SIZE = (unsigned)(( FRANGE_END - FRANGE_START ) / dx); #define USE_FORGE_OPENCL_COPY_HELPERS #include diff --git a/examples/opencl/stream.cpp b/examples/opencl/stream.cpp index b9094029..7a2b68bc 100644 --- a/examples/opencl/stream.cpp +++ b/examples/opencl/stream.cpp @@ -25,7 +25,7 @@ const unsigned DIMY = 480; const float MINIMUM = 1.0f; const float MAXIMUM = 20.f; const float STEP = 2.0f; -const int NELEMS = (MAXIMUM-MINIMUM+1)/STEP; +const int NELEMS = (int)((MAXIMUM-MINIMUM+1)/STEP); #define USE_FORGE_OPENCL_COPY_HELPERS #include @@ -116,8 +116,8 @@ void generatePoints(Buffer& points, Buffer &dirs, Buffer& colors, } static const NDRange local(8, 8); - int blk_x = divup(NELEMS, local[0]); - int blk_y = divup(NELEMS, local[1]); + int blk_x = divup(NELEMS, (int)(local[0])); + int blk_y = divup(NELEMS, (int)(local[1])); NDRange global(NELEMS * local[0] * blk_x, local[1] * blk_y); @@ -130,7 +130,7 @@ void generatePoints(Buffer& points, Buffer &dirs, Buffer& colors, queue.enqueueNDRangeKernel(pointGenKernel, cl::NullRange, global, local); const int numElems = NELEMS*NELEMS*NELEMS; static const NDRange thrds(64, 1); - NDRange glob(thrds[0] * divup(numElems, thrds[0]), thrds[1]); + NDRange glob(thrds[0] * divup(numElems, (int)(thrds[0])), (int)(thrds[1])); colorsKernel.setArg(0, colors); colorsKernel.setArg(1, NELEMS); diff --git a/examples/opencl/surface.cpp b/examples/opencl/surface.cpp index 1ae8fd5d..9fc73762 100644 --- a/examples/opencl/surface.cpp +++ b/examples/opencl/surface.cpp @@ -23,8 +23,8 @@ static const float YMIN = -8.0f; static const float YMAX = 8.f; const float DX = 0.5; -const unsigned XSIZE = (XMAX-XMIN)/DX; -const unsigned YSIZE = (YMAX-YMIN)/DX; +const unsigned XSIZE = (unsigned)((XMAX-XMIN)/DX); +const unsigned YSIZE = (unsigned)((YMAX-YMIN)/DX); using namespace std; @@ -86,8 +86,8 @@ void kernel(cl::Buffer& devOut, cl::CommandQueue& queue, cl::Device& device) } NDRange local(8, 8); - NDRange global(local[0]*divup(XSIZE, local[0]), - local[1]*divup(YSIZE, local[1])); + NDRange global(local[0]*divup(XSIZE, (int)(local[0])), + local[1]*divup(YSIZE, (int)(local[1]))); kern.setArg(0, devOut); kern.setArg(1, DX); diff --git a/include/ComputeCopy.h b/include/ComputeCopy.h index 1fd39205..0f615da2 100644 --- a/include/ComputeCopy.h +++ b/include/ComputeCopy.h @@ -178,8 +178,10 @@ void copyToGLBuffer(GfxHandle* pGLDestination, ComputeResourceHandle pSource, c #if defined(USE_FORGE_OPENCL_COPY_HELPERS) +#if defined(__GNUC__) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#endif #define FORGE_OCL_CHECK(cl_status, message) \ if(cl_status != CL_SUCCESS) \ @@ -242,7 +244,9 @@ void copyToGLBuffer(GfxHandle* pGLDestination, ComputeResourceHandle pSource, c "Failed in clWaitForEvents after clEnqueueReleaseGLObjects"); } +#if defined(__GNUC__) #pragma GCC diagnostic pop +#endif #endif diff --git a/src/backend/common/chart.hpp b/src/backend/common/chart.hpp index a792bca4..5d3af614 100644 --- a/src/backend/common/chart.hpp +++ b/src/backend/common/chart.hpp @@ -77,7 +77,7 @@ class Chart { mChart->getAxesLimits(pXmin, pXmax, pYmin, pYmax, pZmin, pZmax); } - inline void setLegendPosition(const unsigned pX, const unsigned pY) { + inline void setLegendPosition(const float pX, const float pY) { mChart->setLegendPosition(pX, pY); } diff --git a/src/backend/common/cmap.hpp b/src/backend/common/cmap.hpp index b54eaacb..dabc8650 100644 --- a/src/backend/common/cmap.hpp +++ b/src/backend/common/cmap.hpp @@ -313,522 +313,522 @@ float cmap_default[] = * */ float cmap_spectrum[] = { - 0.01127986 , 0 , 0.08038571 , 1.0 , - 0.01541133 , 4.283736e-43 , 0.0994883 , 1.0 , - 0.02097097 , 4.675581e-42 , 0.1211598 , 1.0 , - 0.02837203 , 2.314546e-41 , 0.1455531 , 1.0 , - 0.03811155 , -0 , 0.1727644 , 1.0 , - 0.04989037 , -0 , 0.2028092 , 1.0 , - 0.06264411 , -0 , 0.235596 , 1.0 , - 0.07631406 , -0 , 0.2709367 , 1.0 , - 0.09082561 , 2.530498e-36 , 0.3085978 , 1.0 , - 0.1060682 , 3.623732e-35 , 0.3482384 , 1.0 , - 0.1217975 , 2.164607e-34 , 0.3893565 , 1.0 , - 0.1375286 , -0 , 0.4312382 , 1.0 , - 0.1526427 , -0 , 0.4729976 , 1.0 , - 0.166727 , -0 , 0.5139013 , 1.0 , - 0.1798212 , -0 , 0.5536313 , 1.0 , - 0.192078 , 1.678153e-29 , 0.5919745 , 1.0 , - 0.2032983 , 2.7707e-28 , 0.628283 , 1.0 , - 0.2127799 , 1.928899e-27 , 0.6612911 , 1.0 , - 0.2197537 , -0 , 0.6897002 , 1.0 , - 0.2242968 , -0 , 0.7138056 , 1.0 , - 0.2273781 , -0 , 0.735532 , 1.0 , - 0.2300782 , -0 , 0.7569831 , 1.0 , - 0.2323746 , 1.064461e-22 , 0.7783009 , 1.0 , - 0.2333157 , 2.08705e-21 , 0.7981219 , 1.0 , - 0.2318672 , 1.659222e-20 , 0.8151398 , 1.0 , - 0.2282162 , 0 , 0.8298212 , 1.0 , - 0.2234862 , -0 , 0.8436805 , 1.0 , - 0.2189124 , -0 , 0.857939 , 1.0 , - 0.2139276 , -0 , 0.8711407 , 1.0 , - 0.20688 , 6.308637e-16 , 0.8806263 , 1.0 , - 0.196124 , 1.548245e-14 , 0.8843348 , 1.0 , - 0.1817944 , 1.388462e-13 , 0.8836006 , 1.0 , - 0.1646237 , 2.019828e-13 , 0.8808589 , 1.0 , - 0.1448725 , -0 , 0.87777 , 1.0 , - 0.1206251 , -0 , 0.8730883 , 1.0 , - 0.08744735 , -0 , 0.8649303 , 1.0 , - 0.02884395 , 3.313162e-09 , 0.852481 , 1.0 , - -0 , 1.130061e-07 , 0.8377385 , 1.0 , - -0 , 1.135899e-06 , 0.8230781 , 1.0 , - -0 , 3.104831e-06 , 0.8101432 , 1.0 , - 9.696992e-07 , -0 , 0.7992217 , 1.0 , - 1.623357e-07 , -0 , 0.7904213 , 1.0 , - 1.133611e-08 , 0.03271853 , 0.7830682 , 1.0 , - -0 , 0.1042402 , 0.775201 , 1.0 , - -0 , 0.1493461 , 0.7648243 , 1.0 , - -0 , 0.1862506 , 0.7508291 , 1.0 , - -0 , 0.218295 , 0.7332213 , 1.0 , - 1.036851e-13 , 0.24667 , 0.7121434 , 1.0 , - 2.091245e-14 , 0.2720625 , 0.6880738 , 1.0 , - 1.655202e-15 , 0.2950642 , 0.6617792 , 1.0 , - 0 , 0.316165 , 0.6339956 , 1.0 , - -0 , 0.335616 , 0.6055155 , 1.0 , - -0 , 0.3535343 , 0.5771365 , 1.0 , - -0 , 0.3700778 , 0.5494901 , 1.0 , - 1.03101e-20 , 0.3854382 , 0.5224723 , 1.0 , - 2.651547e-21 , 0.3997472 , 0.4955986 , 1.0 , - 2.356953e-22 , 0.4131009 , 0.4685543 , 1.0 , - 3.785627e-24 , 0.4259492 , 0.4419153 , 1.0 , - -0 , 0.4389883 , 0.4165396 , 1.0 , - -0 , 0.4528801 , 0.39298 , 1.0 , - -0 , 0.4676521 , 0.3708999 , 1.0 , - 9.032476e-28 , 0.4830383 , 0.3497093 , 1.0 , - 3.304511e-28 , 0.4987859 , 0.3288291 , 1.0 , - 3.286476e-29 , 0.5149212 , 0.3074874 , 1.0 , - 9.348463e-31 , 0.5315348 , 0.2848347 , 1.0 , - 3.681496e-31 , 0.5486496 , 0.2600424 , 1.0 , - 1.011684e-29 , 0.5661069 , 0.2324497 , 1.0 , - 7.071628e-29 , 0.5836924 , 0.2011177 , 1.0 , - -0 , 0.6011751 , 0.1647146 , 1.0 , - -0 , 0.6183319 , 0.1210504 , 1.0 , - -0 , 0.6349509 , 0.06055694 , 1.0 , - -0 , 0.6509092 , -0 , 1.0 , - 3.902632e-24 , 0.6662545 , 0.0001858718 , 1.0 , - 7.651746e-23 , 0.6810419 , 3.748884e-05 , 1.0 , - 6.083201e-22 , 0.6950991 , 2.967208e-06 , 1.0 , - 0 , 0.7078848 , 0 , 1.0 , - -0 , 0.7188129 , -0 , 1.0 , - -0 , 0.7277558 , -0 , 1.0 , - -0 , 0.7351898 , -0 , 1.0 , - 2.312934e-17 , 0.7416417 , 1.848247e-11 , 1.0 , - 5.676326e-16 , 0.747321 , 4.753313e-12 , 1.0 , - 5.090515e-15 , 0.7521157 , 4.225207e-13 , 1.0 , - 7.405291e-15 , 0.7559187 , 6.786328e-15 , 1.0 , - -0 , 0.7588835 , -0 , 1.0 , - -0 , 0.7613638 , -0 , 1.0 , - -0 , 0.7636751 , -0 , 1.0 , - 1.214704e-10 , 0.7656616 , 1.619213e-18 , 1.0 , - 4.143139e-09 , 0.7668859 , 5.923872e-19 , 1.0 , - 4.164544e-08 , 0.7669441 , 5.893425e-20 , 1.0 , - 1.138323e-07 , 0.7657159 , 1.72786e-21 , 1.0 , - -0 , 0.763215 , -0 , 1.0 , - -0 , 0.7595283 , -0 , 1.0 , - -0 , 0.7551301 , -0 , 1.0 , - 0.000477086 , 0.7506213 , 1.053369e-25 , 1.0 , - 0.05939901 , 0.7463866 , 7.241023e-26 , 1.0 , - 0.202861 , 0.7419336 , 8.074312e-27 , 1.0 , - 0.2856093 , 0.7365457 , 3.290042e-28 , 1.0 , - 0.3508833 , 0.729783 , -0 , 1.0 , - 0.4059397 , 0.7220666 , -0 , 1.0 , - 0.453527 , 0.7139808 , -0 , 1.0 , - 0.4956772 , 0.7058158 , 0 , 1.0 , - 0.5347564 , 0.6971628 , 8.653073e-33 , 1.0 , - 0.5723221 , 0.6875168 , 1.088426e-33 , 1.0 , - 0.6088265 , 0.676611 , 5.551314e-35 , 1.0 , - 0.6436856 , 0.6646189 , -0 , 1.0 , - 0.6764169 , 0.6517598 , -0 , 1.0 , - 0.7069315 , 0.638036 , -0 , 1.0 , - 0.7354506 , 0.6231365 , -0 , 1.0 , - 0.7620698 , 0.6067575 , 1.005948e-39 , 1.0 , - 0.7871517 , 0.5889929 , 1.444958e-40 , 1.0 , - 0.8115048 , 0.5703457 , 8.751802e-42 , 1.0 , - 0.8359523 , 0.5512596 , -0 , 1.0 , - 0.8601499 , 0.5318565 , -0 , 1.0 , - 0.882742 , 0.5120416 , -0 , 1.0 , - 0.9025234 , 0.4917644 , -0 , 1.0 , - 0.9195204 , 0.470838 , 1.128873e-46 , 1.0 , - 0.9345009 , 0.4489329 , 1.889827e-47 , 1.0 , - 0.9480608 , 0.4257168 , 1.31969e-48 , 1.0 , - 0.9601983 , 0.4011625 , -0 , 1.0 , - 0.9706579 , 0.3754125 , -0 , 1.0 , - 0.9792892 , 0.3485489 , -0 , 1.0 , - 0.9862737 , 0.3203481 , -0 , 1.0 , - 0.9918932 , 0.2903512 , 1.207048e-53 , 1.0 , - 0.9963008 , 0.257945 , 2.434517e-54 , 1.0 , - 0.9991509 , 0.2225878 , 1.926899e-55 , 1.0 , - 1 , 0.1833567 , 0 , 1.0 , - 0.9985792 , 0.1379186 , -0 , 1.0 , - 0.9950785 , 0.07789979 , -0 , 1.0 , - 0.9897852 , -0 , -0 , 1.0 , - 0.9829172 , 0.0002535774 , 1.200248e-60 , 1.0 , - 0.9745285 , 6.521493e-05 , 3.086791e-61 , 1.0 , - 0.9646424 , 5.796938e-06 , 2.743841e-62 , 1.0 , - 0.9533994 , 9.310768e-08 , 4.407027e-64 , 1.0 , - 0.9411956 , -0 , -0 , 1.0 , - 0.9284233 , -0 , -0 , 1.0 , - 0.9150054 , -0 , -0 , 1.0 , - 0.9001256 , 2.221542e-11 , 1.051513e-67 , 1.0 , - 0.8830108 , 8.127488e-12 , 3.846951e-68 , 1.0 , - 0.8636108 , 8.085714e-13 , 3.827178e-69 , 1.0 , - 0.8427338 , 2.370605e-14 , 1.122069e-70 , 1.0 , - 0.8211542 , -0 , -0 , 1.0 , - 0.7993154 , -0 , -0 , 1.0 , - 0.7773565 , -0 , -0 , 1.0 , - 0.7553974 , 1.44521e-18 , 6.840554e-75 , 1.0 , - 0.733615 , 9.934605e-19 , 4.702305e-75 , 1.0 , - 0.7122149 , 1.107787e-19 , 5.243442e-76 , 1.0 , - 0.6913219 , 4.513902e-21 , 2.136547e-77 , 1.0 , - 0.6704993 , -0 , -0 , 1.0 , - 0.6490373 , -0 , -0 , 1.0 , - 0.6264233 , -0 , -0 , 1.0 , - 0.6029169 , 0 , 0 , 1.0 , - 0.5790875 , 1.187192e-25 , 5.619288e-82 , 1.0 , - 0.555396 , 1.493308e-26 , 7.068214e-83 , 1.0 , - 0.5320582 , 7.616342e-28 , 3.605012e-84 , 1.0 , - 0.5091932 , -0 , -0 , 1.0 , - 0.4868896 , -0 , -0 , 1.0 , - 0.4651525 , -0 , -0 , 1.0 , - 0.4439647 , -0 , -0 , 1.0 , - 0.4233143 , 1.380149e-32 , 6.532603e-89 , 1.0 , - 0.4031979 , 1.982467e-33 , 9.38353e-90 , 1.0 , - 0.3836147 , 1.200738e-34 , 5.683402e-91 , 1.0 , - 0.364568 , -0 , -0 , 1.0 , - 0.3460668 , -0 , -0 , 1.0 , - 0.328118 , -0 , -0 , 1.0 , - 0.31072 , -0 , -0 , 1.0 , - 0.2938603 , 1.548801e-39 , 7.330877e-96 , 1.0 , - 0.2775262 , 2.592822e-40 , 1.22725e-96 , 1.0 , - 0.2617186 , 1.8106e-41 , 8.57004e-98 , 1.0 , - 0.2464574 , -0 , -0 , 1.0 , - 0.2317579 , -0 , -0 , 1.0 , - 0.2175854 , -0 , -0 , 1.0 , - 0.2038544 , -0 , -0 , 1.0 , - 0.1904974 , 1.656057e-46 , 7.838545e-103 , 1.0 , - 0.1776063 , 3.340131e-47 , 1.580971e-103 , 1.0 , - 0.1653964 , 2.643684e-48 , 1.251324e-104 , 1.0 , - 0.154031 , 0 , 0 , 1.0 , - 0.1434617 , -0 , -0 , 1.0 , - 0.1335096 , -0 , -0 , 1.0 , - 0.1240279 , -0 , -0 , 1.0 , - 0.1149732 , 1.646727e-53 , 7.794384e-110 , 1.0 , - 0.1063548 , 4.235044e-54 , 2.004556e-110 , 1.0 , - 0.09817205 , 3.76452e-55 , 1.781845e-111 , 1.0 , - 0.09037656 , 6.046394e-57 , 2.861915e-113 , 1.0 , - 0.08290515 , -0 , -0 , 1.0 , - 0.07571368 , -0 , -0 , 1.0 , - 0.06881608 , -0 , -0 , 1.0 , - 0.06224029 , 1.442665e-60 , 6.828506e-117 , 1.0 , - 0.05600614 , 5.277974e-61 , 2.498202e-117 , 1.0 , - 0.05012488 , 5.250846e-62 , 2.485361e-118 , 1.0 , - 0.04460194 , 1.539466e-63 , 7.286692e-120 , 1.0 , - 0.03941653 , -0 , -0 , 1.0 , - 0.03471122 , -0 , -0 , 1.0 , - 0.03057 , -0 , -0 , 1.0 , - 0.02691357 , 9.385166e-68 , 4.442242e-124 , 1.0 , - 0.02369874 , 6.451512e-68 , 3.053667e-124 , 1.0 , - 0.0208857 , 7.193945e-69 , 3.40508e-125 , 1.0 , - 0.01842852 , 2.931319e-70 , 1.387469e-126 , 1.0 , - 0.01627408 , -0 , -0 , 1.0 , - 0.01437737 , -0 , -0 , 1.0 , - 0.01270179 , -0 , -0 , 1.0 , - 0.01121754 , 0 , 0 , 1.0 , - 0.009899972 , 7.709602e-75 , 3.649154e-131 , 1.0 , - 0.008734158 , 9.697513e-76 , 4.590084e-132 , 1.0 , - 0.007712007 , 4.946037e-77 , 2.341087e-133 , 1.0 , - 0.006823059 , -0 , -0 , 1.0 , - 0.006048222 , -0 , -0 , 1.0 , - 0.005364949 , -0 , -0 , 1.0 , - 0.004756176 , -0 , -0 , 1.0 , - 0.004213659 , 8.96266e-82 , 4.242259e-138 , 1.0 , - 0.003733352 , 1.28741e-82 , 6.093645e-139 , 1.0 , - 0.003310483 , 7.797566e-84 , 3.69079e-140 , 1.0 , - 0.002938437 , -0 , -0 , 1.0 , - 0.00261044 , -0 , -0 , 1.0 , - 0.002320674 , -0 , -0 , 1.0 , - 0.002063942 , -0 , -0 , 1.0 , - 0.001835774 , 1.005788e-88 , 4.760656e-145 , 1.0 , - 0.001632613 , 1.683773e-89 , 7.969734e-146 , 1.0 , - 0.001452329 , 1.1758e-90 , 5.565367e-147 , 1.0 , - 0.001293112 , -0 , -0 , 1.0 , - 0.001152818 , -0 , -0 , 1.0 , - 0.001028356 , -0 , -0 , 1.0 , - 0.0009169919 , -0 , -0 , 1.0 , - 0.0008169642 , 1.07544e-95 , 5.090335e-152 , 1.0 , - 0.0007278915 , 2.169074e-96 , 1.026679e-152 , 1.0 , - 0.0006493738 , 1.716803e-97 , 8.126072e-154 , 1.0 , - 0.0005804669 , 0 , 0 , 1.0 , - 0.0005195018 , -0 , -0 , 1.0 , - 0.0004650555 , -0 , -0 , 1.0 , - 0.0004161944 , -0 , -0 , 1.0 , - 0.0003724622 , 1.069381e-102 , 5.061657e-159 , 1.0 , - 0.0003334429 , 2.750229e-103 , 1.301755e-159 , 1.0 , - 0.0002986586 , 2.444671e-104 , 1.157126e-160 , 1.0 , - 0.0002675824 , 3.926516e-106 , 1.858521e-162 , 1.0 , - 0.0002397598 , -0 , -0 , 1.0 , - 0.000214852 , -0 , -0 , 1.0 , - 0.0001926076 , -0 , -0 , 1.0 , - 0.0001727859 , 9.368637e-110 , 4.434418e-166 , 1.0 , - 0.0001551329 , 3.427506e-110 , 1.622327e-166 , 1.0 , - 0.0001393986 , 3.409889e-111 , 1.613989e-167 , 1.0 , - 0.0001253597 , 9.997262e-113 , 4.731963e-169 , 1.0 , - 0.0001127865 , -0 , -0 , 1.0 , - 0.0001014646 , -0 , -0 , 1.0 , - 9.122623e-05 , -0 , -0 , 1.0 , - 8.19908e-05 , 6.094707e-117 , 2.884783e-173 , 1.0 , - 7.370771e-05 , 4.189599e-117 , 1.983045e-173 , 1.0 , - 6.631398e-05 , 4.671733e-118 , 2.211252e-174 , 1.0 , - 5.972128e-05 , 1.903592e-119 , 9.010195e-176 , 1.0 , - 5.384015e-05 , -0 , -0 , 1.0 , - 4.858824e-05 , -0 , -0 , 1.0 , - 4.387946e-05 , -0 , -0 , 1.0 , - 3.963764e-05 , 0 , 0 , 1.0 , - 3.580377e-05 , 5.0066e-124 , 2.369753e-180 , 1.0 , - 3.234196e-05 , 6.297548e-125 , 2.980792e-181 , 1.0 , - 2.92219e-05 , 3.212085e-126 , 1.520363e-182 , 1.0 , - 2.641456e-05 , -0 , -0 , 1.0 , - 2.389238e-05 , -0 , -0 , 1.0 , + 0.01127986 , 0 , 0.08038571f , 1.0f , + 0.01541133 , 4.283736e-43 , 0.0994883f , 1.0f , + 0.02097097 , 4.675581e-42 , 0.1211598f , 1.0f , + 0.02837203 , 2.314546e-41 , 0.1455531f , 1.0f , + 0.03811155 , -0 , 0.1727644f , 1.0f , + 0.04989037 , -0 , 0.2028092f , 1.0f , + 0.06264411 , -0 , 0.235596f , 1.0f , + 0.07631406 , -0 , 0.2709367f , 1.0f , + 0.09082561 , 2.530498e-36 , 0.3085978f , 1.0f , + 0.1060682 , 3.623732e-35 , 0.3482384f , 1.0f , + 0.1217975 , 2.164607e-34 , 0.3893565f , 1.0f , + 0.1375286 , -0 , 0.4312382f , 1.0f , + 0.1526427 , -0 , 0.4729976f , 1.0f , + 0.166727 , -0 , 0.5139013f , 1.0f , + 0.1798212 , -0 , 0.5536313f , 1.0f , + 0.192078 , 1.678153e-29 , 0.5919745f , 1.0f , + 0.2032983 , 2.7707e-28 , 0.628283f , 1.0f , + 0.2127799 , 1.928899e-27 , 0.6612911f , 1.0f , + 0.2197537 , -0 , 0.6897002f , 1.0f , + 0.2242968 , -0 , 0.7138056f , 1.0f , + 0.2273781 , -0 , 0.735532f , 1.0f , + 0.2300782 , -0 , 0.7569831f , 1.0f , + 0.2323746 , 1.064461e-22 , 0.7783009f , 1.0f , + 0.2333157 , 2.08705e-21 , 0.7981219f , 1.0f , + 0.2318672 , 1.659222e-20 , 0.8151398f , 1.0f , + 0.2282162 , 0 , 0.8298212f , 1.0f , + 0.2234862 , -0 , 0.8436805f , 1.0f , + 0.2189124 , -0 , 0.857939f , 1.0f , + 0.2139276 , -0 , 0.8711407f , 1.0f , + 0.20688 , 6.308637e-16 , 0.8806263f , 1.0f , + 0.196124 , 1.548245e-14 , 0.8843348f , 1.0f , + 0.1817944 , 1.388462e-13 , 0.8836006f , 1.0f , + 0.1646237 , 2.019828e-13 , 0.8808589f , 1.0f , + 0.1448725 , -0 , 0.87777f , 1.0f , + 0.1206251 , -0 , 0.8730883f , 1.0f , + 0.08744735 , -0 , 0.8649303f , 1.0f , + 0.02884395 , 3.313162e-09 , 0.852481f , 1.0f , + -0 , 1.130061e-07 , 0.8377385f , 1.0f , + -0 , 1.135899e-06 , 0.8230781f , 1.0f , + -0 , 3.104831e-06 , 0.8101432f , 1.0f , + 9.696992e-07 , -0 , 0.7992217f , 1.0f , + 1.623357e-07 , -0 , 0.7904213f , 1.0f , + 1.133611e-08 , 0.03271853 , 0.7830682f , 1.0f , + -0 , 0.1042402 , 0.775201f , 1.0f , + -0 , 0.1493461 , 0.7648243f , 1.0f , + -0 , 0.1862506 , 0.7508291f , 1.0f , + -0 , 0.218295 , 0.7332213f , 1.0f , + 1.036851e-13 , 0.24667 , 0.7121434f , 1.0f , + 2.091245e-14 , 0.2720625 , 0.6880738f , 1.0f , + 1.655202e-15 , 0.2950642 , 0.6617792f , 1.0f , + 0 , 0.316165 , 0.6339956f , 1.0f , + -0 , 0.335616 , 0.6055155f , 1.0f , + -0 , 0.3535343 , 0.5771365f , 1.0f , + -0 , 0.3700778 , 0.5494901f , 1.0f , + 1.03101e-20 , 0.3854382 , 0.5224723f , 1.0f , + 2.651547e-21 , 0.3997472 , 0.4955986f , 1.0f , + 2.356953e-22 , 0.4131009 , 0.4685543f , 1.0f , + 3.785627e-24 , 0.4259492 , 0.4419153f , 1.0f , + -0 , 0.4389883 , 0.4165396f , 1.0f , + -0 , 0.4528801 , 0.39298f , 1.0f , + -0 , 0.4676521 , 0.3708999f , 1.0f , + 9.032476e-28 , 0.4830383 , 0.3497093f , 1.0f , + 3.304511e-28 , 0.4987859 , 0.3288291f , 1.0f , + 3.286476e-29 , 0.5149212 , 0.3074874f , 1.0f , + 9.348463e-31 , 0.5315348 , 0.2848347f , 1.0f , + 3.681496e-31 , 0.5486496 , 0.2600424f , 1.0f , + 1.011684e-29 , 0.5661069 , 0.2324497f , 1.0f , + 7.071628e-29 , 0.5836924 , 0.2011177f , 1.0f , + -0 , 0.6011751 , 0.1647146f , 1.0f , + -0 , 0.6183319 , 0.1210504f , 1.0f , + -0 , 0.6349509 , 0.06055694f , 1.0f , + -0 , 0.6509092 , -0.0f , 1.0f , + 3.902632e-24 , 0.6662545 , 0.0001858718f , 1.0f , + 7.651746e-23 , 0.6810419 , 3.748884e-05f , 1.0f , + 6.083201e-22 , 0.6950991 , 2.967208e-06f , 1.0f , + 0 , 0.7078848 , 0.0f , 1.0f , + -0 , 0.7188129 , -0.0f , 1.0f , + -0 , 0.7277558 , -0.0f , 1.0f , + -0 , 0.7351898 , -0.0f , 1.0f , + 2.312934e-17 , 0.7416417 , 1.848247e-11f , 1.0f , + 5.676326e-16 , 0.747321 , 4.753313e-12f , 1.0f , + 5.090515e-15 , 0.7521157 , 4.225207e-13f , 1.0f , + 7.405291e-15 , 0.7559187 , 6.786328e-15f , 1.0f , + -0 , 0.7588835 , -0.0f , 1.0f , + -0 , 0.7613638 , -0.0f , 1.0f , + -0 , 0.7636751 , -0.0f , 1.0f , + 1.214704e-10 , 0.7656616 , 1.619213e-18 , 1.0f , + 4.143139e-09 , 0.7668859 , 5.923872e-19 , 1.0f , + 4.164544e-08 , 0.7669441 , 5.893425e-20 , 1.0f , + 1.138323e-07 , 0.7657159 , 1.72786e-21 , 1.0f , + -0 , 0.763215 , -0 , 1.0f , + -0 , 0.7595283 , -0 , 1.0f , + -0 , 0.7551301 , -0 , 1.0f , + 0.000477086 , 0.7506213 , 1.053369e-25 , 1.0f , + 0.05939901 , 0.7463866 , 7.241023e-26 , 1.0f , + 0.202861 , 0.7419336 , 8.074312e-27 , 1.0f , + 0.2856093 , 0.7365457 , 3.290042e-28 , 1.0f , + 0.3508833 , 0.729783 , -0 , 1.0f , + 0.4059397 , 0.7220666 , -0 , 1.0f , + 0.453527 , 0.7139808 , -0 , 1.0f , + 0.4956772 , 0.7058158 , 0 , 1.0f , + 0.5347564 , 0.6971628 , 8.653073e-33 , 1.0f , + 0.5723221 , 0.6875168 , 1.088426e-33 , 1.0f , + 0.6088265 , 0.676611 , 5.551314e-35 , 1.0f , + 0.6436856 , 0.6646189 , -0 , 1.0f , + 0.6764169 , 0.6517598 , -0 , 1.0f , + 0.7069315 , 0.638036 , -0 , 1.0f , + 0.7354506 , 0.6231365 , -0 , 1.0f , + 0.7620698 , 0.6067575 , 1.005948e-39 , 1.0f , + 0.7871517 , 0.5889929 , 1.444958e-40 , 1.0f , + 0.8115048 , 0.5703457 , 8.751802e-42 , 1.0f , + 0.8359523 , 0.5512596 , -0 , 1.0f , + 0.8601499 , 0.5318565 , -0 , 1.0f , + 0.882742 , 0.5120416 , -0 , 1.0f , + 0.9025234 , 0.4917644 , -0 , 1.0f , + 0.9195204 , 0.470838 , 1.128873e-46 , 1.0f , + 0.9345009 , 0.4489329 , 1.889827e-47 , 1.0f , + 0.9480608 , 0.4257168 , 1.31969e-48 , 1.0f , + 0.9601983 , 0.4011625 , -0 , 1.0f , + 0.9706579 , 0.3754125 , -0 , 1.0f , + 0.9792892 , 0.3485489 , -0 , 1.0f , + 0.9862737 , 0.3203481 , -0 , 1.0f , + 0.9918932 , 0.2903512 , 1.207048e-53 , 1.0f , + 0.9963008 , 0.257945 , 2.434517e-54 , 1.0f , + 0.9991509 , 0.2225878 , 1.926899e-55 , 1.0f , + 1 , 0.1833567 , 0 , 1.0f , + 0.9985792 , 0.1379186 , -0 , 1.0f , + 0.9950785 , 0.07789979 , -0 , 1.0f , + 0.9897852 , -0 , -0 , 1.0f , + 0.9829172 , 0.0002535774 , 1.200248e-60 , 1.0f , + 0.9745285 , 6.521493e-05 , 3.086791e-61 , 1.0f , + 0.9646424 , 5.796938e-06 , 2.743841e-62 , 1.0f , + 0.9533994 , 9.310768e-08 , 4.407027e-64 , 1.0f , + 0.9411956 , -0 , -0 , 1.0f , + 0.9284233 , -0 , -0 , 1.0f , + 0.9150054 , -0 , -0 , 1.0f , + 0.9001256 , 2.221542e-11 , 1.051513e-67 , 1.0f , + 0.8830108 , 8.127488e-12 , 3.846951e-68 , 1.0f , + 0.8636108 , 8.085714e-13 , 3.827178e-69 , 1.0f , + 0.8427338 , 2.370605e-14 , 1.122069e-70 , 1.0f , + 0.8211542 , -0 , -0 , 1.0f , + 0.7993154 , -0 , -0 , 1.0f , + 0.7773565 , -0 , -0 , 1.0f , + 0.7553974 , 1.44521e-18 , 6.840554e-75 , 1.0f , + 0.733615 , 9.934605e-19 , 4.702305e-75 , 1.0f , + 0.7122149 , 1.107787e-19 , 5.243442e-76 , 1.0f , + 0.6913219 , 4.513902e-21 , 2.136547e-77 , 1.0f , + 0.6704993 , -0 , -0 , 1.0f , + 0.6490373 , -0 , -0 , 1.0f , + 0.6264233 , -0 , -0 , 1.0f , + 0.6029169 , 0 , 0 , 1.0f , + 0.5790875 , 1.187192e-25 , 5.619288e-82 , 1.0f , + 0.555396 , 1.493308e-26 , 7.068214e-83 , 1.0f , + 0.5320582 , 7.616342e-28 , 3.605012e-84 , 1.0f , + 0.5091932 , -0 , -0 , 1.0f , + 0.4868896 , -0 , -0 , 1.0f , + 0.4651525 , -0 , -0 , 1.0f , + 0.4439647 , -0 , -0 , 1.0f , + 0.4233143 , 1.380149e-32 , 6.532603e-89 , 1.0f , + 0.4031979 , 1.982467e-33 , 9.38353e-90 , 1.0f , + 0.3836147 , 1.200738e-34 , 5.683402e-91 , 1.0f , + 0.364568 , -0 , -0 , 1.0f , + 0.3460668 , -0 , -0 , 1.0f , + 0.328118 , -0 , -0 , 1.0f , + 0.31072 , -0 , -0 , 1.0f , + 0.2938603 , 1.548801e-39 , 7.330877e-96 , 1.0f , + 0.2775262 , 2.592822e-40 , 1.22725e-96 , 1.0f , + 0.2617186 , 1.8106e-41 , 8.57004e-98 , 1.0f , + 0.2464574 , -0 , -0 , 1.0f , + 0.2317579 , -0 , -0 , 1.0f , + 0.2175854 , -0 , -0 , 1.0f , + 0.2038544 , -0 , -0 , 1.0f , + 0.1904974 , 1.656057e-46 , 7.838545e-103 , 1.0f , + 0.1776063 , 3.340131e-47 , 1.580971e-103 , 1.0f , + 0.1653964 , 2.643684e-48 , 1.251324e-104 , 1.0f , + 0.154031 , 0 , 0 , 1.0f , + 0.1434617 , -0 , -0 , 1.0f , + 0.1335096 , -0 , -0 , 1.0f , + 0.1240279 , -0 , -0 , 1.0f , + 0.1149732 , 1.646727e-53 , 7.794384e-110 , 1.0f , + 0.1063548 , 4.235044e-54 , 2.004556e-110 , 1.0f , + 0.09817205 , 3.76452e-55 , 1.781845e-111 , 1.0f , + 0.09037656 , 6.046394e-57 , 2.861915e-113 , 1.0f , + 0.08290515 , -0 , -0 , 1.0f , + 0.07571368 , -0 , -0 , 1.0f , + 0.06881608 , -0 , -0 , 1.0f , + 0.06224029 , 1.442665e-60 , 6.828506e-117 , 1.0f , + 0.05600614 , 5.277974e-61 , 2.498202e-117 , 1.0f , + 0.05012488 , 5.250846e-62 , 2.485361e-118 , 1.0f , + 0.04460194 , 1.539466e-63 , 7.286692e-120 , 1.0f , + 0.03941653 , -0 , -0 , 1.0f , + 0.03471122 , -0 , -0 , 1.0f , + 0.03057 , -0 , -0 , 1.0f , + 0.02691357 , 9.385166e-68 , 4.442242e-124 , 1.0f , + 0.02369874 , 6.451512e-68 , 3.053667e-124 , 1.0f , + 0.0208857 , 7.193945e-69 , 3.40508e-125 , 1.0f , + 0.01842852 , 2.931319e-70 , 1.387469e-126 , 1.0f , + 0.01627408 , -0 , -0 , 1.0f , + 0.01437737 , -0 , -0 , 1.0f , + 0.01270179 , -0 , -0 , 1.0f , + 0.01121754 , 0 , 0 , 1.0f , + 0.009899972 , 7.709602e-75 , 3.649154e-131 , 1.0f , + 0.008734158 , 9.697513e-76 , 4.590084e-132 , 1.0f , + 0.007712007 , 4.946037e-77 , 2.341087e-133 , 1.0f , + 0.006823059 , -0 , -0 , 1.0f , + 0.006048222 , -0 , -0 , 1.0f , + 0.005364949 , -0 , -0 , 1.0f , + 0.004756176 , -0 , -0 , 1.0f , + 0.004213659 , 8.96266e-82 , 4.242259e-138 , 1.0f , + 0.003733352 , 1.28741e-82 , 6.093645e-139 , 1.0f , + 0.003310483 , 7.797566e-84 , 3.69079e-140 , 1.0f , + 0.002938437 , -0 , -0 , 1.0f , + 0.00261044 , -0 , -0 , 1.0f , + 0.002320674 , -0 , -0 , 1.0f , + 0.002063942 , -0 , -0 , 1.0f , + 0.001835774 , 1.005788e-88 , 4.760656e-145 , 1.0f , + 0.001632613 , 1.683773e-89 , 7.969734e-146 , 1.0f , + 0.001452329 , 1.1758e-90 , 5.565367e-147 , 1.0f , + 0.001293112 , -0 , -0 , 1.0f , + 0.001152818 , -0 , -0 , 1.0f , + 0.001028356 , -0 , -0 , 1.0f , + 0.0009169919 , -0 , -0 , 1.0f , + 0.0008169642 , 1.07544e-95 , 5.090335e-152 , 1.0f , + 0.0007278915 , 2.169074e-96 , 1.026679e-152 , 1.0f , + 0.0006493738 , 1.716803e-97 , 8.126072e-154 , 1.0f , + 0.0005804669 , 0 , 0 , 1.0f , + 0.0005195018 , -0 , -0 , 1.0f , + 0.0004650555 , -0 , -0 , 1.0f , + 0.0004161944 , -0 , -0 , 1.0f , + 0.0003724622 , 1.069381e-102 , 5.061657e-159 , 1.0f , + 0.0003334429 , 2.750229e-103 , 1.301755e-159 , 1.0f , + 0.0002986586 , 2.444671e-104 , 1.157126e-160 , 1.0f , + 0.0002675824 , 3.926516e-106 , 1.858521e-162 , 1.0f , + 0.0002397598 , -0 , -0 , 1.0f , + 0.000214852 , -0 , -0 , 1.0f , + 0.0001926076 , -0 , -0 , 1.0f , + 0.0001727859 , 9.368637e-110 , 4.434418e-166 , 1.0f , + 0.0001551329 , 3.427506e-110 , 1.622327e-166 , 1.0f , + 0.0001393986 , 3.409889e-111 , 1.613989e-167 , 1.0f , + 0.0001253597 , 9.997262e-113 , 4.731963e-169 , 1.0f , + 0.0001127865 , -0 , -0 , 1.0f , + 0.0001014646 , -0 , -0 , 1.0f , + 9.122623e-05 , -0 , -0 , 1.0f , + 8.19908e-05 , 6.094707e-117 , 2.884783e-173 , 1.0f , + 7.370771e-05 , 4.189599e-117 , 1.983045e-173 , 1.0f , + 6.631398e-05 , 4.671733e-118 , 2.211252e-174 , 1.0f , + 5.972128e-05 , 1.903592e-119 , 9.010195e-176 , 1.0f , + 5.384015e-05 , -0 , -0 , 1.0f , + 4.858824e-05 , -0 , -0 , 1.0f , + 4.387946e-05 , -0 , -0 , 1.0f , + 3.963764e-05 , 0 , 0 , 1.0f , + 3.580377e-05 , 5.0066e-124 , 2.369753e-180 , 1.0f , + 3.234196e-05 , 6.297548e-125 , 2.980792e-181 , 1.0f , + 2.92219e-05 , 3.212085e-126 , 1.520363e-182 , 1.0f , + 2.641456e-05 , -0 , -0 , 1.0f , + 2.389238e-05 , -0 , -0 , 1.0f , }; float cmap_rainbow[] = { - 1.000000, 0.000000, 0.164706, 1.0, - 1.000000, 0.000000, 0.142745, 1.0, - 1.000000, 0.000000, 0.124183, 1.0, - 1.000000, 0.000000, 0.105882, 1.0, - 1.000000, 0.000000, 0.084706, 1.0, - 1.000000, 0.000000, 0.065359, 1.0, - 1.000000, 0.000000, 0.047059, 1.0, - 1.000000, 0.000000, 0.026667, 1.0, - 1.000000, 0.009150, 0.008366, 1.0, - 1.000000, 0.029020, 0.000000, 1.0, - 1.000000, 0.049673, 0.000000, 1.0, - 1.000000, 0.069020, 0.000000, 1.0, - 1.000000, 0.090196, 0.000000, 1.0, - 1.000000, 0.108497, 0.000000, 1.0, - 1.000000, 0.127059, 0.000000, 1.0, - 1.000000, 0.149020, 0.000000, 1.0, - 1.000000, 0.167320, 0.000000, 1.0, - 1.000000, 0.185621, 0.000000, 1.0, - 1.000000, 0.207059, 0.000000, 1.0, - 1.000000, 0.226144, 0.000000, 1.0, - 1.000000, 0.247059, 0.000000, 1.0, - 1.000000, 0.266667, 0.000000, 1.0, - 1.000000, 0.284967, 0.000000, 1.0, - 1.000000, 0.305098, 0.000000, 1.0, - 1.000000, 0.333333, 0.000000, 1.0, - 1.000000, 0.364706, 0.000000, 1.0, - 1.000000, 0.385621, 0.000000, 1.0, - 1.000000, 0.404706, 0.000000, 1.0, - 1.000000, 0.426144, 0.000000, 1.0, - 1.000000, 0.444444, 0.000000, 1.0, - 1.000000, 0.462745, 0.000000, 1.0, - 1.000000, 0.484706, 0.000000, 1.0, - 1.000000, 0.503268, 0.000000, 1.0, - 1.000000, 0.524706, 0.000000, 1.0, - 1.000000, 0.543791, 0.000000, 1.0, - 1.000000, 0.562091, 0.000000, 1.0, - 1.000000, 0.582745, 0.000000, 1.0, - 1.000000, 0.602614, 0.000000, 1.0, - 1.000000, 0.620915, 0.000000, 1.0, - 1.000000, 0.640784, 0.000000, 1.0, - 1.000000, 0.669281, 0.000000, 1.0, - 1.000000, 0.703268, 0.000000, 1.0, - 1.000000, 0.721569, 0.000000, 1.0, - 1.000000, 0.740392, 0.000000, 1.0, - 1.000000, 0.762091, 0.000000, 1.0, - 1.000000, 0.780392, 0.000000, 1.0, - 1.000000, 0.798693, 0.000000, 1.0, - 1.000000, 0.820392, 0.000000, 1.0, - 1.000000, 0.839216, 0.000000, 1.0, - 1.000000, 0.860392, 0.000000, 1.0, - 1.000000, 0.879739, 0.000000, 1.0, - 1.000000, 0.898039, 0.000000, 1.0, - 1.000000, 0.918431, 0.000000, 1.0, - 1.000000, 0.938562, 0.000000, 1.0, - 1.000000, 0.956863, 0.000000, 1.0, - 1.000000, 0.976471, 0.000000, 1.0, - 0.989543, 0.994248, 0.000000, 1.0, - 0.956863, 1.000000, 0.000000, 1.0, - 0.938562, 1.000000, 0.000000, 1.0, - 0.920000, 1.000000, 0.000000, 1.0, - 0.898039, 1.000000, 0.000000, 1.0, - 0.879739, 1.000000, 0.000000, 1.0, - 0.861438, 1.000000, 0.000000, 1.0, - 0.840000, 1.000000, 0.000000, 1.0, - 0.820915, 1.000000, 0.000000, 1.0, - 0.800000, 1.000000, 0.000000, 1.0, - 0.780392, 1.000000, 0.000000, 1.0, - 0.762092, 1.000000, 0.000000, 1.0, - 0.741961, 1.000000, 0.000000, 1.0, - 0.721569, 1.000000, 0.000000, 1.0, - 0.701961, 1.000000, 0.000000, 1.0, - 0.681046, 1.000000, 0.000000, 1.0, - 0.658039, 1.000000, 0.000000, 1.0, - 0.620915, 1.000000, 0.000000, 1.0, - 0.602614, 1.000000, 0.000000, 1.0, - 0.584314, 1.000000, 0.000000, 1.0, - 0.562353, 1.000000, 0.000000, 1.0, - 0.543791, 1.000000, 0.000000, 1.0, - 0.522353, 1.000000, 0.000000, 1.0, - 0.503268, 1.000000, 0.000000, 1.0, - 0.484967, 1.000000, 0.000000, 1.0, - 0.464314, 1.000000, 0.000000, 1.0, - 0.444444, 1.000000, 0.000000, 1.0, - 0.426144, 1.000000, 0.000000, 1.0, - 0.406275, 1.000000, 0.000000, 1.0, - 0.385621, 1.000000, 0.000000, 1.0, - 0.366275, 1.000000, 0.000000, 1.0, - 0.345098, 1.000000, 0.000000, 1.0, - 0.323660, 1.000000, 0.000000, 1.0, - 0.284967, 1.000000, 0.000000, 1.0, - 0.266667, 1.000000, 0.000000, 1.0, - 0.248366, 1.000000, 0.000000, 1.0, - 0.226667, 1.000000, 0.000000, 1.0, - 0.207843, 1.000000, 0.000000, 1.0, - 0.186667, 1.000000, 0.000000, 1.0, - 0.167320, 1.000000, 0.000000, 1.0, - 0.149020, 1.000000, 0.000000, 1.0, - 0.128627, 1.000000, 0.000000, 1.0, - 0.108497, 1.000000, 0.000000, 1.0, - 0.088627, 1.000000, 0.000000, 1.0, - 0.067974, 1.000000, 0.000000, 1.0, - 0.049673, 1.000000, 0.000000, 1.0, - 0.030588, 1.000000, 0.000000, 1.0, - 0.010196, 1.000000, 0.000523, 1.0, - 0.000000, 1.000000, 0.006797, 1.0, - 0.000000, 1.000000, 0.047059, 1.0, - 0.000000, 1.000000, 0.065359, 1.0, - 0.000000, 1.000000, 0.087059, 1.0, - 0.000000, 1.000000, 0.105882, 1.0, - 0.000000, 1.000000, 0.124183, 1.0, - 0.000000, 1.000000, 0.145098, 1.0, - 0.000000, 1.000000, 0.164706, 1.0, - 0.000000, 1.000000, 0.183007, 1.0, - 0.000000, 1.000000, 0.203137, 1.0, - 0.000000, 1.000000, 0.223529, 1.0, - 0.000000, 1.000000, 0.243137, 1.0, - 0.000000, 1.000000, 0.264052, 1.0, - 0.000000, 1.000000, 0.282353, 1.0, - 0.000000, 1.000000, 0.301176, 1.0, - 0.000000, 1.000000, 0.322876, 1.0, - 0.000000, 1.000000, 0.341176, 1.0, - 0.000000, 1.000000, 0.381438, 1.0, - 0.000000, 1.000000, 0.401307, 1.0, - 0.000000, 1.000000, 0.422745, 1.0, - 0.000000, 1.000000, 0.441830, 1.0, - 0.000000, 1.000000, 0.460131, 1.0, - 0.000000, 1.000000, 0.480784, 1.0, - 0.000000, 1.000000, 0.500654, 1.0, - 0.000000, 1.000000, 0.518954, 1.0, - 0.000000, 1.000000, 0.538823, 1.0, - 0.000000, 1.000000, 0.559477, 1.0, - 0.000000, 1.000000, 0.578823, 1.0, - 0.000000, 1.000000, 0.600000, 1.0, - 0.000000, 1.000000, 0.618301, 1.0, - 0.000000, 1.000000, 0.636863, 1.0, - 0.000000, 1.000000, 0.658823, 1.0, - 0.000000, 1.000000, 0.677124, 1.0, - 0.000000, 1.000000, 0.715817, 1.0, - 0.000000, 1.000000, 0.737255, 1.0, - 0.000000, 1.000000, 0.758431, 1.0, - 0.000000, 1.000000, 0.777778, 1.0, - 0.000000, 1.000000, 0.796078, 1.0, - 0.000000, 1.000000, 0.816471, 1.0, - 0.000000, 1.000000, 0.836601, 1.0, - 0.000000, 1.000000, 0.856471, 1.0, - 0.000000, 1.000000, 0.877124, 1.0, - 0.000000, 1.000000, 0.895425, 1.0, - 0.000000, 1.000000, 0.914510, 1.0, - 0.000000, 1.000000, 0.935948, 1.0, - 0.000000, 1.000000, 0.954248, 1.0, - 0.000000, 1.000000, 0.972549, 1.0, - 0.000000, 1.000000, 0.994510, 1.0, - 0.000000, 0.983007, 0.999477, 1.0, - 0.000000, 0.945882, 1.000000, 1.0, - 0.000000, 0.922876, 1.000000, 1.0, - 0.000000, 0.901961, 1.000000, 1.0, - 0.000000, 0.882353, 1.000000, 1.0, - 0.000000, 0.864052, 1.000000, 1.0, - 0.000000, 0.843922, 1.000000, 1.0, - 0.000000, 0.823529, 1.000000, 1.0, - 0.000000, 0.803922, 1.000000, 1.0, - 0.000000, 0.783007, 1.000000, 1.0, - 0.000000, 0.764706, 1.000000, 1.0, - 0.000000, 0.745882, 1.000000, 1.0, - 0.000000, 0.724183, 1.000000, 1.0, - 0.000000, 0.705882, 1.000000, 1.0, - 0.000000, 0.683922, 1.000000, 1.0, - 0.000000, 0.665360, 1.000000, 1.0, - 0.000000, 0.647059, 1.000000, 1.0, - 0.000000, 0.611503, 1.000000, 1.0, - 0.000000, 0.586928, 1.000000, 1.0, - 0.000000, 0.566275, 1.000000, 1.0, - 0.000000, 0.546405, 1.000000, 1.0, - 0.000000, 0.526275, 1.000000, 1.0, - 0.000000, 0.505882, 1.000000, 1.0, - 0.000000, 0.487582, 1.000000, 1.0, - 0.000000, 0.468235, 1.000000, 1.0, - 0.000000, 0.447059, 1.000000, 1.0, - 0.000000, 0.428758, 1.000000, 1.0, - 0.000000, 0.410196, 1.000000, 1.0, - 0.000000, 0.388235, 1.000000, 1.0, - 0.000000, 0.369935, 1.000000, 1.0, - 0.000000, 0.348235, 1.000000, 1.0, - 0.000000, 0.329412, 1.000000, 1.0, - 0.000000, 0.311111, 1.000000, 1.0, - 0.000000, 0.277124, 1.000000, 1.0, - 0.000000, 0.250980, 1.000000, 1.0, - 0.000000, 0.230588, 1.000000, 1.0, - 0.000000, 0.210458, 1.000000, 1.0, - 0.000000, 0.190588, 1.000000, 1.0, - 0.000000, 0.169935, 1.000000, 1.0, - 0.000000, 0.151634, 1.000000, 1.0, - 0.000000, 0.132549, 1.000000, 1.0, - 0.000000, 0.111111, 1.000000, 1.0, - 0.000000, 0.092549, 1.000000, 1.0, - 0.000000, 0.070588, 1.000000, 1.0, - 0.000000, 0.052288, 1.000000, 1.0, - 0.000000, 0.033987, 1.000000, 1.0, - 0.000000, 0.012549, 1.000000, 1.0, - 0.005752, 0.002092, 1.000000, 1.0, - 0.020915, 0.000000, 1.000000, 1.0, - 0.053333, 0.000000, 1.000000, 1.0, - 0.083137, 0.000000, 1.000000, 1.0, - 0.103268, 0.000000, 1.000000, 1.0, - 0.121569, 0.000000, 1.000000, 1.0, - 0.141177, 0.000000, 1.000000, 1.0, - 0.162091, 0.000000, 1.000000, 1.0, - 0.180392, 0.000000, 1.000000, 1.0, - 0.199216, 0.000000, 1.000000, 1.0, - 0.220915, 0.000000, 1.000000, 1.0, - 0.239216, 0.000000, 1.000000, 1.0, - 0.261177, 0.000000, 1.000000, 1.0, - 0.279739, 0.000000, 1.000000, 1.0, - 0.298039, 0.000000, 1.000000, 1.0, - 0.319216, 0.000000, 1.000000, 1.0, - 0.338562, 0.000000, 1.000000, 1.0, - 0.356863, 0.000000, 1.000000, 1.0, - 0.387712, 0.000000, 1.000000, 1.0, - 0.418824, 0.000000, 1.000000, 1.0, - 0.439216, 0.000000, 1.000000, 1.0, - 0.457516, 0.000000, 1.000000, 1.0, - 0.476863, 0.000000, 1.000000, 1.0, - 0.498039, 0.000000, 1.000000, 1.0, - 0.516340, 0.000000, 1.000000, 1.0, - 0.534902, 0.000000, 1.000000, 1.0, - 0.556863, 0.000000, 1.000000, 1.0, - 0.575164, 0.000000, 1.000000, 1.0, - 0.596863, 0.000000, 1.000000, 1.0, - 0.615686, 0.000000, 1.000000, 1.0, - 0.633987, 0.000000, 1.000000, 1.0, - 0.654902, 0.000000, 1.000000, 1.0, - 0.674510, 0.000000, 1.000000, 1.0, - 0.694902, 0.000000, 1.000000, 1.0, - 0.724183, 0.000000, 1.000000, 1.0, - 0.754510, 0.000000, 1.000000, 1.0, - 0.775163, 0.000000, 1.000000, 1.0, - 0.793464, 0.000000, 1.000000, 1.0, - 0.812549, 0.000000, 1.000000, 1.0, - 0.833987, 0.000000, 1.000000, 1.0, - 0.852549, 0.000000, 1.000000, 1.0, - 0.874510, 0.000000, 1.000000, 1.0, - 0.892811, 0.000000, 1.000000, 1.0, - 0.911111, 0.000000, 1.000000, 1.0, - 0.932549, 0.000000, 1.000000, 1.0, - 0.951634, 0.000000, 1.000000, 1.0, - 0.969935, 0.000000, 1.000000, 1.0, - 0.990588, 0.000000, 0.997647, 1.0, - 1.000000, 0.000000, 0.985621, 1.0, - 1.000000, 0.000000, 0.965490, 1.0, - 1.000000, 0.000000, 0.937255, 1.0, - 1.000000, 0.000000, 0.905882, 1.0, - 1.000000, 0.000000, 0.884967, 1.0, - 1.000000, 0.000000, 0.866667, 1.0, - 1.000000, 0.000000, 0.847843, 1.0, - 1.000000, 0.000000, 0.826144, 1.0, - 1.000000, 0.000000, 0.807843, 1.0, + 1.000000f, 0.000000f, 0.164706f, 1.0, + 1.000000f, 0.000000f, 0.142745f, 1.0, + 1.000000f, 0.000000f, 0.124183f, 1.0, + 1.000000f, 0.000000f, 0.105882f, 1.0, + 1.000000f, 0.000000f, 0.084706f, 1.0, + 1.000000f, 0.000000f, 0.065359f, 1.0, + 1.000000f, 0.000000f, 0.047059f, 1.0, + 1.000000f, 0.000000f, 0.026667f, 1.0, + 1.000000f, 0.009150f, 0.008366f, 1.0, + 1.000000f, 0.029020f, 0.000000f, 1.0, + 1.000000f, 0.049673f, 0.000000f, 1.0, + 1.000000f, 0.069020f, 0.000000f, 1.0, + 1.000000f, 0.090196f, 0.000000f, 1.0, + 1.000000f, 0.108497f, 0.000000f, 1.0, + 1.000000f, 0.127059f, 0.000000f, 1.0, + 1.000000f, 0.149020f, 0.000000f, 1.0, + 1.000000f, 0.167320f, 0.000000f, 1.0, + 1.000000f, 0.185621f, 0.000000f, 1.0, + 1.000000f, 0.207059f, 0.000000f, 1.0, + 1.000000f, 0.226144f, 0.000000f, 1.0, + 1.000000f, 0.247059f, 0.000000f, 1.0, + 1.000000f, 0.266667f, 0.000000f, 1.0, + 1.000000f, 0.284967f, 0.000000f, 1.0, + 1.000000f, 0.305098f, 0.000000f, 1.0, + 1.000000f, 0.333333f, 0.000000f, 1.0, + 1.000000f, 0.364706f, 0.000000f, 1.0, + 1.000000f, 0.385621f, 0.000000f, 1.0, + 1.000000f, 0.404706f, 0.000000f, 1.0, + 1.000000f, 0.426144f, 0.000000f, 1.0, + 1.000000f, 0.444444f, 0.000000f, 1.0, + 1.000000f, 0.462745f, 0.000000f, 1.0, + 1.000000f, 0.484706f, 0.000000f, 1.0, + 1.000000f, 0.503268f, 0.000000f, 1.0, + 1.000000f, 0.524706f, 0.000000f, 1.0, + 1.000000f, 0.543791f, 0.000000f, 1.0, + 1.000000f, 0.562091f, 0.000000f, 1.0, + 1.000000f, 0.582745f, 0.000000f, 1.0, + 1.000000f, 0.602614f, 0.000000f, 1.0, + 1.000000f, 0.620915f, 0.000000f, 1.0, + 1.000000f, 0.640784f, 0.000000f, 1.0, + 1.000000f, 0.669281f, 0.000000f, 1.0, + 1.000000f, 0.703268f, 0.000000f, 1.0, + 1.000000f, 0.721569f, 0.000000f, 1.0, + 1.000000f, 0.740392f, 0.000000f, 1.0, + 1.000000f, 0.762091f, 0.000000f, 1.0, + 1.000000f, 0.780392f, 0.000000f, 1.0, + 1.000000f, 0.798693f, 0.000000f, 1.0, + 1.000000f, 0.820392f, 0.000000f, 1.0, + 1.000000f, 0.839216f, 0.000000f, 1.0, + 1.000000f, 0.860392f, 0.000000f, 1.0, + 1.000000f, 0.879739f, 0.000000f, 1.0, + 1.000000f, 0.898039f, 0.000000f, 1.0, + 1.000000f, 0.918431f, 0.000000f, 1.0, + 1.000000f, 0.938562f, 0.000000f, 1.0, + 1.000000f, 0.956863f, 0.000000f, 1.0, + 1.000000f, 0.976471f, 0.000000f, 1.0, + 0.989543f, 0.994248f, 0.000000f, 1.0, + 0.956863f, 1.000000f, 0.000000f, 1.0, + 0.938562f, 1.000000f, 0.000000f, 1.0, + 0.920000f, 1.000000f, 0.000000f, 1.0, + 0.898039f, 1.000000f, 0.000000f, 1.0, + 0.879739f, 1.000000f, 0.000000f, 1.0, + 0.861438f, 1.000000f, 0.000000f, 1.0, + 0.840000f, 1.000000f, 0.000000f, 1.0, + 0.820915f, 1.000000f, 0.000000f, 1.0, + 0.800000f, 1.000000f, 0.000000f, 1.0, + 0.780392f, 1.000000f, 0.000000f, 1.0, + 0.762092f, 1.000000f, 0.000000f, 1.0, + 0.741961f, 1.000000f, 0.000000f, 1.0, + 0.721569f, 1.000000f, 0.000000f, 1.0, + 0.701961f, 1.000000f, 0.000000f, 1.0, + 0.681046f, 1.000000f, 0.000000f, 1.0, + 0.658039f, 1.000000f, 0.000000f, 1.0, + 0.620915f, 1.000000f, 0.000000f, 1.0, + 0.602614f, 1.000000f, 0.000000f, 1.0, + 0.584314f, 1.000000f, 0.000000f, 1.0, + 0.562353f, 1.000000f, 0.000000f, 1.0, + 0.543791f, 1.000000f, 0.000000f, 1.0, + 0.522353f, 1.000000f, 0.000000f, 1.0, + 0.503268f, 1.000000f, 0.000000f, 1.0, + 0.484967f, 1.000000f, 0.000000f, 1.0, + 0.464314f, 1.000000f, 0.000000f, 1.0, + 0.444444f, 1.000000f, 0.000000f, 1.0, + 0.426144f, 1.000000f, 0.000000f, 1.0, + 0.406275f, 1.000000f, 0.000000f, 1.0, + 0.385621f, 1.000000f, 0.000000f, 1.0, + 0.366275f, 1.000000f, 0.000000f, 1.0, + 0.345098f, 1.000000f, 0.000000f, 1.0, + 0.323660f, 1.000000f, 0.000000f, 1.0, + 0.284967f, 1.000000f, 0.000000f, 1.0, + 0.266667f, 1.000000f, 0.000000f, 1.0, + 0.248366f, 1.000000f, 0.000000f, 1.0, + 0.226667f, 1.000000f, 0.000000f, 1.0, + 0.207843f, 1.000000f, 0.000000f, 1.0, + 0.186667f, 1.000000f, 0.000000f, 1.0, + 0.167320f, 1.000000f, 0.000000f, 1.0, + 0.149020f, 1.000000f, 0.000000f, 1.0, + 0.128627f, 1.000000f, 0.000000f, 1.0, + 0.108497f, 1.000000f, 0.000000f, 1.0, + 0.088627f, 1.000000f, 0.000000f, 1.0, + 0.067974f, 1.000000f, 0.000000f, 1.0, + 0.049673f, 1.000000f, 0.000000f, 1.0, + 0.030588f, 1.000000f, 0.000000f, 1.0, + 0.010196f, 1.000000f, 0.000523f, 1.0, + 0.000000f, 1.000000f, 0.006797f, 1.0, + 0.000000f, 1.000000f, 0.047059f, 1.0, + 0.000000f, 1.000000f, 0.065359f, 1.0, + 0.000000f, 1.000000f, 0.087059f, 1.0, + 0.000000f, 1.000000f, 0.105882f, 1.0, + 0.000000f, 1.000000f, 0.124183f, 1.0, + 0.000000f, 1.000000f, 0.145098f, 1.0, + 0.000000f, 1.000000f, 0.164706f, 1.0, + 0.000000f, 1.000000f, 0.183007f, 1.0, + 0.000000f, 1.000000f, 0.203137f, 1.0, + 0.000000f, 1.000000f, 0.223529f, 1.0, + 0.000000f, 1.000000f, 0.243137f, 1.0, + 0.000000f, 1.000000f, 0.264052f, 1.0, + 0.000000f, 1.000000f, 0.282353f, 1.0, + 0.000000f, 1.000000f, 0.301176f, 1.0, + 0.000000f, 1.000000f, 0.322876f, 1.0, + 0.000000f, 1.000000f, 0.341176f, 1.0, + 0.000000f, 1.000000f, 0.381438f, 1.0, + 0.000000f, 1.000000f, 0.401307f, 1.0, + 0.000000f, 1.000000f, 0.422745f, 1.0, + 0.000000f, 1.000000f, 0.441830f, 1.0, + 0.000000f, 1.000000f, 0.460131f, 1.0, + 0.000000f, 1.000000f, 0.480784f, 1.0, + 0.000000f, 1.000000f, 0.500654f, 1.0, + 0.000000f, 1.000000f, 0.518954f, 1.0, + 0.000000f, 1.000000f, 0.538823f, 1.0, + 0.000000f, 1.000000f, 0.559477f, 1.0, + 0.000000f, 1.000000f, 0.578823f, 1.0, + 0.000000f, 1.000000f, 0.600000f, 1.0, + 0.000000f, 1.000000f, 0.618301f, 1.0, + 0.000000f, 1.000000f, 0.636863f, 1.0, + 0.000000f, 1.000000f, 0.658823f, 1.0, + 0.000000f, 1.000000f, 0.677124f, 1.0, + 0.000000f, 1.000000f, 0.715817f, 1.0, + 0.000000f, 1.000000f, 0.737255f, 1.0, + 0.000000f, 1.000000f, 0.758431f, 1.0, + 0.000000f, 1.000000f, 0.777778f, 1.0, + 0.000000f, 1.000000f, 0.796078f, 1.0, + 0.000000f, 1.000000f, 0.816471f, 1.0, + 0.000000f, 1.000000f, 0.836601f, 1.0, + 0.000000f, 1.000000f, 0.856471f, 1.0, + 0.000000f, 1.000000f, 0.877124f, 1.0, + 0.000000f, 1.000000f, 0.895425f, 1.0, + 0.000000f, 1.000000f, 0.914510f, 1.0, + 0.000000f, 1.000000f, 0.935948f, 1.0, + 0.000000f, 1.000000f, 0.954248f, 1.0, + 0.000000f, 1.000000f, 0.972549f, 1.0, + 0.000000f, 1.000000f, 0.994510f, 1.0, + 0.000000f, 0.983007f, 0.999477f, 1.0, + 0.000000f, 0.945882f, 1.000000f, 1.0, + 0.000000f, 0.922876f, 1.000000f, 1.0, + 0.000000f, 0.901961f, 1.000000f, 1.0, + 0.000000f, 0.882353f, 1.000000f, 1.0, + 0.000000f, 0.864052f, 1.000000f, 1.0, + 0.000000f, 0.843922f, 1.000000f, 1.0, + 0.000000f, 0.823529f, 1.000000f, 1.0, + 0.000000f, 0.803922f, 1.000000f, 1.0, + 0.000000f, 0.783007f, 1.000000f, 1.0, + 0.000000f, 0.764706f, 1.000000f, 1.0, + 0.000000f, 0.745882f, 1.000000f, 1.0, + 0.000000f, 0.724183f, 1.000000f, 1.0, + 0.000000f, 0.705882f, 1.000000f, 1.0, + 0.000000f, 0.683922f, 1.000000f, 1.0, + 0.000000f, 0.665360f, 1.000000f, 1.0, + 0.000000f, 0.647059f, 1.000000f, 1.0, + 0.000000f, 0.611503f, 1.000000f, 1.0, + 0.000000f, 0.586928f, 1.000000f, 1.0, + 0.000000f, 0.566275f, 1.000000f, 1.0, + 0.000000f, 0.546405f, 1.000000f, 1.0, + 0.000000f, 0.526275f, 1.000000f, 1.0, + 0.000000f, 0.505882f, 1.000000f, 1.0, + 0.000000f, 0.487582f, 1.000000f, 1.0, + 0.000000f, 0.468235f, 1.000000f, 1.0, + 0.000000f, 0.447059f, 1.000000f, 1.0, + 0.000000f, 0.428758f, 1.000000f, 1.0, + 0.000000f, 0.410196f, 1.000000f, 1.0, + 0.000000f, 0.388235f, 1.000000f, 1.0, + 0.000000f, 0.369935f, 1.000000f, 1.0, + 0.000000f, 0.348235f, 1.000000f, 1.0, + 0.000000f, 0.329412f, 1.000000f, 1.0, + 0.000000f, 0.311111f, 1.000000f, 1.0, + 0.000000f, 0.277124f, 1.000000f, 1.0, + 0.000000f, 0.250980f, 1.000000f, 1.0, + 0.000000f, 0.230588f, 1.000000f, 1.0, + 0.000000f, 0.210458f, 1.000000f, 1.0, + 0.000000f, 0.190588f, 1.000000f, 1.0, + 0.000000f, 0.169935f, 1.000000f, 1.0, + 0.000000f, 0.151634f, 1.000000f, 1.0, + 0.000000f, 0.132549f, 1.000000f, 1.0, + 0.000000f, 0.111111f, 1.000000f, 1.0, + 0.000000f, 0.092549f, 1.000000f, 1.0, + 0.000000f, 0.070588f, 1.000000f, 1.0, + 0.000000f, 0.052288f, 1.000000f, 1.0, + 0.000000f, 0.033987f, 1.000000f, 1.0, + 0.000000f, 0.012549f, 1.000000f, 1.0, + 0.005752f, 0.002092f, 1.000000f, 1.0, + 0.020915f, 0.000000f, 1.000000f, 1.0, + 0.053333f, 0.000000f, 1.000000f, 1.0, + 0.083137f, 0.000000f, 1.000000f, 1.0, + 0.103268f, 0.000000f, 1.000000f, 1.0, + 0.121569f, 0.000000f, 1.000000f, 1.0, + 0.141177f, 0.000000f, 1.000000f, 1.0, + 0.162091f, 0.000000f, 1.000000f, 1.0, + 0.180392f, 0.000000f, 1.000000f, 1.0, + 0.199216f, 0.000000f, 1.000000f, 1.0, + 0.220915f, 0.000000f, 1.000000f, 1.0, + 0.239216f, 0.000000f, 1.000000f, 1.0, + 0.261177f, 0.000000f, 1.000000f, 1.0, + 0.279739f, 0.000000f, 1.000000f, 1.0, + 0.298039f, 0.000000f, 1.000000f, 1.0, + 0.319216f, 0.000000f, 1.000000f, 1.0, + 0.338562f, 0.000000f, 1.000000f, 1.0, + 0.356863f, 0.000000f, 1.000000f, 1.0, + 0.387712f, 0.000000f, 1.000000f, 1.0, + 0.418824f, 0.000000f, 1.000000f, 1.0, + 0.439216f, 0.000000f, 1.000000f, 1.0, + 0.457516f, 0.000000f, 1.000000f, 1.0, + 0.476863f, 0.000000f, 1.000000f, 1.0, + 0.498039f, 0.000000f, 1.000000f, 1.0, + 0.516340f, 0.000000f, 1.000000f, 1.0, + 0.534902f, 0.000000f, 1.000000f, 1.0, + 0.556863f, 0.000000f, 1.000000f, 1.0, + 0.575164f, 0.000000f, 1.000000f, 1.0, + 0.596863f, 0.000000f, 1.000000f, 1.0, + 0.615686f, 0.000000f, 1.000000f, 1.0, + 0.633987f, 0.000000f, 1.000000f, 1.0, + 0.654902f, 0.000000f, 1.000000f, 1.0, + 0.674510f, 0.000000f, 1.000000f, 1.0, + 0.694902f, 0.000000f, 1.000000f, 1.0, + 0.724183f, 0.000000f, 1.000000f, 1.0, + 0.754510f, 0.000000f, 1.000000f, 1.0, + 0.775163f, 0.000000f, 1.000000f, 1.0, + 0.793464f, 0.000000f, 1.000000f, 1.0, + 0.812549f, 0.000000f, 1.000000f, 1.0, + 0.833987f, 0.000000f, 1.000000f, 1.0, + 0.852549f, 0.000000f, 1.000000f, 1.0, + 0.874510f, 0.000000f, 1.000000f, 1.0, + 0.892811f, 0.000000f, 1.000000f, 1.0, + 0.911111f, 0.000000f, 1.000000f, 1.0, + 0.932549f, 0.000000f, 1.000000f, 1.0, + 0.951634f, 0.000000f, 1.000000f, 1.0, + 0.969935f, 0.000000f, 1.000000f, 1.0, + 0.990588f, 0.000000f, 0.997647f, 1.0, + 1.000000f, 0.000000f, 0.985621f, 1.0, + 1.000000f, 0.000000f, 0.965490f, 1.0, + 1.000000f, 0.000000f, 0.937255f, 1.0, + 1.000000f, 0.000000f, 0.905882f, 1.0, + 1.000000f, 0.000000f, 0.884967f, 1.0, + 1.000000f, 0.000000f, 0.866667f, 1.0, + 1.000000f, 0.000000f, 0.847843f, 1.0, + 1.000000f, 0.000000f, 0.826144f, 1.0, + 1.000000f, 0.000000f, 0.807843f, 1.0, }; float cmap_red[] = @@ -1092,782 +1092,782 @@ float cmap_red[] = /*-- http://mycarta.wordpress.com/2013/03/06/perceptual-rainbow-palette-the-goodies/ */ float cmap_mood[] = { - 0.5151f, 0.0482f, 0.6697f, 1.0000, - 0.5159f, 0.0561f, 0.6785f, 1.0000, - 0.5166f, 0.0639f, 0.6872f, 1.0000, - 0.5172f, 0.0717f, 0.6959f, 1.0000, - 0.5178f, 0.0795f, 0.7045f, 1.0000, - 0.5182f, 0.0872f, 0.7130f, 1.0000, - 0.5186f, 0.0949f, 0.7214f, 1.0000, - 0.5189f, 0.1025f, 0.7297f, 1.0000, - 0.5192f, 0.1101f, 0.7380f, 1.0000, - 0.5194f, 0.1176f, 0.7461f, 1.0000, - 0.5196f, 0.1251f, 0.7542f, 1.0000, - 0.5197f, 0.1326f, 0.7622f, 1.0000, - 0.5198f, 0.1400f, 0.7701f, 1.0000, - 0.5198f, 0.1473f, 0.7780f, 1.0000, - 0.5199f, 0.1546f, 0.7857f, 1.0000, - 0.5199f, 0.1618f, 0.7933f, 1.0000, - 0.5199f, 0.1690f, 0.8009f, 1.0000, - 0.5199f, 0.1762f, 0.8083f, 1.0000, - 0.5197f, 0.1833f, 0.8157f, 1.0000, - 0.5192f, 0.1904f, 0.8232f, 1.0000, - 0.5184f, 0.1975f, 0.8306f, 1.0000, - 0.5172f, 0.2046f, 0.8381f, 1.0000, - 0.5158f, 0.2116f, 0.8455f, 1.0000, - 0.5142f, 0.2186f, 0.8528f, 1.0000, - 0.5124f, 0.2256f, 0.8601f, 1.0000, - 0.5103f, 0.2325f, 0.8673f, 1.0000, - 0.5082f, 0.2393f, 0.8743f, 1.0000, - 0.5059f, 0.2461f, 0.8812f, 1.0000, - 0.5035f, 0.2528f, 0.8879f, 1.0000, - 0.5010f, 0.2594f, 0.8945f, 1.0000, - 0.4985f, 0.2660f, 0.9008f, 1.0000, - 0.4959f, 0.2724f, 0.9068f, 1.0000, - 0.4934f, 0.2788f, 0.9127f, 1.0000, - 0.4909f, 0.2850f, 0.9182f, 1.0000, - 0.4884f, 0.2912f, 0.9234f, 1.0000, - 0.4858f, 0.2972f, 0.9286f, 1.0000, - 0.4830f, 0.3032f, 0.9339f, 1.0000, - 0.4799f, 0.3090f, 0.9394f, 1.0000, - 0.4766f, 0.3147f, 0.9449f, 1.0000, - 0.4731f, 0.3203f, 0.9503f, 1.0000, - 0.4694f, 0.3259f, 0.9557f, 1.0000, - 0.4657f, 0.3314f, 0.9610f, 1.0000, - 0.4618f, 0.3368f, 0.9661f, 1.0000, - 0.4580f, 0.3423f, 0.9709f, 1.0000, - 0.4541f, 0.3476f, 0.9753f, 1.0000, - 0.4502f, 0.3530f, 0.9794f, 1.0000, - 0.4465f, 0.3584f, 0.9830f, 1.0000, - 0.4428f, 0.3637f, 0.9861f, 1.0000, - 0.4392f, 0.3691f, 0.9886f, 1.0000, - 0.4358f, 0.3745f, 0.9905f, 1.0000, - 0.4326f, 0.3800f, 0.9917f, 1.0000, - 0.4297f, 0.3855f, 0.9921f, 1.0000, - 0.4270f, 0.3910f, 0.9920f, 1.0000, - 0.4243f, 0.3966f, 0.9918f, 1.0000, - 0.4218f, 0.4022f, 0.9915f, 1.0000, - 0.4194f, 0.4078f, 0.9911f, 1.0000, - 0.4171f, 0.4134f, 0.9905f, 1.0000, - 0.4149f, 0.4189f, 0.9899f, 1.0000, - 0.4126f, 0.4245f, 0.9891f, 1.0000, - 0.4105f, 0.4301f, 0.9883f, 1.0000, - 0.4083f, 0.4357f, 0.9874f, 1.0000, - 0.4061f, 0.4412f, 0.9863f, 1.0000, - 0.4039f, 0.4468f, 0.9853f, 1.0000, - 0.4017f, 0.4523f, 0.9841f, 1.0000, - 0.3994f, 0.4577f, 0.9829f, 1.0000, - 0.3970f, 0.4632f, 0.9816f, 1.0000, - 0.3945f, 0.4686f, 0.9803f, 1.0000, - 0.3920f, 0.4739f, 0.9789f, 1.0000, - 0.3893f, 0.4792f, 0.9775f, 1.0000, - 0.3865f, 0.4845f, 0.9758f, 1.0000, - 0.3836f, 0.4897f, 0.9734f, 1.0000, - 0.3805f, 0.4949f, 0.9706f, 1.0000, - 0.3774f, 0.5001f, 0.9672f, 1.0000, - 0.3742f, 0.5053f, 0.9635f, 1.0000, - 0.3709f, 0.5104f, 0.9594f, 1.0000, - 0.3676f, 0.5155f, 0.9549f, 1.0000, - 0.3642f, 0.5206f, 0.9502f, 1.0000, - 0.3608f, 0.5257f, 0.9453f, 1.0000, - 0.3574f, 0.5307f, 0.9403f, 1.0000, - 0.3539f, 0.5357f, 0.9352f, 1.0000, - 0.3505f, 0.5407f, 0.9300f, 1.0000, - 0.3471f, 0.5456f, 0.9249f, 1.0000, - 0.3437f, 0.5505f, 0.9198f, 1.0000, - 0.3403f, 0.5554f, 0.9149f, 1.0000, - 0.3370f, 0.5602f, 0.9101f, 1.0000, - 0.3337f, 0.5650f, 0.9056f, 1.0000, - 0.3305f, 0.5698f, 0.9012f, 1.0000, - 0.3273f, 0.5745f, 0.8969f, 1.0000, - 0.3241f, 0.5792f, 0.8926f, 1.0000, - 0.3209f, 0.5838f, 0.8883f, 1.0000, - 0.3178f, 0.5884f, 0.8840f, 1.0000, - 0.3146f, 0.5930f, 0.8797f, 1.0000, - 0.3115f, 0.5976f, 0.8754f, 1.0000, - 0.3083f, 0.6021f, 0.8711f, 1.0000, - 0.3052f, 0.6067f, 0.8667f, 1.0000, - 0.3020f, 0.6111f, 0.8622f, 1.0000, - 0.2989f, 0.6156f, 0.8577f, 1.0000, - 0.2957f, 0.6200f, 0.8531f, 1.0000, - 0.2925f, 0.6245f, 0.8484f, 1.0000, - 0.2893f, 0.6288f, 0.8437f, 1.0000, - 0.2861f, 0.6332f, 0.8388f, 1.0000, - 0.2828f, 0.6376f, 0.8338f, 1.0000, - 0.2795f, 0.6419f, 0.8287f, 1.0000, - 0.2760f, 0.6462f, 0.8234f, 1.0000, - 0.2721f, 0.6506f, 0.8179f, 1.0000, - 0.2679f, 0.6550f, 0.8123f, 1.0000, - 0.2636f, 0.6594f, 0.8065f, 1.0000, - 0.2590f, 0.6638f, 0.8006f, 1.0000, - 0.2545f, 0.6682f, 0.7945f, 1.0000, - 0.2499f, 0.6726f, 0.7884f, 1.0000, - 0.2454f, 0.6769f, 0.7821f, 1.0000, - 0.2411f, 0.6812f, 0.7758f, 1.0000, - 0.2370f, 0.6854f, 0.7695f, 1.0000, - 0.2332f, 0.6896f, 0.7632f, 1.0000, - 0.2298f, 0.6936f, 0.7568f, 1.0000, - 0.2268f, 0.6976f, 0.7505f, 1.0000, - 0.2244f, 0.7015f, 0.7442f, 1.0000, - 0.2226f, 0.7052f, 0.7380f, 1.0000, - 0.2214f, 0.7088f, 0.7319f, 1.0000, - 0.2210f, 0.7123f, 0.7258f, 1.0000, - 0.2212f, 0.7156f, 0.7198f, 1.0000, - 0.2216f, 0.7188f, 0.7139f, 1.0000, - 0.2224f, 0.7220f, 0.7081f, 1.0000, - 0.2233f, 0.7250f, 0.7022f, 1.0000, - 0.2245f, 0.7279f, 0.6964f, 1.0000, - 0.2259f, 0.7308f, 0.6906f, 1.0000, - 0.2275f, 0.7336f, 0.6849f, 1.0000, - 0.2292f, 0.7363f, 0.6791f, 1.0000, - 0.2310f, 0.7391f, 0.6732f, 1.0000, - 0.2330f, 0.7418f, 0.6674f, 1.0000, - 0.2350f, 0.7445f, 0.6615f, 1.0000, - 0.2370f, 0.7472f, 0.6556f, 1.0000, - 0.2390f, 0.7499f, 0.6496f, 1.0000, - 0.2411f, 0.7527f, 0.6435f, 1.0000, - 0.2430f, 0.7554f, 0.6374f, 1.0000, - 0.2450f, 0.7583f, 0.6311f, 1.0000, - 0.2468f, 0.7612f, 0.6248f, 1.0000, - 0.2486f, 0.7642f, 0.6183f, 1.0000, - 0.2505f, 0.7672f, 0.6117f, 1.0000, - 0.2525f, 0.7703f, 0.6050f, 1.0000, - 0.2545f, 0.7735f, 0.5982f, 1.0000, - 0.2566f, 0.7766f, 0.5913f, 1.0000, - 0.2588f, 0.7798f, 0.5843f, 1.0000, - 0.2609f, 0.7830f, 0.5772f, 1.0000, - 0.2631f, 0.7862f, 0.5701f, 1.0000, - 0.2654f, 0.7893f, 0.5630f, 1.0000, - 0.2676f, 0.7925f, 0.5559f, 1.0000, - 0.2699f, 0.7956f, 0.5487f, 1.0000, - 0.2722f, 0.7986f, 0.5416f, 1.0000, - 0.2744f, 0.8015f, 0.5346f, 1.0000, - 0.2767f, 0.8044f, 0.5275f, 1.0000, - 0.2789f, 0.8072f, 0.5206f, 1.0000, - 0.2811f, 0.8099f, 0.5137f, 1.0000, - 0.2833f, 0.8125f, 0.5069f, 1.0000, - 0.2854f, 0.8150f, 0.5002f, 1.0000, - 0.2876f, 0.8174f, 0.4935f, 1.0000, - 0.2897f, 0.8197f, 0.4868f, 1.0000, - 0.2918f, 0.8219f, 0.4801f, 1.0000, - 0.2939f, 0.8241f, 0.4735f, 1.0000, - 0.2960f, 0.8262f, 0.4668f, 1.0000, - 0.2981f, 0.8283f, 0.4602f, 1.0000, - 0.3003f, 0.8304f, 0.4536f, 1.0000, - 0.3024f, 0.8324f, 0.4471f, 1.0000, - 0.3045f, 0.8344f, 0.4405f, 1.0000, - 0.3066f, 0.8365f, 0.4340f, 1.0000, - 0.3088f, 0.8385f, 0.4276f, 1.0000, - 0.3110f, 0.8406f, 0.4211f, 1.0000, - 0.3131f, 0.8427f, 0.4147f, 1.0000, - 0.3153f, 0.8448f, 0.4083f, 1.0000, - 0.3176f, 0.8470f, 0.4019f, 1.0000, - 0.3198f, 0.8492f, 0.3956f, 1.0000, - 0.3220f, 0.8515f, 0.3890f, 1.0000, - 0.3242f, 0.8539f, 0.3818f, 1.0000, - 0.3263f, 0.8564f, 0.3742f, 1.0000, - 0.3283f, 0.8589f, 0.3663f, 1.0000, - 0.3304f, 0.8614f, 0.3582f, 1.0000, - 0.3324f, 0.8640f, 0.3501f, 1.0000, - 0.3345f, 0.8666f, 0.3420f, 1.0000, - 0.3366f, 0.8692f, 0.3342f, 1.0000, - 0.3388f, 0.8717f, 0.3266f, 1.0000, - 0.3410f, 0.8742f, 0.3195f, 1.0000, - 0.3433f, 0.8767f, 0.3129f, 1.0000, - 0.3458f, 0.8791f, 0.3070f, 1.0000, - 0.3483f, 0.8814f, 0.3019f, 1.0000, - 0.3510f, 0.8837f, 0.2977f, 1.0000, - 0.3539f, 0.8858f, 0.2946f, 1.0000, - 0.3570f, 0.8878f, 0.2926f, 1.0000, - 0.3602f, 0.8896f, 0.2919f, 1.0000, - 0.3638f, 0.8914f, 0.2920f, 1.0000, - 0.3677f, 0.8931f, 0.2921f, 1.0000, - 0.3720f, 0.8948f, 0.2923f, 1.0000, - 0.3766f, 0.8964f, 0.2927f, 1.0000, - 0.3816f, 0.8980f, 0.2931f, 1.0000, - 0.3868f, 0.8996f, 0.2936f, 1.0000, - 0.3924f, 0.9012f, 0.2941f, 1.0000, - 0.3981f, 0.9026f, 0.2947f, 1.0000, - 0.4041f, 0.9041f, 0.2954f, 1.0000, - 0.4102f, 0.9055f, 0.2961f, 1.0000, - 0.4166f, 0.9068f, 0.2968f, 1.0000, - 0.4231f, 0.9081f, 0.2976f, 1.0000, - 0.4297f, 0.9093f, 0.2984f, 1.0000, - 0.4364f, 0.9105f, 0.2992f, 1.0000, - 0.4431f, 0.9116f, 0.3001f, 1.0000, - 0.4500f, 0.9126f, 0.3009f, 1.0000, - 0.4568f, 0.9136f, 0.3018f, 1.0000, - 0.4639f, 0.9145f, 0.3028f, 1.0000, - 0.4716f, 0.9155f, 0.3040f, 1.0000, - 0.4797f, 0.9165f, 0.3054f, 1.0000, - 0.4882f, 0.9175f, 0.3070f, 1.0000, - 0.4970f, 0.9184f, 0.3087f, 1.0000, - 0.5061f, 0.9194f, 0.3105f, 1.0000, - 0.5154f, 0.9203f, 0.3124f, 1.0000, - 0.5247f, 0.9211f, 0.3144f, 1.0000, - 0.5342f, 0.9219f, 0.3164f, 1.0000, - 0.5436f, 0.9227f, 0.3184f, 1.0000, - 0.5529f, 0.9234f, 0.3203f, 1.0000, - 0.5621f, 0.9240f, 0.3222f, 1.0000, - 0.5710f, 0.9245f, 0.3239f, 1.0000, - 0.5797f, 0.9249f, 0.3256f, 1.0000, - 0.5880f, 0.9252f, 0.3271f, 1.0000, - 0.5959f, 0.9254f, 0.3284f, 1.0000, - 0.6033f, 0.9255f, 0.3295f, 1.0000, - 0.6103f, 0.9255f, 0.3304f, 1.0000, - 0.6172f, 0.9255f, 0.3313f, 1.0000, - 0.6238f, 0.9255f, 0.3322f, 1.0000, - 0.6303f, 0.9255f, 0.3330f, 1.0000, - 0.6366f, 0.9255f, 0.3337f, 1.0000, - 0.6428f, 0.9255f, 0.3344f, 1.0000, - 0.6489f, 0.9255f, 0.3351f, 1.0000, - 0.6549f, 0.9255f, 0.3358f, 1.0000, - 0.6608f, 0.9255f, 0.3364f, 1.0000, - 0.6666f, 0.9255f, 0.3370f, 1.0000, - 0.6723f, 0.9255f, 0.3376f, 1.0000, - 0.6781f, 0.9255f, 0.3382f, 1.0000, - 0.6838f, 0.9255f, 0.3388f, 1.0000, - 0.6895f, 0.9255f, 0.3394f, 1.0000, - 0.6951f, 0.9255f, 0.3401f, 1.0000, - 0.7009f, 0.9255f, 0.3407f, 1.0000, - 0.7066f, 0.9255f, 0.3414f, 1.0000, - 0.7124f, 0.9255f, 0.3421f, 1.0000, - 0.7181f, 0.9255f, 0.3428f, 1.0000, - 0.7238f, 0.9255f, 0.3435f, 1.0000, - 0.7294f, 0.9255f, 0.3441f, 1.0000, - 0.7351f, 0.9255f, 0.3448f, 1.0000, - 0.7407f, 0.9255f, 0.3455f, 1.0000, - 0.7462f, 0.9255f, 0.3462f, 1.0000, - 0.7518f, 0.9255f, 0.3469f, 1.0000, - 0.7573f, 0.9255f, 0.3475f, 1.0000, - 0.7627f, 0.9255f, 0.3482f, 1.0000, - 0.7681f, 0.9255f, 0.3489f, 1.0000, - 0.7735f, 0.9255f, 0.3496f, 1.0000, - 0.7789f, 0.9255f, 0.3502f, 1.0000, - 0.7842f, 0.9255f, 0.3509f, 1.0000, - 0.7895f, 0.9255f, 0.3516f, 1.0000, - 0.7948f, 0.9255f, 0.3522f, 1.0000, - 0.8000f, 0.9255f, 0.3529f, 1.0000, + 0.5151f, 0.0482f, 0.6697f, 1.0000f, + 0.5159f, 0.0561f, 0.6785f, 1.0000f, + 0.5166f, 0.0639f, 0.6872f, 1.0000f, + 0.5172f, 0.0717f, 0.6959f, 1.0000f, + 0.5178f, 0.0795f, 0.7045f, 1.0000f, + 0.5182f, 0.0872f, 0.7130f, 1.0000f, + 0.5186f, 0.0949f, 0.7214f, 1.0000f, + 0.5189f, 0.1025f, 0.7297f, 1.0000f, + 0.5192f, 0.1101f, 0.7380f, 1.0000f, + 0.5194f, 0.1176f, 0.7461f, 1.0000f, + 0.5196f, 0.1251f, 0.7542f, 1.0000f, + 0.5197f, 0.1326f, 0.7622f, 1.0000f, + 0.5198f, 0.1400f, 0.7701f, 1.0000f, + 0.5198f, 0.1473f, 0.7780f, 1.0000f, + 0.5199f, 0.1546f, 0.7857f, 1.0000f, + 0.5199f, 0.1618f, 0.7933f, 1.0000f, + 0.5199f, 0.1690f, 0.8009f, 1.0000f, + 0.5199f, 0.1762f, 0.8083f, 1.0000f, + 0.5197f, 0.1833f, 0.8157f, 1.0000f, + 0.5192f, 0.1904f, 0.8232f, 1.0000f, + 0.5184f, 0.1975f, 0.8306f, 1.0000f, + 0.5172f, 0.2046f, 0.8381f, 1.0000f, + 0.5158f, 0.2116f, 0.8455f, 1.0000f, + 0.5142f, 0.2186f, 0.8528f, 1.0000f, + 0.5124f, 0.2256f, 0.8601f, 1.0000f, + 0.5103f, 0.2325f, 0.8673f, 1.0000f, + 0.5082f, 0.2393f, 0.8743f, 1.0000f, + 0.5059f, 0.2461f, 0.8812f, 1.0000f, + 0.5035f, 0.2528f, 0.8879f, 1.0000f, + 0.5010f, 0.2594f, 0.8945f, 1.0000f, + 0.4985f, 0.2660f, 0.9008f, 1.0000f, + 0.4959f, 0.2724f, 0.9068f, 1.0000f, + 0.4934f, 0.2788f, 0.9127f, 1.0000f, + 0.4909f, 0.2850f, 0.9182f, 1.0000f, + 0.4884f, 0.2912f, 0.9234f, 1.0000f, + 0.4858f, 0.2972f, 0.9286f, 1.0000f, + 0.4830f, 0.3032f, 0.9339f, 1.0000f, + 0.4799f, 0.3090f, 0.9394f, 1.0000f, + 0.4766f, 0.3147f, 0.9449f, 1.0000f, + 0.4731f, 0.3203f, 0.9503f, 1.0000f, + 0.4694f, 0.3259f, 0.9557f, 1.0000f, + 0.4657f, 0.3314f, 0.9610f, 1.0000f, + 0.4618f, 0.3368f, 0.9661f, 1.0000f, + 0.4580f, 0.3423f, 0.9709f, 1.0000f, + 0.4541f, 0.3476f, 0.9753f, 1.0000f, + 0.4502f, 0.3530f, 0.9794f, 1.0000f, + 0.4465f, 0.3584f, 0.9830f, 1.0000f, + 0.4428f, 0.3637f, 0.9861f, 1.0000f, + 0.4392f, 0.3691f, 0.9886f, 1.0000f, + 0.4358f, 0.3745f, 0.9905f, 1.0000f, + 0.4326f, 0.3800f, 0.9917f, 1.0000f, + 0.4297f, 0.3855f, 0.9921f, 1.0000f, + 0.4270f, 0.3910f, 0.9920f, 1.0000f, + 0.4243f, 0.3966f, 0.9918f, 1.0000f, + 0.4218f, 0.4022f, 0.9915f, 1.0000f, + 0.4194f, 0.4078f, 0.9911f, 1.0000f, + 0.4171f, 0.4134f, 0.9905f, 1.0000f, + 0.4149f, 0.4189f, 0.9899f, 1.0000f, + 0.4126f, 0.4245f, 0.9891f, 1.0000f, + 0.4105f, 0.4301f, 0.9883f, 1.0000f, + 0.4083f, 0.4357f, 0.9874f, 1.0000f, + 0.4061f, 0.4412f, 0.9863f, 1.0000f, + 0.4039f, 0.4468f, 0.9853f, 1.0000f, + 0.4017f, 0.4523f, 0.9841f, 1.0000f, + 0.3994f, 0.4577f, 0.9829f, 1.0000f, + 0.3970f, 0.4632f, 0.9816f, 1.0000f, + 0.3945f, 0.4686f, 0.9803f, 1.0000f, + 0.3920f, 0.4739f, 0.9789f, 1.0000f, + 0.3893f, 0.4792f, 0.9775f, 1.0000f, + 0.3865f, 0.4845f, 0.9758f, 1.0000f, + 0.3836f, 0.4897f, 0.9734f, 1.0000f, + 0.3805f, 0.4949f, 0.9706f, 1.0000f, + 0.3774f, 0.5001f, 0.9672f, 1.0000f, + 0.3742f, 0.5053f, 0.9635f, 1.0000f, + 0.3709f, 0.5104f, 0.9594f, 1.0000f, + 0.3676f, 0.5155f, 0.9549f, 1.0000f, + 0.3642f, 0.5206f, 0.9502f, 1.0000f, + 0.3608f, 0.5257f, 0.9453f, 1.0000f, + 0.3574f, 0.5307f, 0.9403f, 1.0000f, + 0.3539f, 0.5357f, 0.9352f, 1.0000f, + 0.3505f, 0.5407f, 0.9300f, 1.0000f, + 0.3471f, 0.5456f, 0.9249f, 1.0000f, + 0.3437f, 0.5505f, 0.9198f, 1.0000f, + 0.3403f, 0.5554f, 0.9149f, 1.0000f, + 0.3370f, 0.5602f, 0.9101f, 1.0000f, + 0.3337f, 0.5650f, 0.9056f, 1.0000f, + 0.3305f, 0.5698f, 0.9012f, 1.0000f, + 0.3273f, 0.5745f, 0.8969f, 1.0000f, + 0.3241f, 0.5792f, 0.8926f, 1.0000f, + 0.3209f, 0.5838f, 0.8883f, 1.0000f, + 0.3178f, 0.5884f, 0.8840f, 1.0000f, + 0.3146f, 0.5930f, 0.8797f, 1.0000f, + 0.3115f, 0.5976f, 0.8754f, 1.0000f, + 0.3083f, 0.6021f, 0.8711f, 1.0000f, + 0.3052f, 0.6067f, 0.8667f, 1.0000f, + 0.3020f, 0.6111f, 0.8622f, 1.0000f, + 0.2989f, 0.6156f, 0.8577f, 1.0000f, + 0.2957f, 0.6200f, 0.8531f, 1.0000f, + 0.2925f, 0.6245f, 0.8484f, 1.0000f, + 0.2893f, 0.6288f, 0.8437f, 1.0000f, + 0.2861f, 0.6332f, 0.8388f, 1.0000f, + 0.2828f, 0.6376f, 0.8338f, 1.0000f, + 0.2795f, 0.6419f, 0.8287f, 1.0000f, + 0.2760f, 0.6462f, 0.8234f, 1.0000f, + 0.2721f, 0.6506f, 0.8179f, 1.0000f, + 0.2679f, 0.6550f, 0.8123f, 1.0000f, + 0.2636f, 0.6594f, 0.8065f, 1.0000f, + 0.2590f, 0.6638f, 0.8006f, 1.0000f, + 0.2545f, 0.6682f, 0.7945f, 1.0000f, + 0.2499f, 0.6726f, 0.7884f, 1.0000f, + 0.2454f, 0.6769f, 0.7821f, 1.0000f, + 0.2411f, 0.6812f, 0.7758f, 1.0000f, + 0.2370f, 0.6854f, 0.7695f, 1.0000f, + 0.2332f, 0.6896f, 0.7632f, 1.0000f, + 0.2298f, 0.6936f, 0.7568f, 1.0000f, + 0.2268f, 0.6976f, 0.7505f, 1.0000f, + 0.2244f, 0.7015f, 0.7442f, 1.0000f, + 0.2226f, 0.7052f, 0.7380f, 1.0000f, + 0.2214f, 0.7088f, 0.7319f, 1.0000f, + 0.2210f, 0.7123f, 0.7258f, 1.0000f, + 0.2212f, 0.7156f, 0.7198f, 1.0000f, + 0.2216f, 0.7188f, 0.7139f, 1.0000f, + 0.2224f, 0.7220f, 0.7081f, 1.0000f, + 0.2233f, 0.7250f, 0.7022f, 1.0000f, + 0.2245f, 0.7279f, 0.6964f, 1.0000f, + 0.2259f, 0.7308f, 0.6906f, 1.0000f, + 0.2275f, 0.7336f, 0.6849f, 1.0000f, + 0.2292f, 0.7363f, 0.6791f, 1.0000f, + 0.2310f, 0.7391f, 0.6732f, 1.0000f, + 0.2330f, 0.7418f, 0.6674f, 1.0000f, + 0.2350f, 0.7445f, 0.6615f, 1.0000f, + 0.2370f, 0.7472f, 0.6556f, 1.0000f, + 0.2390f, 0.7499f, 0.6496f, 1.0000f, + 0.2411f, 0.7527f, 0.6435f, 1.0000f, + 0.2430f, 0.7554f, 0.6374f, 1.0000f, + 0.2450f, 0.7583f, 0.6311f, 1.0000f, + 0.2468f, 0.7612f, 0.6248f, 1.0000f, + 0.2486f, 0.7642f, 0.6183f, 1.0000f, + 0.2505f, 0.7672f, 0.6117f, 1.0000f, + 0.2525f, 0.7703f, 0.6050f, 1.0000f, + 0.2545f, 0.7735f, 0.5982f, 1.0000f, + 0.2566f, 0.7766f, 0.5913f, 1.0000f, + 0.2588f, 0.7798f, 0.5843f, 1.0000f, + 0.2609f, 0.7830f, 0.5772f, 1.0000f, + 0.2631f, 0.7862f, 0.5701f, 1.0000f, + 0.2654f, 0.7893f, 0.5630f, 1.0000f, + 0.2676f, 0.7925f, 0.5559f, 1.0000f, + 0.2699f, 0.7956f, 0.5487f, 1.0000f, + 0.2722f, 0.7986f, 0.5416f, 1.0000f, + 0.2744f, 0.8015f, 0.5346f, 1.0000f, + 0.2767f, 0.8044f, 0.5275f, 1.0000f, + 0.2789f, 0.8072f, 0.5206f, 1.0000f, + 0.2811f, 0.8099f, 0.5137f, 1.0000f, + 0.2833f, 0.8125f, 0.5069f, 1.0000f, + 0.2854f, 0.8150f, 0.5002f, 1.0000f, + 0.2876f, 0.8174f, 0.4935f, 1.0000f, + 0.2897f, 0.8197f, 0.4868f, 1.0000f, + 0.2918f, 0.8219f, 0.4801f, 1.0000f, + 0.2939f, 0.8241f, 0.4735f, 1.0000f, + 0.2960f, 0.8262f, 0.4668f, 1.0000f, + 0.2981f, 0.8283f, 0.4602f, 1.0000f, + 0.3003f, 0.8304f, 0.4536f, 1.0000f, + 0.3024f, 0.8324f, 0.4471f, 1.0000f, + 0.3045f, 0.8344f, 0.4405f, 1.0000f, + 0.3066f, 0.8365f, 0.4340f, 1.0000f, + 0.3088f, 0.8385f, 0.4276f, 1.0000f, + 0.3110f, 0.8406f, 0.4211f, 1.0000f, + 0.3131f, 0.8427f, 0.4147f, 1.0000f, + 0.3153f, 0.8448f, 0.4083f, 1.0000f, + 0.3176f, 0.8470f, 0.4019f, 1.0000f, + 0.3198f, 0.8492f, 0.3956f, 1.0000f, + 0.3220f, 0.8515f, 0.3890f, 1.0000f, + 0.3242f, 0.8539f, 0.3818f, 1.0000f, + 0.3263f, 0.8564f, 0.3742f, 1.0000f, + 0.3283f, 0.8589f, 0.3663f, 1.0000f, + 0.3304f, 0.8614f, 0.3582f, 1.0000f, + 0.3324f, 0.8640f, 0.3501f, 1.0000f, + 0.3345f, 0.8666f, 0.3420f, 1.0000f, + 0.3366f, 0.8692f, 0.3342f, 1.0000f, + 0.3388f, 0.8717f, 0.3266f, 1.0000f, + 0.3410f, 0.8742f, 0.3195f, 1.0000f, + 0.3433f, 0.8767f, 0.3129f, 1.0000f, + 0.3458f, 0.8791f, 0.3070f, 1.0000f, + 0.3483f, 0.8814f, 0.3019f, 1.0000f, + 0.3510f, 0.8837f, 0.2977f, 1.0000f, + 0.3539f, 0.8858f, 0.2946f, 1.0000f, + 0.3570f, 0.8878f, 0.2926f, 1.0000f, + 0.3602f, 0.8896f, 0.2919f, 1.0000f, + 0.3638f, 0.8914f, 0.2920f, 1.0000f, + 0.3677f, 0.8931f, 0.2921f, 1.0000f, + 0.3720f, 0.8948f, 0.2923f, 1.0000f, + 0.3766f, 0.8964f, 0.2927f, 1.0000f, + 0.3816f, 0.8980f, 0.2931f, 1.0000f, + 0.3868f, 0.8996f, 0.2936f, 1.0000f, + 0.3924f, 0.9012f, 0.2941f, 1.0000f, + 0.3981f, 0.9026f, 0.2947f, 1.0000f, + 0.4041f, 0.9041f, 0.2954f, 1.0000f, + 0.4102f, 0.9055f, 0.2961f, 1.0000f, + 0.4166f, 0.9068f, 0.2968f, 1.0000f, + 0.4231f, 0.9081f, 0.2976f, 1.0000f, + 0.4297f, 0.9093f, 0.2984f, 1.0000f, + 0.4364f, 0.9105f, 0.2992f, 1.0000f, + 0.4431f, 0.9116f, 0.3001f, 1.0000f, + 0.4500f, 0.9126f, 0.3009f, 1.0000f, + 0.4568f, 0.9136f, 0.3018f, 1.0000f, + 0.4639f, 0.9145f, 0.3028f, 1.0000f, + 0.4716f, 0.9155f, 0.3040f, 1.0000f, + 0.4797f, 0.9165f, 0.3054f, 1.0000f, + 0.4882f, 0.9175f, 0.3070f, 1.0000f, + 0.4970f, 0.9184f, 0.3087f, 1.0000f, + 0.5061f, 0.9194f, 0.3105f, 1.0000f, + 0.5154f, 0.9203f, 0.3124f, 1.0000f, + 0.5247f, 0.9211f, 0.3144f, 1.0000f, + 0.5342f, 0.9219f, 0.3164f, 1.0000f, + 0.5436f, 0.9227f, 0.3184f, 1.0000f, + 0.5529f, 0.9234f, 0.3203f, 1.0000f, + 0.5621f, 0.9240f, 0.3222f, 1.0000f, + 0.5710f, 0.9245f, 0.3239f, 1.0000f, + 0.5797f, 0.9249f, 0.3256f, 1.0000f, + 0.5880f, 0.9252f, 0.3271f, 1.0000f, + 0.5959f, 0.9254f, 0.3284f, 1.0000f, + 0.6033f, 0.9255f, 0.3295f, 1.0000f, + 0.6103f, 0.9255f, 0.3304f, 1.0000f, + 0.6172f, 0.9255f, 0.3313f, 1.0000f, + 0.6238f, 0.9255f, 0.3322f, 1.0000f, + 0.6303f, 0.9255f, 0.3330f, 1.0000f, + 0.6366f, 0.9255f, 0.3337f, 1.0000f, + 0.6428f, 0.9255f, 0.3344f, 1.0000f, + 0.6489f, 0.9255f, 0.3351f, 1.0000f, + 0.6549f, 0.9255f, 0.3358f, 1.0000f, + 0.6608f, 0.9255f, 0.3364f, 1.0000f, + 0.6666f, 0.9255f, 0.3370f, 1.0000f, + 0.6723f, 0.9255f, 0.3376f, 1.0000f, + 0.6781f, 0.9255f, 0.3382f, 1.0000f, + 0.6838f, 0.9255f, 0.3388f, 1.0000f, + 0.6895f, 0.9255f, 0.3394f, 1.0000f, + 0.6951f, 0.9255f, 0.3401f, 1.0000f, + 0.7009f, 0.9255f, 0.3407f, 1.0000f, + 0.7066f, 0.9255f, 0.3414f, 1.0000f, + 0.7124f, 0.9255f, 0.3421f, 1.0000f, + 0.7181f, 0.9255f, 0.3428f, 1.0000f, + 0.7238f, 0.9255f, 0.3435f, 1.0000f, + 0.7294f, 0.9255f, 0.3441f, 1.0000f, + 0.7351f, 0.9255f, 0.3448f, 1.0000f, + 0.7407f, 0.9255f, 0.3455f, 1.0000f, + 0.7462f, 0.9255f, 0.3462f, 1.0000f, + 0.7518f, 0.9255f, 0.3469f, 1.0000f, + 0.7573f, 0.9255f, 0.3475f, 1.0000f, + 0.7627f, 0.9255f, 0.3482f, 1.0000f, + 0.7681f, 0.9255f, 0.3489f, 1.0000f, + 0.7735f, 0.9255f, 0.3496f, 1.0000f, + 0.7789f, 0.9255f, 0.3502f, 1.0000f, + 0.7842f, 0.9255f, 0.3509f, 1.0000f, + 0.7895f, 0.9255f, 0.3516f, 1.0000f, + 0.7948f, 0.9255f, 0.3522f, 1.0000f, + 0.8000f, 0.9255f, 0.3529f, 1.0000f, }; float cmap_heat[] = { - 0.000000, 0.000000, 0.000000, 1.0, - 0.003660, 0.000000, 0.000000, 1.0, - 0.007320, 0.000000, 0.000000, 1.0, - 0.014118, 0.000000, 0.000000, 1.0, - 0.018562, 0.000000, 0.000000, 1.0, - 0.024837, 0.000000, 0.000000, 1.0, - 0.029804, 0.000000, 0.000000, 1.0, - 0.035556, 0.000000, 0.000000, 1.0, - 0.041046, 0.000000, 0.000000, 1.0, - 0.046275, 0.000000, 0.000000, 1.0, - 0.053595, 0.000000, 0.000000, 1.0, - 0.060915, 0.000000, 0.000000, 1.0, - 0.067451, 0.000000, 0.000000, 1.0, - 0.071634, 0.000000, 0.000000, 1.0, - 0.078693, 0.000000, 0.000000, 1.0, - 0.082353, 0.000000, 0.000000, 1.0, - 0.089673, 0.000000, 0.000000, 1.0, - 0.093595, 0.000000, 0.000000, 1.0, - 0.100392, 0.000000, 0.000000, 1.0, - 0.104837, 0.000000, 0.000000, 1.0, - 0.108497, 0.000000, 0.000000, 1.0, - 0.114510, 0.000000, 0.000000, 1.0, - 0.119739, 0.000000, 0.000000, 1.0, - 0.125229, 0.000000, 0.000000, 1.0, - 0.130980, 0.000000, 0.000000, 1.0, - 0.135948, 0.000000, 0.000000, 1.0, - 0.142222, 0.000000, 0.000000, 1.0, - 0.146667, 0.000000, 0.000000, 1.0, - 0.153464, 0.000000, 0.000000, 1.0, - 0.157386, 0.000000, 0.000000, 1.0, - 0.164706, 0.000000, 0.000000, 1.0, - 0.168366, 0.000000, 0.000000, 1.0, - 0.178824, 0.000000, 0.000000, 1.0, - 0.183529, 0.000000, 0.000000, 1.0, - 0.190065, 0.000000, 0.000000, 1.0, - 0.194771, 0.000000, 0.000000, 1.0, - 0.200784, 0.000000, 0.000000, 1.0, - 0.206013, 0.000000, 0.000000, 1.0, - 0.211503, 0.000000, 0.000000, 1.0, - 0.217255, 0.000000, 0.000000, 1.0, - 0.220915, 0.000000, 0.000000, 1.0, - 0.225621, 0.000000, 0.000000, 1.0, - 0.232157, 0.000000, 0.000000, 1.0, - 0.236340, 0.000000, 0.000000, 1.0, - 0.243399, 0.000000, 0.000000, 1.0, - 0.247059, 0.000000, 0.000000, 1.0, - 0.254379, 0.000000, 0.000000, 1.0, - 0.258301, 0.000000, 0.000000, 1.0, - 0.265098, 0.000000, 0.000000, 1.0, - 0.269542, 0.000000, 0.000000, 1.0, - 0.273203, 0.000000, 0.000000, 1.0, - 0.279216, 0.000000, 0.000000, 1.0, - 0.284444, 0.000000, 0.000000, 1.0, - 0.291765, 0.000000, 0.000000, 1.0, - 0.301176, 0.000000, 0.000000, 1.0, - 0.307190, 0.000000, 0.000000, 1.0, - 0.311895, 0.000000, 0.000000, 1.0, - 0.318431, 0.000000, 0.000000, 1.0, - 0.322614, 0.000000, 0.000000, 1.0, - 0.329673, 0.000000, 0.000000, 1.0, - 0.333333, 0.000000, 0.000000, 1.0, - 0.336993, 0.000000, 0.000000, 1.0, - 0.344052, 0.000000, 0.000000, 1.0, - 0.348235, 0.000000, 0.000000, 1.0, - 0.357647, 0.000000, 0.000000, 1.0, - 0.366013, 0.000000, 0.000000, 1.0, - 0.370980, 0.000000, 0.000000, 1.0, - 0.376732, 0.000000, 0.000000, 1.0, - 0.382222, 0.000000, 0.000000, 1.0, - 0.385882, 0.000000, 0.000000, 1.0, - 0.390850, 0.000000, 0.000000, 1.0, - 0.397124, 0.000000, 0.000000, 1.0, - 0.401569, 0.000000, 0.000000, 1.0, - 0.408366, 0.000000, 0.000000, 1.0, - 0.412549, 0.000000, 0.000000, 1.0, - 0.423529, 0.000000, 0.000000, 1.0, - 0.430850, 0.000000, 0.000000, 1.0, - 0.434771, 0.000000, 0.000000, 1.0, - 0.441569, 0.000000, 0.000000, 1.0, - 0.446013, 0.000000, 0.000000, 1.0, - 0.449673, 0.000000, 0.000000, 1.0, - 0.455686, 0.000000, 0.000000, 1.0, - 0.460915, 0.000000, 0.000000, 1.0, - 0.466405, 0.000000, 0.000000, 1.0, - 0.472157, 0.000000, 0.000000, 1.0, - 0.477124, 0.000000, 0.000000, 1.0, - 0.483399, 0.000000, 0.000000, 1.0, - 0.487843, 0.000000, 0.000000, 1.0, - 0.494641, 0.000000, 0.000000, 1.0, - 0.498301, 0.000000, 0.000000, 1.0, - 0.501961, 0.000000, 0.000000, 1.0, - 0.509281, 0.000000, 0.000000, 1.0, - 0.513203, 0.000000, 0.000000, 1.0, - 0.520000, 0.000000, 0.000000, 1.0, - 0.524444, 0.000000, 0.000000, 1.0, - 0.530719, 0.000000, 0.000000, 1.0, - 0.540392, 0.000000, 0.000000, 1.0, - 0.547190, 0.000000, 0.000000, 1.0, - 0.550850, 0.000000, 0.000000, 1.0, - 0.556078, 0.000000, 0.000000, 1.0, - 0.562092, 0.000000, 0.000000, 1.0, - 0.566797, 0.000000, 0.000000, 1.0, - 0.573333, 0.000000, 0.000000, 1.0, - 0.577516, 0.000000, 0.000000, 1.0, - 0.584575, 0.000000, 0.000000, 1.0, - 0.588235, 0.000000, 0.000000, 1.0, - 0.595556, 0.000000, 0.000000, 1.0, - 0.599477, 0.000000, 0.000000, 1.0, - 0.606275, 0.000000, 0.000000, 1.0, - 0.610719, 0.000000, 0.000000, 1.0, - 0.614379, 0.000000, 0.000000, 1.0, - 0.620392, 0.000000, 0.000000, 1.0, - 0.625621, 0.000000, 0.000000, 1.0, - 0.631111, 0.000000, 0.000000, 1.0, - 0.636863, 0.000000, 0.000000, 1.0, - 0.641830, 0.000000, 0.000000, 1.0, - 0.648105, 0.000000, 0.000000, 1.0, - 0.653333, 0.000000, 0.000000, 1.0, - 0.663268, 0.000000, 0.000000, 1.0, - 0.667190, 0.000000, 0.000000, 1.0, - 0.674510, 0.000000, 0.000000, 1.0, - 0.678170, 0.000000, 0.000000, 1.0, - 0.685229, 0.003399, 0.000000, 1.0, - 0.689412, 0.010196, 0.000000, 1.0, - 0.695948, 0.017516, 0.000000, 1.0, - 0.700654, 0.024837, 0.000000, 1.0, - 0.706667, 0.032157, 0.000000, 1.0, - 0.711895, 0.039477, 0.000000, 1.0, - 0.719216, 0.050457, 0.000000, 1.0, - 0.727059, 0.061961, 0.000000, 1.0, - 0.732026, 0.067974, 0.000000, 1.0, - 0.738301, 0.072680, 0.000000, 1.0, - 0.742745, 0.080000, 0.000000, 1.0, - 0.749542, 0.087320, 0.000000, 1.0, - 0.753464, 0.094641, 0.000000, 1.0, - 0.760784, 0.101961, 0.000000, 1.0, - 0.764444, 0.109281, 0.000000, 1.0, - 0.771503, 0.116601, 0.000000, 1.0, - 0.775686, 0.123922, 0.000000, 1.0, - 0.785098, 0.134118, 0.000000, 1.0, - 0.790850, 0.142484, 0.000000, 1.0, - 0.796863, 0.149804, 0.000000, 1.0, - 0.802092, 0.157124, 0.000000, 1.0, - 0.807582, 0.164444, 0.000000, 1.0, - 0.813333, 0.171765, 0.000000, 1.0, - 0.818301, 0.179085, 0.000000, 1.0, - 0.824575, 0.186405, 0.000000, 1.0, - 0.828235, 0.193725, 0.000000, 1.0, - 0.832418, 0.200523, 0.000000, 1.0, - 0.839477, 0.204444, 0.000000, 1.0, - 0.843137, 0.211765, 0.000000, 1.0, - 0.850458, 0.219085, 0.000000, 1.0, - 0.854379, 0.226405, 0.000000, 1.0, - 0.861176, 0.233725, 0.000000, 1.0, - 0.865621, 0.241046, 0.000000, 1.0, - 0.871895, 0.248366, 0.000000, 1.0, - 0.876863, 0.255686, 0.000000, 1.0, - 0.882614, 0.263007, 0.000000, 1.0, - 0.888105, 0.268497, 0.000000, 1.0, - 0.891765, 0.273725, 0.000000, 1.0, - 0.898039, 0.283660, 0.000000, 1.0, - 0.907974, 0.296209, 0.000000, 1.0, - 0.914510, 0.303529, 0.000000, 1.0, - 0.918693, 0.310850, 0.000000, 1.0, - 0.925752, 0.318170, 0.000000, 1.0, - 0.929412, 0.325490, 0.000000, 1.0, - 0.936732, 0.332810, 0.000000, 1.0, - 0.940654, 0.336732, 0.000000, 1.0, - 0.944314, 0.343529, 0.000000, 1.0, - 0.950850, 0.350850, 0.000000, 1.0, - 0.955556, 0.358170, 0.000000, 1.0, - 0.961569, 0.365490, 0.000000, 1.0, - 0.966797, 0.372810, 0.000000, 1.0, - 0.972288, 0.380131, 0.000000, 1.0, - 0.978039, 0.387451, 0.000000, 1.0, - 0.983007, 0.394771, 0.000000, 1.0, - 0.989281, 0.401046, 0.000000, 1.0, - 0.993726, 0.405490, 0.000000, 1.0, - 1.000000, 0.412810, 0.000000, 1.0, - 1.000000, 0.420131, 0.000000, 1.0, - 1.000000, 0.427451, 0.000000, 1.0, - 1.000000, 0.434771, 0.000000, 1.0, - 1.000000, 0.448889, 0.000000, 1.0, - 1.000000, 0.457255, 0.000000, 1.0, - 1.000000, 0.464575, 0.000000, 1.0, - 1.000000, 0.469281, 0.000000, 1.0, - 1.000000, 0.475294, 0.000000, 1.0, - 1.000000, 0.482614, 0.000000, 1.0, - 1.000000, 0.489935, 0.000000, 1.0, - 1.000000, 0.497255, 0.000000, 1.0, - 1.000000, 0.504575, 0.000000, 1.0, - 1.000000, 0.511895, 0.000000, 1.0, - 1.000000, 0.520784, 0.005490, 1.0, - 1.000000, 0.533856, 0.029542, 1.0, - 1.000000, 0.537778, 0.044183, 1.0, - 1.000000, 0.545098, 0.058823, 1.0, - 1.000000, 0.552418, 0.073464, 1.0, - 1.000000, 0.559739, 0.088105, 1.0, - 1.000000, 0.567059, 0.102745, 1.0, - 1.000000, 0.574379, 0.117386, 1.0, - 1.000000, 0.581699, 0.132026, 1.0, - 1.000000, 0.589020, 0.146667, 1.0, - 1.000000, 0.596340, 0.161307, 1.0, - 1.000000, 0.605490, 0.183268, 1.0, - 1.000000, 0.614902, 0.204706, 1.0, - 1.000000, 0.622222, 0.216993, 1.0, - 1.000000, 0.629542, 0.231634, 1.0, - 1.000000, 0.636863, 0.246275, 1.0, - 1.000000, 0.644183, 0.260915, 1.0, - 1.000000, 0.651503, 0.275556, 1.0, - 1.000000, 0.658824, 0.290196, 1.0, - 1.000000, 0.666144, 0.304837, 1.0, - 1.000000, 0.670065, 0.319477, 1.0, - 1.000000, 0.676863, 0.334118, 1.0, - 1.000000, 0.684183, 0.348758, 1.0, - 1.000000, 0.691503, 0.363399, 1.0, - 1.000000, 0.698824, 0.378039, 1.0, - 1.000000, 0.706144, 0.392680, 1.0, - 1.000000, 0.713464, 0.405490, 1.0, - 1.000000, 0.720784, 0.418039, 1.0, - 1.000000, 0.728105, 0.432680, 1.0, - 1.000000, 0.734379, 0.447320, 1.0, - 1.000000, 0.738824, 0.461961, 1.0, - 1.000000, 0.746144, 0.476601, 1.0, - 1.000000, 0.753987, 0.492288, 1.0, - 1.000000, 0.768627, 0.521569, 1.0, - 1.000000, 0.775948, 0.536209, 1.0, - 1.000000, 0.783268, 0.550850, 1.0, - 1.000000, 0.790588, 0.565490, 1.0, - 1.000000, 0.797909, 0.580131, 1.0, - 1.000000, 0.802614, 0.594771, 1.0, - 1.000000, 0.808627, 0.607059, 1.0, - 1.000000, 0.815948, 0.620131, 1.0, - 1.000000, 0.823268, 0.634771, 1.0, - 1.000000, 0.830588, 0.649412, 1.0, - 1.000000, 0.837909, 0.664052, 1.0, - 1.000000, 0.845229, 0.678693, 1.0, - 1.000000, 0.852549, 0.693333, 1.0, - 1.000000, 0.859869, 0.707974, 1.0, - 1.000000, 0.866928, 0.722614, 1.0, - 1.000000, 0.870588, 0.737255, 1.0, - 1.000000, 0.877909, 0.751896, 1.0, - 1.000000, 0.885229, 0.766536, 1.0, - 1.000000, 0.892549, 0.781177, 1.0, - 1.000000, 0.899869, 0.795817, 1.0, - 1.000000, 0.907190, 0.807843, 1.0, - 1.000000, 0.919216, 0.830588, 1.0, - 1.000000, 0.929673, 0.851503, 1.0, - 1.000000, 0.935163, 0.866144, 1.0, - 1.000000, 0.940392, 0.880784, 1.0, - 1.000000, 0.947712, 0.895425, 1.0, - 1.000000, 0.955033, 0.910065, 1.0, - 1.000000, 0.962353, 0.924706, 1.0, - 1.000000, 0.969673, 0.939346, 1.0, - 1.000000, 0.976994, 0.953987, 1.0, - 1.000000, 0.984314, 0.968627, 1.0, + 0.000000f, 0.000000f, 0.000000f, 1.0f, + 0.003660f, 0.000000f, 0.000000f, 1.0f, + 0.007320f, 0.000000f, 0.000000f, 1.0f, + 0.014118f, 0.000000f, 0.000000f, 1.0f, + 0.018562f, 0.000000f, 0.000000f, 1.0f, + 0.024837f, 0.000000f, 0.000000f, 1.0f, + 0.029804f, 0.000000f, 0.000000f, 1.0f, + 0.035556f, 0.000000f, 0.000000f, 1.0f, + 0.041046f, 0.000000f, 0.000000f, 1.0f, + 0.046275f, 0.000000f, 0.000000f, 1.0f, + 0.053595f, 0.000000f, 0.000000f, 1.0f, + 0.060915f, 0.000000f, 0.000000f, 1.0f, + 0.067451f, 0.000000f, 0.000000f, 1.0f, + 0.071634f, 0.000000f, 0.000000f, 1.0f, + 0.078693f, 0.000000f, 0.000000f, 1.0f, + 0.082353f, 0.000000f, 0.000000f, 1.0f, + 0.089673f, 0.000000f, 0.000000f, 1.0f, + 0.093595f, 0.000000f, 0.000000f, 1.0f, + 0.100392f, 0.000000f, 0.000000f, 1.0f, + 0.104837f, 0.000000f, 0.000000f, 1.0f, + 0.108497f, 0.000000f, 0.000000f, 1.0f, + 0.114510f, 0.000000f, 0.000000f, 1.0f, + 0.119739f, 0.000000f, 0.000000f, 1.0f, + 0.125229f, 0.000000f, 0.000000f, 1.0f, + 0.130980f, 0.000000f, 0.000000f, 1.0f, + 0.135948f, 0.000000f, 0.000000f, 1.0f, + 0.142222f, 0.000000f, 0.000000f, 1.0f, + 0.146667f, 0.000000f, 0.000000f, 1.0f, + 0.153464f, 0.000000f, 0.000000f, 1.0f, + 0.157386f, 0.000000f, 0.000000f, 1.0f, + 0.164706f, 0.000000f, 0.000000f, 1.0f, + 0.168366f, 0.000000f, 0.000000f, 1.0f, + 0.178824f, 0.000000f, 0.000000f, 1.0f, + 0.183529f, 0.000000f, 0.000000f, 1.0f, + 0.190065f, 0.000000f, 0.000000f, 1.0f, + 0.194771f, 0.000000f, 0.000000f, 1.0f, + 0.200784f, 0.000000f, 0.000000f, 1.0f, + 0.206013f, 0.000000f, 0.000000f, 1.0f, + 0.211503f, 0.000000f, 0.000000f, 1.0f, + 0.217255f, 0.000000f, 0.000000f, 1.0f, + 0.220915f, 0.000000f, 0.000000f, 1.0f, + 0.225621f, 0.000000f, 0.000000f, 1.0f, + 0.232157f, 0.000000f, 0.000000f, 1.0f, + 0.236340f, 0.000000f, 0.000000f, 1.0f, + 0.243399f, 0.000000f, 0.000000f, 1.0f, + 0.247059f, 0.000000f, 0.000000f, 1.0f, + 0.254379f, 0.000000f, 0.000000f, 1.0f, + 0.258301f, 0.000000f, 0.000000f, 1.0f, + 0.265098f, 0.000000f, 0.000000f, 1.0f, + 0.269542f, 0.000000f, 0.000000f, 1.0f, + 0.273203f, 0.000000f, 0.000000f, 1.0f, + 0.279216f, 0.000000f, 0.000000f, 1.0f, + 0.284444f, 0.000000f, 0.000000f, 1.0f, + 0.291765f, 0.000000f, 0.000000f, 1.0f, + 0.301176f, 0.000000f, 0.000000f, 1.0f, + 0.307190f, 0.000000f, 0.000000f, 1.0f, + 0.311895f, 0.000000f, 0.000000f, 1.0f, + 0.318431f, 0.000000f, 0.000000f, 1.0f, + 0.322614f, 0.000000f, 0.000000f, 1.0f, + 0.329673f, 0.000000f, 0.000000f, 1.0f, + 0.333333f, 0.000000f, 0.000000f, 1.0f, + 0.336993f, 0.000000f, 0.000000f, 1.0f, + 0.344052f, 0.000000f, 0.000000f, 1.0f, + 0.348235f, 0.000000f, 0.000000f, 1.0f, + 0.357647f, 0.000000f, 0.000000f, 1.0f, + 0.366013f, 0.000000f, 0.000000f, 1.0f, + 0.370980f, 0.000000f, 0.000000f, 1.0f, + 0.376732f, 0.000000f, 0.000000f, 1.0f, + 0.382222f, 0.000000f, 0.000000f, 1.0f, + 0.385882f, 0.000000f, 0.000000f, 1.0f, + 0.390850f, 0.000000f, 0.000000f, 1.0f, + 0.397124f, 0.000000f, 0.000000f, 1.0f, + 0.401569f, 0.000000f, 0.000000f, 1.0f, + 0.408366f, 0.000000f, 0.000000f, 1.0f, + 0.412549f, 0.000000f, 0.000000f, 1.0f, + 0.423529f, 0.000000f, 0.000000f, 1.0f, + 0.430850f, 0.000000f, 0.000000f, 1.0f, + 0.434771f, 0.000000f, 0.000000f, 1.0f, + 0.441569f, 0.000000f, 0.000000f, 1.0f, + 0.446013f, 0.000000f, 0.000000f, 1.0f, + 0.449673f, 0.000000f, 0.000000f, 1.0f, + 0.455686f, 0.000000f, 0.000000f, 1.0f, + 0.460915f, 0.000000f, 0.000000f, 1.0f, + 0.466405f, 0.000000f, 0.000000f, 1.0f, + 0.472157f, 0.000000f, 0.000000f, 1.0f, + 0.477124f, 0.000000f, 0.000000f, 1.0f, + 0.483399f, 0.000000f, 0.000000f, 1.0f, + 0.487843f, 0.000000f, 0.000000f, 1.0f, + 0.494641f, 0.000000f, 0.000000f, 1.0f, + 0.498301f, 0.000000f, 0.000000f, 1.0f, + 0.501961f, 0.000000f, 0.000000f, 1.0f, + 0.509281f, 0.000000f, 0.000000f, 1.0f, + 0.513203f, 0.000000f, 0.000000f, 1.0f, + 0.520000f, 0.000000f, 0.000000f, 1.0f, + 0.524444f, 0.000000f, 0.000000f, 1.0f, + 0.530719f, 0.000000f, 0.000000f, 1.0f, + 0.540392f, 0.000000f, 0.000000f, 1.0f, + 0.547190f, 0.000000f, 0.000000f, 1.0f, + 0.550850f, 0.000000f, 0.000000f, 1.0f, + 0.556078f, 0.000000f, 0.000000f, 1.0f, + 0.562092f, 0.000000f, 0.000000f, 1.0f, + 0.566797f, 0.000000f, 0.000000f, 1.0f, + 0.573333f, 0.000000f, 0.000000f, 1.0f, + 0.577516f, 0.000000f, 0.000000f, 1.0f, + 0.584575f, 0.000000f, 0.000000f, 1.0f, + 0.588235f, 0.000000f, 0.000000f, 1.0f, + 0.595556f, 0.000000f, 0.000000f, 1.0f, + 0.599477f, 0.000000f, 0.000000f, 1.0f, + 0.606275f, 0.000000f, 0.000000f, 1.0f, + 0.610719f, 0.000000f, 0.000000f, 1.0f, + 0.614379f, 0.000000f, 0.000000f, 1.0f, + 0.620392f, 0.000000f, 0.000000f, 1.0f, + 0.625621f, 0.000000f, 0.000000f, 1.0f, + 0.631111f, 0.000000f, 0.000000f, 1.0f, + 0.636863f, 0.000000f, 0.000000f, 1.0f, + 0.641830f, 0.000000f, 0.000000f, 1.0f, + 0.648105f, 0.000000f, 0.000000f, 1.0f, + 0.653333f, 0.000000f, 0.000000f, 1.0f, + 0.663268f, 0.000000f, 0.000000f, 1.0f, + 0.667190f, 0.000000f, 0.000000f, 1.0f, + 0.674510f, 0.000000f, 0.000000f, 1.0f, + 0.678170f, 0.000000f, 0.000000f, 1.0f, + 0.685229f, 0.003399f, 0.000000f, 1.0f, + 0.689412f, 0.010196f, 0.000000f, 1.0f, + 0.695948f, 0.017516f, 0.000000f, 1.0f, + 0.700654f, 0.024837f, 0.000000f, 1.0f, + 0.706667f, 0.032157f, 0.000000f, 1.0f, + 0.711895f, 0.039477f, 0.000000f, 1.0f, + 0.719216f, 0.050457f, 0.000000f, 1.0f, + 0.727059f, 0.061961f, 0.000000f, 1.0f, + 0.732026f, 0.067974f, 0.000000f, 1.0f, + 0.738301f, 0.072680f, 0.000000f, 1.0f, + 0.742745f, 0.080000f, 0.000000f, 1.0f, + 0.749542f, 0.087320f, 0.000000f, 1.0f, + 0.753464f, 0.094641f, 0.000000f, 1.0f, + 0.760784f, 0.101961f, 0.000000f, 1.0f, + 0.764444f, 0.109281f, 0.000000f, 1.0f, + 0.771503f, 0.116601f, 0.000000f, 1.0f, + 0.775686f, 0.123922f, 0.000000f, 1.0f, + 0.785098f, 0.134118f, 0.000000f, 1.0f, + 0.790850f, 0.142484f, 0.000000f, 1.0f, + 0.796863f, 0.149804f, 0.000000f, 1.0f, + 0.802092f, 0.157124f, 0.000000f, 1.0f, + 0.807582f, 0.164444f, 0.000000f, 1.0f, + 0.813333f, 0.171765f, 0.000000f, 1.0f, + 0.818301f, 0.179085f, 0.000000f, 1.0f, + 0.824575f, 0.186405f, 0.000000f, 1.0f, + 0.828235f, 0.193725f, 0.000000f, 1.0f, + 0.832418f, 0.200523f, 0.000000f, 1.0f, + 0.839477f, 0.204444f, 0.000000f, 1.0f, + 0.843137f, 0.211765f, 0.000000f, 1.0f, + 0.850458f, 0.219085f, 0.000000f, 1.0f, + 0.854379f, 0.226405f, 0.000000f, 1.0f, + 0.861176f, 0.233725f, 0.000000f, 1.0f, + 0.865621f, 0.241046f, 0.000000f, 1.0f, + 0.871895f, 0.248366f, 0.000000f, 1.0f, + 0.876863f, 0.255686f, 0.000000f, 1.0f, + 0.882614f, 0.263007f, 0.000000f, 1.0f, + 0.888105f, 0.268497f, 0.000000f, 1.0f, + 0.891765f, 0.273725f, 0.000000f, 1.0f, + 0.898039f, 0.283660f, 0.000000f, 1.0f, + 0.907974f, 0.296209f, 0.000000f, 1.0f, + 0.914510f, 0.303529f, 0.000000f, 1.0f, + 0.918693f, 0.310850f, 0.000000f, 1.0f, + 0.925752f, 0.318170f, 0.000000f, 1.0f, + 0.929412f, 0.325490f, 0.000000f, 1.0f, + 0.936732f, 0.332810f, 0.000000f, 1.0f, + 0.940654f, 0.336732f, 0.000000f, 1.0f, + 0.944314f, 0.343529f, 0.000000f, 1.0f, + 0.950850f, 0.350850f, 0.000000f, 1.0f, + 0.955556f, 0.358170f, 0.000000f, 1.0f, + 0.961569f, 0.365490f, 0.000000f, 1.0f, + 0.966797f, 0.372810f, 0.000000f, 1.0f, + 0.972288f, 0.380131f, 0.000000f, 1.0f, + 0.978039f, 0.387451f, 0.000000f, 1.0f, + 0.983007f, 0.394771f, 0.000000f, 1.0f, + 0.989281f, 0.401046f, 0.000000f, 1.0f, + 0.993726f, 0.405490f, 0.000000f, 1.0f, + 1.000000f, 0.412810f, 0.000000f, 1.0f, + 1.000000f, 0.420131f, 0.000000f, 1.0f, + 1.000000f, 0.427451f, 0.000000f, 1.0f, + 1.000000f, 0.434771f, 0.000000f, 1.0f, + 1.000000f, 0.448889f, 0.000000f, 1.0f, + 1.000000f, 0.457255f, 0.000000f, 1.0f, + 1.000000f, 0.464575f, 0.000000f, 1.0f, + 1.000000f, 0.469281f, 0.000000f, 1.0f, + 1.000000f, 0.475294f, 0.000000f, 1.0f, + 1.000000f, 0.482614f, 0.000000f, 1.0f, + 1.000000f, 0.489935f, 0.000000f, 1.0f, + 1.000000f, 0.497255f, 0.000000f, 1.0f, + 1.000000f, 0.504575f, 0.000000f, 1.0f, + 1.000000f, 0.511895f, 0.000000f, 1.0f, + 1.000000f, 0.520784f, 0.005490f, 1.0f, + 1.000000f, 0.533856f, 0.029542f, 1.0f, + 1.000000f, 0.537778f, 0.044183f, 1.0f, + 1.000000f, 0.545098f, 0.058823f, 1.0f, + 1.000000f, 0.552418f, 0.073464f, 1.0f, + 1.000000f, 0.559739f, 0.088105f, 1.0f, + 1.000000f, 0.567059f, 0.102745f, 1.0f, + 1.000000f, 0.574379f, 0.117386f, 1.0f, + 1.000000f, 0.581699f, 0.132026f, 1.0f, + 1.000000f, 0.589020f, 0.146667f, 1.0f, + 1.000000f, 0.596340f, 0.161307f, 1.0f, + 1.000000f, 0.605490f, 0.183268f, 1.0f, + 1.000000f, 0.614902f, 0.204706f, 1.0f, + 1.000000f, 0.622222f, 0.216993f, 1.0f, + 1.000000f, 0.629542f, 0.231634f, 1.0f, + 1.000000f, 0.636863f, 0.246275f, 1.0f, + 1.000000f, 0.644183f, 0.260915f, 1.0f, + 1.000000f, 0.651503f, 0.275556f, 1.0f, + 1.000000f, 0.658824f, 0.290196f, 1.0f, + 1.000000f, 0.666144f, 0.304837f, 1.0f, + 1.000000f, 0.670065f, 0.319477f, 1.0f, + 1.000000f, 0.676863f, 0.334118f, 1.0f, + 1.000000f, 0.684183f, 0.348758f, 1.0f, + 1.000000f, 0.691503f, 0.363399f, 1.0f, + 1.000000f, 0.698824f, 0.378039f, 1.0f, + 1.000000f, 0.706144f, 0.392680f, 1.0f, + 1.000000f, 0.713464f, 0.405490f, 1.0f, + 1.000000f, 0.720784f, 0.418039f, 1.0f, + 1.000000f, 0.728105f, 0.432680f, 1.0f, + 1.000000f, 0.734379f, 0.447320f, 1.0f, + 1.000000f, 0.738824f, 0.461961f, 1.0f, + 1.000000f, 0.746144f, 0.476601f, 1.0f, + 1.000000f, 0.753987f, 0.492288f, 1.0f, + 1.000000f, 0.768627f, 0.521569f, 1.0f, + 1.000000f, 0.775948f, 0.536209f, 1.0f, + 1.000000f, 0.783268f, 0.550850f, 1.0f, + 1.000000f, 0.790588f, 0.565490f, 1.0f, + 1.000000f, 0.797909f, 0.580131f, 1.0f, + 1.000000f, 0.802614f, 0.594771f, 1.0f, + 1.000000f, 0.808627f, 0.607059f, 1.0f, + 1.000000f, 0.815948f, 0.620131f, 1.0f, + 1.000000f, 0.823268f, 0.634771f, 1.0f, + 1.000000f, 0.830588f, 0.649412f, 1.0f, + 1.000000f, 0.837909f, 0.664052f, 1.0f, + 1.000000f, 0.845229f, 0.678693f, 1.0f, + 1.000000f, 0.852549f, 0.693333f, 1.0f, + 1.000000f, 0.859869f, 0.707974f, 1.0f, + 1.000000f, 0.866928f, 0.722614f, 1.0f, + 1.000000f, 0.870588f, 0.737255f, 1.0f, + 1.000000f, 0.877909f, 0.751896f, 1.0f, + 1.000000f, 0.885229f, 0.766536f, 1.0f, + 1.000000f, 0.892549f, 0.781177f, 1.0f, + 1.000000f, 0.899869f, 0.795817f, 1.0f, + 1.000000f, 0.907190f, 0.807843f, 1.0f, + 1.000000f, 0.919216f, 0.830588f, 1.0f, + 1.000000f, 0.929673f, 0.851503f, 1.0f, + 1.000000f, 0.935163f, 0.866144f, 1.0f, + 1.000000f, 0.940392f, 0.880784f, 1.0f, + 1.000000f, 0.947712f, 0.895425f, 1.0f, + 1.000000f, 0.955033f, 0.910065f, 1.0f, + 1.000000f, 0.962353f, 0.924706f, 1.0f, + 1.000000f, 0.969673f, 0.939346f, 1.0f, + 1.000000f, 0.976994f, 0.953987f, 1.0f, + 1.000000f, 0.984314f, 0.968627f, 1.0f, }; float cmap_blue[] = { - 0.968627, 0.984314, 1.000000, 1.0, - 0.965552, 0.982345, 0.999016, 1.0, - 0.962476, 0.980377, 0.998032, 1.0, - 0.959400, 0.978408, 0.997047, 1.0, - 0.956324, 0.976440, 0.996063, 1.0, - 0.953249, 0.974471, 0.995079, 1.0, - 0.950173, 0.972503, 0.994095, 1.0, - 0.947097, 0.970534, 0.993110, 1.0, - 0.944022, 0.968566, 0.992126, 1.0, - 0.940946, 0.966597, 0.991142, 1.0, - 0.937870, 0.964629, 0.990158, 1.0, - 0.934794, 0.962661, 0.989173, 1.0, - 0.931719, 0.960692, 0.988189, 1.0, - 0.928643, 0.958724, 0.987205, 1.0, - 0.925567, 0.956755, 0.986221, 1.0, - 0.922491, 0.954787, 0.985236, 1.0, - 0.919416, 0.952818, 0.984252, 1.0, - 0.916340, 0.950850, 0.983268, 1.0, - 0.913264, 0.948881, 0.982284, 1.0, - 0.910188, 0.946913, 0.981300, 1.0, - 0.907113, 0.944944, 0.980315, 1.0, - 0.904037, 0.942976, 0.979331, 1.0, - 0.900961, 0.941007, 0.978347, 1.0, - 0.897885, 0.939039, 0.977363, 1.0, - 0.894810, 0.937070, 0.976378, 1.0, - 0.891734, 0.935102, 0.975394, 1.0, - 0.888658, 0.933133, 0.974410, 1.0, - 0.885582, 0.931165, 0.973426, 1.0, - 0.882507, 0.929196, 0.972441, 1.0, - 0.879431, 0.927228, 0.971457, 1.0, - 0.876355, 0.925260, 0.970473, 1.0, - 0.873280, 0.923291, 0.969489, 1.0, - 0.870219, 0.921323, 0.968504, 1.0, - 0.867266, 0.919354, 0.967520, 1.0, - 0.864314, 0.917386, 0.966536, 1.0, - 0.861361, 0.915417, 0.965552, 1.0, - 0.858408, 0.913449, 0.964567, 1.0, - 0.855456, 0.911480, 0.963583, 1.0, - 0.852503, 0.909512, 0.962599, 1.0, - 0.849550, 0.907543, 0.961615, 1.0, - 0.846597, 0.905575, 0.960631, 1.0, - 0.843645, 0.903606, 0.959646, 1.0, - 0.840692, 0.901638, 0.958662, 1.0, - 0.837739, 0.899669, 0.957678, 1.0, - 0.834787, 0.897701, 0.956694, 1.0, - 0.831834, 0.895732, 0.955709, 1.0, - 0.828881, 0.893764, 0.954725, 1.0, - 0.825928, 0.891795, 0.953741, 1.0, - 0.822976, 0.889827, 0.952757, 1.0, - 0.820023, 0.887859, 0.951772, 1.0, - 0.817070, 0.885890, 0.950788, 1.0, - 0.814118, 0.883922, 0.949804, 1.0, - 0.811165, 0.881953, 0.948820, 1.0, - 0.808212, 0.879985, 0.947835, 1.0, - 0.805260, 0.878016, 0.946851, 1.0, - 0.802307, 0.876048, 0.945867, 1.0, - 0.799354, 0.874079, 0.944883, 1.0, - 0.796401, 0.872111, 0.943899, 1.0, - 0.793449, 0.870142, 0.942914, 1.0, - 0.790496, 0.868174, 0.941930, 1.0, - 0.787543, 0.866205, 0.940946, 1.0, - 0.784591, 0.864237, 0.939962, 1.0, - 0.781638, 0.862268, 0.938977, 1.0, - 0.778685, 0.860300, 0.937993, 1.0, - 0.775240, 0.858301, 0.936824, 1.0, - 0.770319, 0.856209, 0.935102, 1.0, - 0.765398, 0.854118, 0.933379, 1.0, - 0.760477, 0.852026, 0.931657, 1.0, - 0.755556, 0.849935, 0.929935, 1.0, - 0.750634, 0.847843, 0.928212, 1.0, - 0.745713, 0.845752, 0.926490, 1.0, - 0.740792, 0.843660, 0.924767, 1.0, - 0.735871, 0.841569, 0.923045, 1.0, - 0.730950, 0.839477, 0.921323, 1.0, - 0.726028, 0.837386, 0.919600, 1.0, - 0.721107, 0.835294, 0.917878, 1.0, - 0.716186, 0.833203, 0.916155, 1.0, - 0.711265, 0.831111, 0.914433, 1.0, - 0.706344, 0.829020, 0.912711, 1.0, - 0.701423, 0.826928, 0.910988, 1.0, - 0.696501, 0.824837, 0.909266, 1.0, - 0.691580, 0.822745, 0.907543, 1.0, - 0.686659, 0.820654, 0.905821, 1.0, - 0.681738, 0.818562, 0.904098, 1.0, - 0.676817, 0.816471, 0.902376, 1.0, - 0.671895, 0.814379, 0.900654, 1.0, - 0.666974, 0.812288, 0.898931, 1.0, - 0.662053, 0.810196, 0.897209, 1.0, - 0.657132, 0.808105, 0.895486, 1.0, - 0.652211, 0.806013, 0.893764, 1.0, - 0.647290, 0.803922, 0.892042, 1.0, - 0.642368, 0.801830, 0.890319, 1.0, - 0.637447, 0.799739, 0.888597, 1.0, - 0.632526, 0.797647, 0.886874, 1.0, - 0.627605, 0.795556, 0.885152, 1.0, - 0.622684, 0.793464, 0.883429, 1.0, - 0.617255, 0.790865, 0.881845, 1.0, - 0.610980, 0.787420, 0.880492, 1.0, - 0.604706, 0.783975, 0.879139, 1.0, - 0.598431, 0.780531, 0.877785, 1.0, - 0.592157, 0.777086, 0.876432, 1.0, - 0.585882, 0.773641, 0.875079, 1.0, - 0.579608, 0.770196, 0.873725, 1.0, - 0.573333, 0.766751, 0.872372, 1.0, - 0.567059, 0.763306, 0.871019, 1.0, - 0.560784, 0.759862, 0.869666, 1.0, - 0.554510, 0.756417, 0.868312, 1.0, - 0.548235, 0.752972, 0.866959, 1.0, - 0.541961, 0.749527, 0.865606, 1.0, - 0.535686, 0.746082, 0.864252, 1.0, - 0.529412, 0.742637, 0.862899, 1.0, - 0.523137, 0.739193, 0.861546, 1.0, - 0.516863, 0.735748, 0.860192, 1.0, - 0.510588, 0.732303, 0.858839, 1.0, - 0.504314, 0.728858, 0.857486, 1.0, - 0.498039, 0.725413, 0.856132, 1.0, - 0.491765, 0.721968, 0.854779, 1.0, - 0.485490, 0.718524, 0.853426, 1.0, - 0.479216, 0.715079, 0.852072, 1.0, - 0.472941, 0.711634, 0.850719, 1.0, - 0.466667, 0.708189, 0.849366, 1.0, - 0.460392, 0.704744, 0.848012, 1.0, - 0.454118, 0.701300, 0.846659, 1.0, - 0.447843, 0.697855, 0.845306, 1.0, - 0.441569, 0.694410, 0.843952, 1.0, - 0.435294, 0.690965, 0.842599, 1.0, - 0.429020, 0.687520, 0.841246, 1.0, - 0.422745, 0.684075, 0.839892, 1.0, - 0.417086, 0.680631, 0.838231, 1.0, - 0.412042, 0.677186, 0.836263, 1.0, - 0.406997, 0.673741, 0.834295, 1.0, - 0.401953, 0.670296, 0.832326, 1.0, - 0.396909, 0.666851, 0.830358, 1.0, - 0.391865, 0.663406, 0.828389, 1.0, - 0.386820, 0.659962, 0.826421, 1.0, - 0.381776, 0.656517, 0.824452, 1.0, - 0.376732, 0.653072, 0.822484, 1.0, - 0.371688, 0.649627, 0.820515, 1.0, - 0.366644, 0.646182, 0.818547, 1.0, - 0.361599, 0.642737, 0.816578, 1.0, - 0.356555, 0.639293, 0.814610, 1.0, - 0.351511, 0.635848, 0.812641, 1.0, - 0.346467, 0.632403, 0.810673, 1.0, - 0.341423, 0.628958, 0.808704, 1.0, - 0.336378, 0.625513, 0.806736, 1.0, - 0.331334, 0.622068, 0.804767, 1.0, - 0.326290, 0.618624, 0.802799, 1.0, - 0.321246, 0.615179, 0.800830, 1.0, - 0.316201, 0.611734, 0.798862, 1.0, - 0.311157, 0.608289, 0.796894, 1.0, - 0.306113, 0.604844, 0.794925, 1.0, - 0.301069, 0.601399, 0.792957, 1.0, - 0.296025, 0.597955, 0.790988, 1.0, - 0.290980, 0.594510, 0.789020, 1.0, - 0.285936, 0.591065, 0.787051, 1.0, - 0.280892, 0.587620, 0.785083, 1.0, - 0.275848, 0.584175, 0.783114, 1.0, - 0.270804, 0.580731, 0.781146, 1.0, - 0.265759, 0.577286, 0.779177, 1.0, - 0.260715, 0.573841, 0.777209, 1.0, - 0.256286, 0.570012, 0.775163, 1.0, - 0.252226, 0.565952, 0.773072, 1.0, - 0.248166, 0.561892, 0.770980, 1.0, - 0.244106, 0.557832, 0.768889, 1.0, - 0.240046, 0.553772, 0.766797, 1.0, - 0.235986, 0.549712, 0.764706, 1.0, - 0.231926, 0.545652, 0.762614, 1.0, - 0.227866, 0.541592, 0.760523, 1.0, - 0.223806, 0.537532, 0.758431, 1.0, - 0.219746, 0.533472, 0.756340, 1.0, - 0.215686, 0.529412, 0.754248, 1.0, - 0.211626, 0.525352, 0.752157, 1.0, - 0.207566, 0.521292, 0.750065, 1.0, - 0.203506, 0.517232, 0.747974, 1.0, - 0.199446, 0.513172, 0.745882, 1.0, - 0.195386, 0.509112, 0.743791, 1.0, - 0.191326, 0.505052, 0.741699, 1.0, - 0.187266, 0.500992, 0.739608, 1.0, - 0.183206, 0.496932, 0.737516, 1.0, - 0.179146, 0.492872, 0.735425, 1.0, - 0.175087, 0.488812, 0.733333, 1.0, - 0.171027, 0.484752, 0.731242, 1.0, - 0.166967, 0.480692, 0.729150, 1.0, - 0.162907, 0.476632, 0.727059, 1.0, - 0.158847, 0.472572, 0.724967, 1.0, - 0.154787, 0.468512, 0.722876, 1.0, - 0.150727, 0.464452, 0.720784, 1.0, - 0.146667, 0.460392, 0.718693, 1.0, - 0.142607, 0.456332, 0.716601, 1.0, - 0.138547, 0.452272, 0.714510, 1.0, - 0.134487, 0.448212, 0.712418, 1.0, - 0.130427, 0.444152, 0.710327, 1.0, - 0.127105, 0.440185, 0.707497, 1.0, - 0.124029, 0.436248, 0.704421, 1.0, - 0.120953, 0.432311, 0.701346, 1.0, - 0.117878, 0.428374, 0.698270, 1.0, - 0.114802, 0.424437, 0.695194, 1.0, - 0.111726, 0.420500, 0.692118, 1.0, - 0.108651, 0.416563, 0.689043, 1.0, - 0.105575, 0.412626, 0.685967, 1.0, - 0.102499, 0.408689, 0.682891, 1.0, - 0.099423, 0.404752, 0.679815, 1.0, - 0.096348, 0.400815, 0.676740, 1.0, - 0.093272, 0.396878, 0.673664, 1.0, - 0.090196, 0.392941, 0.670588, 1.0, - 0.087120, 0.389004, 0.667513, 1.0, - 0.084045, 0.385067, 0.664437, 1.0, - 0.080969, 0.381130, 0.661361, 1.0, - 0.077893, 0.377193, 0.658285, 1.0, - 0.074817, 0.373256, 0.655210, 1.0, - 0.071742, 0.369320, 0.652134, 1.0, - 0.068666, 0.365383, 0.649058, 1.0, - 0.065590, 0.361446, 0.645982, 1.0, - 0.062514, 0.357509, 0.642907, 1.0, - 0.059439, 0.353572, 0.639831, 1.0, - 0.056363, 0.349635, 0.636755, 1.0, - 0.053287, 0.345698, 0.633679, 1.0, - 0.050211, 0.341761, 0.630604, 1.0, - 0.047136, 0.337824, 0.627528, 1.0, - 0.044060, 0.333887, 0.624452, 1.0, - 0.040984, 0.329950, 0.621376, 1.0, - 0.037908, 0.326013, 0.618301, 1.0, - 0.034833, 0.322076, 0.615225, 1.0, - 0.031757, 0.318139, 0.612149, 1.0, - 0.031373, 0.314095, 0.606490, 1.0, - 0.031373, 0.310035, 0.600461, 1.0, - 0.031373, 0.305975, 0.594433, 1.0, - 0.031373, 0.301915, 0.588404, 1.0, - 0.031373, 0.297855, 0.582376, 1.0, - 0.031373, 0.293795, 0.576348, 1.0, - 0.031373, 0.289735, 0.570319, 1.0, - 0.031373, 0.285675, 0.564291, 1.0, - 0.031373, 0.281615, 0.558262, 1.0, - 0.031373, 0.277555, 0.552234, 1.0, - 0.031373, 0.273495, 0.546205, 1.0, - 0.031373, 0.269435, 0.540177, 1.0, - 0.031373, 0.265375, 0.534148, 1.0, - 0.031373, 0.261315, 0.528120, 1.0, - 0.031373, 0.257255, 0.522092, 1.0, - 0.031373, 0.253195, 0.516063, 1.0, - 0.031373, 0.249135, 0.510035, 1.0, - 0.031373, 0.245075, 0.504006, 1.0, - 0.031373, 0.241015, 0.497978, 1.0, - 0.031373, 0.236955, 0.491949, 1.0, - 0.031373, 0.232895, 0.485921, 1.0, - 0.031373, 0.228835, 0.479892, 1.0, - 0.031373, 0.224775, 0.473864, 1.0, - 0.031373, 0.220715, 0.467835, 1.0, - 0.031373, 0.216655, 0.461807, 1.0, - 0.031373, 0.212595, 0.455779, 1.0, - 0.031373, 0.208535, 0.449750, 1.0, - 0.031373, 0.204475, 0.443722, 1.0, - 0.031373, 0.200415, 0.437693, 1.0, - 0.031373, 0.196355, 0.431665, 1.0, - 0.031373, 0.192295, 0.425636, 1.0, - 0.031373, 0.188235, 0.419608, 1.0, + 0.968627f, 0.984314f, 1.000000f, 1.0f, + 0.965552f, 0.982345f, 0.999016f, 1.0f, + 0.962476f, 0.980377f, 0.998032f, 1.0f, + 0.959400f, 0.978408f, 0.997047f, 1.0f, + 0.956324f, 0.976440f, 0.996063f, 1.0f, + 0.953249f, 0.974471f, 0.995079f, 1.0f, + 0.950173f, 0.972503f, 0.994095f, 1.0f, + 0.947097f, 0.970534f, 0.993110f, 1.0f, + 0.944022f, 0.968566f, 0.992126f, 1.0f, + 0.940946f, 0.966597f, 0.991142f, 1.0f, + 0.937870f, 0.964629f, 0.990158f, 1.0f, + 0.934794f, 0.962661f, 0.989173f, 1.0f, + 0.931719f, 0.960692f, 0.988189f, 1.0f, + 0.928643f, 0.958724f, 0.987205f, 1.0f, + 0.925567f, 0.956755f, 0.986221f, 1.0f, + 0.922491f, 0.954787f, 0.985236f, 1.0f, + 0.919416f, 0.952818f, 0.984252f, 1.0f, + 0.916340f, 0.950850f, 0.983268f, 1.0f, + 0.913264f, 0.948881f, 0.982284f, 1.0f, + 0.910188f, 0.946913f, 0.981300f, 1.0f, + 0.907113f, 0.944944f, 0.980315f, 1.0f, + 0.904037f, 0.942976f, 0.979331f, 1.0f, + 0.900961f, 0.941007f, 0.978347f, 1.0f, + 0.897885f, 0.939039f, 0.977363f, 1.0f, + 0.894810f, 0.937070f, 0.976378f, 1.0f, + 0.891734f, 0.935102f, 0.975394f, 1.0f, + 0.888658f, 0.933133f, 0.974410f, 1.0f, + 0.885582f, 0.931165f, 0.973426f, 1.0f, + 0.882507f, 0.929196f, 0.972441f, 1.0f, + 0.879431f, 0.927228f, 0.971457f, 1.0f, + 0.876355f, 0.925260f, 0.970473f, 1.0f, + 0.873280f, 0.923291f, 0.969489f, 1.0f, + 0.870219f, 0.921323f, 0.968504f, 1.0f, + 0.867266f, 0.919354f, 0.967520f, 1.0f, + 0.864314f, 0.917386f, 0.966536f, 1.0f, + 0.861361f, 0.915417f, 0.965552f, 1.0f, + 0.858408f, 0.913449f, 0.964567f, 1.0f, + 0.855456f, 0.911480f, 0.963583f, 1.0f, + 0.852503f, 0.909512f, 0.962599f, 1.0f, + 0.849550f, 0.907543f, 0.961615f, 1.0f, + 0.846597f, 0.905575f, 0.960631f, 1.0f, + 0.843645f, 0.903606f, 0.959646f, 1.0f, + 0.840692f, 0.901638f, 0.958662f, 1.0f, + 0.837739f, 0.899669f, 0.957678f, 1.0f, + 0.834787f, 0.897701f, 0.956694f, 1.0f, + 0.831834f, 0.895732f, 0.955709f, 1.0f, + 0.828881f, 0.893764f, 0.954725f, 1.0f, + 0.825928f, 0.891795f, 0.953741f, 1.0f, + 0.822976f, 0.889827f, 0.952757f, 1.0f, + 0.820023f, 0.887859f, 0.951772f, 1.0f, + 0.817070f, 0.885890f, 0.950788f, 1.0f, + 0.814118f, 0.883922f, 0.949804f, 1.0f, + 0.811165f, 0.881953f, 0.948820f, 1.0f, + 0.808212f, 0.879985f, 0.947835f, 1.0f, + 0.805260f, 0.878016f, 0.946851f, 1.0f, + 0.802307f, 0.876048f, 0.945867f, 1.0f, + 0.799354f, 0.874079f, 0.944883f, 1.0f, + 0.796401f, 0.872111f, 0.943899f, 1.0f, + 0.793449f, 0.870142f, 0.942914f, 1.0f, + 0.790496f, 0.868174f, 0.941930f, 1.0f, + 0.787543f, 0.866205f, 0.940946f, 1.0f, + 0.784591f, 0.864237f, 0.939962f, 1.0f, + 0.781638f, 0.862268f, 0.938977f, 1.0f, + 0.778685f, 0.860300f, 0.937993f, 1.0f, + 0.775240f, 0.858301f, 0.936824f, 1.0f, + 0.770319f, 0.856209f, 0.935102f, 1.0f, + 0.765398f, 0.854118f, 0.933379f, 1.0f, + 0.760477f, 0.852026f, 0.931657f, 1.0f, + 0.755556f, 0.849935f, 0.929935f, 1.0f, + 0.750634f, 0.847843f, 0.928212f, 1.0f, + 0.745713f, 0.845752f, 0.926490f, 1.0f, + 0.740792f, 0.843660f, 0.924767f, 1.0f, + 0.735871f, 0.841569f, 0.923045f, 1.0f, + 0.730950f, 0.839477f, 0.921323f, 1.0f, + 0.726028f, 0.837386f, 0.919600f, 1.0f, + 0.721107f, 0.835294f, 0.917878f, 1.0f, + 0.716186f, 0.833203f, 0.916155f, 1.0f, + 0.711265f, 0.831111f, 0.914433f, 1.0f, + 0.706344f, 0.829020f, 0.912711f, 1.0f, + 0.701423f, 0.826928f, 0.910988f, 1.0f, + 0.696501f, 0.824837f, 0.909266f, 1.0f, + 0.691580f, 0.822745f, 0.907543f, 1.0f, + 0.686659f, 0.820654f, 0.905821f, 1.0f, + 0.681738f, 0.818562f, 0.904098f, 1.0f, + 0.676817f, 0.816471f, 0.902376f, 1.0f, + 0.671895f, 0.814379f, 0.900654f, 1.0f, + 0.666974f, 0.812288f, 0.898931f, 1.0f, + 0.662053f, 0.810196f, 0.897209f, 1.0f, + 0.657132f, 0.808105f, 0.895486f, 1.0f, + 0.652211f, 0.806013f, 0.893764f, 1.0f, + 0.647290f, 0.803922f, 0.892042f, 1.0f, + 0.642368f, 0.801830f, 0.890319f, 1.0f, + 0.637447f, 0.799739f, 0.888597f, 1.0f, + 0.632526f, 0.797647f, 0.886874f, 1.0f, + 0.627605f, 0.795556f, 0.885152f, 1.0f, + 0.622684f, 0.793464f, 0.883429f, 1.0f, + 0.617255f, 0.790865f, 0.881845f, 1.0f, + 0.610980f, 0.787420f, 0.880492f, 1.0f, + 0.604706f, 0.783975f, 0.879139f, 1.0f, + 0.598431f, 0.780531f, 0.877785f, 1.0f, + 0.592157f, 0.777086f, 0.876432f, 1.0f, + 0.585882f, 0.773641f, 0.875079f, 1.0f, + 0.579608f, 0.770196f, 0.873725f, 1.0f, + 0.573333f, 0.766751f, 0.872372f, 1.0f, + 0.567059f, 0.763306f, 0.871019f, 1.0f, + 0.560784f, 0.759862f, 0.869666f, 1.0f, + 0.554510f, 0.756417f, 0.868312f, 1.0f, + 0.548235f, 0.752972f, 0.866959f, 1.0f, + 0.541961f, 0.749527f, 0.865606f, 1.0f, + 0.535686f, 0.746082f, 0.864252f, 1.0f, + 0.529412f, 0.742637f, 0.862899f, 1.0f, + 0.523137f, 0.739193f, 0.861546f, 1.0f, + 0.516863f, 0.735748f, 0.860192f, 1.0f, + 0.510588f, 0.732303f, 0.858839f, 1.0f, + 0.504314f, 0.728858f, 0.857486f, 1.0f, + 0.498039f, 0.725413f, 0.856132f, 1.0f, + 0.491765f, 0.721968f, 0.854779f, 1.0f, + 0.485490f, 0.718524f, 0.853426f, 1.0f, + 0.479216f, 0.715079f, 0.852072f, 1.0f, + 0.472941f, 0.711634f, 0.850719f, 1.0f, + 0.466667f, 0.708189f, 0.849366f, 1.0f, + 0.460392f, 0.704744f, 0.848012f, 1.0f, + 0.454118f, 0.701300f, 0.846659f, 1.0f, + 0.447843f, 0.697855f, 0.845306f, 1.0f, + 0.441569f, 0.694410f, 0.843952f, 1.0f, + 0.435294f, 0.690965f, 0.842599f, 1.0f, + 0.429020f, 0.687520f, 0.841246f, 1.0f, + 0.422745f, 0.684075f, 0.839892f, 1.0f, + 0.417086f, 0.680631f, 0.838231f, 1.0f, + 0.412042f, 0.677186f, 0.836263f, 1.0f, + 0.406997f, 0.673741f, 0.834295f, 1.0f, + 0.401953f, 0.670296f, 0.832326f, 1.0f, + 0.396909f, 0.666851f, 0.830358f, 1.0f, + 0.391865f, 0.663406f, 0.828389f, 1.0f, + 0.386820f, 0.659962f, 0.826421f, 1.0f, + 0.381776f, 0.656517f, 0.824452f, 1.0f, + 0.376732f, 0.653072f, 0.822484f, 1.0f, + 0.371688f, 0.649627f, 0.820515f, 1.0f, + 0.366644f, 0.646182f, 0.818547f, 1.0f, + 0.361599f, 0.642737f, 0.816578f, 1.0f, + 0.356555f, 0.639293f, 0.814610f, 1.0f, + 0.351511f, 0.635848f, 0.812641f, 1.0f, + 0.346467f, 0.632403f, 0.810673f, 1.0f, + 0.341423f, 0.628958f, 0.808704f, 1.0f, + 0.336378f, 0.625513f, 0.806736f, 1.0f, + 0.331334f, 0.622068f, 0.804767f, 1.0f, + 0.326290f, 0.618624f, 0.802799f, 1.0f, + 0.321246f, 0.615179f, 0.800830f, 1.0f, + 0.316201f, 0.611734f, 0.798862f, 1.0f, + 0.311157f, 0.608289f, 0.796894f, 1.0f, + 0.306113f, 0.604844f, 0.794925f, 1.0f, + 0.301069f, 0.601399f, 0.792957f, 1.0f, + 0.296025f, 0.597955f, 0.790988f, 1.0f, + 0.290980f, 0.594510f, 0.789020f, 1.0f, + 0.285936f, 0.591065f, 0.787051f, 1.0f, + 0.280892f, 0.587620f, 0.785083f, 1.0f, + 0.275848f, 0.584175f, 0.783114f, 1.0f, + 0.270804f, 0.580731f, 0.781146f, 1.0f, + 0.265759f, 0.577286f, 0.779177f, 1.0f, + 0.260715f, 0.573841f, 0.777209f, 1.0f, + 0.256286f, 0.570012f, 0.775163f, 1.0f, + 0.252226f, 0.565952f, 0.773072f, 1.0f, + 0.248166f, 0.561892f, 0.770980f, 1.0f, + 0.244106f, 0.557832f, 0.768889f, 1.0f, + 0.240046f, 0.553772f, 0.766797f, 1.0f, + 0.235986f, 0.549712f, 0.764706f, 1.0f, + 0.231926f, 0.545652f, 0.762614f, 1.0f, + 0.227866f, 0.541592f, 0.760523f, 1.0f, + 0.223806f, 0.537532f, 0.758431f, 1.0f, + 0.219746f, 0.533472f, 0.756340f, 1.0f, + 0.215686f, 0.529412f, 0.754248f, 1.0f, + 0.211626f, 0.525352f, 0.752157f, 1.0f, + 0.207566f, 0.521292f, 0.750065f, 1.0f, + 0.203506f, 0.517232f, 0.747974f, 1.0f, + 0.199446f, 0.513172f, 0.745882f, 1.0f, + 0.195386f, 0.509112f, 0.743791f, 1.0f, + 0.191326f, 0.505052f, 0.741699f, 1.0f, + 0.187266f, 0.500992f, 0.739608f, 1.0f, + 0.183206f, 0.496932f, 0.737516f, 1.0f, + 0.179146f, 0.492872f, 0.735425f, 1.0f, + 0.175087f, 0.488812f, 0.733333f, 1.0f, + 0.171027f, 0.484752f, 0.731242f, 1.0f, + 0.166967f, 0.480692f, 0.729150f, 1.0f, + 0.162907f, 0.476632f, 0.727059f, 1.0f, + 0.158847f, 0.472572f, 0.724967f, 1.0f, + 0.154787f, 0.468512f, 0.722876f, 1.0f, + 0.150727f, 0.464452f, 0.720784f, 1.0f, + 0.146667f, 0.460392f, 0.718693f, 1.0f, + 0.142607f, 0.456332f, 0.716601f, 1.0f, + 0.138547f, 0.452272f, 0.714510f, 1.0f, + 0.134487f, 0.448212f, 0.712418f, 1.0f, + 0.130427f, 0.444152f, 0.710327f, 1.0f, + 0.127105f, 0.440185f, 0.707497f, 1.0f, + 0.124029f, 0.436248f, 0.704421f, 1.0f, + 0.120953f, 0.432311f, 0.701346f, 1.0f, + 0.117878f, 0.428374f, 0.698270f, 1.0f, + 0.114802f, 0.424437f, 0.695194f, 1.0f, + 0.111726f, 0.420500f, 0.692118f, 1.0f, + 0.108651f, 0.416563f, 0.689043f, 1.0f, + 0.105575f, 0.412626f, 0.685967f, 1.0f, + 0.102499f, 0.408689f, 0.682891f, 1.0f, + 0.099423f, 0.404752f, 0.679815f, 1.0f, + 0.096348f, 0.400815f, 0.676740f, 1.0f, + 0.093272f, 0.396878f, 0.673664f, 1.0f, + 0.090196f, 0.392941f, 0.670588f, 1.0f, + 0.087120f, 0.389004f, 0.667513f, 1.0f, + 0.084045f, 0.385067f, 0.664437f, 1.0f, + 0.080969f, 0.381130f, 0.661361f, 1.0f, + 0.077893f, 0.377193f, 0.658285f, 1.0f, + 0.074817f, 0.373256f, 0.655210f, 1.0f, + 0.071742f, 0.369320f, 0.652134f, 1.0f, + 0.068666f, 0.365383f, 0.649058f, 1.0f, + 0.065590f, 0.361446f, 0.645982f, 1.0f, + 0.062514f, 0.357509f, 0.642907f, 1.0f, + 0.059439f, 0.353572f, 0.639831f, 1.0f, + 0.056363f, 0.349635f, 0.636755f, 1.0f, + 0.053287f, 0.345698f, 0.633679f, 1.0f, + 0.050211f, 0.341761f, 0.630604f, 1.0f, + 0.047136f, 0.337824f, 0.627528f, 1.0f, + 0.044060f, 0.333887f, 0.624452f, 1.0f, + 0.040984f, 0.329950f, 0.621376f, 1.0f, + 0.037908f, 0.326013f, 0.618301f, 1.0f, + 0.034833f, 0.322076f, 0.615225f, 1.0f, + 0.031757f, 0.318139f, 0.612149f, 1.0f, + 0.031373f, 0.314095f, 0.606490f, 1.0f, + 0.031373f, 0.310035f, 0.600461f, 1.0f, + 0.031373f, 0.305975f, 0.594433f, 1.0f, + 0.031373f, 0.301915f, 0.588404f, 1.0f, + 0.031373f, 0.297855f, 0.582376f, 1.0f, + 0.031373f, 0.293795f, 0.576348f, 1.0f, + 0.031373f, 0.289735f, 0.570319f, 1.0f, + 0.031373f, 0.285675f, 0.564291f, 1.0f, + 0.031373f, 0.281615f, 0.558262f, 1.0f, + 0.031373f, 0.277555f, 0.552234f, 1.0f, + 0.031373f, 0.273495f, 0.546205f, 1.0f, + 0.031373f, 0.269435f, 0.540177f, 1.0f, + 0.031373f, 0.265375f, 0.534148f, 1.0f, + 0.031373f, 0.261315f, 0.528120f, 1.0f, + 0.031373f, 0.257255f, 0.522092f, 1.0f, + 0.031373f, 0.253195f, 0.516063f, 1.0f, + 0.031373f, 0.249135f, 0.510035f, 1.0f, + 0.031373f, 0.245075f, 0.504006f, 1.0f, + 0.031373f, 0.241015f, 0.497978f, 1.0f, + 0.031373f, 0.236955f, 0.491949f, 1.0f, + 0.031373f, 0.232895f, 0.485921f, 1.0f, + 0.031373f, 0.228835f, 0.479892f, 1.0f, + 0.031373f, 0.224775f, 0.473864f, 1.0f, + 0.031373f, 0.220715f, 0.467835f, 1.0f, + 0.031373f, 0.216655f, 0.461807f, 1.0f, + 0.031373f, 0.212595f, 0.455779f, 1.0f, + 0.031373f, 0.208535f, 0.449750f, 1.0f, + 0.031373f, 0.204475f, 0.443722f, 1.0f, + 0.031373f, 0.200415f, 0.437693f, 1.0f, + 0.031373f, 0.196355f, 0.431665f, 1.0f, + 0.031373f, 0.192295f, 0.425636f, 1.0f, + 0.031373f, 0.188235f, 0.419608f, 1.0f, }; /// Next four colormaps: inferno, magma, plasma and viridis are matplotlib @@ -1888,1043 +1888,1043 @@ float cmap_blue[] = /// inferno perceptually uniform shades of black-red-yellow float cmap_inferno[] = { - 0.001462, 0.000466, 0.013866, 1.0, - 0.002267, 0.001270, 0.018570, 1.0, - 0.003299, 0.002249, 0.024239, 1.0, - 0.004547, 0.003392, 0.030909, 1.0, - 0.006006, 0.004692, 0.038558, 1.0, - 0.007676, 0.006136, 0.046836, 1.0, - 0.009561, 0.007713, 0.055143, 1.0, - 0.011663, 0.009417, 0.063460, 1.0, - 0.013995, 0.011225, 0.071862, 1.0, - 0.016561, 0.013136, 0.080282, 1.0, - 0.019373, 0.015133, 0.088767, 1.0, - 0.022447, 0.017199, 0.097327, 1.0, - 0.025793, 0.019331, 0.105930, 1.0, - 0.029432, 0.021503, 0.114621, 1.0, - 0.033385, 0.023702, 0.123397, 1.0, - 0.037668, 0.025921, 0.132232, 1.0, - 0.042253, 0.028139, 0.141141, 1.0, - 0.046915, 0.030324, 0.150164, 1.0, - 0.051644, 0.032474, 0.159254, 1.0, - 0.056449, 0.034569, 0.168414, 1.0, - 0.061340, 0.036590, 0.177642, 1.0, - 0.066331, 0.038504, 0.186962, 1.0, - 0.071429, 0.040294, 0.196354, 1.0, - 0.076637, 0.041905, 0.205799, 1.0, - 0.081962, 0.043328, 0.215289, 1.0, - 0.087411, 0.044556, 0.224813, 1.0, - 0.092990, 0.045583, 0.234358, 1.0, - 0.098702, 0.046402, 0.243904, 1.0, - 0.104551, 0.047008, 0.253430, 1.0, - 0.110536, 0.047399, 0.262912, 1.0, - 0.116656, 0.047574, 0.272321, 1.0, - 0.122908, 0.047536, 0.281624, 1.0, - 0.129285, 0.047293, 0.290788, 1.0, - 0.135778, 0.046856, 0.299776, 1.0, - 0.142378, 0.046242, 0.308553, 1.0, - 0.149073, 0.045468, 0.317085, 1.0, - 0.155850, 0.044559, 0.325338, 1.0, - 0.162689, 0.043554, 0.333277, 1.0, - 0.169575, 0.042489, 0.340874, 1.0, - 0.176493, 0.041402, 0.348111, 1.0, - 0.183429, 0.040329, 0.354971, 1.0, - 0.190367, 0.039309, 0.361447, 1.0, - 0.197297, 0.038400, 0.367535, 1.0, - 0.204209, 0.037632, 0.373238, 1.0, - 0.211095, 0.037030, 0.378563, 1.0, - 0.217949, 0.036615, 0.383522, 1.0, - 0.224763, 0.036405, 0.388129, 1.0, - 0.231538, 0.036405, 0.392400, 1.0, - 0.238273, 0.036621, 0.396353, 1.0, - 0.244967, 0.037055, 0.400007, 1.0, - 0.251620, 0.037705, 0.403378, 1.0, - 0.258234, 0.038571, 0.406485, 1.0, - 0.264810, 0.039647, 0.409345, 1.0, - 0.271347, 0.040922, 0.411976, 1.0, - 0.277850, 0.042353, 0.414392, 1.0, - 0.284321, 0.043933, 0.416608, 1.0, - 0.290763, 0.045644, 0.418637, 1.0, - 0.297178, 0.047470, 0.420491, 1.0, - 0.303568, 0.049396, 0.422182, 1.0, - 0.309935, 0.051407, 0.423721, 1.0, - 0.316282, 0.053490, 0.425116, 1.0, - 0.322610, 0.055634, 0.426377, 1.0, - 0.328921, 0.057827, 0.427511, 1.0, - 0.335217, 0.060060, 0.428524, 1.0, - 0.341500, 0.062325, 0.429425, 1.0, - 0.347771, 0.064616, 0.430217, 1.0, - 0.354032, 0.066925, 0.430906, 1.0, - 0.360284, 0.069247, 0.431497, 1.0, - 0.366529, 0.071579, 0.431994, 1.0, - 0.372768, 0.073915, 0.432400, 1.0, - 0.379001, 0.076253, 0.432719, 1.0, - 0.385228, 0.078591, 0.432955, 1.0, - 0.391453, 0.080927, 0.433109, 1.0, - 0.397674, 0.083257, 0.433183, 1.0, - 0.403894, 0.085580, 0.433179, 1.0, - 0.410113, 0.087896, 0.433098, 1.0, - 0.416331, 0.090203, 0.432943, 1.0, - 0.422549, 0.092501, 0.432714, 1.0, - 0.428768, 0.094790, 0.432412, 1.0, - 0.434987, 0.097069, 0.432039, 1.0, - 0.441207, 0.099338, 0.431594, 1.0, - 0.447428, 0.101597, 0.431080, 1.0, - 0.453651, 0.103848, 0.430498, 1.0, - 0.459875, 0.106089, 0.429846, 1.0, - 0.466100, 0.108322, 0.429125, 1.0, - 0.472328, 0.110547, 0.428334, 1.0, - 0.478558, 0.112764, 0.427475, 1.0, - 0.484789, 0.114974, 0.426548, 1.0, - 0.491022, 0.117179, 0.425552, 1.0, - 0.497257, 0.119379, 0.424488, 1.0, - 0.503493, 0.121575, 0.423356, 1.0, - 0.509730, 0.123769, 0.422156, 1.0, - 0.515967, 0.125960, 0.420887, 1.0, - 0.522206, 0.128150, 0.419549, 1.0, - 0.528444, 0.130341, 0.418142, 1.0, - 0.534683, 0.132534, 0.416667, 1.0, - 0.540920, 0.134729, 0.415123, 1.0, - 0.547157, 0.136929, 0.413511, 1.0, - 0.553392, 0.139134, 0.411829, 1.0, - 0.559624, 0.141346, 0.410078, 1.0, - 0.565854, 0.143567, 0.408258, 1.0, - 0.572081, 0.145797, 0.406369, 1.0, - 0.578304, 0.148039, 0.404411, 1.0, - 0.584521, 0.150294, 0.402385, 1.0, - 0.590734, 0.152563, 0.400290, 1.0, - 0.596940, 0.154848, 0.398125, 1.0, - 0.603139, 0.157151, 0.395891, 1.0, - 0.609330, 0.159474, 0.393589, 1.0, - 0.615513, 0.161817, 0.391219, 1.0, - 0.621685, 0.164184, 0.388781, 1.0, - 0.627847, 0.166575, 0.386276, 1.0, - 0.633998, 0.168992, 0.383704, 1.0, - 0.640135, 0.171438, 0.381065, 1.0, - 0.646260, 0.173914, 0.378359, 1.0, - 0.652369, 0.176421, 0.375586, 1.0, - 0.658463, 0.178962, 0.372748, 1.0, - 0.664540, 0.181539, 0.369846, 1.0, - 0.670599, 0.184153, 0.366879, 1.0, - 0.676638, 0.186807, 0.363849, 1.0, - 0.682656, 0.189501, 0.360757, 1.0, - 0.688653, 0.192239, 0.357603, 1.0, - 0.694627, 0.195021, 0.354388, 1.0, - 0.700576, 0.197851, 0.351113, 1.0, - 0.706500, 0.200728, 0.347777, 1.0, - 0.712396, 0.203656, 0.344383, 1.0, - 0.718264, 0.206636, 0.340931, 1.0, - 0.724103, 0.209670, 0.337424, 1.0, - 0.729909, 0.212759, 0.333861, 1.0, - 0.735683, 0.215906, 0.330245, 1.0, - 0.741423, 0.219112, 0.326576, 1.0, - 0.747127, 0.222378, 0.322856, 1.0, - 0.752794, 0.225706, 0.319085, 1.0, - 0.758422, 0.229097, 0.315266, 1.0, - 0.764010, 0.232554, 0.311399, 1.0, - 0.769556, 0.236077, 0.307485, 1.0, - 0.775059, 0.239667, 0.303526, 1.0, - 0.780517, 0.243327, 0.299523, 1.0, - 0.785929, 0.247056, 0.295477, 1.0, - 0.791293, 0.250856, 0.291390, 1.0, - 0.796607, 0.254728, 0.287264, 1.0, - 0.801871, 0.258674, 0.283099, 1.0, - 0.807082, 0.262692, 0.278898, 1.0, - 0.812239, 0.266786, 0.274661, 1.0, - 0.817341, 0.270954, 0.270390, 1.0, - 0.822386, 0.275197, 0.266085, 1.0, - 0.827372, 0.279517, 0.261750, 1.0, - 0.832299, 0.283913, 0.257383, 1.0, - 0.837165, 0.288385, 0.252988, 1.0, - 0.841969, 0.292933, 0.248564, 1.0, - 0.846709, 0.297559, 0.244113, 1.0, - 0.851384, 0.302260, 0.239636, 1.0, - 0.855992, 0.307038, 0.235133, 1.0, - 0.860533, 0.311892, 0.230606, 1.0, - 0.865006, 0.316822, 0.226055, 1.0, - 0.869409, 0.321827, 0.221482, 1.0, - 0.873741, 0.326906, 0.216886, 1.0, - 0.878001, 0.332060, 0.212268, 1.0, - 0.882188, 0.337287, 0.207628, 1.0, - 0.886302, 0.342586, 0.202968, 1.0, - 0.890341, 0.347957, 0.198286, 1.0, - 0.894305, 0.353399, 0.193584, 1.0, - 0.898192, 0.358911, 0.188860, 1.0, - 0.902003, 0.364492, 0.184116, 1.0, - 0.905735, 0.370140, 0.179350, 1.0, - 0.909390, 0.375856, 0.174563, 1.0, - 0.912966, 0.381636, 0.169755, 1.0, - 0.916462, 0.387481, 0.164924, 1.0, - 0.919879, 0.393389, 0.160070, 1.0, - 0.923215, 0.399359, 0.155193, 1.0, - 0.926470, 0.405389, 0.150292, 1.0, - 0.929644, 0.411479, 0.145367, 1.0, - 0.932737, 0.417627, 0.140417, 1.0, - 0.935747, 0.423831, 0.135440, 1.0, - 0.938675, 0.430091, 0.130438, 1.0, - 0.941521, 0.436405, 0.125409, 1.0, - 0.944285, 0.442772, 0.120354, 1.0, - 0.946965, 0.449191, 0.115272, 1.0, - 0.949562, 0.455660, 0.110164, 1.0, - 0.952075, 0.462178, 0.105031, 1.0, - 0.954506, 0.468744, 0.099874, 1.0, - 0.956852, 0.475356, 0.094695, 1.0, - 0.959114, 0.482014, 0.089499, 1.0, - 0.961293, 0.488716, 0.084289, 1.0, - 0.963387, 0.495462, 0.079073, 1.0, - 0.965397, 0.502249, 0.073859, 1.0, - 0.967322, 0.509078, 0.068659, 1.0, - 0.969163, 0.515946, 0.063488, 1.0, - 0.970919, 0.522853, 0.058367, 1.0, - 0.972590, 0.529798, 0.053324, 1.0, - 0.974176, 0.536780, 0.048392, 1.0, - 0.975677, 0.543798, 0.043618, 1.0, - 0.977092, 0.550850, 0.039050, 1.0, - 0.978422, 0.557937, 0.034931, 1.0, - 0.979666, 0.565057, 0.031409, 1.0, - 0.980824, 0.572209, 0.028508, 1.0, - 0.981895, 0.579392, 0.026250, 1.0, - 0.982881, 0.586606, 0.024661, 1.0, - 0.983779, 0.593849, 0.023770, 1.0, - 0.984591, 0.601122, 0.023606, 1.0, - 0.985315, 0.608422, 0.024202, 1.0, - 0.985952, 0.615750, 0.025592, 1.0, - 0.986502, 0.623105, 0.027814, 1.0, - 0.986964, 0.630485, 0.030908, 1.0, - 0.987337, 0.637890, 0.034916, 1.0, - 0.987622, 0.645320, 0.039886, 1.0, - 0.987819, 0.652773, 0.045581, 1.0, - 0.987926, 0.660250, 0.051750, 1.0, - 0.987945, 0.667748, 0.058329, 1.0, - 0.987874, 0.675267, 0.065257, 1.0, - 0.987714, 0.682807, 0.072489, 1.0, - 0.987464, 0.690366, 0.079990, 1.0, - 0.987124, 0.697944, 0.087731, 1.0, - 0.986694, 0.705540, 0.095694, 1.0, - 0.986175, 0.713153, 0.103863, 1.0, - 0.985566, 0.720782, 0.112229, 1.0, - 0.984865, 0.728427, 0.120785, 1.0, - 0.984075, 0.736087, 0.129527, 1.0, - 0.983196, 0.743758, 0.138453, 1.0, - 0.982228, 0.751442, 0.147565, 1.0, - 0.981173, 0.759135, 0.156863, 1.0, - 0.980032, 0.766837, 0.166353, 1.0, - 0.978806, 0.774545, 0.176037, 1.0, - 0.977497, 0.782258, 0.185923, 1.0, - 0.976108, 0.789974, 0.196018, 1.0, - 0.974638, 0.797692, 0.206332, 1.0, - 0.973088, 0.805409, 0.216877, 1.0, - 0.971468, 0.813122, 0.227658, 1.0, - 0.969783, 0.820825, 0.238686, 1.0, - 0.968041, 0.828515, 0.249972, 1.0, - 0.966243, 0.836191, 0.261534, 1.0, - 0.964394, 0.843848, 0.273391, 1.0, - 0.962517, 0.851476, 0.285546, 1.0, - 0.960626, 0.859069, 0.298010, 1.0, - 0.958720, 0.866624, 0.310820, 1.0, - 0.956834, 0.874129, 0.323974, 1.0, - 0.954997, 0.881569, 0.337475, 1.0, - 0.953215, 0.888942, 0.351369, 1.0, - 0.951546, 0.896226, 0.365627, 1.0, - 0.950018, 0.903409, 0.380271, 1.0, - 0.948683, 0.910473, 0.395289, 1.0, - 0.947594, 0.917399, 0.410665, 1.0, - 0.946809, 0.924168, 0.426373, 1.0, - 0.946392, 0.930761, 0.442367, 1.0, - 0.946403, 0.937159, 0.458592, 1.0, - 0.946903, 0.943348, 0.474970, 1.0, - 0.947937, 0.949318, 0.491426, 1.0, - 0.949545, 0.955063, 0.507860, 1.0, - 0.951740, 0.960587, 0.524203, 1.0, - 0.954529, 0.965896, 0.540361, 1.0, - 0.957896, 0.971003, 0.556275, 1.0, - 0.961812, 0.975924, 0.571925, 1.0, - 0.966249, 0.980678, 0.587206, 1.0, - 0.971162, 0.985282, 0.602154, 1.0, - 0.976511, 0.989753, 0.616760, 1.0, - 0.982257, 0.994109, 0.631017, 1.0, - 0.988362, 0.998364, 0.644924, 1.0, + 0.001462f, 0.000466f, 0.013866f, 1.0f, + 0.002267f, 0.001270f, 0.018570f, 1.0f, + 0.003299f, 0.002249f, 0.024239f, 1.0f, + 0.004547f, 0.003392f, 0.030909f, 1.0f, + 0.006006f, 0.004692f, 0.038558f, 1.0f, + 0.007676f, 0.006136f, 0.046836f, 1.0f, + 0.009561f, 0.007713f, 0.055143f, 1.0f, + 0.011663f, 0.009417f, 0.063460f, 1.0f, + 0.013995f, 0.011225f, 0.071862f, 1.0f, + 0.016561f, 0.013136f, 0.080282f, 1.0f, + 0.019373f, 0.015133f, 0.088767f, 1.0f, + 0.022447f, 0.017199f, 0.097327f, 1.0f, + 0.025793f, 0.019331f, 0.105930f, 1.0f, + 0.029432f, 0.021503f, 0.114621f, 1.0f, + 0.033385f, 0.023702f, 0.123397f, 1.0f, + 0.037668f, 0.025921f, 0.132232f, 1.0f, + 0.042253f, 0.028139f, 0.141141f, 1.0f, + 0.046915f, 0.030324f, 0.150164f, 1.0f, + 0.051644f, 0.032474f, 0.159254f, 1.0f, + 0.056449f, 0.034569f, 0.168414f, 1.0f, + 0.061340f, 0.036590f, 0.177642f, 1.0f, + 0.066331f, 0.038504f, 0.186962f, 1.0f, + 0.071429f, 0.040294f, 0.196354f, 1.0f, + 0.076637f, 0.041905f, 0.205799f, 1.0f, + 0.081962f, 0.043328f, 0.215289f, 1.0f, + 0.087411f, 0.044556f, 0.224813f, 1.0f, + 0.092990f, 0.045583f, 0.234358f, 1.0f, + 0.098702f, 0.046402f, 0.243904f, 1.0f, + 0.104551f, 0.047008f, 0.253430f, 1.0f, + 0.110536f, 0.047399f, 0.262912f, 1.0f, + 0.116656f, 0.047574f, 0.272321f, 1.0f, + 0.122908f, 0.047536f, 0.281624f, 1.0f, + 0.129285f, 0.047293f, 0.290788f, 1.0f, + 0.135778f, 0.046856f, 0.299776f, 1.0f, + 0.142378f, 0.046242f, 0.308553f, 1.0f, + 0.149073f, 0.045468f, 0.317085f, 1.0f, + 0.155850f, 0.044559f, 0.325338f, 1.0f, + 0.162689f, 0.043554f, 0.333277f, 1.0f, + 0.169575f, 0.042489f, 0.340874f, 1.0f, + 0.176493f, 0.041402f, 0.348111f, 1.0f, + 0.183429f, 0.040329f, 0.354971f, 1.0f, + 0.190367f, 0.039309f, 0.361447f, 1.0f, + 0.197297f, 0.038400f, 0.367535f, 1.0f, + 0.204209f, 0.037632f, 0.373238f, 1.0f, + 0.211095f, 0.037030f, 0.378563f, 1.0f, + 0.217949f, 0.036615f, 0.383522f, 1.0f, + 0.224763f, 0.036405f, 0.388129f, 1.0f, + 0.231538f, 0.036405f, 0.392400f, 1.0f, + 0.238273f, 0.036621f, 0.396353f, 1.0f, + 0.244967f, 0.037055f, 0.400007f, 1.0f, + 0.251620f, 0.037705f, 0.403378f, 1.0f, + 0.258234f, 0.038571f, 0.406485f, 1.0f, + 0.264810f, 0.039647f, 0.409345f, 1.0f, + 0.271347f, 0.040922f, 0.411976f, 1.0f, + 0.277850f, 0.042353f, 0.414392f, 1.0f, + 0.284321f, 0.043933f, 0.416608f, 1.0f, + 0.290763f, 0.045644f, 0.418637f, 1.0f, + 0.297178f, 0.047470f, 0.420491f, 1.0f, + 0.303568f, 0.049396f, 0.422182f, 1.0f, + 0.309935f, 0.051407f, 0.423721f, 1.0f, + 0.316282f, 0.053490f, 0.425116f, 1.0f, + 0.322610f, 0.055634f, 0.426377f, 1.0f, + 0.328921f, 0.057827f, 0.427511f, 1.0f, + 0.335217f, 0.060060f, 0.428524f, 1.0f, + 0.341500f, 0.062325f, 0.429425f, 1.0f, + 0.347771f, 0.064616f, 0.430217f, 1.0f, + 0.354032f, 0.066925f, 0.430906f, 1.0f, + 0.360284f, 0.069247f, 0.431497f, 1.0f, + 0.366529f, 0.071579f, 0.431994f, 1.0f, + 0.372768f, 0.073915f, 0.432400f, 1.0f, + 0.379001f, 0.076253f, 0.432719f, 1.0f, + 0.385228f, 0.078591f, 0.432955f, 1.0f, + 0.391453f, 0.080927f, 0.433109f, 1.0f, + 0.397674f, 0.083257f, 0.433183f, 1.0f, + 0.403894f, 0.085580f, 0.433179f, 1.0f, + 0.410113f, 0.087896f, 0.433098f, 1.0f, + 0.416331f, 0.090203f, 0.432943f, 1.0f, + 0.422549f, 0.092501f, 0.432714f, 1.0f, + 0.428768f, 0.094790f, 0.432412f, 1.0f, + 0.434987f, 0.097069f, 0.432039f, 1.0f, + 0.441207f, 0.099338f, 0.431594f, 1.0f, + 0.447428f, 0.101597f, 0.431080f, 1.0f, + 0.453651f, 0.103848f, 0.430498f, 1.0f, + 0.459875f, 0.106089f, 0.429846f, 1.0f, + 0.466100f, 0.108322f, 0.429125f, 1.0f, + 0.472328f, 0.110547f, 0.428334f, 1.0f, + 0.478558f, 0.112764f, 0.427475f, 1.0f, + 0.484789f, 0.114974f, 0.426548f, 1.0f, + 0.491022f, 0.117179f, 0.425552f, 1.0f, + 0.497257f, 0.119379f, 0.424488f, 1.0f, + 0.503493f, 0.121575f, 0.423356f, 1.0f, + 0.509730f, 0.123769f, 0.422156f, 1.0f, + 0.515967f, 0.125960f, 0.420887f, 1.0f, + 0.522206f, 0.128150f, 0.419549f, 1.0f, + 0.528444f, 0.130341f, 0.418142f, 1.0f, + 0.534683f, 0.132534f, 0.416667f, 1.0f, + 0.540920f, 0.134729f, 0.415123f, 1.0f, + 0.547157f, 0.136929f, 0.413511f, 1.0f, + 0.553392f, 0.139134f, 0.411829f, 1.0f, + 0.559624f, 0.141346f, 0.410078f, 1.0f, + 0.565854f, 0.143567f, 0.408258f, 1.0f, + 0.572081f, 0.145797f, 0.406369f, 1.0f, + 0.578304f, 0.148039f, 0.404411f, 1.0f, + 0.584521f, 0.150294f, 0.402385f, 1.0f, + 0.590734f, 0.152563f, 0.400290f, 1.0f, + 0.596940f, 0.154848f, 0.398125f, 1.0f, + 0.603139f, 0.157151f, 0.395891f, 1.0f, + 0.609330f, 0.159474f, 0.393589f, 1.0f, + 0.615513f, 0.161817f, 0.391219f, 1.0f, + 0.621685f, 0.164184f, 0.388781f, 1.0f, + 0.627847f, 0.166575f, 0.386276f, 1.0f, + 0.633998f, 0.168992f, 0.383704f, 1.0f, + 0.640135f, 0.171438f, 0.381065f, 1.0f, + 0.646260f, 0.173914f, 0.378359f, 1.0f, + 0.652369f, 0.176421f, 0.375586f, 1.0f, + 0.658463f, 0.178962f, 0.372748f, 1.0f, + 0.664540f, 0.181539f, 0.369846f, 1.0f, + 0.670599f, 0.184153f, 0.366879f, 1.0f, + 0.676638f, 0.186807f, 0.363849f, 1.0f, + 0.682656f, 0.189501f, 0.360757f, 1.0f, + 0.688653f, 0.192239f, 0.357603f, 1.0f, + 0.694627f, 0.195021f, 0.354388f, 1.0f, + 0.700576f, 0.197851f, 0.351113f, 1.0f, + 0.706500f, 0.200728f, 0.347777f, 1.0f, + 0.712396f, 0.203656f, 0.344383f, 1.0f, + 0.718264f, 0.206636f, 0.340931f, 1.0f, + 0.724103f, 0.209670f, 0.337424f, 1.0f, + 0.729909f, 0.212759f, 0.333861f, 1.0f, + 0.735683f, 0.215906f, 0.330245f, 1.0f, + 0.741423f, 0.219112f, 0.326576f, 1.0f, + 0.747127f, 0.222378f, 0.322856f, 1.0f, + 0.752794f, 0.225706f, 0.319085f, 1.0f, + 0.758422f, 0.229097f, 0.315266f, 1.0f, + 0.764010f, 0.232554f, 0.311399f, 1.0f, + 0.769556f, 0.236077f, 0.307485f, 1.0f, + 0.775059f, 0.239667f, 0.303526f, 1.0f, + 0.780517f, 0.243327f, 0.299523f, 1.0f, + 0.785929f, 0.247056f, 0.295477f, 1.0f, + 0.791293f, 0.250856f, 0.291390f, 1.0f, + 0.796607f, 0.254728f, 0.287264f, 1.0f, + 0.801871f, 0.258674f, 0.283099f, 1.0f, + 0.807082f, 0.262692f, 0.278898f, 1.0f, + 0.812239f, 0.266786f, 0.274661f, 1.0f, + 0.817341f, 0.270954f, 0.270390f, 1.0f, + 0.822386f, 0.275197f, 0.266085f, 1.0f, + 0.827372f, 0.279517f, 0.261750f, 1.0f, + 0.832299f, 0.283913f, 0.257383f, 1.0f, + 0.837165f, 0.288385f, 0.252988f, 1.0f, + 0.841969f, 0.292933f, 0.248564f, 1.0f, + 0.846709f, 0.297559f, 0.244113f, 1.0f, + 0.851384f, 0.302260f, 0.239636f, 1.0f, + 0.855992f, 0.307038f, 0.235133f, 1.0f, + 0.860533f, 0.311892f, 0.230606f, 1.0f, + 0.865006f, 0.316822f, 0.226055f, 1.0f, + 0.869409f, 0.321827f, 0.221482f, 1.0f, + 0.873741f, 0.326906f, 0.216886f, 1.0f, + 0.878001f, 0.332060f, 0.212268f, 1.0f, + 0.882188f, 0.337287f, 0.207628f, 1.0f, + 0.886302f, 0.342586f, 0.202968f, 1.0f, + 0.890341f, 0.347957f, 0.198286f, 1.0f, + 0.894305f, 0.353399f, 0.193584f, 1.0f, + 0.898192f, 0.358911f, 0.188860f, 1.0f, + 0.902003f, 0.364492f, 0.184116f, 1.0f, + 0.905735f, 0.370140f, 0.179350f, 1.0f, + 0.909390f, 0.375856f, 0.174563f, 1.0f, + 0.912966f, 0.381636f, 0.169755f, 1.0f, + 0.916462f, 0.387481f, 0.164924f, 1.0f, + 0.919879f, 0.393389f, 0.160070f, 1.0f, + 0.923215f, 0.399359f, 0.155193f, 1.0f, + 0.926470f, 0.405389f, 0.150292f, 1.0f, + 0.929644f, 0.411479f, 0.145367f, 1.0f, + 0.932737f, 0.417627f, 0.140417f, 1.0f, + 0.935747f, 0.423831f, 0.135440f, 1.0f, + 0.938675f, 0.430091f, 0.130438f, 1.0f, + 0.941521f, 0.436405f, 0.125409f, 1.0f, + 0.944285f, 0.442772f, 0.120354f, 1.0f, + 0.946965f, 0.449191f, 0.115272f, 1.0f, + 0.949562f, 0.455660f, 0.110164f, 1.0f, + 0.952075f, 0.462178f, 0.105031f, 1.0f, + 0.954506f, 0.468744f, 0.099874f, 1.0f, + 0.956852f, 0.475356f, 0.094695f, 1.0f, + 0.959114f, 0.482014f, 0.089499f, 1.0f, + 0.961293f, 0.488716f, 0.084289f, 1.0f, + 0.963387f, 0.495462f, 0.079073f, 1.0f, + 0.965397f, 0.502249f, 0.073859f, 1.0f, + 0.967322f, 0.509078f, 0.068659f, 1.0f, + 0.969163f, 0.515946f, 0.063488f, 1.0f, + 0.970919f, 0.522853f, 0.058367f, 1.0f, + 0.972590f, 0.529798f, 0.053324f, 1.0f, + 0.974176f, 0.536780f, 0.048392f, 1.0f, + 0.975677f, 0.543798f, 0.043618f, 1.0f, + 0.977092f, 0.550850f, 0.039050f, 1.0f, + 0.978422f, 0.557937f, 0.034931f, 1.0f, + 0.979666f, 0.565057f, 0.031409f, 1.0f, + 0.980824f, 0.572209f, 0.028508f, 1.0f, + 0.981895f, 0.579392f, 0.026250f, 1.0f, + 0.982881f, 0.586606f, 0.024661f, 1.0f, + 0.983779f, 0.593849f, 0.023770f, 1.0f, + 0.984591f, 0.601122f, 0.023606f, 1.0f, + 0.985315f, 0.608422f, 0.024202f, 1.0f, + 0.985952f, 0.615750f, 0.025592f, 1.0f, + 0.986502f, 0.623105f, 0.027814f, 1.0f, + 0.986964f, 0.630485f, 0.030908f, 1.0f, + 0.987337f, 0.637890f, 0.034916f, 1.0f, + 0.987622f, 0.645320f, 0.039886f, 1.0f, + 0.987819f, 0.652773f, 0.045581f, 1.0f, + 0.987926f, 0.660250f, 0.051750f, 1.0f, + 0.987945f, 0.667748f, 0.058329f, 1.0f, + 0.987874f, 0.675267f, 0.065257f, 1.0f, + 0.987714f, 0.682807f, 0.072489f, 1.0f, + 0.987464f, 0.690366f, 0.079990f, 1.0f, + 0.987124f, 0.697944f, 0.087731f, 1.0f, + 0.986694f, 0.705540f, 0.095694f, 1.0f, + 0.986175f, 0.713153f, 0.103863f, 1.0f, + 0.985566f, 0.720782f, 0.112229f, 1.0f, + 0.984865f, 0.728427f, 0.120785f, 1.0f, + 0.984075f, 0.736087f, 0.129527f, 1.0f, + 0.983196f, 0.743758f, 0.138453f, 1.0f, + 0.982228f, 0.751442f, 0.147565f, 1.0f, + 0.981173f, 0.759135f, 0.156863f, 1.0f, + 0.980032f, 0.766837f, 0.166353f, 1.0f, + 0.978806f, 0.774545f, 0.176037f, 1.0f, + 0.977497f, 0.782258f, 0.185923f, 1.0f, + 0.976108f, 0.789974f, 0.196018f, 1.0f, + 0.974638f, 0.797692f, 0.206332f, 1.0f, + 0.973088f, 0.805409f, 0.216877f, 1.0f, + 0.971468f, 0.813122f, 0.227658f, 1.0f, + 0.969783f, 0.820825f, 0.238686f, 1.0f, + 0.968041f, 0.828515f, 0.249972f, 1.0f, + 0.966243f, 0.836191f, 0.261534f, 1.0f, + 0.964394f, 0.843848f, 0.273391f, 1.0f, + 0.962517f, 0.851476f, 0.285546f, 1.0f, + 0.960626f, 0.859069f, 0.298010f, 1.0f, + 0.958720f, 0.866624f, 0.310820f, 1.0f, + 0.956834f, 0.874129f, 0.323974f, 1.0f, + 0.954997f, 0.881569f, 0.337475f, 1.0f, + 0.953215f, 0.888942f, 0.351369f, 1.0f, + 0.951546f, 0.896226f, 0.365627f, 1.0f, + 0.950018f, 0.903409f, 0.380271f, 1.0f, + 0.948683f, 0.910473f, 0.395289f, 1.0f, + 0.947594f, 0.917399f, 0.410665f, 1.0f, + 0.946809f, 0.924168f, 0.426373f, 1.0f, + 0.946392f, 0.930761f, 0.442367f, 1.0f, + 0.946403f, 0.937159f, 0.458592f, 1.0f, + 0.946903f, 0.943348f, 0.474970f, 1.0f, + 0.947937f, 0.949318f, 0.491426f, 1.0f, + 0.949545f, 0.955063f, 0.507860f, 1.0f, + 0.951740f, 0.960587f, 0.524203f, 1.0f, + 0.954529f, 0.965896f, 0.540361f, 1.0f, + 0.957896f, 0.971003f, 0.556275f, 1.0f, + 0.961812f, 0.975924f, 0.571925f, 1.0f, + 0.966249f, 0.980678f, 0.587206f, 1.0f, + 0.971162f, 0.985282f, 0.602154f, 1.0f, + 0.976511f, 0.989753f, 0.616760f, 1.0f, + 0.982257f, 0.994109f, 0.631017f, 1.0f, + 0.988362f, 0.998364f, 0.644924f, 1.0f, }; /// magma perceptually uniform shades of black-red-white float cmap_magma[] = { - 0.001462, 0.000466, 0.013866, 1.0, - 0.002258, 0.001295, 0.018331, 1.0, - 0.003279, 0.002305, 0.023708, 1.0, - 0.004512, 0.003490, 0.029965, 1.0, - 0.005950, 0.004843, 0.037130, 1.0, - 0.007588, 0.006356, 0.044973, 1.0, - 0.009426, 0.008022, 0.052844, 1.0, - 0.011465, 0.009828, 0.060750, 1.0, - 0.013708, 0.011771, 0.068667, 1.0, - 0.016156, 0.013840, 0.076603, 1.0, - 0.018815, 0.016026, 0.084584, 1.0, - 0.021692, 0.018320, 0.092610, 1.0, - 0.024792, 0.020715, 0.100676, 1.0, - 0.028123, 0.023201, 0.108787, 1.0, - 0.031696, 0.025765, 0.116965, 1.0, - 0.035520, 0.028397, 0.125209, 1.0, - 0.039608, 0.031090, 0.133515, 1.0, - 0.043830, 0.033830, 0.141886, 1.0, - 0.048062, 0.036607, 0.150327, 1.0, - 0.052320, 0.039407, 0.158841, 1.0, - 0.056615, 0.042160, 0.167446, 1.0, - 0.060949, 0.044794, 0.176129, 1.0, - 0.065330, 0.047318, 0.184892, 1.0, - 0.069764, 0.049726, 0.193735, 1.0, - 0.074257, 0.052017, 0.202660, 1.0, - 0.078815, 0.054184, 0.211667, 1.0, - 0.083446, 0.056225, 0.220755, 1.0, - 0.088155, 0.058133, 0.229922, 1.0, - 0.092949, 0.059904, 0.239164, 1.0, - 0.097833, 0.061531, 0.248477, 1.0, - 0.102815, 0.063010, 0.257854, 1.0, - 0.107899, 0.064335, 0.267289, 1.0, - 0.113094, 0.065492, 0.276784, 1.0, - 0.118405, 0.066479, 0.286321, 1.0, - 0.123833, 0.067295, 0.295879, 1.0, - 0.129380, 0.067935, 0.305443, 1.0, - 0.135053, 0.068391, 0.315000, 1.0, - 0.140858, 0.068654, 0.324538, 1.0, - 0.146785, 0.068738, 0.334011, 1.0, - 0.152839, 0.068637, 0.343404, 1.0, - 0.159018, 0.068354, 0.352688, 1.0, - 0.165308, 0.067911, 0.361816, 1.0, - 0.171713, 0.067305, 0.370771, 1.0, - 0.178212, 0.066576, 0.379497, 1.0, - 0.184801, 0.065732, 0.387973, 1.0, - 0.191460, 0.064818, 0.396152, 1.0, - 0.198177, 0.063862, 0.404009, 1.0, - 0.204935, 0.062907, 0.411514, 1.0, - 0.211718, 0.061992, 0.418647, 1.0, - 0.218512, 0.061158, 0.425392, 1.0, - 0.225302, 0.060445, 0.431742, 1.0, - 0.232077, 0.059889, 0.437695, 1.0, - 0.238826, 0.059517, 0.443256, 1.0, - 0.245543, 0.059352, 0.448436, 1.0, - 0.252220, 0.059415, 0.453248, 1.0, - 0.258857, 0.059706, 0.457710, 1.0, - 0.265447, 0.060237, 0.461840, 1.0, - 0.271994, 0.060994, 0.465660, 1.0, - 0.278493, 0.061978, 0.469190, 1.0, - 0.284951, 0.063168, 0.472451, 1.0, - 0.291366, 0.064553, 0.475462, 1.0, - 0.297740, 0.066117, 0.478243, 1.0, - 0.304081, 0.067835, 0.480812, 1.0, - 0.310382, 0.069702, 0.483186, 1.0, - 0.316654, 0.071690, 0.485380, 1.0, - 0.322899, 0.073782, 0.487408, 1.0, - 0.329114, 0.075972, 0.489287, 1.0, - 0.335308, 0.078236, 0.491024, 1.0, - 0.341482, 0.080564, 0.492631, 1.0, - 0.347636, 0.082946, 0.494121, 1.0, - 0.353773, 0.085373, 0.495501, 1.0, - 0.359898, 0.087831, 0.496778, 1.0, - 0.366012, 0.090314, 0.497960, 1.0, - 0.372116, 0.092816, 0.499053, 1.0, - 0.378211, 0.095332, 0.500067, 1.0, - 0.384299, 0.097855, 0.501002, 1.0, - 0.390384, 0.100379, 0.501864, 1.0, - 0.396467, 0.102902, 0.502658, 1.0, - 0.402548, 0.105420, 0.503386, 1.0, - 0.408629, 0.107930, 0.504052, 1.0, - 0.414709, 0.110431, 0.504662, 1.0, - 0.420791, 0.112920, 0.505215, 1.0, - 0.426877, 0.115395, 0.505714, 1.0, - 0.432967, 0.117855, 0.506160, 1.0, - 0.439062, 0.120298, 0.506555, 1.0, - 0.445163, 0.122724, 0.506901, 1.0, - 0.451271, 0.125132, 0.507198, 1.0, - 0.457386, 0.127522, 0.507448, 1.0, - 0.463508, 0.129893, 0.507652, 1.0, - 0.469640, 0.132245, 0.507809, 1.0, - 0.475780, 0.134577, 0.507921, 1.0, - 0.481929, 0.136891, 0.507989, 1.0, - 0.488088, 0.139186, 0.508011, 1.0, - 0.494258, 0.141462, 0.507988, 1.0, - 0.500438, 0.143719, 0.507920, 1.0, - 0.506629, 0.145958, 0.507806, 1.0, - 0.512831, 0.148179, 0.507648, 1.0, - 0.519045, 0.150383, 0.507443, 1.0, - 0.525270, 0.152569, 0.507192, 1.0, - 0.531507, 0.154739, 0.506895, 1.0, - 0.537755, 0.156894, 0.506551, 1.0, - 0.544015, 0.159033, 0.506159, 1.0, - 0.550287, 0.161158, 0.505719, 1.0, - 0.556571, 0.163269, 0.505230, 1.0, - 0.562866, 0.165368, 0.504692, 1.0, - 0.569172, 0.167454, 0.504105, 1.0, - 0.575490, 0.169530, 0.503466, 1.0, - 0.581819, 0.171596, 0.502777, 1.0, - 0.588158, 0.173652, 0.502035, 1.0, - 0.594508, 0.175701, 0.501241, 1.0, - 0.600868, 0.177743, 0.500394, 1.0, - 0.607238, 0.179779, 0.499492, 1.0, - 0.613617, 0.181811, 0.498536, 1.0, - 0.620005, 0.183840, 0.497524, 1.0, - 0.626401, 0.185867, 0.496456, 1.0, - 0.632805, 0.187893, 0.495332, 1.0, - 0.639216, 0.189921, 0.494150, 1.0, - 0.645633, 0.191952, 0.492910, 1.0, - 0.652056, 0.193986, 0.491611, 1.0, - 0.658483, 0.196027, 0.490253, 1.0, - 0.664915, 0.198075, 0.488836, 1.0, - 0.671349, 0.200133, 0.487358, 1.0, - 0.677786, 0.202203, 0.485819, 1.0, - 0.684224, 0.204286, 0.484219, 1.0, - 0.690661, 0.206384, 0.482558, 1.0, - 0.697098, 0.208501, 0.480835, 1.0, - 0.703532, 0.210638, 0.479049, 1.0, - 0.709962, 0.212797, 0.477201, 1.0, - 0.716387, 0.214982, 0.475290, 1.0, - 0.722805, 0.217194, 0.473316, 1.0, - 0.729216, 0.219437, 0.471279, 1.0, - 0.735616, 0.221713, 0.469180, 1.0, - 0.742004, 0.224025, 0.467018, 1.0, - 0.748378, 0.226377, 0.464794, 1.0, - 0.754737, 0.228772, 0.462509, 1.0, - 0.761077, 0.231214, 0.460162, 1.0, - 0.767398, 0.233705, 0.457755, 1.0, - 0.773695, 0.236249, 0.455289, 1.0, - 0.779968, 0.238851, 0.452765, 1.0, - 0.786212, 0.241514, 0.450184, 1.0, - 0.792427, 0.244242, 0.447543, 1.0, - 0.798608, 0.247040, 0.444848, 1.0, - 0.804752, 0.249911, 0.442102, 1.0, - 0.810855, 0.252861, 0.439305, 1.0, - 0.816914, 0.255895, 0.436461, 1.0, - 0.822926, 0.259016, 0.433573, 1.0, - 0.828886, 0.262229, 0.430644, 1.0, - 0.834791, 0.265540, 0.427671, 1.0, - 0.840636, 0.268953, 0.424666, 1.0, - 0.846416, 0.272473, 0.421631, 1.0, - 0.852126, 0.276106, 0.418573, 1.0, - 0.857763, 0.279857, 0.415496, 1.0, - 0.863320, 0.283729, 0.412403, 1.0, - 0.868793, 0.287728, 0.409303, 1.0, - 0.874176, 0.291859, 0.406205, 1.0, - 0.879464, 0.296125, 0.403118, 1.0, - 0.884651, 0.300530, 0.400047, 1.0, - 0.889731, 0.305079, 0.397002, 1.0, - 0.894700, 0.309773, 0.393995, 1.0, - 0.899552, 0.314616, 0.391037, 1.0, - 0.904281, 0.319610, 0.388137, 1.0, - 0.908884, 0.324755, 0.385308, 1.0, - 0.913354, 0.330052, 0.382563, 1.0, - 0.917689, 0.335500, 0.379915, 1.0, - 0.921884, 0.341098, 0.377376, 1.0, - 0.925937, 0.346844, 0.374959, 1.0, - 0.929845, 0.352734, 0.372677, 1.0, - 0.933606, 0.358764, 0.370541, 1.0, - 0.937221, 0.364929, 0.368567, 1.0, - 0.940687, 0.371224, 0.366762, 1.0, - 0.944006, 0.377643, 0.365136, 1.0, - 0.947180, 0.384178, 0.363701, 1.0, - 0.950210, 0.390820, 0.362468, 1.0, - 0.953099, 0.397563, 0.361438, 1.0, - 0.955849, 0.404400, 0.360619, 1.0, - 0.958464, 0.411324, 0.360014, 1.0, - 0.960949, 0.418323, 0.359630, 1.0, - 0.963310, 0.425390, 0.359469, 1.0, - 0.965549, 0.432519, 0.359529, 1.0, - 0.967671, 0.439703, 0.359810, 1.0, - 0.969680, 0.446936, 0.360311, 1.0, - 0.971582, 0.454210, 0.361030, 1.0, - 0.973381, 0.461520, 0.361965, 1.0, - 0.975082, 0.468861, 0.363111, 1.0, - 0.976690, 0.476226, 0.364466, 1.0, - 0.978210, 0.483612, 0.366025, 1.0, - 0.979645, 0.491014, 0.367783, 1.0, - 0.981000, 0.498428, 0.369734, 1.0, - 0.982279, 0.505851, 0.371874, 1.0, - 0.983485, 0.513280, 0.374198, 1.0, - 0.984622, 0.520713, 0.376698, 1.0, - 0.985693, 0.528148, 0.379371, 1.0, - 0.986700, 0.535582, 0.382210, 1.0, - 0.987646, 0.543015, 0.385210, 1.0, - 0.988533, 0.550446, 0.388365, 1.0, - 0.989363, 0.557873, 0.391671, 1.0, - 0.990138, 0.565296, 0.395122, 1.0, - 0.990871, 0.572706, 0.398714, 1.0, - 0.991558, 0.580107, 0.402441, 1.0, - 0.992196, 0.587502, 0.406299, 1.0, - 0.992785, 0.594891, 0.410283, 1.0, - 0.993326, 0.602275, 0.414390, 1.0, - 0.993834, 0.609644, 0.418613, 1.0, - 0.994309, 0.616999, 0.422950, 1.0, - 0.994738, 0.624350, 0.427397, 1.0, - 0.995122, 0.631696, 0.431951, 1.0, - 0.995480, 0.639027, 0.436607, 1.0, - 0.995810, 0.646344, 0.441361, 1.0, - 0.996096, 0.653659, 0.446213, 1.0, - 0.996341, 0.660969, 0.451160, 1.0, - 0.996580, 0.668256, 0.456192, 1.0, - 0.996775, 0.675541, 0.461314, 1.0, - 0.996925, 0.682828, 0.466526, 1.0, - 0.997077, 0.690088, 0.471811, 1.0, - 0.997186, 0.697349, 0.477182, 1.0, - 0.997254, 0.704611, 0.482635, 1.0, - 0.997325, 0.711848, 0.488154, 1.0, - 0.997351, 0.719089, 0.493755, 1.0, - 0.997351, 0.726324, 0.499428, 1.0, - 0.997341, 0.733545, 0.505167, 1.0, - 0.997285, 0.740772, 0.510983, 1.0, - 0.997228, 0.747981, 0.516859, 1.0, - 0.997138, 0.755190, 0.522806, 1.0, - 0.997019, 0.762398, 0.528821, 1.0, - 0.996898, 0.769591, 0.534892, 1.0, - 0.996727, 0.776795, 0.541039, 1.0, - 0.996571, 0.783977, 0.547233, 1.0, - 0.996369, 0.791167, 0.553499, 1.0, - 0.996162, 0.798348, 0.559820, 1.0, - 0.995932, 0.805527, 0.566202, 1.0, - 0.995680, 0.812706, 0.572645, 1.0, - 0.995424, 0.819875, 0.579140, 1.0, - 0.995131, 0.827052, 0.585701, 1.0, - 0.994851, 0.834213, 0.592307, 1.0, - 0.994524, 0.841387, 0.598983, 1.0, - 0.994222, 0.848540, 0.605696, 1.0, - 0.993866, 0.855711, 0.612482, 1.0, - 0.993545, 0.862859, 0.619299, 1.0, - 0.993170, 0.870024, 0.626189, 1.0, - 0.992831, 0.877168, 0.633109, 1.0, - 0.992440, 0.884330, 0.640099, 1.0, - 0.992089, 0.891470, 0.647116, 1.0, - 0.991688, 0.898627, 0.654202, 1.0, - 0.991332, 0.905763, 0.661309, 1.0, - 0.990930, 0.912915, 0.668481, 1.0, - 0.990570, 0.920049, 0.675675, 1.0, - 0.990175, 0.927196, 0.682926, 1.0, - 0.989815, 0.934329, 0.690198, 1.0, - 0.989434, 0.941470, 0.697519, 1.0, - 0.989077, 0.948604, 0.704863, 1.0, - 0.988717, 0.955742, 0.712242, 1.0, - 0.988367, 0.962878, 0.719649, 1.0, - 0.988033, 0.970012, 0.727077, 1.0, - 0.987691, 0.977154, 0.734536, 1.0, - 0.987387, 0.984288, 0.742002, 1.0, - 0.987053, 0.991438, 0.749504, 1.0, + 0.001462f, 0.000466f, 0.013866f, 1.0f, + 0.002258f, 0.001295f, 0.018331f, 1.0f, + 0.003279f, 0.002305f, 0.023708f, 1.0f, + 0.004512f, 0.003490f, 0.029965f, 1.0f, + 0.005950f, 0.004843f, 0.037130f, 1.0f, + 0.007588f, 0.006356f, 0.044973f, 1.0f, + 0.009426f, 0.008022f, 0.052844f, 1.0f, + 0.011465f, 0.009828f, 0.060750f, 1.0f, + 0.013708f, 0.011771f, 0.068667f, 1.0f, + 0.016156f, 0.013840f, 0.076603f, 1.0f, + 0.018815f, 0.016026f, 0.084584f, 1.0f, + 0.021692f, 0.018320f, 0.092610f, 1.0f, + 0.024792f, 0.020715f, 0.100676f, 1.0f, + 0.028123f, 0.023201f, 0.108787f, 1.0f, + 0.031696f, 0.025765f, 0.116965f, 1.0f, + 0.035520f, 0.028397f, 0.125209f, 1.0f, + 0.039608f, 0.031090f, 0.133515f, 1.0f, + 0.043830f, 0.033830f, 0.141886f, 1.0f, + 0.048062f, 0.036607f, 0.150327f, 1.0f, + 0.052320f, 0.039407f, 0.158841f, 1.0f, + 0.056615f, 0.042160f, 0.167446f, 1.0f, + 0.060949f, 0.044794f, 0.176129f, 1.0f, + 0.065330f, 0.047318f, 0.184892f, 1.0f, + 0.069764f, 0.049726f, 0.193735f, 1.0f, + 0.074257f, 0.052017f, 0.202660f, 1.0f, + 0.078815f, 0.054184f, 0.211667f, 1.0f, + 0.083446f, 0.056225f, 0.220755f, 1.0f, + 0.088155f, 0.058133f, 0.229922f, 1.0f, + 0.092949f, 0.059904f, 0.239164f, 1.0f, + 0.097833f, 0.061531f, 0.248477f, 1.0f, + 0.102815f, 0.063010f, 0.257854f, 1.0f, + 0.107899f, 0.064335f, 0.267289f, 1.0f, + 0.113094f, 0.065492f, 0.276784f, 1.0f, + 0.118405f, 0.066479f, 0.286321f, 1.0f, + 0.123833f, 0.067295f, 0.295879f, 1.0f, + 0.129380f, 0.067935f, 0.305443f, 1.0f, + 0.135053f, 0.068391f, 0.315000f, 1.0f, + 0.140858f, 0.068654f, 0.324538f, 1.0f, + 0.146785f, 0.068738f, 0.334011f, 1.0f, + 0.152839f, 0.068637f, 0.343404f, 1.0f, + 0.159018f, 0.068354f, 0.352688f, 1.0f, + 0.165308f, 0.067911f, 0.361816f, 1.0f, + 0.171713f, 0.067305f, 0.370771f, 1.0f, + 0.178212f, 0.066576f, 0.379497f, 1.0f, + 0.184801f, 0.065732f, 0.387973f, 1.0f, + 0.191460f, 0.064818f, 0.396152f, 1.0f, + 0.198177f, 0.063862f, 0.404009f, 1.0f, + 0.204935f, 0.062907f, 0.411514f, 1.0f, + 0.211718f, 0.061992f, 0.418647f, 1.0f, + 0.218512f, 0.061158f, 0.425392f, 1.0f, + 0.225302f, 0.060445f, 0.431742f, 1.0f, + 0.232077f, 0.059889f, 0.437695f, 1.0f, + 0.238826f, 0.059517f, 0.443256f, 1.0f, + 0.245543f, 0.059352f, 0.448436f, 1.0f, + 0.252220f, 0.059415f, 0.453248f, 1.0f, + 0.258857f, 0.059706f, 0.457710f, 1.0f, + 0.265447f, 0.060237f, 0.461840f, 1.0f, + 0.271994f, 0.060994f, 0.465660f, 1.0f, + 0.278493f, 0.061978f, 0.469190f, 1.0f, + 0.284951f, 0.063168f, 0.472451f, 1.0f, + 0.291366f, 0.064553f, 0.475462f, 1.0f, + 0.297740f, 0.066117f, 0.478243f, 1.0f, + 0.304081f, 0.067835f, 0.480812f, 1.0f, + 0.310382f, 0.069702f, 0.483186f, 1.0f, + 0.316654f, 0.071690f, 0.485380f, 1.0f, + 0.322899f, 0.073782f, 0.487408f, 1.0f, + 0.329114f, 0.075972f, 0.489287f, 1.0f, + 0.335308f, 0.078236f, 0.491024f, 1.0f, + 0.341482f, 0.080564f, 0.492631f, 1.0f, + 0.347636f, 0.082946f, 0.494121f, 1.0f, + 0.353773f, 0.085373f, 0.495501f, 1.0f, + 0.359898f, 0.087831f, 0.496778f, 1.0f, + 0.366012f, 0.090314f, 0.497960f, 1.0f, + 0.372116f, 0.092816f, 0.499053f, 1.0f, + 0.378211f, 0.095332f, 0.500067f, 1.0f, + 0.384299f, 0.097855f, 0.501002f, 1.0f, + 0.390384f, 0.100379f, 0.501864f, 1.0f, + 0.396467f, 0.102902f, 0.502658f, 1.0f, + 0.402548f, 0.105420f, 0.503386f, 1.0f, + 0.408629f, 0.107930f, 0.504052f, 1.0f, + 0.414709f, 0.110431f, 0.504662f, 1.0f, + 0.420791f, 0.112920f, 0.505215f, 1.0f, + 0.426877f, 0.115395f, 0.505714f, 1.0f, + 0.432967f, 0.117855f, 0.506160f, 1.0f, + 0.439062f, 0.120298f, 0.506555f, 1.0f, + 0.445163f, 0.122724f, 0.506901f, 1.0f, + 0.451271f, 0.125132f, 0.507198f, 1.0f, + 0.457386f, 0.127522f, 0.507448f, 1.0f, + 0.463508f, 0.129893f, 0.507652f, 1.0f, + 0.469640f, 0.132245f, 0.507809f, 1.0f, + 0.475780f, 0.134577f, 0.507921f, 1.0f, + 0.481929f, 0.136891f, 0.507989f, 1.0f, + 0.488088f, 0.139186f, 0.508011f, 1.0f, + 0.494258f, 0.141462f, 0.507988f, 1.0f, + 0.500438f, 0.143719f, 0.507920f, 1.0f, + 0.506629f, 0.145958f, 0.507806f, 1.0f, + 0.512831f, 0.148179f, 0.507648f, 1.0f, + 0.519045f, 0.150383f, 0.507443f, 1.0f, + 0.525270f, 0.152569f, 0.507192f, 1.0f, + 0.531507f, 0.154739f, 0.506895f, 1.0f, + 0.537755f, 0.156894f, 0.506551f, 1.0f, + 0.544015f, 0.159033f, 0.506159f, 1.0f, + 0.550287f, 0.161158f, 0.505719f, 1.0f, + 0.556571f, 0.163269f, 0.505230f, 1.0f, + 0.562866f, 0.165368f, 0.504692f, 1.0f, + 0.569172f, 0.167454f, 0.504105f, 1.0f, + 0.575490f, 0.169530f, 0.503466f, 1.0f, + 0.581819f, 0.171596f, 0.502777f, 1.0f, + 0.588158f, 0.173652f, 0.502035f, 1.0f, + 0.594508f, 0.175701f, 0.501241f, 1.0f, + 0.600868f, 0.177743f, 0.500394f, 1.0f, + 0.607238f, 0.179779f, 0.499492f, 1.0f, + 0.613617f, 0.181811f, 0.498536f, 1.0f, + 0.620005f, 0.183840f, 0.497524f, 1.0f, + 0.626401f, 0.185867f, 0.496456f, 1.0f, + 0.632805f, 0.187893f, 0.495332f, 1.0f, + 0.639216f, 0.189921f, 0.494150f, 1.0f, + 0.645633f, 0.191952f, 0.492910f, 1.0f, + 0.652056f, 0.193986f, 0.491611f, 1.0f, + 0.658483f, 0.196027f, 0.490253f, 1.0f, + 0.664915f, 0.198075f, 0.488836f, 1.0f, + 0.671349f, 0.200133f, 0.487358f, 1.0f, + 0.677786f, 0.202203f, 0.485819f, 1.0f, + 0.684224f, 0.204286f, 0.484219f, 1.0f, + 0.690661f, 0.206384f, 0.482558f, 1.0f, + 0.697098f, 0.208501f, 0.480835f, 1.0f, + 0.703532f, 0.210638f, 0.479049f, 1.0f, + 0.709962f, 0.212797f, 0.477201f, 1.0f, + 0.716387f, 0.214982f, 0.475290f, 1.0f, + 0.722805f, 0.217194f, 0.473316f, 1.0f, + 0.729216f, 0.219437f, 0.471279f, 1.0f, + 0.735616f, 0.221713f, 0.469180f, 1.0f, + 0.742004f, 0.224025f, 0.467018f, 1.0f, + 0.748378f, 0.226377f, 0.464794f, 1.0f, + 0.754737f, 0.228772f, 0.462509f, 1.0f, + 0.761077f, 0.231214f, 0.460162f, 1.0f, + 0.767398f, 0.233705f, 0.457755f, 1.0f, + 0.773695f, 0.236249f, 0.455289f, 1.0f, + 0.779968f, 0.238851f, 0.452765f, 1.0f, + 0.786212f, 0.241514f, 0.450184f, 1.0f, + 0.792427f, 0.244242f, 0.447543f, 1.0f, + 0.798608f, 0.247040f, 0.444848f, 1.0f, + 0.804752f, 0.249911f, 0.442102f, 1.0f, + 0.810855f, 0.252861f, 0.439305f, 1.0f, + 0.816914f, 0.255895f, 0.436461f, 1.0f, + 0.822926f, 0.259016f, 0.433573f, 1.0f, + 0.828886f, 0.262229f, 0.430644f, 1.0f, + 0.834791f, 0.265540f, 0.427671f, 1.0f, + 0.840636f, 0.268953f, 0.424666f, 1.0f, + 0.846416f, 0.272473f, 0.421631f, 1.0f, + 0.852126f, 0.276106f, 0.418573f, 1.0f, + 0.857763f, 0.279857f, 0.415496f, 1.0f, + 0.863320f, 0.283729f, 0.412403f, 1.0f, + 0.868793f, 0.287728f, 0.409303f, 1.0f, + 0.874176f, 0.291859f, 0.406205f, 1.0f, + 0.879464f, 0.296125f, 0.403118f, 1.0f, + 0.884651f, 0.300530f, 0.400047f, 1.0f, + 0.889731f, 0.305079f, 0.397002f, 1.0f, + 0.894700f, 0.309773f, 0.393995f, 1.0f, + 0.899552f, 0.314616f, 0.391037f, 1.0f, + 0.904281f, 0.319610f, 0.388137f, 1.0f, + 0.908884f, 0.324755f, 0.385308f, 1.0f, + 0.913354f, 0.330052f, 0.382563f, 1.0f, + 0.917689f, 0.335500f, 0.379915f, 1.0f, + 0.921884f, 0.341098f, 0.377376f, 1.0f, + 0.925937f, 0.346844f, 0.374959f, 1.0f, + 0.929845f, 0.352734f, 0.372677f, 1.0f, + 0.933606f, 0.358764f, 0.370541f, 1.0f, + 0.937221f, 0.364929f, 0.368567f, 1.0f, + 0.940687f, 0.371224f, 0.366762f, 1.0f, + 0.944006f, 0.377643f, 0.365136f, 1.0f, + 0.947180f, 0.384178f, 0.363701f, 1.0f, + 0.950210f, 0.390820f, 0.362468f, 1.0f, + 0.953099f, 0.397563f, 0.361438f, 1.0f, + 0.955849f, 0.404400f, 0.360619f, 1.0f, + 0.958464f, 0.411324f, 0.360014f, 1.0f, + 0.960949f, 0.418323f, 0.359630f, 1.0f, + 0.963310f, 0.425390f, 0.359469f, 1.0f, + 0.965549f, 0.432519f, 0.359529f, 1.0f, + 0.967671f, 0.439703f, 0.359810f, 1.0f, + 0.969680f, 0.446936f, 0.360311f, 1.0f, + 0.971582f, 0.454210f, 0.361030f, 1.0f, + 0.973381f, 0.461520f, 0.361965f, 1.0f, + 0.975082f, 0.468861f, 0.363111f, 1.0f, + 0.976690f, 0.476226f, 0.364466f, 1.0f, + 0.978210f, 0.483612f, 0.366025f, 1.0f, + 0.979645f, 0.491014f, 0.367783f, 1.0f, + 0.981000f, 0.498428f, 0.369734f, 1.0f, + 0.982279f, 0.505851f, 0.371874f, 1.0f, + 0.983485f, 0.513280f, 0.374198f, 1.0f, + 0.984622f, 0.520713f, 0.376698f, 1.0f, + 0.985693f, 0.528148f, 0.379371f, 1.0f, + 0.986700f, 0.535582f, 0.382210f, 1.0f, + 0.987646f, 0.543015f, 0.385210f, 1.0f, + 0.988533f, 0.550446f, 0.388365f, 1.0f, + 0.989363f, 0.557873f, 0.391671f, 1.0f, + 0.990138f, 0.565296f, 0.395122f, 1.0f, + 0.990871f, 0.572706f, 0.398714f, 1.0f, + 0.991558f, 0.580107f, 0.402441f, 1.0f, + 0.992196f, 0.587502f, 0.406299f, 1.0f, + 0.992785f, 0.594891f, 0.410283f, 1.0f, + 0.993326f, 0.602275f, 0.414390f, 1.0f, + 0.993834f, 0.609644f, 0.418613f, 1.0f, + 0.994309f, 0.616999f, 0.422950f, 1.0f, + 0.994738f, 0.624350f, 0.427397f, 1.0f, + 0.995122f, 0.631696f, 0.431951f, 1.0f, + 0.995480f, 0.639027f, 0.436607f, 1.0f, + 0.995810f, 0.646344f, 0.441361f, 1.0f, + 0.996096f, 0.653659f, 0.446213f, 1.0f, + 0.996341f, 0.660969f, 0.451160f, 1.0f, + 0.996580f, 0.668256f, 0.456192f, 1.0f, + 0.996775f, 0.675541f, 0.461314f, 1.0f, + 0.996925f, 0.682828f, 0.466526f, 1.0f, + 0.997077f, 0.690088f, 0.471811f, 1.0f, + 0.997186f, 0.697349f, 0.477182f, 1.0f, + 0.997254f, 0.704611f, 0.482635f, 1.0f, + 0.997325f, 0.711848f, 0.488154f, 1.0f, + 0.997351f, 0.719089f, 0.493755f, 1.0f, + 0.997351f, 0.726324f, 0.499428f, 1.0f, + 0.997341f, 0.733545f, 0.505167f, 1.0f, + 0.997285f, 0.740772f, 0.510983f, 1.0f, + 0.997228f, 0.747981f, 0.516859f, 1.0f, + 0.997138f, 0.755190f, 0.522806f, 1.0f, + 0.997019f, 0.762398f, 0.528821f, 1.0f, + 0.996898f, 0.769591f, 0.534892f, 1.0f, + 0.996727f, 0.776795f, 0.541039f, 1.0f, + 0.996571f, 0.783977f, 0.547233f, 1.0f, + 0.996369f, 0.791167f, 0.553499f, 1.0f, + 0.996162f, 0.798348f, 0.559820f, 1.0f, + 0.995932f, 0.805527f, 0.566202f, 1.0f, + 0.995680f, 0.812706f, 0.572645f, 1.0f, + 0.995424f, 0.819875f, 0.579140f, 1.0f, + 0.995131f, 0.827052f, 0.585701f, 1.0f, + 0.994851f, 0.834213f, 0.592307f, 1.0f, + 0.994524f, 0.841387f, 0.598983f, 1.0f, + 0.994222f, 0.848540f, 0.605696f, 1.0f, + 0.993866f, 0.855711f, 0.612482f, 1.0f, + 0.993545f, 0.862859f, 0.619299f, 1.0f, + 0.993170f, 0.870024f, 0.626189f, 1.0f, + 0.992831f, 0.877168f, 0.633109f, 1.0f, + 0.992440f, 0.884330f, 0.640099f, 1.0f, + 0.992089f, 0.891470f, 0.647116f, 1.0f, + 0.991688f, 0.898627f, 0.654202f, 1.0f, + 0.991332f, 0.905763f, 0.661309f, 1.0f, + 0.990930f, 0.912915f, 0.668481f, 1.0f, + 0.990570f, 0.920049f, 0.675675f, 1.0f, + 0.990175f, 0.927196f, 0.682926f, 1.0f, + 0.989815f, 0.934329f, 0.690198f, 1.0f, + 0.989434f, 0.941470f, 0.697519f, 1.0f, + 0.989077f, 0.948604f, 0.704863f, 1.0f, + 0.988717f, 0.955742f, 0.712242f, 1.0f, + 0.988367f, 0.962878f, 0.719649f, 1.0f, + 0.988033f, 0.970012f, 0.727077f, 1.0f, + 0.987691f, 0.977154f, 0.734536f, 1.0f, + 0.987387f, 0.984288f, 0.742002f, 1.0f, + 0.987053f, 0.991438f, 0.749504f, 1.0f, }; /// plasma perceptually uniform shades of blue-red-yellow float cmap_plasma[] = { - 0.050383, 0.029803, 0.527975, 1.0, - 0.063536, 0.028426, 0.533124, 1.0, - 0.075353, 0.027206, 0.538007, 1.0, - 0.086222, 0.026125, 0.542658, 1.0, - 0.096379, 0.025165, 0.547103, 1.0, - 0.105980, 0.024309, 0.551368, 1.0, - 0.115124, 0.023556, 0.555468, 1.0, - 0.123903, 0.022878, 0.559423, 1.0, - 0.132381, 0.022258, 0.563250, 1.0, - 0.140603, 0.021687, 0.566959, 1.0, - 0.148607, 0.021154, 0.570562, 1.0, - 0.156421, 0.020651, 0.574065, 1.0, - 0.164070, 0.020171, 0.577478, 1.0, - 0.171574, 0.019706, 0.580806, 1.0, - 0.178950, 0.019252, 0.584054, 1.0, - 0.186213, 0.018803, 0.587228, 1.0, - 0.193374, 0.018354, 0.590330, 1.0, - 0.200445, 0.017902, 0.593364, 1.0, - 0.207435, 0.017442, 0.596333, 1.0, - 0.214350, 0.016973, 0.599239, 1.0, - 0.221197, 0.016497, 0.602083, 1.0, - 0.227983, 0.016007, 0.604867, 1.0, - 0.234715, 0.015502, 0.607592, 1.0, - 0.241396, 0.014979, 0.610259, 1.0, - 0.248032, 0.014439, 0.612868, 1.0, - 0.254627, 0.013882, 0.615419, 1.0, - 0.261183, 0.013308, 0.617911, 1.0, - 0.267703, 0.012716, 0.620346, 1.0, - 0.274191, 0.012109, 0.622722, 1.0, - 0.280648, 0.011488, 0.625038, 1.0, - 0.287076, 0.010855, 0.627295, 1.0, - 0.293478, 0.010213, 0.629490, 1.0, - 0.299855, 0.009561, 0.631624, 1.0, - 0.306210, 0.008902, 0.633694, 1.0, - 0.312543, 0.008239, 0.635700, 1.0, - 0.318856, 0.007576, 0.637640, 1.0, - 0.325150, 0.006915, 0.639512, 1.0, - 0.331426, 0.006261, 0.641316, 1.0, - 0.337683, 0.005618, 0.643049, 1.0, - 0.343925, 0.004991, 0.644710, 1.0, - 0.350150, 0.004382, 0.646298, 1.0, - 0.356359, 0.003798, 0.647810, 1.0, - 0.362553, 0.003243, 0.649245, 1.0, - 0.368733, 0.002724, 0.650601, 1.0, - 0.374897, 0.002245, 0.651876, 1.0, - 0.381047, 0.001814, 0.653068, 1.0, - 0.387183, 0.001434, 0.654177, 1.0, - 0.393304, 0.001114, 0.655199, 1.0, - 0.399411, 0.000859, 0.656133, 1.0, - 0.405503, 0.000678, 0.656977, 1.0, - 0.411580, 0.000577, 0.657730, 1.0, - 0.417642, 0.000564, 0.658390, 1.0, - 0.423689, 0.000646, 0.658956, 1.0, - 0.429719, 0.000831, 0.659425, 1.0, - 0.435734, 0.001127, 0.659797, 1.0, - 0.441732, 0.001540, 0.660069, 1.0, - 0.447714, 0.002080, 0.660240, 1.0, - 0.453677, 0.002755, 0.660310, 1.0, - 0.459623, 0.003574, 0.660277, 1.0, - 0.465550, 0.004545, 0.660139, 1.0, - 0.471457, 0.005678, 0.659897, 1.0, - 0.477344, 0.006980, 0.659549, 1.0, - 0.483210, 0.008460, 0.659095, 1.0, - 0.489055, 0.010127, 0.658534, 1.0, - 0.494877, 0.011990, 0.657865, 1.0, - 0.500678, 0.014055, 0.657088, 1.0, - 0.506454, 0.016333, 0.656202, 1.0, - 0.512206, 0.018833, 0.655209, 1.0, - 0.517933, 0.021563, 0.654109, 1.0, - 0.523633, 0.024532, 0.652901, 1.0, - 0.529306, 0.027747, 0.651586, 1.0, - 0.534952, 0.031217, 0.650165, 1.0, - 0.540570, 0.034950, 0.648640, 1.0, - 0.546157, 0.038954, 0.647010, 1.0, - 0.551715, 0.043136, 0.645277, 1.0, - 0.557243, 0.047331, 0.643443, 1.0, - 0.562738, 0.051545, 0.641509, 1.0, - 0.568201, 0.055778, 0.639477, 1.0, - 0.573632, 0.060028, 0.637349, 1.0, - 0.579029, 0.064296, 0.635126, 1.0, - 0.584391, 0.068579, 0.632812, 1.0, - 0.589719, 0.072878, 0.630408, 1.0, - 0.595011, 0.077190, 0.627917, 1.0, - 0.600266, 0.081516, 0.625342, 1.0, - 0.605485, 0.085854, 0.622686, 1.0, - 0.610667, 0.090204, 0.619951, 1.0, - 0.615812, 0.094564, 0.617140, 1.0, - 0.620919, 0.098934, 0.614257, 1.0, - 0.625987, 0.103312, 0.611305, 1.0, - 0.631017, 0.107699, 0.608287, 1.0, - 0.636008, 0.112092, 0.605205, 1.0, - 0.640959, 0.116492, 0.602065, 1.0, - 0.645872, 0.120898, 0.598867, 1.0, - 0.650746, 0.125309, 0.595617, 1.0, - 0.655580, 0.129725, 0.592317, 1.0, - 0.660374, 0.134144, 0.588971, 1.0, - 0.665129, 0.138566, 0.585582, 1.0, - 0.669845, 0.142992, 0.582154, 1.0, - 0.674522, 0.147419, 0.578688, 1.0, - 0.679160, 0.151848, 0.575189, 1.0, - 0.683758, 0.156278, 0.571660, 1.0, - 0.688318, 0.160709, 0.568103, 1.0, - 0.692840, 0.165141, 0.564522, 1.0, - 0.697324, 0.169573, 0.560919, 1.0, - 0.701769, 0.174005, 0.557296, 1.0, - 0.706178, 0.178437, 0.553657, 1.0, - 0.710549, 0.182868, 0.550004, 1.0, - 0.714883, 0.187299, 0.546338, 1.0, - 0.719181, 0.191729, 0.542663, 1.0, - 0.723444, 0.196158, 0.538981, 1.0, - 0.727670, 0.200586, 0.535293, 1.0, - 0.731862, 0.205013, 0.531601, 1.0, - 0.736019, 0.209439, 0.527908, 1.0, - 0.740143, 0.213864, 0.524216, 1.0, - 0.744232, 0.218288, 0.520524, 1.0, - 0.748289, 0.222711, 0.516834, 1.0, - 0.752312, 0.227133, 0.513149, 1.0, - 0.756304, 0.231555, 0.509468, 1.0, - 0.760264, 0.235976, 0.505794, 1.0, - 0.764193, 0.240396, 0.502126, 1.0, - 0.768090, 0.244817, 0.498465, 1.0, - 0.771958, 0.249237, 0.494813, 1.0, - 0.775796, 0.253658, 0.491171, 1.0, - 0.779604, 0.258078, 0.487539, 1.0, - 0.783383, 0.262500, 0.483918, 1.0, - 0.787133, 0.266922, 0.480307, 1.0, - 0.790855, 0.271345, 0.476706, 1.0, - 0.794549, 0.275770, 0.473117, 1.0, - 0.798216, 0.280197, 0.469538, 1.0, - 0.801855, 0.284626, 0.465971, 1.0, - 0.805467, 0.289057, 0.462415, 1.0, - 0.809052, 0.293491, 0.458870, 1.0, - 0.812612, 0.297928, 0.455338, 1.0, - 0.816144, 0.302368, 0.451816, 1.0, - 0.819651, 0.306812, 0.448306, 1.0, - 0.823132, 0.311261, 0.444806, 1.0, - 0.826588, 0.315714, 0.441316, 1.0, - 0.830018, 0.320172, 0.437836, 1.0, - 0.833422, 0.324635, 0.434366, 1.0, - 0.836801, 0.329105, 0.430905, 1.0, - 0.840155, 0.333580, 0.427455, 1.0, - 0.843484, 0.338062, 0.424013, 1.0, - 0.846788, 0.342551, 0.420579, 1.0, - 0.850066, 0.347048, 0.417153, 1.0, - 0.853319, 0.351553, 0.413734, 1.0, - 0.856547, 0.356066, 0.410322, 1.0, - 0.859750, 0.360588, 0.406917, 1.0, - 0.862927, 0.365119, 0.403519, 1.0, - 0.866078, 0.369660, 0.400126, 1.0, - 0.869203, 0.374212, 0.396738, 1.0, - 0.872303, 0.378774, 0.393355, 1.0, - 0.875376, 0.383347, 0.389976, 1.0, - 0.878423, 0.387932, 0.386600, 1.0, - 0.881443, 0.392529, 0.383229, 1.0, - 0.884436, 0.397139, 0.379860, 1.0, - 0.887402, 0.401762, 0.376494, 1.0, - 0.890340, 0.406398, 0.373130, 1.0, - 0.893250, 0.411048, 0.369768, 1.0, - 0.896131, 0.415712, 0.366407, 1.0, - 0.898984, 0.420392, 0.363047, 1.0, - 0.901807, 0.425087, 0.359688, 1.0, - 0.904601, 0.429797, 0.356329, 1.0, - 0.907365, 0.434524, 0.352970, 1.0, - 0.910098, 0.439268, 0.349610, 1.0, - 0.912800, 0.444029, 0.346251, 1.0, - 0.915471, 0.448807, 0.342890, 1.0, - 0.918109, 0.453603, 0.339529, 1.0, - 0.920714, 0.458417, 0.336166, 1.0, - 0.923287, 0.463251, 0.332801, 1.0, - 0.925825, 0.468103, 0.329435, 1.0, - 0.928329, 0.472975, 0.326067, 1.0, - 0.930798, 0.477867, 0.322697, 1.0, - 0.933232, 0.482780, 0.319325, 1.0, - 0.935630, 0.487712, 0.315952, 1.0, - 0.937990, 0.492667, 0.312575, 1.0, - 0.940313, 0.497642, 0.309197, 1.0, - 0.942598, 0.502639, 0.305816, 1.0, - 0.944844, 0.507658, 0.302433, 1.0, - 0.947051, 0.512699, 0.299049, 1.0, - 0.949217, 0.517763, 0.295662, 1.0, - 0.951344, 0.522850, 0.292275, 1.0, - 0.953428, 0.527960, 0.288883, 1.0, - 0.955470, 0.533093, 0.285490, 1.0, - 0.957469, 0.538250, 0.282096, 1.0, - 0.959424, 0.543431, 0.278701, 1.0, - 0.961336, 0.548636, 0.275305, 1.0, - 0.963203, 0.553865, 0.271909, 1.0, - 0.965024, 0.559118, 0.268513, 1.0, - 0.966798, 0.564396, 0.265118, 1.0, - 0.968526, 0.569700, 0.261721, 1.0, - 0.970205, 0.575028, 0.258325, 1.0, - 0.971835, 0.580382, 0.254931, 1.0, - 0.973416, 0.585761, 0.251540, 1.0, - 0.974947, 0.591165, 0.248151, 1.0, - 0.976428, 0.596595, 0.244767, 1.0, - 0.977856, 0.602051, 0.241387, 1.0, - 0.979233, 0.607532, 0.238013, 1.0, - 0.980556, 0.613039, 0.234646, 1.0, - 0.981826, 0.618572, 0.231287, 1.0, - 0.983041, 0.624131, 0.227937, 1.0, - 0.984199, 0.629718, 0.224595, 1.0, - 0.985301, 0.635330, 0.221265, 1.0, - 0.986345, 0.640969, 0.217948, 1.0, - 0.987332, 0.646633, 0.214648, 1.0, - 0.988260, 0.652325, 0.211364, 1.0, - 0.989128, 0.658043, 0.208100, 1.0, - 0.989935, 0.663787, 0.204859, 1.0, - 0.990681, 0.669558, 0.201642, 1.0, - 0.991365, 0.675355, 0.198453, 1.0, - 0.991985, 0.681179, 0.195295, 1.0, - 0.992541, 0.687030, 0.192170, 1.0, - 0.993032, 0.692907, 0.189084, 1.0, - 0.993456, 0.698810, 0.186041, 1.0, - 0.993814, 0.704741, 0.183043, 1.0, - 0.994103, 0.710698, 0.180097, 1.0, - 0.994324, 0.716681, 0.177208, 1.0, - 0.994474, 0.722691, 0.174381, 1.0, - 0.994553, 0.728728, 0.171622, 1.0, - 0.994561, 0.734791, 0.168938, 1.0, - 0.994495, 0.740880, 0.166335, 1.0, - 0.994355, 0.746995, 0.163821, 1.0, - 0.994141, 0.753137, 0.161404, 1.0, - 0.993851, 0.759304, 0.159092, 1.0, - 0.993482, 0.765499, 0.156891, 1.0, - 0.993033, 0.771720, 0.154808, 1.0, - 0.992505, 0.777967, 0.152855, 1.0, - 0.991897, 0.784239, 0.151042, 1.0, - 0.991209, 0.790537, 0.149377, 1.0, - 0.990439, 0.796859, 0.147870, 1.0, - 0.989587, 0.803205, 0.146529, 1.0, - 0.988648, 0.809579, 0.145357, 1.0, - 0.987621, 0.815978, 0.144363, 1.0, - 0.986509, 0.822401, 0.143557, 1.0, - 0.985314, 0.828846, 0.142945, 1.0, - 0.984031, 0.835315, 0.142528, 1.0, - 0.982653, 0.841812, 0.142303, 1.0, - 0.981190, 0.848329, 0.142279, 1.0, - 0.979644, 0.854866, 0.142453, 1.0, - 0.977995, 0.861432, 0.142808, 1.0, - 0.976265, 0.868016, 0.143351, 1.0, - 0.974443, 0.874622, 0.144061, 1.0, - 0.972530, 0.881250, 0.144923, 1.0, - 0.970533, 0.887896, 0.145919, 1.0, - 0.968443, 0.894564, 0.147014, 1.0, - 0.966271, 0.901249, 0.148180, 1.0, - 0.964021, 0.907950, 0.149370, 1.0, - 0.961681, 0.914672, 0.150520, 1.0, - 0.959276, 0.921407, 0.151566, 1.0, - 0.956808, 0.928152, 0.152409, 1.0, - 0.954287, 0.934908, 0.152921, 1.0, - 0.951726, 0.941671, 0.152925, 1.0, - 0.949151, 0.948435, 0.152178, 1.0, - 0.946602, 0.955190, 0.150328, 1.0, - 0.944152, 0.961916, 0.146861, 1.0, - 0.941896, 0.968590, 0.140956, 1.0, - 0.940015, 0.975158, 0.131326, 1.0, + 0.050383f, 0.029803f, 0.527975f, 1.0f, + 0.063536f, 0.028426f, 0.533124f, 1.0f, + 0.075353f, 0.027206f, 0.538007f, 1.0f, + 0.086222f, 0.026125f, 0.542658f, 1.0f, + 0.096379f, 0.025165f, 0.547103f, 1.0f, + 0.105980f, 0.024309f, 0.551368f, 1.0f, + 0.115124f, 0.023556f, 0.555468f, 1.0f, + 0.123903f, 0.022878f, 0.559423f, 1.0f, + 0.132381f, 0.022258f, 0.563250f, 1.0f, + 0.140603f, 0.021687f, 0.566959f, 1.0f, + 0.148607f, 0.021154f, 0.570562f, 1.0f, + 0.156421f, 0.020651f, 0.574065f, 1.0f, + 0.164070f, 0.020171f, 0.577478f, 1.0f, + 0.171574f, 0.019706f, 0.580806f, 1.0f, + 0.178950f, 0.019252f, 0.584054f, 1.0f, + 0.186213f, 0.018803f, 0.587228f, 1.0f, + 0.193374f, 0.018354f, 0.590330f, 1.0f, + 0.200445f, 0.017902f, 0.593364f, 1.0f, + 0.207435f, 0.017442f, 0.596333f, 1.0f, + 0.214350f, 0.016973f, 0.599239f, 1.0f, + 0.221197f, 0.016497f, 0.602083f, 1.0f, + 0.227983f, 0.016007f, 0.604867f, 1.0f, + 0.234715f, 0.015502f, 0.607592f, 1.0f, + 0.241396f, 0.014979f, 0.610259f, 1.0f, + 0.248032f, 0.014439f, 0.612868f, 1.0f, + 0.254627f, 0.013882f, 0.615419f, 1.0f, + 0.261183f, 0.013308f, 0.617911f, 1.0f, + 0.267703f, 0.012716f, 0.620346f, 1.0f, + 0.274191f, 0.012109f, 0.622722f, 1.0f, + 0.280648f, 0.011488f, 0.625038f, 1.0f, + 0.287076f, 0.010855f, 0.627295f, 1.0f, + 0.293478f, 0.010213f, 0.629490f, 1.0f, + 0.299855f, 0.009561f, 0.631624f, 1.0f, + 0.306210f, 0.008902f, 0.633694f, 1.0f, + 0.312543f, 0.008239f, 0.635700f, 1.0f, + 0.318856f, 0.007576f, 0.637640f, 1.0f, + 0.325150f, 0.006915f, 0.639512f, 1.0f, + 0.331426f, 0.006261f, 0.641316f, 1.0f, + 0.337683f, 0.005618f, 0.643049f, 1.0f, + 0.343925f, 0.004991f, 0.644710f, 1.0f, + 0.350150f, 0.004382f, 0.646298f, 1.0f, + 0.356359f, 0.003798f, 0.647810f, 1.0f, + 0.362553f, 0.003243f, 0.649245f, 1.0f, + 0.368733f, 0.002724f, 0.650601f, 1.0f, + 0.374897f, 0.002245f, 0.651876f, 1.0f, + 0.381047f, 0.001814f, 0.653068f, 1.0f, + 0.387183f, 0.001434f, 0.654177f, 1.0f, + 0.393304f, 0.001114f, 0.655199f, 1.0f, + 0.399411f, 0.000859f, 0.656133f, 1.0f, + 0.405503f, 0.000678f, 0.656977f, 1.0f, + 0.411580f, 0.000577f, 0.657730f, 1.0f, + 0.417642f, 0.000564f, 0.658390f, 1.0f, + 0.423689f, 0.000646f, 0.658956f, 1.0f, + 0.429719f, 0.000831f, 0.659425f, 1.0f, + 0.435734f, 0.001127f, 0.659797f, 1.0f, + 0.441732f, 0.001540f, 0.660069f, 1.0f, + 0.447714f, 0.002080f, 0.660240f, 1.0f, + 0.453677f, 0.002755f, 0.660310f, 1.0f, + 0.459623f, 0.003574f, 0.660277f, 1.0f, + 0.465550f, 0.004545f, 0.660139f, 1.0f, + 0.471457f, 0.005678f, 0.659897f, 1.0f, + 0.477344f, 0.006980f, 0.659549f, 1.0f, + 0.483210f, 0.008460f, 0.659095f, 1.0f, + 0.489055f, 0.010127f, 0.658534f, 1.0f, + 0.494877f, 0.011990f, 0.657865f, 1.0f, + 0.500678f, 0.014055f, 0.657088f, 1.0f, + 0.506454f, 0.016333f, 0.656202f, 1.0f, + 0.512206f, 0.018833f, 0.655209f, 1.0f, + 0.517933f, 0.021563f, 0.654109f, 1.0f, + 0.523633f, 0.024532f, 0.652901f, 1.0f, + 0.529306f, 0.027747f, 0.651586f, 1.0f, + 0.534952f, 0.031217f, 0.650165f, 1.0f, + 0.540570f, 0.034950f, 0.648640f, 1.0f, + 0.546157f, 0.038954f, 0.647010f, 1.0f, + 0.551715f, 0.043136f, 0.645277f, 1.0f, + 0.557243f, 0.047331f, 0.643443f, 1.0f, + 0.562738f, 0.051545f, 0.641509f, 1.0f, + 0.568201f, 0.055778f, 0.639477f, 1.0f, + 0.573632f, 0.060028f, 0.637349f, 1.0f, + 0.579029f, 0.064296f, 0.635126f, 1.0f, + 0.584391f, 0.068579f, 0.632812f, 1.0f, + 0.589719f, 0.072878f, 0.630408f, 1.0f, + 0.595011f, 0.077190f, 0.627917f, 1.0f, + 0.600266f, 0.081516f, 0.625342f, 1.0f, + 0.605485f, 0.085854f, 0.622686f, 1.0f, + 0.610667f, 0.090204f, 0.619951f, 1.0f, + 0.615812f, 0.094564f, 0.617140f, 1.0f, + 0.620919f, 0.098934f, 0.614257f, 1.0f, + 0.625987f, 0.103312f, 0.611305f, 1.0f, + 0.631017f, 0.107699f, 0.608287f, 1.0f, + 0.636008f, 0.112092f, 0.605205f, 1.0f, + 0.640959f, 0.116492f, 0.602065f, 1.0f, + 0.645872f, 0.120898f, 0.598867f, 1.0f, + 0.650746f, 0.125309f, 0.595617f, 1.0f, + 0.655580f, 0.129725f, 0.592317f, 1.0f, + 0.660374f, 0.134144f, 0.588971f, 1.0f, + 0.665129f, 0.138566f, 0.585582f, 1.0f, + 0.669845f, 0.142992f, 0.582154f, 1.0f, + 0.674522f, 0.147419f, 0.578688f, 1.0f, + 0.679160f, 0.151848f, 0.575189f, 1.0f, + 0.683758f, 0.156278f, 0.571660f, 1.0f, + 0.688318f, 0.160709f, 0.568103f, 1.0f, + 0.692840f, 0.165141f, 0.564522f, 1.0f, + 0.697324f, 0.169573f, 0.560919f, 1.0f, + 0.701769f, 0.174005f, 0.557296f, 1.0f, + 0.706178f, 0.178437f, 0.553657f, 1.0f, + 0.710549f, 0.182868f, 0.550004f, 1.0f, + 0.714883f, 0.187299f, 0.546338f, 1.0f, + 0.719181f, 0.191729f, 0.542663f, 1.0f, + 0.723444f, 0.196158f, 0.538981f, 1.0f, + 0.727670f, 0.200586f, 0.535293f, 1.0f, + 0.731862f, 0.205013f, 0.531601f, 1.0f, + 0.736019f, 0.209439f, 0.527908f, 1.0f, + 0.740143f, 0.213864f, 0.524216f, 1.0f, + 0.744232f, 0.218288f, 0.520524f, 1.0f, + 0.748289f, 0.222711f, 0.516834f, 1.0f, + 0.752312f, 0.227133f, 0.513149f, 1.0f, + 0.756304f, 0.231555f, 0.509468f, 1.0f, + 0.760264f, 0.235976f, 0.505794f, 1.0f, + 0.764193f, 0.240396f, 0.502126f, 1.0f, + 0.768090f, 0.244817f, 0.498465f, 1.0f, + 0.771958f, 0.249237f, 0.494813f, 1.0f, + 0.775796f, 0.253658f, 0.491171f, 1.0f, + 0.779604f, 0.258078f, 0.487539f, 1.0f, + 0.783383f, 0.262500f, 0.483918f, 1.0f, + 0.787133f, 0.266922f, 0.480307f, 1.0f, + 0.790855f, 0.271345f, 0.476706f, 1.0f, + 0.794549f, 0.275770f, 0.473117f, 1.0f, + 0.798216f, 0.280197f, 0.469538f, 1.0f, + 0.801855f, 0.284626f, 0.465971f, 1.0f, + 0.805467f, 0.289057f, 0.462415f, 1.0f, + 0.809052f, 0.293491f, 0.458870f, 1.0f, + 0.812612f, 0.297928f, 0.455338f, 1.0f, + 0.816144f, 0.302368f, 0.451816f, 1.0f, + 0.819651f, 0.306812f, 0.448306f, 1.0f, + 0.823132f, 0.311261f, 0.444806f, 1.0f, + 0.826588f, 0.315714f, 0.441316f, 1.0f, + 0.830018f, 0.320172f, 0.437836f, 1.0f, + 0.833422f, 0.324635f, 0.434366f, 1.0f, + 0.836801f, 0.329105f, 0.430905f, 1.0f, + 0.840155f, 0.333580f, 0.427455f, 1.0f, + 0.843484f, 0.338062f, 0.424013f, 1.0f, + 0.846788f, 0.342551f, 0.420579f, 1.0f, + 0.850066f, 0.347048f, 0.417153f, 1.0f, + 0.853319f, 0.351553f, 0.413734f, 1.0f, + 0.856547f, 0.356066f, 0.410322f, 1.0f, + 0.859750f, 0.360588f, 0.406917f, 1.0f, + 0.862927f, 0.365119f, 0.403519f, 1.0f, + 0.866078f, 0.369660f, 0.400126f, 1.0f, + 0.869203f, 0.374212f, 0.396738f, 1.0f, + 0.872303f, 0.378774f, 0.393355f, 1.0f, + 0.875376f, 0.383347f, 0.389976f, 1.0f, + 0.878423f, 0.387932f, 0.386600f, 1.0f, + 0.881443f, 0.392529f, 0.383229f, 1.0f, + 0.884436f, 0.397139f, 0.379860f, 1.0f, + 0.887402f, 0.401762f, 0.376494f, 1.0f, + 0.890340f, 0.406398f, 0.373130f, 1.0f, + 0.893250f, 0.411048f, 0.369768f, 1.0f, + 0.896131f, 0.415712f, 0.366407f, 1.0f, + 0.898984f, 0.420392f, 0.363047f, 1.0f, + 0.901807f, 0.425087f, 0.359688f, 1.0f, + 0.904601f, 0.429797f, 0.356329f, 1.0f, + 0.907365f, 0.434524f, 0.352970f, 1.0f, + 0.910098f, 0.439268f, 0.349610f, 1.0f, + 0.912800f, 0.444029f, 0.346251f, 1.0f, + 0.915471f, 0.448807f, 0.342890f, 1.0f, + 0.918109f, 0.453603f, 0.339529f, 1.0f, + 0.920714f, 0.458417f, 0.336166f, 1.0f, + 0.923287f, 0.463251f, 0.332801f, 1.0f, + 0.925825f, 0.468103f, 0.329435f, 1.0f, + 0.928329f, 0.472975f, 0.326067f, 1.0f, + 0.930798f, 0.477867f, 0.322697f, 1.0f, + 0.933232f, 0.482780f, 0.319325f, 1.0f, + 0.935630f, 0.487712f, 0.315952f, 1.0f, + 0.937990f, 0.492667f, 0.312575f, 1.0f, + 0.940313f, 0.497642f, 0.309197f, 1.0f, + 0.942598f, 0.502639f, 0.305816f, 1.0f, + 0.944844f, 0.507658f, 0.302433f, 1.0f, + 0.947051f, 0.512699f, 0.299049f, 1.0f, + 0.949217f, 0.517763f, 0.295662f, 1.0f, + 0.951344f, 0.522850f, 0.292275f, 1.0f, + 0.953428f, 0.527960f, 0.288883f, 1.0f, + 0.955470f, 0.533093f, 0.285490f, 1.0f, + 0.957469f, 0.538250f, 0.282096f, 1.0f, + 0.959424f, 0.543431f, 0.278701f, 1.0f, + 0.961336f, 0.548636f, 0.275305f, 1.0f, + 0.963203f, 0.553865f, 0.271909f, 1.0f, + 0.965024f, 0.559118f, 0.268513f, 1.0f, + 0.966798f, 0.564396f, 0.265118f, 1.0f, + 0.968526f, 0.569700f, 0.261721f, 1.0f, + 0.970205f, 0.575028f, 0.258325f, 1.0f, + 0.971835f, 0.580382f, 0.254931f, 1.0f, + 0.973416f, 0.585761f, 0.251540f, 1.0f, + 0.974947f, 0.591165f, 0.248151f, 1.0f, + 0.976428f, 0.596595f, 0.244767f, 1.0f, + 0.977856f, 0.602051f, 0.241387f, 1.0f, + 0.979233f, 0.607532f, 0.238013f, 1.0f, + 0.980556f, 0.613039f, 0.234646f, 1.0f, + 0.981826f, 0.618572f, 0.231287f, 1.0f, + 0.983041f, 0.624131f, 0.227937f, 1.0f, + 0.984199f, 0.629718f, 0.224595f, 1.0f, + 0.985301f, 0.635330f, 0.221265f, 1.0f, + 0.986345f, 0.640969f, 0.217948f, 1.0f, + 0.987332f, 0.646633f, 0.214648f, 1.0f, + 0.988260f, 0.652325f, 0.211364f, 1.0f, + 0.989128f, 0.658043f, 0.208100f, 1.0f, + 0.989935f, 0.663787f, 0.204859f, 1.0f, + 0.990681f, 0.669558f, 0.201642f, 1.0f, + 0.991365f, 0.675355f, 0.198453f, 1.0f, + 0.991985f, 0.681179f, 0.195295f, 1.0f, + 0.992541f, 0.687030f, 0.192170f, 1.0f, + 0.993032f, 0.692907f, 0.189084f, 1.0f, + 0.993456f, 0.698810f, 0.186041f, 1.0f, + 0.993814f, 0.704741f, 0.183043f, 1.0f, + 0.994103f, 0.710698f, 0.180097f, 1.0f, + 0.994324f, 0.716681f, 0.177208f, 1.0f, + 0.994474f, 0.722691f, 0.174381f, 1.0f, + 0.994553f, 0.728728f, 0.171622f, 1.0f, + 0.994561f, 0.734791f, 0.168938f, 1.0f, + 0.994495f, 0.740880f, 0.166335f, 1.0f, + 0.994355f, 0.746995f, 0.163821f, 1.0f, + 0.994141f, 0.753137f, 0.161404f, 1.0f, + 0.993851f, 0.759304f, 0.159092f, 1.0f, + 0.993482f, 0.765499f, 0.156891f, 1.0f, + 0.993033f, 0.771720f, 0.154808f, 1.0f, + 0.992505f, 0.777967f, 0.152855f, 1.0f, + 0.991897f, 0.784239f, 0.151042f, 1.0f, + 0.991209f, 0.790537f, 0.149377f, 1.0f, + 0.990439f, 0.796859f, 0.147870f, 1.0f, + 0.989587f, 0.803205f, 0.146529f, 1.0f, + 0.988648f, 0.809579f, 0.145357f, 1.0f, + 0.987621f, 0.815978f, 0.144363f, 1.0f, + 0.986509f, 0.822401f, 0.143557f, 1.0f, + 0.985314f, 0.828846f, 0.142945f, 1.0f, + 0.984031f, 0.835315f, 0.142528f, 1.0f, + 0.982653f, 0.841812f, 0.142303f, 1.0f, + 0.981190f, 0.848329f, 0.142279f, 1.0f, + 0.979644f, 0.854866f, 0.142453f, 1.0f, + 0.977995f, 0.861432f, 0.142808f, 1.0f, + 0.976265f, 0.868016f, 0.143351f, 1.0f, + 0.974443f, 0.874622f, 0.144061f, 1.0f, + 0.972530f, 0.881250f, 0.144923f, 1.0f, + 0.970533f, 0.887896f, 0.145919f, 1.0f, + 0.968443f, 0.894564f, 0.147014f, 1.0f, + 0.966271f, 0.901249f, 0.148180f, 1.0f, + 0.964021f, 0.907950f, 0.149370f, 1.0f, + 0.961681f, 0.914672f, 0.150520f, 1.0f, + 0.959276f, 0.921407f, 0.151566f, 1.0f, + 0.956808f, 0.928152f, 0.152409f, 1.0f, + 0.954287f, 0.934908f, 0.152921f, 1.0f, + 0.951726f, 0.941671f, 0.152925f, 1.0f, + 0.949151f, 0.948435f, 0.152178f, 1.0f, + 0.946602f, 0.955190f, 0.150328f, 1.0f, + 0.944152f, 0.961916f, 0.146861f, 1.0f, + 0.941896f, 0.968590f, 0.140956f, 1.0f, + 0.940015f, 0.975158f, 0.131326f, 1.0f, }; /// viridis perceptually uniform shades of blue-green-yellow float cmap_viridis[] = { - 0.267004, 0.004874, 0.329415, 1.0, - 0.268510, 0.009605, 0.335427, 1.0, - 0.269944, 0.014625, 0.341379, 1.0, - 0.271305, 0.019942, 0.347269, 1.0, - 0.272594, 0.025563, 0.353093, 1.0, - 0.273809, 0.031497, 0.358853, 1.0, - 0.274952, 0.037752, 0.364543, 1.0, - 0.276022, 0.044167, 0.370164, 1.0, - 0.277018, 0.050344, 0.375715, 1.0, - 0.277941, 0.056324, 0.381191, 1.0, - 0.278791, 0.062145, 0.386592, 1.0, - 0.279566, 0.067836, 0.391917, 1.0, - 0.280267, 0.073417, 0.397163, 1.0, - 0.280894, 0.078907, 0.402329, 1.0, - 0.281446, 0.084320, 0.407414, 1.0, - 0.281924, 0.089666, 0.412415, 1.0, - 0.282327, 0.094955, 0.417331, 1.0, - 0.282656, 0.100196, 0.422160, 1.0, - 0.282910, 0.105393, 0.426902, 1.0, - 0.283091, 0.110553, 0.431554, 1.0, - 0.283197, 0.115680, 0.436115, 1.0, - 0.283229, 0.120777, 0.440584, 1.0, - 0.283187, 0.125848, 0.444960, 1.0, - 0.283072, 0.130895, 0.449241, 1.0, - 0.282884, 0.135920, 0.453427, 1.0, - 0.282623, 0.140926, 0.457517, 1.0, - 0.282290, 0.145912, 0.461510, 1.0, - 0.281887, 0.150881, 0.465405, 1.0, - 0.281412, 0.155834, 0.469201, 1.0, - 0.280868, 0.160771, 0.472899, 1.0, - 0.280255, 0.165693, 0.476498, 1.0, - 0.279574, 0.170599, 0.479997, 1.0, - 0.278826, 0.175490, 0.483397, 1.0, - 0.278012, 0.180367, 0.486697, 1.0, - 0.277134, 0.185228, 0.489898, 1.0, - 0.276194, 0.190074, 0.493001, 1.0, - 0.275191, 0.194905, 0.496005, 1.0, - 0.274128, 0.199721, 0.498911, 1.0, - 0.273006, 0.204520, 0.501721, 1.0, - 0.271828, 0.209303, 0.504434, 1.0, - 0.270595, 0.214069, 0.507052, 1.0, - 0.269308, 0.218818, 0.509577, 1.0, - 0.267968, 0.223549, 0.512008, 1.0, - 0.266580, 0.228262, 0.514349, 1.0, - 0.265145, 0.232956, 0.516599, 1.0, - 0.263663, 0.237631, 0.518762, 1.0, - 0.262138, 0.242286, 0.520837, 1.0, - 0.260571, 0.246922, 0.522828, 1.0, - 0.258965, 0.251537, 0.524736, 1.0, - 0.257322, 0.256130, 0.526563, 1.0, - 0.255645, 0.260703, 0.528312, 1.0, - 0.253935, 0.265254, 0.529983, 1.0, - 0.252194, 0.269783, 0.531579, 1.0, - 0.250425, 0.274290, 0.533103, 1.0, - 0.248629, 0.278775, 0.534556, 1.0, - 0.246811, 0.283237, 0.535941, 1.0, - 0.244972, 0.287675, 0.537260, 1.0, - 0.243113, 0.292092, 0.538516, 1.0, - 0.241237, 0.296485, 0.539709, 1.0, - 0.239346, 0.300855, 0.540844, 1.0, - 0.237441, 0.305202, 0.541921, 1.0, - 0.235526, 0.309527, 0.542944, 1.0, - 0.233603, 0.313828, 0.543914, 1.0, - 0.231674, 0.318106, 0.544834, 1.0, - 0.229739, 0.322361, 0.545706, 1.0, - 0.227802, 0.326594, 0.546532, 1.0, - 0.225863, 0.330805, 0.547314, 1.0, - 0.223925, 0.334994, 0.548053, 1.0, - 0.221989, 0.339161, 0.548752, 1.0, - 0.220057, 0.343307, 0.549413, 1.0, - 0.218130, 0.347432, 0.550038, 1.0, - 0.216210, 0.351535, 0.550627, 1.0, - 0.214298, 0.355619, 0.551184, 1.0, - 0.212395, 0.359683, 0.551710, 1.0, - 0.210503, 0.363727, 0.552206, 1.0, - 0.208623, 0.367752, 0.552675, 1.0, - 0.206756, 0.371758, 0.553117, 1.0, - 0.204903, 0.375746, 0.553533, 1.0, - 0.203063, 0.379716, 0.553925, 1.0, - 0.201239, 0.383670, 0.554294, 1.0, - 0.199430, 0.387607, 0.554642, 1.0, - 0.197636, 0.391528, 0.554969, 1.0, - 0.195860, 0.395433, 0.555276, 1.0, - 0.194100, 0.399323, 0.555565, 1.0, - 0.192357, 0.403199, 0.555836, 1.0, - 0.190631, 0.407061, 0.556089, 1.0, - 0.188923, 0.410910, 0.556326, 1.0, - 0.187231, 0.414746, 0.556547, 1.0, - 0.185556, 0.418570, 0.556753, 1.0, - 0.183898, 0.422383, 0.556944, 1.0, - 0.182256, 0.426184, 0.557120, 1.0, - 0.180629, 0.429975, 0.557282, 1.0, - 0.179019, 0.433756, 0.557430, 1.0, - 0.177423, 0.437527, 0.557565, 1.0, - 0.175841, 0.441290, 0.557685, 1.0, - 0.174274, 0.445044, 0.557792, 1.0, - 0.172719, 0.448791, 0.557885, 1.0, - 0.171176, 0.452530, 0.557965, 1.0, - 0.169646, 0.456262, 0.558030, 1.0, - 0.168126, 0.459988, 0.558082, 1.0, - 0.166617, 0.463708, 0.558119, 1.0, - 0.165117, 0.467423, 0.558141, 1.0, - 0.163625, 0.471133, 0.558148, 1.0, - 0.162142, 0.474838, 0.558140, 1.0, - 0.160665, 0.478540, 0.558115, 1.0, - 0.159194, 0.482237, 0.558073, 1.0, - 0.157729, 0.485932, 0.558013, 1.0, - 0.156270, 0.489624, 0.557936, 1.0, - 0.154815, 0.493313, 0.557840, 1.0, - 0.153364, 0.497000, 0.557724, 1.0, - 0.151918, 0.500685, 0.557587, 1.0, - 0.150476, 0.504369, 0.557430, 1.0, - 0.149039, 0.508051, 0.557250, 1.0, - 0.147607, 0.511733, 0.557049, 1.0, - 0.146180, 0.515413, 0.556823, 1.0, - 0.144759, 0.519093, 0.556572, 1.0, - 0.143343, 0.522773, 0.556295, 1.0, - 0.141935, 0.526453, 0.555991, 1.0, - 0.140536, 0.530132, 0.555659, 1.0, - 0.139147, 0.533812, 0.555298, 1.0, - 0.137770, 0.537492, 0.554906, 1.0, - 0.136408, 0.541173, 0.554483, 1.0, - 0.135066, 0.544853, 0.554029, 1.0, - 0.133743, 0.548535, 0.553541, 1.0, - 0.132444, 0.552216, 0.553018, 1.0, - 0.131172, 0.555899, 0.552459, 1.0, - 0.129933, 0.559582, 0.551864, 1.0, - 0.128729, 0.563265, 0.551229, 1.0, - 0.127568, 0.566949, 0.550556, 1.0, - 0.126453, 0.570633, 0.549841, 1.0, - 0.125394, 0.574318, 0.549086, 1.0, - 0.124395, 0.578002, 0.548287, 1.0, - 0.123463, 0.581687, 0.547445, 1.0, - 0.122606, 0.585371, 0.546557, 1.0, - 0.121831, 0.589055, 0.545623, 1.0, - 0.121148, 0.592739, 0.544641, 1.0, - 0.120565, 0.596422, 0.543611, 1.0, - 0.120092, 0.600104, 0.542530, 1.0, - 0.119738, 0.603785, 0.541400, 1.0, - 0.119512, 0.607464, 0.540218, 1.0, - 0.119423, 0.611141, 0.538982, 1.0, - 0.119483, 0.614817, 0.537692, 1.0, - 0.119699, 0.618490, 0.536347, 1.0, - 0.120081, 0.622161, 0.534946, 1.0, - 0.120638, 0.625828, 0.533488, 1.0, - 0.121380, 0.629492, 0.531973, 1.0, - 0.122312, 0.633153, 0.530398, 1.0, - 0.123444, 0.636809, 0.528763, 1.0, - 0.124780, 0.640461, 0.527068, 1.0, - 0.126326, 0.644107, 0.525311, 1.0, - 0.128087, 0.647749, 0.523491, 1.0, - 0.130067, 0.651384, 0.521608, 1.0, - 0.132268, 0.655014, 0.519661, 1.0, - 0.134692, 0.658636, 0.517649, 1.0, - 0.137339, 0.662252, 0.515571, 1.0, - 0.140210, 0.665859, 0.513427, 1.0, - 0.143303, 0.669459, 0.511215, 1.0, - 0.146616, 0.673050, 0.508936, 1.0, - 0.150148, 0.676631, 0.506589, 1.0, - 0.153894, 0.680203, 0.504172, 1.0, - 0.157851, 0.683765, 0.501686, 1.0, - 0.162016, 0.687316, 0.499129, 1.0, - 0.166383, 0.690856, 0.496502, 1.0, - 0.170948, 0.694384, 0.493803, 1.0, - 0.175707, 0.697900, 0.491033, 1.0, - 0.180653, 0.701402, 0.488189, 1.0, - 0.185783, 0.704891, 0.485273, 1.0, - 0.191090, 0.708366, 0.482284, 1.0, - 0.196571, 0.711827, 0.479221, 1.0, - 0.202219, 0.715272, 0.476084, 1.0, - 0.208030, 0.718701, 0.472873, 1.0, - 0.214000, 0.722114, 0.469588, 1.0, - 0.220124, 0.725509, 0.466226, 1.0, - 0.226397, 0.728888, 0.462789, 1.0, - 0.232815, 0.732247, 0.459277, 1.0, - 0.239374, 0.735588, 0.455688, 1.0, - 0.246070, 0.738910, 0.452024, 1.0, - 0.252899, 0.742211, 0.448284, 1.0, - 0.259857, 0.745492, 0.444467, 1.0, - 0.266941, 0.748751, 0.440573, 1.0, - 0.274149, 0.751988, 0.436601, 1.0, - 0.281477, 0.755203, 0.432552, 1.0, - 0.288921, 0.758394, 0.428426, 1.0, - 0.296479, 0.761561, 0.424223, 1.0, - 0.304148, 0.764704, 0.419943, 1.0, - 0.311925, 0.767822, 0.415586, 1.0, - 0.319809, 0.770914, 0.411152, 1.0, - 0.327796, 0.773980, 0.406640, 1.0, - 0.335885, 0.777018, 0.402049, 1.0, - 0.344074, 0.780029, 0.397381, 1.0, - 0.352360, 0.783011, 0.392636, 1.0, - 0.360741, 0.785964, 0.387814, 1.0, - 0.369214, 0.788888, 0.382914, 1.0, - 0.377779, 0.791781, 0.377939, 1.0, - 0.386433, 0.794644, 0.372886, 1.0, - 0.395174, 0.797475, 0.367757, 1.0, - 0.404001, 0.800275, 0.362552, 1.0, - 0.412913, 0.803041, 0.357269, 1.0, - 0.421908, 0.805774, 0.351910, 1.0, - 0.430983, 0.808473, 0.346476, 1.0, - 0.440137, 0.811138, 0.340967, 1.0, - 0.449368, 0.813768, 0.335384, 1.0, - 0.458674, 0.816363, 0.329727, 1.0, - 0.468053, 0.818921, 0.323998, 1.0, - 0.477504, 0.821444, 0.318195, 1.0, - 0.487026, 0.823929, 0.312321, 1.0, - 0.496615, 0.826376, 0.306377, 1.0, - 0.506271, 0.828786, 0.300362, 1.0, - 0.515992, 0.831158, 0.294279, 1.0, - 0.525776, 0.833491, 0.288127, 1.0, - 0.535621, 0.835785, 0.281908, 1.0, - 0.545524, 0.838039, 0.275626, 1.0, - 0.555484, 0.840254, 0.269281, 1.0, - 0.565498, 0.842430, 0.262877, 1.0, - 0.575563, 0.844566, 0.256415, 1.0, - 0.585678, 0.846661, 0.249897, 1.0, - 0.595839, 0.848717, 0.243329, 1.0, - 0.606045, 0.850733, 0.236712, 1.0, - 0.616293, 0.852709, 0.230052, 1.0, - 0.626579, 0.854645, 0.223353, 1.0, - 0.636902, 0.856542, 0.216620, 1.0, - 0.647257, 0.858400, 0.209861, 1.0, - 0.657642, 0.860219, 0.203082, 1.0, - 0.668054, 0.861999, 0.196293, 1.0, - 0.678489, 0.863742, 0.189503, 1.0, - 0.688944, 0.865448, 0.182725, 1.0, - 0.699415, 0.867117, 0.175971, 1.0, - 0.709898, 0.868751, 0.169257, 1.0, - 0.720391, 0.870350, 0.162603, 1.0, - 0.730889, 0.871916, 0.156029, 1.0, - 0.741388, 0.873449, 0.149561, 1.0, - 0.751884, 0.874951, 0.143228, 1.0, - 0.762373, 0.876424, 0.137064, 1.0, - 0.772852, 0.877868, 0.131109, 1.0, - 0.783315, 0.879285, 0.125405, 1.0, - 0.793760, 0.880678, 0.120005, 1.0, - 0.804182, 0.882046, 0.114965, 1.0, - 0.814576, 0.883393, 0.110347, 1.0, - 0.824940, 0.884720, 0.106217, 1.0, - 0.835270, 0.886029, 0.102646, 1.0, - 0.845561, 0.887322, 0.099702, 1.0, - 0.855810, 0.888601, 0.097452, 1.0, - 0.866013, 0.889868, 0.095953, 1.0, - 0.876168, 0.891125, 0.095250, 1.0, - 0.886271, 0.892374, 0.095374, 1.0, - 0.896320, 0.893616, 0.096335, 1.0, - 0.906311, 0.894855, 0.098125, 1.0, - 0.916242, 0.896091, 0.100717, 1.0, - 0.926106, 0.897330, 0.104071, 1.0, - 0.935904, 0.898570, 0.108131, 1.0, - 0.945636, 0.899815, 0.112838, 1.0, - 0.955300, 0.901065, 0.118128, 1.0, - 0.964894, 0.902323, 0.123941, 1.0, - 0.974417, 0.903590, 0.130215, 1.0, - 0.983868, 0.904867, 0.136897, 1.0, - 0.993248, 0.906157, 0.143936, 1.0, + 0.267004f, 0.004874f, 0.329415f, 1.0f, + 0.268510f, 0.009605f, 0.335427f, 1.0f, + 0.269944f, 0.014625f, 0.341379f, 1.0f, + 0.271305f, 0.019942f, 0.347269f, 1.0f, + 0.272594f, 0.025563f, 0.353093f, 1.0f, + 0.273809f, 0.031497f, 0.358853f, 1.0f, + 0.274952f, 0.037752f, 0.364543f, 1.0f, + 0.276022f, 0.044167f, 0.370164f, 1.0f, + 0.277018f, 0.050344f, 0.375715f, 1.0f, + 0.277941f, 0.056324f, 0.381191f, 1.0f, + 0.278791f, 0.062145f, 0.386592f, 1.0f, + 0.279566f, 0.067836f, 0.391917f, 1.0f, + 0.280267f, 0.073417f, 0.397163f, 1.0f, + 0.280894f, 0.078907f, 0.402329f, 1.0f, + 0.281446f, 0.084320f, 0.407414f, 1.0f, + 0.281924f, 0.089666f, 0.412415f, 1.0f, + 0.282327f, 0.094955f, 0.417331f, 1.0f, + 0.282656f, 0.100196f, 0.422160f, 1.0f, + 0.282910f, 0.105393f, 0.426902f, 1.0f, + 0.283091f, 0.110553f, 0.431554f, 1.0f, + 0.283197f, 0.115680f, 0.436115f, 1.0f, + 0.283229f, 0.120777f, 0.440584f, 1.0f, + 0.283187f, 0.125848f, 0.444960f, 1.0f, + 0.283072f, 0.130895f, 0.449241f, 1.0f, + 0.282884f, 0.135920f, 0.453427f, 1.0f, + 0.282623f, 0.140926f, 0.457517f, 1.0f, + 0.282290f, 0.145912f, 0.461510f, 1.0f, + 0.281887f, 0.150881f, 0.465405f, 1.0f, + 0.281412f, 0.155834f, 0.469201f, 1.0f, + 0.280868f, 0.160771f, 0.472899f, 1.0f, + 0.280255f, 0.165693f, 0.476498f, 1.0f, + 0.279574f, 0.170599f, 0.479997f, 1.0f, + 0.278826f, 0.175490f, 0.483397f, 1.0f, + 0.278012f, 0.180367f, 0.486697f, 1.0f, + 0.277134f, 0.185228f, 0.489898f, 1.0f, + 0.276194f, 0.190074f, 0.493001f, 1.0f, + 0.275191f, 0.194905f, 0.496005f, 1.0f, + 0.274128f, 0.199721f, 0.498911f, 1.0f, + 0.273006f, 0.204520f, 0.501721f, 1.0f, + 0.271828f, 0.209303f, 0.504434f, 1.0f, + 0.270595f, 0.214069f, 0.507052f, 1.0f, + 0.269308f, 0.218818f, 0.509577f, 1.0f, + 0.267968f, 0.223549f, 0.512008f, 1.0f, + 0.266580f, 0.228262f, 0.514349f, 1.0f, + 0.265145f, 0.232956f, 0.516599f, 1.0f, + 0.263663f, 0.237631f, 0.518762f, 1.0f, + 0.262138f, 0.242286f, 0.520837f, 1.0f, + 0.260571f, 0.246922f, 0.522828f, 1.0f, + 0.258965f, 0.251537f, 0.524736f, 1.0f, + 0.257322f, 0.256130f, 0.526563f, 1.0f, + 0.255645f, 0.260703f, 0.528312f, 1.0f, + 0.253935f, 0.265254f, 0.529983f, 1.0f, + 0.252194f, 0.269783f, 0.531579f, 1.0f, + 0.250425f, 0.274290f, 0.533103f, 1.0f, + 0.248629f, 0.278775f, 0.534556f, 1.0f, + 0.246811f, 0.283237f, 0.535941f, 1.0f, + 0.244972f, 0.287675f, 0.537260f, 1.0f, + 0.243113f, 0.292092f, 0.538516f, 1.0f, + 0.241237f, 0.296485f, 0.539709f, 1.0f, + 0.239346f, 0.300855f, 0.540844f, 1.0f, + 0.237441f, 0.305202f, 0.541921f, 1.0f, + 0.235526f, 0.309527f, 0.542944f, 1.0f, + 0.233603f, 0.313828f, 0.543914f, 1.0f, + 0.231674f, 0.318106f, 0.544834f, 1.0f, + 0.229739f, 0.322361f, 0.545706f, 1.0f, + 0.227802f, 0.326594f, 0.546532f, 1.0f, + 0.225863f, 0.330805f, 0.547314f, 1.0f, + 0.223925f, 0.334994f, 0.548053f, 1.0f, + 0.221989f, 0.339161f, 0.548752f, 1.0f, + 0.220057f, 0.343307f, 0.549413f, 1.0f, + 0.218130f, 0.347432f, 0.550038f, 1.0f, + 0.216210f, 0.351535f, 0.550627f, 1.0f, + 0.214298f, 0.355619f, 0.551184f, 1.0f, + 0.212395f, 0.359683f, 0.551710f, 1.0f, + 0.210503f, 0.363727f, 0.552206f, 1.0f, + 0.208623f, 0.367752f, 0.552675f, 1.0f, + 0.206756f, 0.371758f, 0.553117f, 1.0f, + 0.204903f, 0.375746f, 0.553533f, 1.0f, + 0.203063f, 0.379716f, 0.553925f, 1.0f, + 0.201239f, 0.383670f, 0.554294f, 1.0f, + 0.199430f, 0.387607f, 0.554642f, 1.0f, + 0.197636f, 0.391528f, 0.554969f, 1.0f, + 0.195860f, 0.395433f, 0.555276f, 1.0f, + 0.194100f, 0.399323f, 0.555565f, 1.0f, + 0.192357f, 0.403199f, 0.555836f, 1.0f, + 0.190631f, 0.407061f, 0.556089f, 1.0f, + 0.188923f, 0.410910f, 0.556326f, 1.0f, + 0.187231f, 0.414746f, 0.556547f, 1.0f, + 0.185556f, 0.418570f, 0.556753f, 1.0f, + 0.183898f, 0.422383f, 0.556944f, 1.0f, + 0.182256f, 0.426184f, 0.557120f, 1.0f, + 0.180629f, 0.429975f, 0.557282f, 1.0f, + 0.179019f, 0.433756f, 0.557430f, 1.0f, + 0.177423f, 0.437527f, 0.557565f, 1.0f, + 0.175841f, 0.441290f, 0.557685f, 1.0f, + 0.174274f, 0.445044f, 0.557792f, 1.0f, + 0.172719f, 0.448791f, 0.557885f, 1.0f, + 0.171176f, 0.452530f, 0.557965f, 1.0f, + 0.169646f, 0.456262f, 0.558030f, 1.0f, + 0.168126f, 0.459988f, 0.558082f, 1.0f, + 0.166617f, 0.463708f, 0.558119f, 1.0f, + 0.165117f, 0.467423f, 0.558141f, 1.0f, + 0.163625f, 0.471133f, 0.558148f, 1.0f, + 0.162142f, 0.474838f, 0.558140f, 1.0f, + 0.160665f, 0.478540f, 0.558115f, 1.0f, + 0.159194f, 0.482237f, 0.558073f, 1.0f, + 0.157729f, 0.485932f, 0.558013f, 1.0f, + 0.156270f, 0.489624f, 0.557936f, 1.0f, + 0.154815f, 0.493313f, 0.557840f, 1.0f, + 0.153364f, 0.497000f, 0.557724f, 1.0f, + 0.151918f, 0.500685f, 0.557587f, 1.0f, + 0.150476f, 0.504369f, 0.557430f, 1.0f, + 0.149039f, 0.508051f, 0.557250f, 1.0f, + 0.147607f, 0.511733f, 0.557049f, 1.0f, + 0.146180f, 0.515413f, 0.556823f, 1.0f, + 0.144759f, 0.519093f, 0.556572f, 1.0f, + 0.143343f, 0.522773f, 0.556295f, 1.0f, + 0.141935f, 0.526453f, 0.555991f, 1.0f, + 0.140536f, 0.530132f, 0.555659f, 1.0f, + 0.139147f, 0.533812f, 0.555298f, 1.0f, + 0.137770f, 0.537492f, 0.554906f, 1.0f, + 0.136408f, 0.541173f, 0.554483f, 1.0f, + 0.135066f, 0.544853f, 0.554029f, 1.0f, + 0.133743f, 0.548535f, 0.553541f, 1.0f, + 0.132444f, 0.552216f, 0.553018f, 1.0f, + 0.131172f, 0.555899f, 0.552459f, 1.0f, + 0.129933f, 0.559582f, 0.551864f, 1.0f, + 0.128729f, 0.563265f, 0.551229f, 1.0f, + 0.127568f, 0.566949f, 0.550556f, 1.0f, + 0.126453f, 0.570633f, 0.549841f, 1.0f, + 0.125394f, 0.574318f, 0.549086f, 1.0f, + 0.124395f, 0.578002f, 0.548287f, 1.0f, + 0.123463f, 0.581687f, 0.547445f, 1.0f, + 0.122606f, 0.585371f, 0.546557f, 1.0f, + 0.121831f, 0.589055f, 0.545623f, 1.0f, + 0.121148f, 0.592739f, 0.544641f, 1.0f, + 0.120565f, 0.596422f, 0.543611f, 1.0f, + 0.120092f, 0.600104f, 0.542530f, 1.0f, + 0.119738f, 0.603785f, 0.541400f, 1.0f, + 0.119512f, 0.607464f, 0.540218f, 1.0f, + 0.119423f, 0.611141f, 0.538982f, 1.0f, + 0.119483f, 0.614817f, 0.537692f, 1.0f, + 0.119699f, 0.618490f, 0.536347f, 1.0f, + 0.120081f, 0.622161f, 0.534946f, 1.0f, + 0.120638f, 0.625828f, 0.533488f, 1.0f, + 0.121380f, 0.629492f, 0.531973f, 1.0f, + 0.122312f, 0.633153f, 0.530398f, 1.0f, + 0.123444f, 0.636809f, 0.528763f, 1.0f, + 0.124780f, 0.640461f, 0.527068f, 1.0f, + 0.126326f, 0.644107f, 0.525311f, 1.0f, + 0.128087f, 0.647749f, 0.523491f, 1.0f, + 0.130067f, 0.651384f, 0.521608f, 1.0f, + 0.132268f, 0.655014f, 0.519661f, 1.0f, + 0.134692f, 0.658636f, 0.517649f, 1.0f, + 0.137339f, 0.662252f, 0.515571f, 1.0f, + 0.140210f, 0.665859f, 0.513427f, 1.0f, + 0.143303f, 0.669459f, 0.511215f, 1.0f, + 0.146616f, 0.673050f, 0.508936f, 1.0f, + 0.150148f, 0.676631f, 0.506589f, 1.0f, + 0.153894f, 0.680203f, 0.504172f, 1.0f, + 0.157851f, 0.683765f, 0.501686f, 1.0f, + 0.162016f, 0.687316f, 0.499129f, 1.0f, + 0.166383f, 0.690856f, 0.496502f, 1.0f, + 0.170948f, 0.694384f, 0.493803f, 1.0f, + 0.175707f, 0.697900f, 0.491033f, 1.0f, + 0.180653f, 0.701402f, 0.488189f, 1.0f, + 0.185783f, 0.704891f, 0.485273f, 1.0f, + 0.191090f, 0.708366f, 0.482284f, 1.0f, + 0.196571f, 0.711827f, 0.479221f, 1.0f, + 0.202219f, 0.715272f, 0.476084f, 1.0f, + 0.208030f, 0.718701f, 0.472873f, 1.0f, + 0.214000f, 0.722114f, 0.469588f, 1.0f, + 0.220124f, 0.725509f, 0.466226f, 1.0f, + 0.226397f, 0.728888f, 0.462789f, 1.0f, + 0.232815f, 0.732247f, 0.459277f, 1.0f, + 0.239374f, 0.735588f, 0.455688f, 1.0f, + 0.246070f, 0.738910f, 0.452024f, 1.0f, + 0.252899f, 0.742211f, 0.448284f, 1.0f, + 0.259857f, 0.745492f, 0.444467f, 1.0f, + 0.266941f, 0.748751f, 0.440573f, 1.0f, + 0.274149f, 0.751988f, 0.436601f, 1.0f, + 0.281477f, 0.755203f, 0.432552f, 1.0f, + 0.288921f, 0.758394f, 0.428426f, 1.0f, + 0.296479f, 0.761561f, 0.424223f, 1.0f, + 0.304148f, 0.764704f, 0.419943f, 1.0f, + 0.311925f, 0.767822f, 0.415586f, 1.0f, + 0.319809f, 0.770914f, 0.411152f, 1.0f, + 0.327796f, 0.773980f, 0.406640f, 1.0f, + 0.335885f, 0.777018f, 0.402049f, 1.0f, + 0.344074f, 0.780029f, 0.397381f, 1.0f, + 0.352360f, 0.783011f, 0.392636f, 1.0f, + 0.360741f, 0.785964f, 0.387814f, 1.0f, + 0.369214f, 0.788888f, 0.382914f, 1.0f, + 0.377779f, 0.791781f, 0.377939f, 1.0f, + 0.386433f, 0.794644f, 0.372886f, 1.0f, + 0.395174f, 0.797475f, 0.367757f, 1.0f, + 0.404001f, 0.800275f, 0.362552f, 1.0f, + 0.412913f, 0.803041f, 0.357269f, 1.0f, + 0.421908f, 0.805774f, 0.351910f, 1.0f, + 0.430983f, 0.808473f, 0.346476f, 1.0f, + 0.440137f, 0.811138f, 0.340967f, 1.0f, + 0.449368f, 0.813768f, 0.335384f, 1.0f, + 0.458674f, 0.816363f, 0.329727f, 1.0f, + 0.468053f, 0.818921f, 0.323998f, 1.0f, + 0.477504f, 0.821444f, 0.318195f, 1.0f, + 0.487026f, 0.823929f, 0.312321f, 1.0f, + 0.496615f, 0.826376f, 0.306377f, 1.0f, + 0.506271f, 0.828786f, 0.300362f, 1.0f, + 0.515992f, 0.831158f, 0.294279f, 1.0f, + 0.525776f, 0.833491f, 0.288127f, 1.0f, + 0.535621f, 0.835785f, 0.281908f, 1.0f, + 0.545524f, 0.838039f, 0.275626f, 1.0f, + 0.555484f, 0.840254f, 0.269281f, 1.0f, + 0.565498f, 0.842430f, 0.262877f, 1.0f, + 0.575563f, 0.844566f, 0.256415f, 1.0f, + 0.585678f, 0.846661f, 0.249897f, 1.0f, + 0.595839f, 0.848717f, 0.243329f, 1.0f, + 0.606045f, 0.850733f, 0.236712f, 1.0f, + 0.616293f, 0.852709f, 0.230052f, 1.0f, + 0.626579f, 0.854645f, 0.223353f, 1.0f, + 0.636902f, 0.856542f, 0.216620f, 1.0f, + 0.647257f, 0.858400f, 0.209861f, 1.0f, + 0.657642f, 0.860219f, 0.203082f, 1.0f, + 0.668054f, 0.861999f, 0.196293f, 1.0f, + 0.678489f, 0.863742f, 0.189503f, 1.0f, + 0.688944f, 0.865448f, 0.182725f, 1.0f, + 0.699415f, 0.867117f, 0.175971f, 1.0f, + 0.709898f, 0.868751f, 0.169257f, 1.0f, + 0.720391f, 0.870350f, 0.162603f, 1.0f, + 0.730889f, 0.871916f, 0.156029f, 1.0f, + 0.741388f, 0.873449f, 0.149561f, 1.0f, + 0.751884f, 0.874951f, 0.143228f, 1.0f, + 0.762373f, 0.876424f, 0.137064f, 1.0f, + 0.772852f, 0.877868f, 0.131109f, 1.0f, + 0.783315f, 0.879285f, 0.125405f, 1.0f, + 0.793760f, 0.880678f, 0.120005f, 1.0f, + 0.804182f, 0.882046f, 0.114965f, 1.0f, + 0.814576f, 0.883393f, 0.110347f, 1.0f, + 0.824940f, 0.884720f, 0.106217f, 1.0f, + 0.835270f, 0.886029f, 0.102646f, 1.0f, + 0.845561f, 0.887322f, 0.099702f, 1.0f, + 0.855810f, 0.888601f, 0.097452f, 1.0f, + 0.866013f, 0.889868f, 0.095953f, 1.0f, + 0.876168f, 0.891125f, 0.095250f, 1.0f, + 0.886271f, 0.892374f, 0.095374f, 1.0f, + 0.896320f, 0.893616f, 0.096335f, 1.0f, + 0.906311f, 0.894855f, 0.098125f, 1.0f, + 0.916242f, 0.896091f, 0.100717f, 1.0f, + 0.926106f, 0.897330f, 0.104071f, 1.0f, + 0.935904f, 0.898570f, 0.108131f, 1.0f, + 0.945636f, 0.899815f, 0.112838f, 1.0f, + 0.955300f, 0.901065f, 0.118128f, 1.0f, + 0.964894f, 0.902323f, 0.123941f, 1.0f, + 0.974417f, 0.903590f, 0.130215f, 1.0f, + 0.983868f, 0.904867f, 0.136897f, 1.0f, + 0.993248f, 0.906157f, 0.143936f, 1.0f, }; diff --git a/src/backend/common/image.hpp b/src/backend/common/image.hpp index f4a04c01..0381a0c8 100644 --- a/src/backend/common/image.hpp +++ b/src/backend/common/image.hpp @@ -50,7 +50,7 @@ class Image { inline unsigned pbo() const { return mImage->pbo(); } - inline size_t size() const { return mImage->size(); } + inline uint size() const { return mImage->size(); } inline void render(const int pWindowId, const int pX, const int pY, const int pVPW, const int pVPH, diff --git a/src/backend/opengl/chart_impl.cpp b/src/backend/opengl/chart_impl.cpp index e0801a2d..4f4d9264 100644 --- a/src/backend/opengl/chart_impl.cpp +++ b/src/backend/opengl/chart_impl.cpp @@ -140,7 +140,7 @@ void AbstractChart::renderTickLabels( AbstractChart::AbstractChart(const float pLeftMargin, const float pRightMargin, const float pTopMargin, const float pBottomMargin) - : mTickCount(9), mTickSize(10), + : mTickCount(9), mTickSize(10.0f), mLeftMargin(pLeftMargin), mRightMargin(pRightMargin), mTopMargin(pTopMargin), mBottomMargin(pBottomMargin), mXLabelFormat("%4.1f"), mXMax(0), mXMin(0), @@ -383,7 +383,7 @@ int getDigitCount(float value) } } } else { - int num = value; + int num = int(value); while (num) { num = num/10; count++; @@ -484,7 +484,7 @@ void chart2d_impl::render(const int pWindowId, chart2d_impl::unbindResources(); glEnable(GL_SCISSOR_TEST); - glScissor(pX+lgap, pY+bgap, w, h); + glScissor(gl::GLint(pX+lgap), gl::GLint(pY+bgap), gl::GLsizei(w), gl::GLsizei(h)); /* render all renderables */ for (auto renderable : mRenderables) { @@ -868,7 +868,7 @@ void chart3d_impl::render(const int pWindowId, chart3d_impl::unbindResources(); glEnable(GL_SCISSOR_TEST); - glScissor(pX+lgap, pY+bgap, w, h); + glScissor(gl::GLint(pX + lgap), gl::GLint(pY + bgap), gl::GLsizei(w), gl::GLsizei(h)); glm::mat4 renderableMat = PROJECTION * pView * VIEW; @@ -915,9 +915,9 @@ void chart3d_impl::render(const int pWindowId, const int trgtFntSize = calcTrgtFntSize(w, h); - renderTickLabels(pWindowId, w, h, mZText, trgtFntSize, trans, 0); - renderTickLabels(pWindowId, w, h, mYText, trgtFntSize, trans, mTickCount); - renderTickLabels(pWindowId, w, h, mXText, trgtFntSize, trans, 2*mTickCount); + renderTickLabels(pWindowId, uint(w), uint(h), mZText, trgtFntSize, trans, 0); + renderTickLabels(pWindowId, uint(w), uint(h), mYText, trgtFntSize, trans, mTickCount); + renderTickLabels(pWindowId, uint(w), uint(h), mXText, trgtFntSize, trans, 2*mTickCount); auto &fonter = getChartFont(); fonter->setOthro2D(int(w), int(h)); @@ -928,7 +928,7 @@ void chart3d_impl::render(const int pWindowId, if (!mZTitle.empty()) { glm::vec4 res = trans * glm::vec4(-1.0f, -1.0f, 0.0f, 1.0f); - pos[0] = trgtFntSize; + pos[0] = float(trgtFntSize); pos[1] = h*(res.y/res.w+1.0f)/2.0f; fonter->render(pWindowId, pos, BLACK, mZTitle.c_str(), trgtFntSize, true); diff --git a/src/backend/opengl/chart_impl.hpp b/src/backend/opengl/chart_impl.hpp index 4cb49b36..db929ec9 100644 --- a/src/backend/opengl/chart_impl.hpp +++ b/src/backend/opengl/chart_impl.hpp @@ -32,8 +32,8 @@ class AbstractChart : public AbstractRenderable { std::vector mXText; std::vector mYText; std::vector mZText; - int mTickCount; /* should be an odd number always */ - int mTickSize; + int mTickCount; /* should be an odd number always */ + float mTickSize; /* margin variables represent the % of current dimensions * and not the exact units of length */ float mLeftMargin; diff --git a/src/backend/opengl/common.hpp b/src/backend/opengl/common.hpp index f5837f9c..fedfb6a1 100644 --- a/src/backend/opengl/common.hpp +++ b/src/backend/opengl/common.hpp @@ -12,10 +12,10 @@ #include #include #include - +#pragma warning (push, 0) #include #include - +#pragma warning (pop) #define GLM_FORCE_RADIANS #include #include diff --git a/src/backend/opengl/font_atlas_impl.cpp b/src/backend/opengl/font_atlas_impl.cpp index 1fda2dcd..41e3e4c2 100644 --- a/src/backend/opengl/font_atlas_impl.cpp +++ b/src/backend/opengl/font_atlas_impl.cpp @@ -70,26 +70,26 @@ namespace opengl int FontAtlas::fit(const size_t pIndex, const size_t pWidth, const size_t pHeight) { auto node = nodes[pIndex]; - int x = node.x; - int y = node.y; - int widthLeft = pWidth; - int i = pIndex; + int x = int(node.x); + int y = int(node.y); + int widthLeft = int(pWidth); + int i = int(pIndex); if ((x + pWidth) > (mWidth-BORDER_GAP)) { return -1; } - y = node.y; + y = int(node.y); while (widthLeft > 0) { auto node = nodes[i]; if (node.y > y) { - y = node.y; + y = int(node.y); } if ((y + pHeight) > (mHeight-BORDER_GAP)) { return -1; } - widthLeft -= node.z; + widthLeft -= int(node.z); ++i; } return y; @@ -177,10 +177,10 @@ glm::vec4 FontAtlas::getRegion(const size_t pWidth, const size_t pHeight) (((y + pHeight) == best_height) && (node.z < best_width)) ) { best_height = y + pHeight; - best_index = i; - best_width = node.z; + best_index = int(i); + best_width = int(node.z); region.x = node.x; - region.y = y; + region.y = float(y); } } } @@ -204,7 +204,7 @@ glm::vec4 FontAtlas::getRegion(const size_t pWidth, const size_t pHeight) if (node.x < (prev.x + prev.z) ) { - int shrink = prev.x + prev.z - node.x; + int shrink = int(prev.x + prev.z - node.x); node.x += shrink; node.z -= shrink; if (node.z <= 0) { @@ -250,21 +250,21 @@ void FontAtlas::upload() if (mDepth == 4) { #ifdef GL_UNSIGNED_INT_8_8_8_8_REV - glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RGBA), mWidth, mHeight, 0, GL_BGRA, + glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RGBA), gl::GLsizei(mWidth), gl::GLsizei(mHeight), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, mData.data()); #else - glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RGBA), mWidth, mHeight, 0, GL_RGBA, + glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RGBA), gl::GLsizei(mWidth), gl::GLsizei(mHeight), 0, GL_RGBA, GL_UNSIGNED_BYTE, mData.data()); #endif } else if (mDepth == 3) { - glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RGB), mWidth, mHeight, 0, GL_RGB, + glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RGB), gl::GLsizei(mWidth), gl::GLsizei(mHeight), 0, GL_RGB, GL_UNSIGNED_BYTE, mData.data()); } else { #if defined(GL_ES_VERSION_2_0) || defined(GL_ES_VERSION_3_0) - glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_LUMINANCE), mWidth, mHeight, 0, GL_LUMINANCE, + glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_LUMINANCE), gl::GLsizei(mWidth), gl::GLsizei(mHeight), 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, mData.data()); #else - glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RED), mWidth, mHeight, 0, GL_RED, + glTexImage2D(GL_TEXTURE_2D, 0, static_cast(GL_RED), gl::GLsizei(mWidth), gl::GLsizei(mHeight), 0, GL_RED, GL_UNSIGNED_BYTE, mData.data()); #endif } diff --git a/src/backend/opengl/font_impl.cpp b/src/backend/opengl/font_impl.cpp index 70645fc8..d4f446f7 100644 --- a/src/backend/opengl/font_impl.cpp +++ b/src/backend/opengl/font_impl.cpp @@ -103,7 +103,7 @@ void font_impl::loadAtlasWithGlyphs(const size_t pFontSize) FT_THROW_ERROR("Freetype charmap set failed", FG_ERR_FREETYPE_ERROR); } /* set the pixel size of font */ - bError = FT_Set_Pixel_Sizes(face, 0, pFontSize); + bError = FT_Set_Pixel_Sizes(face, 0, (FT_UInt)pFontSize); if (bError) { FT_Done_Face(face); FT_Done_FreeType(library); @@ -113,7 +113,7 @@ void font_impl::loadAtlasWithGlyphs(const size_t pFontSize) size_t missed = 0; /* retrieve the list of current font size */ - auto& currList = mGlyphLists[pFontSize-MIN_FONT_SIZE]; + auto& currList = mGlyphLists[pFontSize-size_t(MIN_FONT_SIZE)]; for (int i=START_CHAR; i<=END_CHAR; ++i) { @@ -169,8 +169,8 @@ void font_impl::loadAtlasWithGlyphs(const size_t pFontSize) w = w-1; // reduce by one again to leave one pixel border h = h-1; // reduce by one again to leave one pixel border - int x = region.x; - int y = region.y; + int x = int(region.x); + int y = int(region.y); mAtlas->setRegion(x, y, w, h, bmp.buffer, bmp.pitch); @@ -182,8 +182,8 @@ void font_impl::loadAtlasWithGlyphs(const size_t pFontSize) glyph->mBearingX = face->glyph->metrics.horiBearingX>>6; glyph->mBearingY = face->glyph->metrics.horiBearingY>>6; - glyph->mAdvanceX = face->glyph->advance.x>>6; - glyph->mAdvanceY = (face->glyph->metrics.height - face->glyph->metrics.horiBearingY)>>6; + glyph->mAdvanceX = float(face->glyph->advance.x>>6); + glyph->mAdvanceY = float((face->glyph->metrics.height - face->glyph->metrics.horiBearingY)>>6); glyph->mS0 = x/(float)mAtlas->width(); glyph->mT1 = y/(float)mAtlas->height(); @@ -210,8 +210,8 @@ void font_impl::bindResources(int pWindowId) glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glBindBuffer(GL_ARRAY_BUFFER, mVBO); - glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sz, 0); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 2*sz, reinterpret_cast(sz)); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, gl::GLsizei(2*sz), 0); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, gl::GLsizei(2*sz), reinterpret_cast(sz)); /* store the vertex array object corresponding to * the window instance in the map */ mVAOMap[pWindowId] = vao; @@ -256,7 +256,7 @@ font_impl::font_impl() mTexIndex = mProgram.getUniformLocation("tex"); mClrIndex = mProgram.getUniformLocation("textColor"); - mGlyphLists.resize(MAX_FONT_SIZE-MIN_FONT_SIZE+1, GlyphList()); + mGlyphLists.resize(size_t(MAX_FONT_SIZE-MIN_FONT_SIZE)+1, GlyphList()); } font_impl::~font_impl() @@ -292,7 +292,7 @@ void font_impl::loadFont(const char* const pFile) mTTFfile = pFile; /* Load different font sizes into font atlas */ - for (size_t s=MIN_FONT_SIZE; s<=MAX_FONT_SIZE; ++s) { + for (size_t s = size_t(MIN_FONT_SIZE); s <= size_t(MAX_FONT_SIZE); ++s) { loadAtlasWithGlyphs(s); } @@ -432,15 +432,15 @@ void font_impl::render(int pWindowId, float loc_y = pPos[1]; if (pFontSizeMAX_FONT_SIZE) { - pFontSize = MAX_FONT_SIZE; + pFontSize = size_t(MAX_FONT_SIZE); } glm::mat4 R = (pIsVertical ? glm::rotate(I, glm::radians(90.f), glm::vec3(0,0,1)) : I); - auto& glyphList = mGlyphLists[pFontSize - MIN_FONT_SIZE]; + auto& glyphList = mGlyphLists[pFontSize - size_t(MIN_FONT_SIZE)]; for (size_t i=0; imOffset, 4); + glDrawArrays(GL_TRIANGLE_STRIP, gl::GLint(g->mOffset), 4); if (pIsVertical) { loc_y += (g->mAdvanceX); diff --git a/src/backend/opengl/glfw/window.cpp b/src/backend/opengl/glfw/window.cpp index a079849a..5fb5a5da 100644 --- a/src/backend/opengl/glfw/window.cpp +++ b/src/backend/opengl/glfw/window.cpp @@ -175,7 +175,7 @@ Widget::Widget(int pWidth, int pHeight, const char* pTitle, const Widget* pWindo auto cursorCallback = [](GLFWwindow* w, double xpos, double ypos) { - static_cast(glfwGetWindowUserPointer(w))->cursorHandler(xpos, ypos); + static_cast(glfwGetWindowUserPointer(w))->cursorHandler(float(xpos), float(ypos)); }; auto mouseButtonCallback = [](GLFWwindow* w, int button, int action, int mods) @@ -301,9 +301,9 @@ void Widget::cursorHandler(const float pXPos, const float pYPos) } else if (mButton == GLFW_MOUSE_BUTTON_LEFT + 10 * GLFW_MOD_ALT || mButton == GLFW_MOUSE_BUTTON_LEFT + 10 * GLFW_MOD_CONTROL) { // Zoom - if(deltaY != 0) { - if(deltaY < 0) { - deltaY = 1.0 / (-deltaY); + if(deltaY != 0.0f) { + if(deltaY < 0.0f) { + deltaY = 1.0f / (-deltaY); } glm::mat4 vMat = scale(viewMat, glm::vec3(pow(deltaY, SPEED))); @@ -317,8 +317,8 @@ void Widget::cursorHandler(const float pXPos, const float pYPos) glfwGetWindowSize(mWindow, &width, &height); if (mLastXPos != pXPos || mLastYPos != pYPos) { - glm::vec3 op1 = trackballPoint(mLastXPos, mLastYPos, width, height); - glm::vec3 op2 = trackballPoint(pXPos, pYPos, width, height); + glm::vec3 op1 = trackballPoint(mLastXPos, mLastYPos, float(width), float(height)); + glm::vec3 op2 = trackballPoint(pXPos, pYPos, float(width), float(height)); float angle = std::acos(std::min(1.0f, glm::dot(op1, op2))); @@ -341,8 +341,8 @@ void Widget::mouseButtonHandler(int pButton, int pAction, int pMods) { double x, y; glfwGetCursorPos(mWindow, &x, &y); - mLastXPos = x; - mLastYPos = y; + mLastXPos = float(x); + mLastYPos = float(y); mButton = -1; if (pAction == GLFW_PRESS) { @@ -357,8 +357,8 @@ void Widget::mouseButtonHandler(int pButton, int pAction, int pMods) } // reset UI transforms upon mouse middle click if (pButton == GLFW_MOUSE_BUTTON_MIDDLE && pMods == GLFW_MOD_CONTROL && pAction == GLFW_PRESS) { - setCellViewMatrix(x, y, IDENTITY); - setCellOrientationMatrix(x, y, IDENTITY); + setCellViewMatrix(float(x), float(y), IDENTITY); + setCellOrientationMatrix(float(x), float(y), IDENTITY); } } diff --git a/src/backend/opengl/image_impl.cpp b/src/backend/opengl/image_impl.cpp index 9edd4880..cc631e5b 100644 --- a/src/backend/opengl/image_impl.cpp +++ b/src/backend/opengl/image_impl.cpp @@ -162,7 +162,7 @@ void image_impl::render(const int pWindowId, mProgram.bind(); - glUniform1i(mNumCIndex, mFormatSize); + glUniform1i(mNumCIndex, gl::GLint(mFormatSize)); glUniform1f(mAlphaIndex, mAlpha); // load texture from PBO diff --git a/src/backend/opengl/surface_impl.cpp b/src/backend/opengl/surface_impl.cpp index 300fd3fe..cb7863a2 100644 --- a/src/backend/opengl/surface_impl.cpp +++ b/src/backend/opengl/surface_impl.cpp @@ -127,7 +127,7 @@ void surface_impl::renderGraph(const int pWindowId, const glm::mat4& transform) glUniform1i(mSurfPVAIndex, mIsPVAOn); bindResources(pWindowId); - glDrawElements(GL_TRIANGLE_STRIP, mIBOSize, GL_UNSIGNED_INT, (void*)0); + glDrawElements(GL_TRIANGLE_STRIP, gl::GLsizei(mIBOSize), GL_UNSIGNED_INT, (void*)0); unbindResources(); mSurfProgram.unbind(); @@ -142,7 +142,7 @@ void surface_impl::renderGraph(const int pWindowId, const glm::mat4& transform) glUniform4fv(mMarkerColIndex, 1, mColor); bindResources(pWindowId); - glDrawElements(GL_POINTS, mIBOSize, GL_UNSIGNED_INT, (void*)0); + glDrawElements(GL_POINTS, gl::GLsizei(mIBOSize), GL_UNSIGNED_INT, (void*)0); unbindResources(); mMarkerProgram.unbind(); @@ -164,7 +164,7 @@ surface_impl::surface_impl(unsigned pNumXPoints, unsigned pNumYPoints, mSurfAlphaIndex(-1), mSurfPVCIndex(-1), mSurfPVAIndex(-1) { CheckGL("Begin surface_impl::surface_impl"); - setColor(0.9, 0.5, 0.6, 1.0); + setColor(0.9f, 0.5f, 0.6f, 1.0f); mMarkerMatIndex = mMarkerProgram.getUniformLocation("transform"); mMarkerPVCIndex = mMarkerProgram.getUniformLocation("isPVCOn"); @@ -264,7 +264,7 @@ void scatter3_impl::renderGraph(const int pWindowId, const glm::mat4& transform) glUniform4fv(mMarkerColIndex, 1, mColor); bindResources(pWindowId); - glDrawElements(GL_POINTS, mIBOSize, GL_UNSIGNED_INT, (void*)0); + glDrawElements(GL_POINTS, gl::GLsizei(mIBOSize), GL_UNSIGNED_INT, (void*)0); unbindResources(); mMarkerProgram.unbind(); From a4a625ce9e3e2f4b5ef821f74412e85eb7bbb080 Mon Sep 17 00:00:00 2001 From: pradeep Date: Sun, 28 Jan 2018 19:10:18 +0530 Subject: [PATCH 13/55] misc: CPack config for installers --- CMakeLists.txt | 56 +- CMakeModules/CPackConfig.cmake | 194 ++++ CMakeModules/ConditionalDirectory.cmake | 6 - CMakeModules/DependencyCheck.cmake | 5 - CMakeModules/FGInstallDirs.cmake | 10 +- CMakeModules/ForgeConfigVersion.cmake.in | 73 -- CMakeModules/InternalUtils.cmake | 34 + CMakeModules/nsis/NSIS.InstallOptions.ini.in | 46 + CMakeModules/nsis/NSIS.definitions.nsh.in | 31 + CMakeModules/nsis/NSIS.template.in | 975 +++++++++++++++++++ CMakeModules/platform.cmake | 26 + assets/arrayfire.ico | Bin 0 -> 36197 bytes assets/arrayfire_icon.png | Bin 0 -> 3738 bytes assets/arrayfire_logo.bmp | Bin 0 -> 18586 bytes assets/arrayfire_logo.png | Bin 0 -> 6587 bytes assets/arrayfire_sym.bmp | Bin 0 -> 179142 bytes examples/cuda/CMakeLists.txt | 2 + src/backend/opengl/CMakeLists.txt | 32 +- 18 files changed, 1388 insertions(+), 102 deletions(-) create mode 100644 CMakeModules/CPackConfig.cmake delete mode 100644 CMakeModules/ConditionalDirectory.cmake delete mode 100644 CMakeModules/DependencyCheck.cmake delete mode 100644 CMakeModules/ForgeConfigVersion.cmake.in create mode 100644 CMakeModules/InternalUtils.cmake create mode 100644 CMakeModules/nsis/NSIS.InstallOptions.ini.in create mode 100644 CMakeModules/nsis/NSIS.definitions.nsh.in create mode 100644 CMakeModules/nsis/NSIS.template.in create mode 100644 CMakeModules/platform.cmake create mode 100644 assets/arrayfire.ico create mode 100644 assets/arrayfire_icon.png create mode 100644 assets/arrayfire_logo.bmp create mode 100644 assets/arrayfire_logo.png create mode 100644 assets/arrayfire_sym.bmp diff --git a/CMakeLists.txt b/CMakeLists.txt index 77e21cd0..dcf0c55a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.5) OPTION(USE_HUNTER "Use Hunter cmake package handler" OFF) if(USE_HUNTER) include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) - HunterGate( URL "https://github.com/ruslo/hunter/archive/v0.19.208.tar.gz" SHA1 "4128ac8c79c21b250bf825e8119ce0bff05e5132" @@ -19,11 +18,11 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeMod set(CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}prefix;${CMAKE_PREFIX_PATH}") include(BuildType) -include(CMakeDependentOption) -include(ConditionalDirectory) -include(DependencyCheck) -include(Version) include(FGInstallDirs) +include(GetPrerequisites) +include(InternalUtils) +include(platform) +include(Version) if(USE_HUNTER) hunter_add_package(glbinding) @@ -83,12 +82,57 @@ conditional_directory(BUILD_EXAMPLES examples) #-------------------------------------------------------------------- install(DIRECTORY include/ DESTINATION ${FG_INSTALL_INC_DIR} + COMPONENT headers FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" PATTERN ".gitignore" EXCLUDE ) +install(EXPORT ForgeTargets + NAMESPACE Forge:: + DESTINATION ${FG_INSTALL_CMAKE_DIR} + COMPONENT cmake) + +export(EXPORT ForgeTargets + NAMESPACE Forge:: + FILE cmake/ForgeTargets.cmake) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${Forge_BINARY_DIR}/cmake/ForgeConfigVersion.cmake" + COMPATIBILITY SameMajorVersion +) + +# This config file will be installed so we need to set the install_destination +# path relative to the install path +set(INCLUDE_DIRS include) +set(CMAKE_DIR ${FG_INSTALL_CMAKE_DIR}) +configure_package_config_file( + ${CMAKE_MODULE_PATH}/ForgeConfig.cmake.in + cmake/install/ForgeConfig.cmake + INSTALL_DESTINATION "${FG_INSTALL_CMAKE_DIR}" + PATH_VARS INCLUDE_DIRS CMAKE_DIR + ) + +install(FILES ${Forge_BINARY_DIR}/cmake/install/ForgeConfig.cmake + ${Forge_BINARY_DIR}/cmake/ForgeConfigVersion.cmake + DESTINATION ${FG_INSTALL_CMAKE_DIR} + COMPONENT cmake) + +# Following file will be used to create the config file for the build directory. +# These config files will be used by the examples to find the Forge +# libraries +set(INCLUDE_DIRS "${Forge_SOURCE_DIR}/include" "${Forge_BINARY_DIR}/include") +set(CMAKE_DIR "${Forge_BINARY_DIR}/cmake") +configure_package_config_file( + ${CMAKE_MODULE_PATH}/ForgeConfig.cmake.in + cmake/ForgeConfig.cmake + INSTALL_DESTINATION "${Forge_BINARY_DIR}/cmake" + PATH_VARS INCLUDE_DIRS CMAKE_DIR + INSTALL_PREFIX "${Forge_BINARY_DIR}" +) + #-------------------------------------------------------------------- # Install examples #-------------------------------------------------------------------- @@ -100,3 +144,5 @@ install(DIRECTORY include/ install(DIRECTORY examples/ #NOTE The slash at the end is important DESTINATION ${FG_INSTALL_EXAMPLE_DIR} COMPONENT examples) + +include(CPackConfig) diff --git a/CMakeModules/CPackConfig.cmake b/CMakeModules/CPackConfig.cmake new file mode 100644 index 00000000..a5e64774 --- /dev/null +++ b/CMakeModules/CPackConfig.cmake @@ -0,0 +1,194 @@ +# Copyright (c) 2017, ArrayFire +# All rights reserved. +# +# This file is distributed under 3-clause BSD license. +# The complete license agreement can be obtained at: +# http://arrayfire.com/licenses/BSD-3-Clause + +cmake_minimum_required(VERSION 3.5) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/CMakeModules/nsis") + +include(Version) +include(CPackIFW) + +set(VENDOR_NAME "ArrayFire") +set(APP_NAME "Forge") +set(APP_URL "www.arrayfire.com") + +# Long description of the package +set(CPACK_PACKAGE_DESCRIPTION +"Forge is an OpenGL interop library that can be used with ArrayFire or any other application using CUDA or +OpenCL compute backend. The goal of **Forge** is to provide high performance OpenGL visualizations +for C/C++ applications that use CUDA/OpenCL. Forge uses OpenGL >=3.3 forward compatible contexts, so +please make sure you have capable hardware before trying it out.") + +# Short description of the package +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "A high performance visualization library.") + +# Common settings to all packaging tools +set(CPACK_PREFIX_DIR ${CMAKE_INSTALL_PREFIX}) +set(CPACK_PACKAGE_NAME "${APP_NAME}") +set(CPACK_PACKAGE_VENDOR "${VENDOR_NAME}") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY ${APP_NAME}) +set(CPACK_PACKAGE_CONTACT "ArrayFire Development Group ") +set(MY_CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/assets/arrayfire.ico") + +file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}/assets/" NATIVE_ASSETS_PATH) +string(REPLACE "\\" "\\\\" NATIVE_ASSETS_PATH ${NATIVE_ASSETS_PATH}) +set(CPACK_FG_ASSETS_DIR "${NATIVE_ASSETS_PATH}") + +set(CPACK_PACKAGE_VERSION ${Forge_VERSION}) +set(CPACK_PACKAGE_VERSION_MAJOR "${Forge_VERSION_MAJOR}") +set(CPACK_PACKAGE_VERSION_MINOR "${Forge_VERSION_MINOR}") +set(CPACK_PACKAGE_VERSION_PATCH "${Forge_VERSION_PATCH}") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "${APP_NAME}") +set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}) + +# Platform specific settings for CPACK generators +# - OSX specific +# - DragNDrop (OSX only) +# - PackageMaker (OSX only) +# - OSXX11 (OSX only) +# - Bundle (OSX only) +# - Windows +# - NSIS64 Generator +if (WIN32) + set(WIN_INSTALL_SOURCE ${PROJECT_SOURCE_DIR}/CMakeModules/nsis) + + set(LICENSE_FILE "${Forge_SOURCE_DIR}/LICENSE") + set(LICENSE_FILE_OUT "${CMAKE_CURRENT_BINARY_DIR}/license.txt") + configure_file(${LICENSE_FILE} ${LICENSE_FILE_OUT}) + set(CPACK_RESOURCE_FILE_LICENSE ${LICENSE_FILE_OUT}) + + #NSIS SPECIFIC VARIABLES + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) + set(CPACK_NSIS_MODIFY_PATH ON) + set(CPACK_NSIS_DISPLAY_NAME "${APP_NAME}") + set(CPACK_NSIS_PACKAGE_NAME "${APP_NAME}") + set(CPACK_NSIS_HELP_LINK "${APP_URL}") + set(CPACK_NSIS_URL_INFO_ABOUT "${APP_URL}") + set(CPACK_NSIS_INSTALLED_ICON_NAME "${MY_CPACK_PACKAGE_ICON}") + if (CMAKE_CL_64) + set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") + else (CMAKE_CL_64) + set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") + endif (CMAKE_CL_64) +else () + set(CPACK_RESOURCE_FILE_LICENSE "${Forge_SOURCE_DIR}/LICENSE") + set(CPACK_RESOURCE_FILE_README "${Forge_SOURCE_DIR}/README.md") +endif () + +# Set the default components installed in the package +get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) + +include(CPackComponent) + +cpack_add_install_type(Development + DISPLAY_NAME "Development") +cpack_add_install_type(Extra + DISPLAY_NAME "Extra") +cpack_add_install_type(Runtime + DISPLAY_NAME "Runtime") + +cpack_add_component(dependencies + DISPLAY_NAME "Forge Library Dependencies" + DESCRIPTION "Libraries required by forge OpenGL backend" + INSTALL_TYPES Development Runtime) + +cpack_add_component(forge + DISPLAY_NAME "Forge" + DESCRIPTION "Forge library." + DEPENDS dependencies + INSTALL_TYPES Development Runtime) + +cpack_add_component(documentation + DISPLAY_NAME "Documentation" + DESCRIPTION "Doxygen documentation" + INSTALL_TYPES Extra) + +cpack_add_component(headers + DISPLAY_NAME "C/C++ Headers" + DESCRIPTION "Headers for the Forge Libraries." + INSTALL_TYPES Development) + +cpack_add_component(cmake + DISPLAY_NAME "CMake Support" + DESCRIPTION "Configuration files to use ArrayFire using CMake." + INSTALL_TYPES Development) + +cpack_add_component(examples + DISPLAY_NAME "Forge Examples" + DESCRIPTION "Various examples using Forge." + INSTALL_TYPES Extra) + +## +# IFW CPACK generator +# Uses Qt installer framework, cross platform installer generator. +# Uniform installer GUI on all major desktop platforms: Windows, OSX & Linux. +## +set(CPACK_IFW_PACKAGE_TITLE "${CPACK_PACKAGE_NAME}") +set(CPACK_IFW_PACKAGE_PUBLISHER "${CPACK_PACKAGE_VENDOR}") +set(CPACK_IFW_PRODUCT_URL "${APP_URL}") +set(CPACK_IFW_PACKAGE_ICON "${MY_CPACK_PACKAGE_ICON}") +set(CPACK_IFW_PACKAGE_WINDOW_ICON "${CMAKE_SOURCE_DIR}/assets/arrayfire_icon.png") +set(CPACK_IFW_PACKAGE_LOGO "${CMAKE_SOURCE_DIR}/assets/arrayfire_logo.png") +if (WIN32) + set(CPACK_IFW_ADMIN_TARGET_DIRECTORY "$PROGRAMFILES64/${CPACK_PACKAGE_INSTALL_DIRECTORY}") +else () + set(CPACK_IFW_ADMIN_TARGET_DIRECTORY "/opt/${CPACK_PACKAGE_INSTALL_DIRECTORY}") +endif () +cpack_ifw_configure_component(dependencies) +cpack_ifw_configure_component(forge) +cpack_ifw_configure_component(documentation) +cpack_ifw_configure_component(headers) +cpack_ifw_configure_component(cmake) +cpack_ifw_configure_component(examples) + +## +# Debian package +## +set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) +set(CPACK_DEB_COMPONENT_INSTALL ON) +#set(CMAKE_INSTALL_RPATH /usr/lib;${Forge_BUILD_DIR}/third_party/forge/lib) +#set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE http://www.arrayfire.com) + +## +# RPM package +## +set(CPACK_RPM_PACKAGE_LICENSE "BSD") +set(CPACK_RPM_PACKAGE_AUTOREQPROV " no") + +set(CPACK_PACKAGE_GROUP "Development/Libraries") +## +# Source package +## +set(CPACK_SOURCE_GENERATOR "TGZ") +set(CPACK_SOURCE_PACKAGE_FILE_NAME + ${CPACK_PACKAGE_NAME}_src_${CPACK_PACKAGE_VERSION}_${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}) +set(CPACK_SOURCE_IGNORE_FILES + "/build" + "CMakeFiles" + "/\\\\.dir" + "/\\\\.git" + "/\\\\.gitignore$" + ".*~$" + "\\\\.bak$" + "\\\\.swp$" + "\\\\.orig$" + "/\\\\.DS_Store$" + "/Thumbs\\\\.db" + "/CMakeLists.txt.user$" + ${CPACK_SOURCE_IGNORE_FILES}) +# Ignore build directories that may be in the source tree +file(GLOB_RECURSE CACHES "${CMAKE_SOURCE_DIR}/CMakeCache.txt") + +include(CPack) + +# Configure file with custom definitions for NSIS. +configure_file( + ${PROJECT_SOURCE_DIR}/CMakeModules/nsis/NSIS.definitions.nsh.in + ${CMAKE_CURRENT_BINARY_DIR}/NSIS.definitions.nsh +) diff --git a/CMakeModules/ConditionalDirectory.cmake b/CMakeModules/ConditionalDirectory.cmake deleted file mode 100644 index 8ba1cc72..00000000 --- a/CMakeModules/ConditionalDirectory.cmake +++ /dev/null @@ -1,6 +0,0 @@ -# Includes the directory if the variable is set -function(conditional_directory variable directory) - if(${variable}) - add_subdirectory(${directory}) - endif() -endfunction() diff --git a/CMakeModules/DependencyCheck.cmake b/CMakeModules/DependencyCheck.cmake deleted file mode 100644 index 88a2aadb..00000000 --- a/CMakeModules/DependencyCheck.cmake +++ /dev/null @@ -1,5 +0,0 @@ -function(dependency_check VAR ERROR_MESSAGE) - if(NOT ${VAR}) - message(SEND_ERROR ${ERROR_MESSAGE}) - endif() -endfunction() diff --git a/CMakeModules/FGInstallDirs.cmake b/CMakeModules/FGInstallDirs.cmake index 5d823083..0d6a1708 100644 --- a/CMakeModules/FGInstallDirs.cmake +++ b/CMakeModules/FGInstallDirs.cmake @@ -21,26 +21,26 @@ endif() # Data files if(NOT DEFINED FG_INSTALL_DATA_DIR) - set(FG_INSTALL_DATA_DIR "share/Forge" CACHE PATH "Installation path for data files") + set(FG_INSTALL_DATA_DIR "data" CACHE PATH "Installation path for data files") endif() # Documentation if(NOT DEFINED FG_INSTALL_DOC_DIR) - set(FG_INSTALL_DOC_DIR "${FG_INSTALL_DATA_DIR}/doc" CACHE PATH "Installation path for documentation") + set(FG_INSTALL_DOC_DIR "doc" CACHE PATH "Installation path for documentation") endif() if(NOT DEFINED FG_INSTALL_EXAMPLE_DIR) - set(FG_INSTALL_EXAMPLE_DIR "${FG_INSTALL_DATA_DIR}/examples" CACHE PATH "Installation path for examples") + set(FG_INSTALL_EXAMPLE_DIR "examples" CACHE PATH "Installation path for examples") endif() # Man pages if(NOT DEFINED FG_INSTALL_MAN_DIR) - set(FG_INSTALL_MAN_DIR "${FG_INSTALL_DATA_DIR}/man" CACHE PATH "Installation path for man pages") + set(FG_INSTALL_MAN_DIR "man" CACHE PATH "Installation path for man pages") endif() # CMake files if(NOT DEFINED FG_INSTALL_CMAKE_DIR) - set(FG_INSTALL_CMAKE_DIR "${FG_INSTALL_DATA_DIR}/cmake" CACHE PATH "Installation path for CMake files") + set(FG_INSTALL_CMAKE_DIR "cmake" CACHE PATH "Installation path for CMake files") endif() # Use absolute paths (these changes are internal and will not show up in cache) diff --git a/CMakeModules/ForgeConfigVersion.cmake.in b/CMakeModules/ForgeConfigVersion.cmake.in deleted file mode 100644 index fe7a3e46..00000000 --- a/CMakeModules/ForgeConfigVersion.cmake.in +++ /dev/null @@ -1,73 +0,0 @@ -#============================================================================= -# Copyright (c) 2015, ArrayFire -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright notice, this -# list of conditions and the following disclaimer in the documentation and/or -# other materials provided with the distribution. -# -# * Neither the name of the ArrayFire nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#============================================================================= - -# This is a basic version file for the Config-mode of find_package(). -# -# The created file sets PACKAGE_VERSION_EXACT if the current version string and -# the requested version string are exactly the same and it sets -# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, -# but only if the requested major version is the same as the current one. - - -set(PACKAGE_VERSION "@FG_VERSION_MAJOR@@FG_VERSION_MINOR@") - -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - - if("@FG_VERSION_MAJOR@@FG_VERSION_MINOR@" MATCHES "^([0-9]+)\\.") - set(FORGE_VERSION_MAJOR "${CMAKE_MATCH_1}") - else() - set(FORGE_VERSION_MAJOR "@FG_VERSION_MAJOR@@FG_VERSION_MINOR@") - endif() - - if("${PACKAGE_FIND_VERSION_MAJOR}" STREQUAL "${FORGE_VERSION_MAJOR}") - set(PACKAGE_VERSION_COMPATIBLE TRUE) - else() - set(PACKAGE_VERSION_COMPATIBLE FALSE) - endif() - - if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif() - - -# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: -if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "") - return() -endif() - -# check that the installed version has the same 32/64bit-ness as the one which is currently searching: -if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@") - math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8") - set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") - set(PACKAGE_VERSION_UNSUITABLE TRUE) -endif() diff --git a/CMakeModules/InternalUtils.cmake b/CMakeModules/InternalUtils.cmake new file mode 100644 index 00000000..2db476aa --- /dev/null +++ b/CMakeModules/InternalUtils.cmake @@ -0,0 +1,34 @@ +# Copyright (c) 2017, ArrayFire +# All rights reserved. +# +# This file is distributed under 3-clause BSD license. +# The complete license agreement can be obtained at: +# http://arrayfire.com/licenses/BSD-3-Clause + +function(dependency_check VAR ERROR_MESSAGE) + if(NOT ${VAR}) + message(SEND_ERROR ${ERROR_MESSAGE}) + endif() +endfunction() + +# Includes the directory if the variable is set +function(conditional_directory variable directory) + if(${variable}) + add_subdirectory(${directory}) + endif() +endfunction() + +function(get_native_path out_path path) + file(TO_NATIVE_PATH ${path} native_path) + string(REPLACE "\\" "\\\\" native_path ${native_path}) + set(${out_path} ${native_path} PARENT_SCOPE) +endfunction() + +function(resolve_dependencies_paths out_deps in_deps context search_dirs) + set(out_list "") + foreach(current_dependency ${in_deps}) + gp_resolve_item(${context} "${current_dependency}" "" "${search_dirs}" resolved_file) + list(APPEND out_list "${resolved_file}") + endforeach() + set(${out_deps} ${out_list} PARENT_SCOPE) +endfunction() diff --git a/CMakeModules/nsis/NSIS.InstallOptions.ini.in b/CMakeModules/nsis/NSIS.InstallOptions.ini.in new file mode 100644 index 00000000..d92d7795 --- /dev/null +++ b/CMakeModules/nsis/NSIS.InstallOptions.ini.in @@ -0,0 +1,46 @@ +[Settings] +NumFields=5 + +[Field 1] +Type=label +Text=By default @CPACK_PACKAGE_INSTALL_DIRECTORY@ does not add its directory to the system PATH. +Left=0 +Right=-1 +Top=0 +Bottom=20 + +[Field 2] +Type=radiobutton +Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH +Left=0 +Right=-1 +Top=30 +Bottom=40 +State=1 + +[Field 3] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users +Left=0 +Right=-1 +Top=40 +Bottom=50 +State=0 + +[Field 4] +Type=radiobutton +Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user +Left=0 +Right=-1 +Top=50 +Bottom=60 +State=0 + +[Field 5] +Type=CheckBox +Text=Create @CPACK_PACKAGE_NAME@ Desktop Icon +Left=0 +Right=-1 +Top=80 +Bottom=90 +State=0 diff --git a/CMakeModules/nsis/NSIS.definitions.nsh.in b/CMakeModules/nsis/NSIS.definitions.nsh.in new file mode 100644 index 00000000..76c6eb32 --- /dev/null +++ b/CMakeModules/nsis/NSIS.definitions.nsh.in @@ -0,0 +1,31 @@ +!define MUI_WELCOMEPAGE_TITLE '${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION} Installer' +!define MUI_WELCOMEPAGE_TITLE_3LINES +!define MUI_WELCOMEPAGE_TEXT \ +"An OpenGL interop library that can be used with ArrayFire or any other application using CUDA or OpenCL compute backend.\r\n\r\n\ +The goal of Forge is to provide high performance OpenGL visualizations for C/C++ applications that use CUDA/OpenCL.\r\n\r\n\ +Forge uses OpenGL >=3.3 forward compatible contexts, so please make sure you have capable hardware before trying it out." + +!define MUI_ICON "@CPACK_FG_ASSETS_DIR@arrayfire.ico" +!define MUI_UNICON "@CPACK_FG_ASSETS_DIR@arrayfire.ico" + +!define MUI_WELCOMEFINISHPAGE_BITMAP "@CPACK_FG_ASSETS_DIR@arrayfire_sym.bmp" +!define MUI_UNWELCOMEFINISHPAGE_BITMAP "@CPACK_FG_ASSETS_DIR@arrayfire_sym.bmp" +!define MUI_WELCOMEFINISHPAGE_UNBITMAP_NOSTRETCH +!define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH + +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_RIGHT +!define MUI_HEADERIMAGE_BITMAP "@CPACK_FG_ASSETS_DIR@arrayfire_logo.bmp" +!define MUI_HEADERIMAGE_UNBITMAP "@CPACK_FG_ASSETS_DIR@arrayfire_logo.bmp" +!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH +!define MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH +!define MUI_ABORTWARNING + +; Defines for Finish Page +!define MUI_FINISHPAGE_RUN "explorer.exe" +!define MUI_FINISHPAGE_RUN_PARAMETERS "$INSTDIR" +!define MUI_FINISHPAGE_RUN_TEXT "Open Forge Install Directory to see Examples" +!define MUI_FINISHPAGE_SHOWREADME "http://arrayfire.org/forge/index.htm" +!define MUI_FINISHPAGE_SHOWREADME_TEXT "Open Forge Documentation on the Web" +!define MUI_FINISHPAGE_LINK "ArrayFire Support and Services" +!define MUI_FINISHPAGE_LINK_LOCATION "http://arrayfire.com/consulting/" diff --git a/CMakeModules/nsis/NSIS.template.in b/CMakeModules/nsis/NSIS.template.in new file mode 100644 index 00000000..51f81132 --- /dev/null +++ b/CMakeModules/nsis/NSIS.template.in @@ -0,0 +1,975 @@ +; CPack install script designed for a nmake build + +;-------------------------------- +; You must define these values + + !define VERSION "@CPACK_PACKAGE_VERSION@" + !define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" + !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" + +;-------------------------------- +;Variables + + Var MUI_TEMP + Var STARTMENU_FOLDER + Var SV_ALLUSERS + Var START_MENU + Var DO_NOT_ADD_TO_PATH + Var ADD_TO_PATH_ALL_USERS + Var ADD_TO_PATH_CURRENT_USER + Var INSTALL_DESKTOP + Var IS_DEFAULT_INSTALLDIR +;-------------------------------- +;Include Modern UI + + !include "..\..\..\NSIS.definitions.nsh" + !include "InstallOptions.nsh" + !include "MUI.nsh" + + ;Default installation folder + InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@\v@CPACK_PACKAGE_VERSION_MAJOR@" + +;-------------------------------- +;General + + ;Name and file + Name "@CPACK_NSIS_PACKAGE_NAME@" + OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" + + ;Set compression + SetCompressor @CPACK_NSIS_COMPRESSOR@ + + ;Require administrator access + RequestExecutionLevel admin + +@CPACK_NSIS_DEFINES@ + + !include Sections.nsh + +;--- Component support macros: --- +; The code for the add/remove functionality is from: +; http://nsis.sourceforge.net/Add/Remove_Functionality +; It has been modified slightly and extended to provide +; inter-component dependencies. +Var AR_SecFlags +Var AR_RegFlags +@CPACK_NSIS_SECTION_SELECTED_VARS@ + +; Loads the "selected" flag for the section named SecName into the +; variable VarName. +!macro LoadSectionSelectedIntoVar SecName VarName + SectionGetFlags ${${SecName}} $${VarName} + IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits +!macroend + +; Loads the value of a variable... can we get around this? +!macro LoadVar VarName + IntOp $R0 0 + $${VarName} +!macroend + +; Sets the value of a variable +!macro StoreVar VarName IntValue + IntOp $${VarName} 0 + ${IntValue} +!macroend + +!macro InitSection SecName + ; This macro reads component installed flag from the registry and + ;changes checked state of the section on the components page. + ;Input: section index constant name specified in Section command. + + ClearErrors + ;Reading component status from registry + ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" + IfErrors "default_${SecName}" + ;Status will stay default if registry value not found + ;(component was never installed) + IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags + IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off + IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit + + ; Note whether this component was installed before + !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags + IntOp $R0 $AR_RegFlags & $AR_RegFlags + + ;Writing modified flags + SectionSetFlags ${${SecName}} $AR_SecFlags + + "default_${SecName}:" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected +!macroend + +!macro FinishSection SecName + ; This macro reads section flag set by user and removes the section + ;if it is not selected. + ;Then it writes component installed flag to registry + ;Input: section index constant name specified in Section command. + + SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags + ;Checking lowest bit: + IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} + IntCmp $AR_SecFlags 1 "leave_${SecName}" + ;Section is not selected: + ;Calling Section uninstall macro and writing zero installed flag + !insertmacro "Remove_${${SecName}}" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 0 + Goto "exit_${SecName}" + + "leave_${SecName}:" + ;Section is selected: + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ + "Installed" 1 + + "exit_${SecName}:" +!macroend + +!macro RemoveSection_CPack SecName + ; This macro is used to call section's Remove_... macro + ;from the uninstaller. + ;Input: section index constant name specified in Section command. + + !insertmacro "Remove_${${SecName}}" +!macroend + +; Determine whether the selection of SecName changed +!macro MaybeSelectionChanged SecName + !insertmacro LoadVar ${SecName}_selected + SectionGetFlags ${${SecName}} $R1 + IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits + + ; See if the status has changed: + IntCmp $R0 $R1 "${SecName}_unchanged" + !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected + + IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" + !insertmacro "Deselect_required_by_${SecName}" + goto "${SecName}_unchanged" + + "${SecName}_was_selected:" + !insertmacro "Select_${SecName}_depends" + + "${SecName}_unchanged:" +!macroend +;--- End of Add/Remove macros --- + +;-------------------------------- +;Interface Settings + + ;Below two are defined in custom nsh file + ;!define MUI_HEADERIMAGE + ;!define MUI_ABORTWARNING + +;---------------------------------------- +; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" +;---------------------------------------- +!verbose 3 +!include "WinMessages.NSH" +!verbose 4 +;==================================================== +; get_NT_environment +; Returns: the selected environment +; Output : head of the stack +;==================================================== +!macro select_NT_profile UN +Function ${UN}select_NT_profile + StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single + DetailPrint "Selected environment for all users" + Push "all" + Return + environment_single: + DetailPrint "Selected environment for current user only." + Push "current" + Return +FunctionEnd +!macroend +!insertmacro select_NT_profile "" +!insertmacro select_NT_profile "un." +;---------------------------------------------------- +!define NT_current_env 'HKCU "Environment"' +!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + +!ifndef WriteEnvStr_RegKey + !ifdef ALL_USERS + !define WriteEnvStr_RegKey \ + 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' + !else + !define WriteEnvStr_RegKey 'HKCU "Environment"' + !endif +!endif + +; AddToPath - Adds the given dir to the search path. +; Input - head of the stack +; Note - Win9x systems requires reboot + +Function AddToPath + Exch $0 + Push $1 + Push $2 + Push $3 + + # don't add if the path doesn't exist + IfFileExists "$0\*.*" "" AddToPath_done + + ReadEnvStr $1 PATH + ; if the path is too long for a NSIS variable NSIS will return a 0 + ; length string. If we find that, then warn and skip any path + ; modification as it will trash the existing path. + StrLen $2 $1 + IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done + CheckPathLength_ShowPathWarning: + Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" + Goto AddToPath_done + CheckPathLength_Done: + Push "$1;" + Push "$0;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$0\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + GetFullPathName /SHORT $3 $0 + Push "$1;" + Push "$3;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + Push "$1;" + Push "$3\;" + Call StrStr + Pop $2 + StrCmp $2 "" "" AddToPath_done + + Call IsNT + Pop $1 + StrCmp $1 1 AddToPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" a + FileSeek $1 -1 END + FileReadByte $1 $2 + IntCmp $2 26 0 +2 +2 # DOS EOF + FileSeek $1 -1 END # write over EOF + FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" + FileClose $1 + SetRebootFlag true + Goto AddToPath_done + + AddToPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto DoTrim + ReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + DoTrim: + StrCmp $1 "" AddToPath_NTdoIt + Push $1 + Call Trim + Pop $1 + StrCpy $0 "$1;$0" + AddToPath_NTdoIt: + StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $0 + Goto DoSend + WriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $0 + DoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + AddToPath_done: + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + + +; RemoveFromPath - Remove a given dir from the path +; Input: head of the stack + +Function un.RemoveFromPath + Exch $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + Push $6 + + IntFmt $6 "%c" 26 # DOS EOF + + Call un.IsNT + Pop $1 + StrCmp $1 1 unRemoveFromPath_NT + ; Not on NT + StrCpy $1 $WINDIR 2 + FileOpen $1 "$1\autoexec.bat" r + GetTempFileName $4 + FileOpen $2 $4 w + GetFullPathName /SHORT $0 $0 + StrCpy $0 "SET PATH=%PATH%;$0" + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoop: + FileRead $1 $3 + StrCpy $5 $3 1 -1 # read last char + StrCmp $5 $6 0 +2 # if DOS EOF + StrCpy $3 $3 -1 # remove DOS EOF so we can compare + StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine + StrCmp $3 "" unRemoveFromPath_dosLoopEnd + FileWrite $2 $3 + Goto unRemoveFromPath_dosLoop + unRemoveFromPath_dosLoopRemoveLine: + SetRebootFlag true + Goto unRemoveFromPath_dosLoop + + unRemoveFromPath_dosLoopEnd: + FileClose $2 + FileClose $1 + StrCpy $1 $WINDIR 2 + Delete "$1\autoexec.bat" + CopyFiles /SILENT $4 "$1\autoexec.bat" + Delete $4 + Goto unRemoveFromPath_done + + unRemoveFromPath_NT: + StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey + ReadRegStr $1 ${NT_current_env} "PATH" + Goto unDoTrim + unReadAllKey: + ReadRegStr $1 ${NT_all_env} "PATH" + unDoTrim: + StrCpy $5 $1 1 -1 # copy last char + StrCmp $5 ";" +2 # if last char != ; + StrCpy $1 "$1;" # append ; + Push $1 + Push "$0;" + Call un.StrStr ; Find `$0;` in $1 + Pop $2 ; pos of our dir + StrCmp $2 "" unRemoveFromPath_done + ; else, it is in path + # $0 - path to add + # $1 - path var + StrLen $3 "$0;" + StrLen $4 $2 + StrCpy $5 $1 -$4 # $5 is now the part before the path to remove + StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove + StrCpy $3 $5$6 + + StrCpy $5 $3 1 -1 # copy last char + StrCmp $5 ";" 0 +2 # if last char == ; + StrCpy $3 $3 -1 # remove last char + + StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey + WriteRegExpandStr ${NT_current_env} "PATH" $3 + Goto unDoSend + unWriteAllKey: + WriteRegExpandStr ${NT_all_env} "PATH" $3 + unDoSend: + SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 + + unRemoveFromPath_done: + Pop $6 + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 +FunctionEnd + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Uninstall sutff +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +########################################### +# Utility Functions # +########################################### + +;==================================================== +; IsNT - Returns 1 if the current system is NT, 0 +; otherwise. +; Output: head of the stack +;==================================================== +; IsNT +; no input +; output, top of the stack = 1 if NT or 0 if not +; +; Usage: +; Call IsNT +; Pop $R0 +; ($R0 at this point is 1 or 0) + +!macro IsNT un +Function ${un}IsNT + Push $0 + ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion + StrCmp $0 "" 0 IsNT_yes + ; we are not NT. + Pop $0 + Push 0 + Return + + IsNT_yes: + ; NT!!! + Pop $0 + Push 1 +FunctionEnd +!macroend +!insertmacro IsNT "" +!insertmacro IsNT "un." + +; StrStr +; input, top of stack = string to search for +; top of stack-1 = string to search in +; output, top of stack (replaces with the portion of the string remaining) +; modifies no other variables. +; +; Usage: +; Push "this is a long ass string" +; Push "ass" +; Call StrStr +; Pop $R0 +; ($R0 at this point is "ass string") + +!macro StrStr un +Function ${un}StrStr +Exch $R1 ; st=haystack,old$R1, $R1=needle + Exch ; st=old$R1,haystack + Exch $R2 ; st=old$R1,old$R2, $R2=haystack + Push $R3 + Push $R4 + Push $R5 + StrLen $R3 $R1 + StrCpy $R4 0 + ; $R1=needle + ; $R2=haystack + ; $R3=len(needle) + ; $R4=cnt + ; $R5=tmp + loop: + StrCpy $R5 $R2 $R3 $R4 + StrCmp $R5 $R1 done + StrCmp $R5 "" done + IntOp $R4 $R4 + 1 + Goto loop +done: + StrCpy $R1 $R2 "" $R4 + Pop $R5 + Pop $R4 + Pop $R3 + Pop $R2 + Exch $R1 +FunctionEnd +!macroend +!insertmacro StrStr "" +!insertmacro StrStr "un." + +Function Trim ; Added by Pelaca + Exch $R1 + Push $R2 +Loop: + StrCpy $R2 "$R1" 1 -1 + StrCmp "$R2" " " RTrim + StrCmp "$R2" "$\n" RTrim + StrCmp "$R2" "$\r" RTrim + StrCmp "$R2" ";" RTrim + GoTo Done +RTrim: + StrCpy $R1 "$R1" -1 + Goto Loop +Done: + Pop $R2 + Exch $R1 +FunctionEnd + +Function ConditionalAddToRegisty + Pop $0 + Pop $1 + StrCmp "$0" "" ConditionalAddToRegisty_EmptyString + WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ + "$1" "$0" + ;MessageBox MB_OK "Set Registry: '$1' to '$0'" + DetailPrint "Set install registry entry: '$1' to '$0'" + ConditionalAddToRegisty_EmptyString: +FunctionEnd + +;-------------------------------- + +!ifdef CPACK_USES_DOWNLOAD +Function DownloadFile + IfFileExists $INSTDIR\* +2 + CreateDirectory $INSTDIR + Pop $0 + + ; Skip if already downloaded + IfFileExists $INSTDIR\$0 0 +2 + Return + + StrCpy $1 "@CPACK_DOWNLOAD_SITE@" + + try_again: + NSISdl::download "$1/$0" "$INSTDIR\$0" + + Pop $1 + StrCmp $1 "success" success + StrCmp $1 "Cancelled" cancel + MessageBox MB_OK "Download failed: $1" + cancel: + Return + success: +FunctionEnd +!endif + +;-------------------------------- +; Installation types +@CPACK_NSIS_INSTALLATION_TYPES@ + +;-------------------------------- +; Component sections +@CPACK_NSIS_COMPONENT_SECTIONS@ + +;-------------------------------- +; Define some macro setting for the gui +@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ +@CPACK_NSIS_INSTALLER_ICON_CODE@ +@CPACK_NSIS_INSTALLER_MUI_WELCOMEFINISH_CODE@ +@CPACK_NSIS_INSTALLER_MUI_UNWELCOMEFINISH_CODE@ +@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ +@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ + +;-------------------------------- +;Pages + !insertmacro MUI_PAGE_WELCOME + + !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" + Page custom InstallOptionsPage + !insertmacro MUI_PAGE_DIRECTORY + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + + @CPACK_NSIS_PAGE_COMPONENTS@ + + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + +;-------------------------------- +;Languages + + !insertmacro MUI_LANGUAGE "English" ;first language is the default language + !insertmacro MUI_LANGUAGE "Albanian" + !insertmacro MUI_LANGUAGE "Arabic" + !insertmacro MUI_LANGUAGE "Basque" + !insertmacro MUI_LANGUAGE "Belarusian" + !insertmacro MUI_LANGUAGE "Bosnian" + !insertmacro MUI_LANGUAGE "Breton" + !insertmacro MUI_LANGUAGE "Bulgarian" + !insertmacro MUI_LANGUAGE "Croatian" + !insertmacro MUI_LANGUAGE "Czech" + !insertmacro MUI_LANGUAGE "Danish" + !insertmacro MUI_LANGUAGE "Dutch" + !insertmacro MUI_LANGUAGE "Estonian" + !insertmacro MUI_LANGUAGE "Farsi" + !insertmacro MUI_LANGUAGE "Finnish" + !insertmacro MUI_LANGUAGE "French" + !insertmacro MUI_LANGUAGE "German" + !insertmacro MUI_LANGUAGE "Greek" + !insertmacro MUI_LANGUAGE "Hebrew" + !insertmacro MUI_LANGUAGE "Hungarian" + !insertmacro MUI_LANGUAGE "Icelandic" + !insertmacro MUI_LANGUAGE "Indonesian" + !insertmacro MUI_LANGUAGE "Irish" + !insertmacro MUI_LANGUAGE "Italian" + !insertmacro MUI_LANGUAGE "Japanese" + !insertmacro MUI_LANGUAGE "Korean" + !insertmacro MUI_LANGUAGE "Kurdish" + !insertmacro MUI_LANGUAGE "Latvian" + !insertmacro MUI_LANGUAGE "Lithuanian" + !insertmacro MUI_LANGUAGE "Luxembourgish" + !insertmacro MUI_LANGUAGE "Macedonian" + !insertmacro MUI_LANGUAGE "Malay" + !insertmacro MUI_LANGUAGE "Mongolian" + !insertmacro MUI_LANGUAGE "Norwegian" + !insertmacro MUI_LANGUAGE "Polish" + !insertmacro MUI_LANGUAGE "Portuguese" + !insertmacro MUI_LANGUAGE "PortugueseBR" + !insertmacro MUI_LANGUAGE "Romanian" + !insertmacro MUI_LANGUAGE "Russian" + !insertmacro MUI_LANGUAGE "Serbian" + !insertmacro MUI_LANGUAGE "SerbianLatin" + !insertmacro MUI_LANGUAGE "SimpChinese" + !insertmacro MUI_LANGUAGE "Slovak" + !insertmacro MUI_LANGUAGE "Slovenian" + !insertmacro MUI_LANGUAGE "Spanish" + !insertmacro MUI_LANGUAGE "Swedish" + !insertmacro MUI_LANGUAGE "Thai" + !insertmacro MUI_LANGUAGE "TradChinese" + !insertmacro MUI_LANGUAGE "Turkish" + !insertmacro MUI_LANGUAGE "Ukrainian" + !insertmacro MUI_LANGUAGE "Welsh" + + +;-------------------------------- +;Reserve Files + + ;These files should be inserted before other files in the data block + ;Keep these lines before any File command + ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) + + ReserveFile "NSIS.InstallOptions.ini" + !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS + +;-------------------------------- +;Installer Sections + +Section "-Core installation" + ;Use the entire tree produced by the INSTALL target. Keep the + ;list of directories here in sync with the RMDir commands below. + SetOutPath "$INSTDIR" + @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ + @CPACK_NSIS_FULL_INSTALL@ + + ;Store installation folder + WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR + + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" + Push "DisplayName" + Push "@CPACK_NSIS_DISPLAY_NAME@" + Call ConditionalAddToRegisty + Push "DisplayVersion" + Push "@CPACK_PACKAGE_VERSION@" + Call ConditionalAddToRegisty + Push "Publisher" + Push "@CPACK_PACKAGE_VENDOR@" + Call ConditionalAddToRegisty + Push "DisplayIcon" + Push "$INSTDIR\Uninstall.exe" + Call ConditionalAddToRegisty + Push "UninstallString" + Push "$INSTDIR\Uninstall.exe" + Call ConditionalAddToRegisty + Push "NoRepair" + Push "1" + Call ConditionalAddToRegisty + + !ifdef CPACK_NSIS_ADD_REMOVE + ;Create add/remove functionality + Push "ModifyPath" + Push "$INSTDIR\AddRemove.exe" + Call ConditionalAddToRegisty + !else + Push "NoModify" + Push "1" + Call ConditionalAddToRegisty + !endif + + ; Optional registration + Push "HelpLink" + Push "@CPACK_NSIS_HELP_LINK@" + Call ConditionalAddToRegisty + Push "URLInfoAbout" + Push "@CPACK_NSIS_URL_INFO_ABOUT@" + Call ConditionalAddToRegisty + Push "Contact" + Push "@CPACK_NSIS_CONTACT@" + Call ConditionalAddToRegisty + !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" +@CPACK_NSIS_CREATE_ICONS@ +@CPACK_NSIS_CREATE_ICONS_EXTRA@ + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + ;Read a value from an InstallOptions INI file + !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" + !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" + + ; Write special uninstall registry entries + Push "StartMenu" + Push "$STARTMENU_FOLDER" + Call ConditionalAddToRegisty + Push "DoNotAddToPath" + Push "$DO_NOT_ADD_TO_PATH" + Call ConditionalAddToRegisty + Push "AddToPathAllUsers" + Push "$ADD_TO_PATH_ALL_USERS" + Call ConditionalAddToRegisty + Push "AddToPathCurrentUser" + Push "$ADD_TO_PATH_CURRENT_USER" + Call ConditionalAddToRegisty + Push "InstallToDesktop" + Push "$INSTALL_DESKTOP" + Call ConditionalAddToRegisty + + !insertmacro MUI_STARTMENU_WRITE_END + +@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ + +SectionEnd + +Section "-Add to path" + Push $INSTDIR\bin + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath + StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 + Call AddToPath + doNotAddToPath: +SectionEnd + +;-------------------------------- +; Create custom pages +Function InstallOptionsPage + !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" + !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" + +FunctionEnd + +;-------------------------------- +; determine admin versus local install +Function un.onInit + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + Goto done + StrCmp $1 "Power" 0 +3 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + Goto done + + noLM: + ;Get installation folder from registry if available + + done: + +FunctionEnd + +;--- Add/Remove callback functions: --- +!macro SectionList MacroName + ;This macro used to perform operation on multiple sections. + ;List all of your components in following manner here. +@CPACK_NSIS_COMPONENT_SECTION_LIST@ +!macroend + +Section -FinishComponents + ;Removes unselected components and writes component status to registry + !insertmacro SectionList "FinishSection" + +!ifdef CPACK_NSIS_ADD_REMOVE + ; Get the name of the installer executable + System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' + StrCpy $R3 $R0 + + ; Strip off the last 13 characters, to see if we have AddRemove.exe + StrLen $R1 $R0 + IntOp $R1 $R0 - 13 + StrCpy $R2 $R0 13 $R1 + StrCmp $R2 "AddRemove.exe" addremove_installed + + ; We're not running AddRemove.exe, so install it + CopyFiles $R3 $INSTDIR\AddRemove.exe + + addremove_installed: +!endif +SectionEnd +;--- End of Add/Remove callback functions --- + +;-------------------------------- +; Component dependencies +Function .onSelChange + !insertmacro SectionList MaybeSelectionChanged +FunctionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + ReadRegStr $START_MENU SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" + ;MessageBox MB_OK "Start menu is in: $START_MENU" + ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" + ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" + ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" + ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" + ReadRegStr $INSTALL_DESKTOP SHCTX \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" + ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " + +@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ + + ;Remove files we installed. + ;Keep the list of directories here in sync with the File commands above. +@CPACK_NSIS_DELETE_FILES@ +@CPACK_NSIS_DELETE_DIRECTORIES@ + +!ifdef CPACK_NSIS_ADD_REMOVE + ;Remove the add/remove program + Delete "$INSTDIR\AddRemove.exe" +!endif + + ;Remove the uninstaller itself. + Delete "$INSTDIR\Uninstall.exe" + DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ;Remove the installation directory if it is empty. + RMDir "$INSTDIR" + + ; Remove the registry entries. + DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + ; Removes all optional components + !insertmacro SectionList "RemoveSection_CPack" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS@ +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + startMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors startMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop + startMenuDeleteLoopDone: + + ; If the user changed the shortcut, then untinstall may not work. This should + ; try to fix it. + StrCpy $MUI_TEMP "$START_MENU" + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" +@CPACK_NSIS_DELETE_ICONS_EXTRA@ + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + secondStartMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors secondStartMenuDeleteLoopDone + + StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop + secondStartMenuDeleteLoopDone: + + DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" + + Push $INSTDIR\bin + StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 + Call un.RemoveFromPath + doNotRemoveFromPath: +SectionEnd + +;-------------------------------- +; determine admin versus local install +; Is install for "AllUsers" or "JustMe"? +; Default to "JustMe" - set to "AllUsers" if admin or on Win9x +; This function is used for the very first "custom page" of the installer. +; This custom page does not show up visibly, but it executes prior to the +; first visible page and sets up $INSTDIR properly... +; Choose different default installation folder based on SV_ALLUSERS... +; "Program Files" for AllUsers, "My Documents" for JustMe... + +Function .onInit + StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst + + ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" + StrCmp $0 "" inst + + MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ + "@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \ + /SD IDYES IDYES uninst IDNO inst + Abort + +;Run the uninstaller +uninst: + ClearErrors + StrLen $2 "\Uninstall.exe" + StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path + ExecWait '"$0" /S _?=$3' ;Do not copy the uninstaller to a temp file + + IfErrors uninst_failed inst +uninst_failed: + MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." + Abort + + +inst: + ; Reads components status for registry + !insertmacro SectionList "InitSection" + + ; check to see if /D has been used to change + ; the install directory by comparing it to the + ; install directory that is expected to be the + ; default + StrCpy $IS_DEFAULT_INSTALLDIR 0 + StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 + StrCpy $IS_DEFAULT_INSTALLDIR 1 + + StrCpy $SV_ALLUSERS "JustMe" + ; if default install dir then change the default + ; if it is installed for JustMe + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + ClearErrors + UserInfo::GetName + IfErrors noLM + Pop $0 + UserInfo::GetAccountType + Pop $1 + StrCmp $1 "Admin" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Admin group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + StrCmp $1 "Power" 0 +4 + SetShellVarContext all + ;MessageBox MB_OK 'User "$0" is in the Power Users group' + StrCpy $SV_ALLUSERS "AllUsers" + Goto done + + noLM: + StrCpy $SV_ALLUSERS "AllUsers" + ;Get installation folder from registry if available + + done: + StrCmp $SV_ALLUSERS "AllUsers" 0 +3 + StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 + StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" + + StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" + + noOptionsPage: +FunctionEnd diff --git a/CMakeModules/platform.cmake b/CMakeModules/platform.cmake new file mode 100644 index 00000000..4709e832 --- /dev/null +++ b/CMakeModules/platform.cmake @@ -0,0 +1,26 @@ +# Copyright (c) 2017, ArrayFire +# All rights reserved. +# +# This file is distributed under 3-clause BSD license. +# The complete license agreement can be obtained at: +# http://arrayfire.com/licenses/BSD-3-Clause + +# Platform specific settings +# +# Add paths and flags specific platforms. This can inc + +if(APPLE) + # Some homebrew libraries(glbinding) are not installed in directories that + # CMake searches by default. + set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};/usr/local/opt") +endif() + +function(get_target_library_path out_path target) + set(library_full_name "${CMAKE_SHARED_LIBRARY_PREFIX}${target}${CMAKE_SHARED_LIBRARY_SUFFIX}") + set(binary_path "${CMAKE_CURRENT_BINARY_DIR}/${library_full_name}") + if (WIN32) + set(binary_path "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${library_full_name}") + endif () + get_native_path(full_path ${binary_path}) + set(${out_path} ${full_path} PARENT_SCOPE) +endfunction() diff --git a/assets/arrayfire.ico b/assets/arrayfire.ico new file mode 100644 index 0000000000000000000000000000000000000000..e1d12995ec8df297e6105b245dd9d31afd15a5c6 GIT binary patch literal 36197 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 Ef>3W0_5c6? literal 0 HcmV?d00001 diff --git a/assets/arrayfire_logo.bmp b/assets/arrayfire_logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..86d057333fb47541c320ad48f1ec9820ca146010 GIT binary patch literal 18586 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 zB{;b^=awHQblHz(oirsd8F3bSa0%W_K>>v-&1wHk60{Swzs76x4zM>+c&!X8$#W>O~(FR|JqIar)|LEYyOb{36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!) z36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36Ov#f%f+HmX?-8A`y?rW3gy75(%gNB9TaQbF<~ycm2+`wzhCMlzQSY9yuC~ zf<#kOQ%g%T_TKGJh^O%Td{?htId|^tzArxCylKO-WsB#|omD+`(zvQIWM;<$7^rVU7X3m_xXkq=jb!&F--g)ZO$;+3&!eMX+>q~XD zz0eopu4-5@ecF_gkwg2v-`Bzh4tT$@aeG&L1b5?e`}Qph0%F(DAp@sQnYiMkWuJe( z=gO7K?nc0itDQf8Zuzn$O^bClYJdt|}chLLX-*VQSqGrI90su3fWA54kIZQQ25fU)NEbt+x-NUw2%_ zA$zQuJ{2|FuAnmFAUxVyP{Uq4g0TJ{yjwbI_~(1~bdhKAC>nR}+yQ|B{oj)hZUADv ziVCeq5zFbaNOC7np0JLpelK$Di4&?&C%=Wk8`PV-ZFo=?YaEv=ApusI-WueivF>fB*Xt7m#JU#5rHvq%RV!uBu(K zw`t1ZMAYphB%+U&CMvOdJ{Do5jbJd4?YWD$?Zk=W7BSTCTC!vzIuksK*_Sulo~@70 zKib^ps@7He6aPLZJZx9fS-&UU9q50UGkd0zsp04Aqqn0udo}WbtKs%LvFs-f zZEU)CR`{E>;cw0iKU5c)xG&M_a%xhk9654$#PGp-Vp+rGWhI^1;y!WWSk_n>Hg4ST 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 IBp?a=AJ^6G7XSbN literal 0 HcmV?d00001 diff --git a/examples/cuda/CMakeLists.txt b/examples/cuda/CMakeLists.txt index 56e50ce2..95c46a0a 100644 --- a/examples/cuda/CMakeLists.txt +++ b/examples/cuda/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.5) project(Forge-CUDA-Examples LANGUAGES CXX) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES") + if (${CMAKE_VERSION} VERSION_LESS "3.10.0") INCLUDE_DIRECTORIES( ${Forge_SOURCE_DIR}/include diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 0d253511..8e07dde1 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -13,6 +13,13 @@ if (WIN32) target_compile_definitions(${BackendTarget} PUBLIC FGDLL PRIVATE OS_WIN WIN32_MEAN_AND_LEAN) + + # C4251: Warnings about dll interfaces. Thrown by glbinding, may be fixed in + # the future + # C4068: Warnings about unknown pragmas + # C4275: Warnings about using non-exported classes as base class of an + # exported class + set_target_properties(${BackendTarget} PROPERTIES COMPILE_FLAGS "/wd4251 /wd4068 /wd4275") elseif (APPLE) target_compile_definitions(${BackendTarget} PRIVATE OS_MAC) else(WIN32) @@ -115,14 +122,23 @@ endif() # Install forget target #-------------------------------------------------------------------- install(TARGETS forge - EXPORT ForgeConfig - ARCHIVE DESTINATION ${FG_INSTALL_LIB_DIR} - LIBRARY DESTINATION ${FG_INSTALL_LIB_DIR} + EXPORT ForgeTargets + COMPONENT forge + PUBLIC_HEADER DESTINATION fg RUNTIME DESTINATION ${FG_INSTALL_BIN_DIR} + LIBRARY DESTINATION ${FG_INSTALL_LIB_DIR} + ARCHIVE DESTINATION ${FG_INSTALL_LIB_DIR} + FRAMEWORK DESTINATION framework + INCLUDES DESTINATION ${FG_INSTALL_INC_DIR} ) -install(EXPORT ForgeConfig NAMESPACE Forge:: DESTINATION ${FG_INSTALL_CMAKE_DIR}) - -#Following ForgeConfig.cmake is built using local build tree -#Don't copy this file anywhere else -export(TARGETS forge NAMESPACE Forge:: FILE ForgeConfig.cmake) +# install dependencies +get_target_library_path(binary_location forge) +if (EXISTS "${binary_location}") + get_prerequisites(${binary_location} dependencies 1 1 "" "${prerequisites_search_dirs}") + resolve_dependencies_paths(forge_deps + "${dependencies}" "${binary_location}" "${prerequisites_search_dirs}") + install(FILES ${forge_deps} + DESTINATION ${FG_INSTALL_BIN_DIR} + COMPONENT dependencies) +endif () From 5ae6549693d0367e7eb0f1b9df75b75fbb42df7b Mon Sep 17 00:00:00 2001 From: pradeep Date: Tue, 13 Mar 2018 18:55:32 +0530 Subject: [PATCH 14/55] misc: fix cmake packager, hunter, config --- CMakeLists.txt | 20 ++++++----- CMakeModules/Hunter/config.cmake | 55 +++++++++++++++++++++++++++++++ src/backend/opengl/CMakeLists.txt | 2 +- 3 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 CMakeModules/Hunter/config.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index dcf0c55a..c520dc8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,19 @@ cmake_minimum_required(VERSION 3.5) -OPTION(USE_HUNTER "Use Hunter cmake package handler" OFF) +option(BUILD_SHARED_LIBS "Build shared/static library" ON) +option(USE_HUNTER "Use Hunter cmake package handler" OFF) + if(USE_HUNTER) include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) HunterGate( URL "https://github.com/ruslo/hunter/archive/v0.19.208.tar.gz" SHA1 "4128ac8c79c21b250bf825e8119ce0bff05e5132" + FILEPATH "${CMAKE_CURRENT_LIST_DIR}/CMakeModules/Hunter/config.cmake" ) endif() project(Forge VERSION 1.1.0 LANGUAGES C CXX) - set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") @@ -109,11 +111,11 @@ write_basic_package_version_file( set(INCLUDE_DIRS include) set(CMAKE_DIR ${FG_INSTALL_CMAKE_DIR}) configure_package_config_file( - ${CMAKE_MODULE_PATH}/ForgeConfig.cmake.in - cmake/install/ForgeConfig.cmake - INSTALL_DESTINATION "${FG_INSTALL_CMAKE_DIR}" - PATH_VARS INCLUDE_DIRS CMAKE_DIR - ) + "${PROJECT_SOURCE_DIR}/CMakeModules/ForgeConfig.cmake.in" + "cmake/install/ForgeConfig.cmake" + INSTALL_DESTINATION "${FG_INSTALL_CMAKE_DIR}" + PATH_VARS INCLUDE_DIRS CMAKE_DIR +) install(FILES ${Forge_BINARY_DIR}/cmake/install/ForgeConfig.cmake ${Forge_BINARY_DIR}/cmake/ForgeConfigVersion.cmake @@ -126,8 +128,8 @@ install(FILES ${Forge_BINARY_DIR}/cmake/install/ForgeConfig.cmake set(INCLUDE_DIRS "${Forge_SOURCE_DIR}/include" "${Forge_BINARY_DIR}/include") set(CMAKE_DIR "${Forge_BINARY_DIR}/cmake") configure_package_config_file( - ${CMAKE_MODULE_PATH}/ForgeConfig.cmake.in - cmake/ForgeConfig.cmake + "${PROJECT_SOURCE_DIR}/CMakeModules/ForgeConfig.cmake.in" + "cmake/ForgeConfig.cmake" INSTALL_DESTINATION "${Forge_BINARY_DIR}/cmake" PATH_VARS INCLUDE_DIRS CMAKE_DIR INSTALL_PREFIX "${Forge_BINARY_DIR}" diff --git a/CMakeModules/Hunter/config.cmake b/CMakeModules/Hunter/config.cmake new file mode 100644 index 00000000..769a0fc2 --- /dev/null +++ b/CMakeModules/Hunter/config.cmake @@ -0,0 +1,55 @@ +include(hunter_config) + +macro(myhunter_config pkg_name ver) + hunter_config( + ${pkg_name} + VERSION ${ver} + CONFIGURATION_TYPES Release + CMAKE_ARGS CMAKE_POSITION_INDEPENDENT_CODE=ON ${ARGN} + ) +endmacro() + +myhunter_config(freeimage hunter-v3.17.0) +myhunter_config(freetype 2.6.2) +myhunter_config(OpenCL 2.1-p0) + +#freeimag dependencies +myhunter_config(ZLIB 1.2.8-p3) +myhunter_config(TIFF 4.0.2-p3) +myhunter_config(PNG 1.6.26-p1) +myhunter_config(Jpeg 9b-p3) + +#glfw dependencies +myhunter_config(xcursor 1.1.13) +myhunter_config(xorg-macros 1.17) +myhunter_config(xrender 0.9.7) +myhunter_config(x11 1.5.0) +myhunter_config(xproto 7.0.23) +myhunter_config(xextproto 7.2.1) +myhunter_config(xtrans 1.2.7) +myhunter_config(xcb 1.11.1) +myhunter_config(xcb-proto 1.11) +myhunter_config(pthread-stubs 0.3) +myhunter_config(xau 1.0.7) +myhunter_config(kbproto 1.0.6) +myhunter_config(inputproto 2.2) +myhunter_config(renderproto 0.11.1) +myhunter_config(xfixes 5.0.1) +myhunter_config(fixesproto 5.0) +myhunter_config(xinerama 1.1.2) +myhunter_config(xineramaproto 1.1.2) +myhunter_config(xrandr 1.3.2) +myhunter_config(randrproto 1.3.2) +myhunter_config(xi 1.6.1) +myhunter_config(xext 1.3.1) + +myhunter_config(glbinding 2.1.3-p0 + OPTION_BUILD_GPU_TESTS=ON + OPTION_BUILD_TESTS=ON + OPTION_BUILD_TOOLS=ON + gtest_force_shared_crt=ON) + +myhunter_config(glfw 3.3.0-p4 + GLFW_BUILD_DOCS=OFF + GLFW_BUILD_EXAMPLES=OFF + GLFW_BUILD_TESTS=OFF) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 8e07dde1..3fec2477 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -2,7 +2,7 @@ find_package(OpenGL REQUIRED) set(BackendTarget "forge") -add_library(${BackendTarget} SHARED "") +add_library(${BackendTarget} "") set_target_properties(${BackendTarget} PROPERTIES FOLDER Forge) set_target_properties(${BackendTarget} PROPERTIES POSITION_INDEPENDENT_CODE ON) From 819bf44a929d071e3bcf63b36be6471c5412a458 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 14 Mar 2018 10:30:56 +0530 Subject: [PATCH 15/55] fix: SONAME for the library --- src/backend/opengl/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 3fec2477..cc787e3b 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -8,6 +8,8 @@ set_target_properties(${BackendTarget} PROPERTIES FOLDER Forge) set_target_properties(${BackendTarget} PROPERTIES POSITION_INDEPENDENT_CODE ON) set_target_properties(${BackendTarget} PROPERTIES CXX_STANDARD 11) set_target_properties(${BackendTarget} PROPERTIES LINKER_LANGUAGE CXX) +set_target_properties(${BackendTarget} PROPERTIES VERSION ${Forge_VERSION}) +set_target_properties(${BackendTarget} PROPERTIES SOVERSION ${Forge_VERSION_MAJOR}) if (WIN32) target_compile_definitions(${BackendTarget} From 25339e7dde7558ab8bb994ce167d221afaa289a1 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 14 Mar 2018 11:33:00 +0530 Subject: [PATCH 16/55] misc: update HunterGate version to v0.20.18 Also commented out freeimage project since it is not yet available via hunter. --- CMakeLists.txt | 29 +++++++++++++++++------------ CMakeModules/Hunter/config.cmake | 14 ++++++++------ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c520dc8a..f854ce30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,31 +1,36 @@ cmake_minimum_required(VERSION 3.5) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") +set(CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}prefix;${CMAKE_PREFIX_PATH}") + +include(BuildType) +include(FGInstallDirs) +include(GetPrerequisites) +include(InternalUtils) +include(platform) + option(BUILD_SHARED_LIBS "Build shared/static library" ON) option(USE_HUNTER "Use Hunter cmake package handler" OFF) if(USE_HUNTER) + set(HUNTER_TLS_VERIFY OFF) + set(HUNTER_BUILD_SHARED_LIBS OFF) include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) HunterGate( - URL "https://github.com/ruslo/hunter/archive/v0.19.208.tar.gz" - SHA1 "4128ac8c79c21b250bf825e8119ce0bff05e5132" + URL "https://github.com/ruslo/hunter/archive/v0.20.18.tar.gz" + SHA1 "c2614bc107a5172c167a5784f476b6fb39e314a9" FILEPATH "${CMAKE_CURRENT_LIST_DIR}/CMakeModules/Hunter/config.cmake" ) + mark_as_advanced(HUNTER_TLS_VERIFY) + mark_as_advanced(HUNTER_BUILD_SHARED_LIBS) endif() project(Forge VERSION 1.1.0 LANGUAGES C CXX) -set_property(GLOBAL PROPERTY USE_FOLDERS ON) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") -set(CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}prefix;${CMAKE_PREFIX_PATH}") - -include(BuildType) -include(FGInstallDirs) -include(GetPrerequisites) -include(InternalUtils) -include(platform) include(Version) +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + if(USE_HUNTER) hunter_add_package(glbinding) hunter_add_package(glm) diff --git a/CMakeModules/Hunter/config.cmake b/CMakeModules/Hunter/config.cmake index 769a0fc2..e8e15572 100644 --- a/CMakeModules/Hunter/config.cmake +++ b/CMakeModules/Hunter/config.cmake @@ -9,15 +9,17 @@ macro(myhunter_config pkg_name ver) ) endmacro() -myhunter_config(freeimage hunter-v3.17.0) +myhunter_config(Boost 1.66.0) myhunter_config(freetype 2.6.2) myhunter_config(OpenCL 2.1-p0) +myhunter_config(glm 0.9.8.5) -#freeimag dependencies -myhunter_config(ZLIB 1.2.8-p3) -myhunter_config(TIFF 4.0.2-p3) -myhunter_config(PNG 1.6.26-p1) -myhunter_config(Jpeg 9b-p3) +#myhunter_config(freeimage hunter-v3.17.0) +##freeimag dependencies +#myhunter_config(ZLIB 1.2.8-p3) +#myhunter_config(TIFF 4.0.2-p3) +#myhunter_config(PNG 1.6.26-p1) +#myhunter_config(Jpeg 9b-p3) #glfw dependencies myhunter_config(xcursor 1.1.13) From a6559ae453245cd0bf65987023c34eda45e168d2 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 14 Mar 2018 13:25:10 +0530 Subject: [PATCH 17/55] feat: support to use static freeimage --- CMakeLists.txt | 1 + src/backend/opengl/CMakeLists.txt | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f854ce30..4241abec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ include(platform) option(BUILD_SHARED_LIBS "Build shared/static library" ON) option(USE_HUNTER "Use Hunter cmake package handler" OFF) +option(USE_STATIC_FREEIMAGE "Use static version of freeimage" OFF) if(USE_HUNTER) set(HUNTER_TLS_VERIFY OFF) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index cc787e3b..4eb42f82 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -70,7 +70,11 @@ endif() if(WITH_FREEIMAGE) target_compile_definitions(${BackendTarget} PRIVATE USE_FREEIMAGE) - target_link_libraries(${BackendTarget} PRIVATE FreeImage::FreeImage) + if (USE_STATIC_FREEIMAGE) + target_link_libraries(${BackendTarget} PRIVATE FreeImage::FreeImage_STATIC) + else () + target_link_libraries(${BackendTarget} PRIVATE FreeImage::FreeImage) + endif () endif() target_include_directories(${BackendTarget} From b6dc8808ee8193b99df00cfc3b143c33c51dda64 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 14 Mar 2018 15:19:22 +0530 Subject: [PATCH 18/55] fix: export interface targets for static builds --- src/api/c/CMakeLists.txt | 24 ++++++++++------- src/api/cpp/CMakeLists.txt | 26 +++++++++++-------- src/backend/common/CMakeLists.txt | 36 ++++++++++++++------------ src/backend/opengl/glfw/CMakeLists.txt | 10 ++++--- src/backend/opengl/sdl/CMakeLists.txt | 10 ++++--- 5 files changed, 63 insertions(+), 43 deletions(-) diff --git a/src/api/c/CMakeLists.txt b/src/api/c/CMakeLists.txt index ab2dd075..f7259624 100644 --- a/src/api/c/CMakeLists.txt +++ b/src/api/c/CMakeLists.txt @@ -2,18 +2,22 @@ add_library(c_api_interface INTERFACE) target_sources(c_api_interface INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR}/chart.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/exception.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/font.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/histogram.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/image.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/plot.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/surface.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/vector_field.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + $ + $ + $ + $ + $ + $ + $ + $ + $ ) target_include_directories(c_api_interface INTERFACE - $ + $> ) + +if (NOT BUILD_SHARED_LIBS) + install(TARGETS c_api_interface EXPORT ForgeTargets) +endif () diff --git a/src/api/cpp/CMakeLists.txt b/src/api/cpp/CMakeLists.txt index 39d2a410..4151e1ef 100644 --- a/src/api/cpp/CMakeLists.txt +++ b/src/api/cpp/CMakeLists.txt @@ -2,19 +2,23 @@ add_library(cpp_api_interface INTERFACE) target_sources(cpp_api_interface INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR}/chart.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/error.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/exception.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/font.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/histogram.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/image.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/plot.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/surface.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/vector_field.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ ) target_include_directories(cpp_api_interface INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR} + $ ) + +if (NOT BUILD_SHARED_LIBS) + install(TARGETS cpp_api_interface EXPORT ForgeTargets) +endif () diff --git a/src/backend/common/CMakeLists.txt b/src/backend/common/CMakeLists.txt index 1a774793..4905c47f 100644 --- a/src/backend/common/CMakeLists.txt +++ b/src/backend/common/CMakeLists.txt @@ -2,24 +2,28 @@ add_library(backend_interface INTERFACE) target_sources(backend_interface INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR}/chart_common.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/chart.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/chart_renderables.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/cmap.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/defines.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/err_common.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/err_common.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/font.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/handle.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/handle.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/image.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/util.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/util.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/window.hpp + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ ) target_include_directories(backend_interface INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/include + $ + $ ) + +if (NOT BUILD_SHARED_LIBS) + install(TARGETS backend_interface EXPORT ForgeTargets) +endif () diff --git a/src/backend/opengl/glfw/CMakeLists.txt b/src/backend/opengl/glfw/CMakeLists.txt index 5026651a..23e28f13 100644 --- a/src/backend/opengl/glfw/CMakeLists.txt +++ b/src/backend/opengl/glfw/CMakeLists.txt @@ -8,13 +8,17 @@ add_library(wtk_interface INTERFACE) target_include_directories(wtk_interface INTERFACE - ${CMAKE_SOURCE_DIR}/src/backend/opengl + $ ) target_sources(wtk_interface INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR}/window.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + $ + $ ) target_link_libraries(wtk_interface INTERFACE glfw) + +if (NOT BUILD_SHARED_LIBS) + install(TARGETS wtk_interface EXPORT ForgeTargets) +endif () diff --git a/src/backend/opengl/sdl/CMakeLists.txt b/src/backend/opengl/sdl/CMakeLists.txt index 063fa091..dd7c85a2 100644 --- a/src/backend/opengl/sdl/CMakeLists.txt +++ b/src/backend/opengl/sdl/CMakeLists.txt @@ -8,13 +8,17 @@ add_library(wtk_interface INTERFACE) target_include_directories(wtk_interface INTERFACE - ${CMAKE_SOURCE_DIR}/src/backend/opengl + $ ) target_sources(wtk_interface INTERFACE - ${CMAKE_CURRENT_SOURCE_DIR}/window.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/window.cpp + $ + $ ) target_link_libraries(wtk_interface INTERFACE SDL2::SDL2) + +if (NOT BUILD_SHARED_LIBS) + install(TARGETS wtk_interface EXPORT ForgeTargets) +endif () From 27223312d7430260bd000b46eb9aee15e68c2220 Mon Sep 17 00:00:00 2001 From: pradeep Date: Thu, 15 Mar 2018 17:49:40 +0530 Subject: [PATCH 19/55] fix: move stranded definitions into appropriate namespaces This resolves naming conflicts when static library of forge is created. --- src/api/c/chart.cpp | 1 + src/api/c/exception.cpp | 4 +-- src/api/c/font.cpp | 2 ++ src/api/c/histogram.cpp | 2 ++ src/api/c/image.cpp | 3 ++ src/api/c/plot.cpp | 2 ++ src/api/c/surface.cpp | 2 ++ src/api/c/vector_field.cpp | 2 ++ src/api/c/window.cpp | 5 +++ src/api/cpp/exception.cpp | 8 ++--- src/backend/common/cmap.hpp | 8 +++++ src/backend/common/defines.hpp | 14 +++++++-- src/backend/common/err_common.cpp | 9 ++++-- src/backend/common/err_common.hpp | 25 +++++++++------ src/backend/common/handle.cpp | 40 ++++++++++++++---------- src/backend/common/handle.hpp | 40 ++++++++++++++---------- src/backend/common/util.cpp | 8 +++++ src/backend/common/util.hpp | 8 +++++ src/backend/opengl/chart_impl.cpp | 10 +++--- src/backend/opengl/colormap_impl.cpp | 2 ++ src/backend/opengl/err_opengl.cpp | 8 +++++ src/backend/opengl/err_opengl.hpp | 8 +++++ src/backend/opengl/font_atlas_impl.cpp | 4 +-- src/backend/opengl/font_impl.cpp | 3 ++ src/backend/opengl/font_impl.hpp | 3 -- src/backend/opengl/surface_impl.cpp | 11 ++++--- src/backend/opengl/update_buffer.cpp | 6 ++-- src/backend/opengl/vector_field_impl.cpp | 3 -- src/backend/opengl/window_impl.cpp | 6 ++-- 29 files changed, 170 insertions(+), 77 deletions(-) diff --git a/src/api/c/chart.cpp b/src/api/c/chart.cpp index 2a435394..461fa24a 100644 --- a/src/api/c/chart.cpp +++ b/src/api/c/chart.cpp @@ -24,6 +24,7 @@ #include using namespace forge; +using namespace forge::common; fg_err fg_create_chart(fg_chart *pChart, const fg_chart_type pChartType) diff --git a/src/api/c/exception.cpp b/src/api/c/exception.cpp index 12bf58f1..ea7e5e4b 100644 --- a/src/api/c/exception.cpp +++ b/src/api/c/exception.cpp @@ -40,8 +40,8 @@ const char * fg_err_to_string(const fg_err err) void fg_get_last_error(char **msg, int *len) { - std::string &error = getGlobalErrorString(); - int slen = std::min(MAX_ERR_SIZE, (int)error.size()); + std::string &error = forge::common::getGlobalErrorString(); + int slen = std::min(forge::common::MAX_ERR_SIZE, (int)error.size()); if(len && slen == 0) { *len = 0; *msg = NULL; diff --git a/src/api/c/font.cpp b/src/api/c/font.cpp index ed6ab181..608426b8 100644 --- a/src/api/c/font.cpp +++ b/src/api/c/font.cpp @@ -14,6 +14,8 @@ using namespace forge; +using forge::common::getFont; + fg_err fg_create_font(fg_font* pFont) { try { diff --git a/src/api/c/histogram.cpp b/src/api/c/histogram.cpp index e5c8ab79..d336bdbb 100644 --- a/src/api/c/histogram.cpp +++ b/src/api/c/histogram.cpp @@ -14,6 +14,8 @@ using namespace forge; +using forge::common::getHistogram; + fg_err fg_create_histogram(fg_histogram *pHistogram, const unsigned pNBins, const fg_dtype pType) { diff --git a/src/api/c/image.cpp b/src/api/c/image.cpp index 6dec14d1..24cbdf96 100644 --- a/src/api/c/image.cpp +++ b/src/api/c/image.cpp @@ -17,6 +17,9 @@ using namespace forge; +using forge::common::getImage; +using forge::common::getWindow; + fg_err fg_create_image(fg_image* pImage, const unsigned pWidth, const unsigned pHeight, const fg_channel_format pFormat, const fg_dtype pType) diff --git a/src/api/c/plot.cpp b/src/api/c/plot.cpp index 25ac11e1..0568ec86 100644 --- a/src/api/c/plot.cpp +++ b/src/api/c/plot.cpp @@ -14,6 +14,8 @@ using namespace forge; +using forge::common::getPlot; + fg_err fg_create_plot(fg_plot *pPlot, const unsigned pNPoints, const fg_dtype pType, const fg_chart_type pChartType, diff --git a/src/api/c/surface.cpp b/src/api/c/surface.cpp index cfffc6b8..df14871f 100644 --- a/src/api/c/surface.cpp +++ b/src/api/c/surface.cpp @@ -14,6 +14,8 @@ using namespace forge; +using forge::common::getSurface; + fg_err fg_create_surface(fg_surface *pSurface, const unsigned pXPoints, const unsigned pYPoints, const fg_dtype pType, diff --git a/src/api/c/vector_field.cpp b/src/api/c/vector_field.cpp index 59958100..9bbecf3f 100644 --- a/src/api/c/vector_field.cpp +++ b/src/api/c/vector_field.cpp @@ -14,6 +14,8 @@ using namespace forge; +using forge::common::getVectorField; + fg_err fg_create_vector_field(fg_vector_field *pField, const unsigned pNPoints, const fg_dtype pType, diff --git a/src/api/c/window.cpp b/src/api/c/window.cpp index 260f8ed5..5e435551 100644 --- a/src/api/c/window.cpp +++ b/src/api/c/window.cpp @@ -15,6 +15,11 @@ using namespace forge; +using forge::common::getWindow; +using forge::common::getFont; +using forge::common::getImage; +using forge::common::getChart; + fg_err fg_create_window(fg_window *pWindow, const int pWidth, const int pHeight, const char* pTitle, diff --git a/src/api/cpp/exception.cpp b/src/api/cpp/exception.cpp index 009e3315..8cb7609d 100644 --- a/src/api/cpp/exception.cpp +++ b/src/api/cpp/exception.cpp @@ -19,18 +19,18 @@ using std::string; using std::stringstream; using std::cerr; +namespace forge +{ + void stringcopy(char* dest, const char* src, size_t len) { #if defined(OS_WIN) - strncpy_s(dest, MAX_ERR_SIZE, src, len); + strncpy_s(dest, forge::common::MAX_ERR_SIZE, src, len); #else strncpy(dest, src, len); #endif } -namespace forge -{ - Error::Error() : mErrCode(FG_ERR_UNKNOWN) { stringcopy(mMessage, "Unknown Exception", sizeof(mMessage)); diff --git a/src/backend/common/cmap.hpp b/src/backend/common/cmap.hpp index dabc8650..4732aea5 100644 --- a/src/backend/common/cmap.hpp +++ b/src/backend/common/cmap.hpp @@ -9,6 +9,11 @@ #pragma once +namespace forge +{ +namespace common +{ + /** * Color maps: heat, rainbow are pulled from the following resource: * @@ -2928,3 +2933,6 @@ float cmap_viridis[] = 0.983868f, 0.904867f, 0.136897f, 1.0f, 0.993248f, 0.906157f, 0.143936f, 1.0f, }; + +} +} diff --git a/src/backend/common/defines.hpp b/src/backend/common/defines.hpp index a3ec6131..09f67531 100644 --- a/src/backend/common/defines.hpp +++ b/src/backend/common/defines.hpp @@ -11,8 +11,13 @@ #include +namespace forge +{ +namespace common +{ + inline std::string -clipFilePath(std::string path, std::string str) +clipPath(std::string path, std::string str) { try { std::string::size_type pos = path.rfind(str); @@ -32,11 +37,14 @@ clipFilePath(std::string path, std::string str) #define snprintf sprintf_s #endif #define STATIC_ static - #define __FG_FILENAME__ (clipFilePath(__FILE__, "src\\").c_str()) + #define __FG_FILENAME__ (forge::common::clipPath(__FILE__, "src\\").c_str()) #else //#ifndef __PRETTY_FUNCTION__ // #define __PRETTY_FUNCTION__ __func__ // __PRETTY_FUNCTION__ Fallback //#endif #define STATIC_ inline - #define __FG_FILENAME__ (clipFilePath(__FILE__, "src/").c_str()) + #define __FG_FILENAME__ (forge::common::clipPath(__FILE__, "src/").c_str()) #endif + +} +} diff --git a/src/backend/common/err_common.cpp b/src/backend/common/err_common.cpp index c4bf2269..fdf40f8e 100644 --- a/src/backend/common/err_common.cpp +++ b/src/backend/common/err_common.cpp @@ -17,8 +17,10 @@ #include #include -using namespace forge; - +namespace forge +{ +namespace common +{ using std::string; using std::stringstream; @@ -137,3 +139,6 @@ const char * getName(forge::dtype type) default : TYPE_ERROR(1, type); } } + +} +} diff --git a/src/backend/common/err_common.hpp b/src/backend/common/err_common.hpp index 17a738a9..681cc6a5 100644 --- a/src/backend/common/err_common.hpp +++ b/src/backend/common/err_common.hpp @@ -17,6 +17,10 @@ #include #include +namespace forge +{ +namespace common +{ //////////////////////////////////////////////////////////////////////////////// // Exception Classes // Error, TypeError, ArgumentError @@ -138,23 +142,23 @@ const char * getName(forge::dtype type); //////////////////////////////////////////////////////////////////////////////// // Macros //////////////////////////////////////////////////////////////////////////////// -#define ARG_ASSERT(INDEX, COND) do { \ - if((COND) == false) { \ - throw ArgumentError(__PRETTY_FUNCTION__, \ - __FG_FILENAME__, __LINE__, \ - INDEX, #COND); \ - } \ +#define ARG_ASSERT(INDEX, COND) do { \ + if((COND) == false) { \ + throw forge::common::ArgumentError(__PRETTY_FUNCTION__, \ + __FG_FILENAME__, __LINE__, \ + INDEX, #COND); \ + } \ } while(0) #define TYPE_ERROR(INDEX, type) do { \ - throw TypeError(__PRETTY_FUNCTION__, \ + throw forge::common::TypeError(__PRETTY_FUNCTION__, \ __FG_FILENAME__, __LINE__, \ INDEX, type); \ } while(0) \ #define FG_ERROR(MSG, ERR_TYPE) do { \ - throw FgError(__PRETTY_FUNCTION__, \ + throw forge::common::FgError(__PRETTY_FUNCTION__, \ __FG_FILENAME__, __LINE__, \ MSG, ERR_TYPE); \ } while(0) @@ -168,5 +172,8 @@ const char * getName(forge::dtype type); #define CATCHALL \ catch(...) { \ - return processException(); \ + return forge::common::processException(); \ } + +} +} diff --git a/src/backend/common/handle.cpp b/src/backend/common/handle.cpp index 3f1f1f2d..cf35f69d 100644 --- a/src/backend/common/handle.cpp +++ b/src/backend/common/handle.cpp @@ -9,84 +9,90 @@ #include -using namespace forge; +namespace forge +{ +namespace common +{ -fg_window getHandle(common::Window* pValue) +fg_window getHandle(Window* pValue) { return reinterpret_cast(pValue); } -fg_font getHandle(common::Font* pValue) +fg_font getHandle(Font* pValue) { return reinterpret_cast(pValue); } -fg_image getHandle(common::Image* pValue) +fg_image getHandle(Image* pValue) { return reinterpret_cast(pValue); } -fg_chart getHandle(common::Chart* pValue) +fg_chart getHandle(Chart* pValue) { return reinterpret_cast(pValue); } -fg_histogram getHandle(common::Histogram* pValue) +fg_histogram getHandle(Histogram* pValue) { return reinterpret_cast(pValue); } -fg_plot getHandle(common::Plot* pValue) +fg_plot getHandle(Plot* pValue) { return reinterpret_cast(pValue); } -fg_surface getHandle(common::Surface* pValue) +fg_surface getHandle(Surface* pValue) { return reinterpret_cast(pValue); } -fg_vector_field getHandle(common::VectorField* pValue) +fg_vector_field getHandle(VectorField* pValue) { return reinterpret_cast(pValue); } -common::Window* getWindow(const fg_window& pValue) +Window* getWindow(const fg_window& pValue) { return reinterpret_cast(pValue); } -common::Font* getFont(const fg_font& pValue) +Font* getFont(const fg_font& pValue) { return reinterpret_cast(pValue); } -common::Image* getImage(const fg_image& pValue) +Image* getImage(const fg_image& pValue) { return reinterpret_cast(pValue); } -common::Chart* getChart(const fg_chart& pValue) +Chart* getChart(const fg_chart& pValue) { return reinterpret_cast(pValue); } -common::Histogram* getHistogram(const fg_histogram& pValue) +Histogram* getHistogram(const fg_histogram& pValue) { return reinterpret_cast(pValue); } -common::Plot* getPlot(const fg_plot& pValue) +Plot* getPlot(const fg_plot& pValue) { return reinterpret_cast(pValue); } -common::Surface* getSurface(const fg_surface& pValue) +Surface* getSurface(const fg_surface& pValue) { return reinterpret_cast(pValue); } -common::VectorField* getVectorField(const fg_vector_field& pValue) +VectorField* getVectorField(const fg_vector_field& pValue) { return reinterpret_cast(pValue); } + +} +} diff --git a/src/backend/common/handle.hpp b/src/backend/common/handle.hpp index 7aecfff3..3279b319 100644 --- a/src/backend/common/handle.hpp +++ b/src/backend/common/handle.hpp @@ -17,34 +17,42 @@ #include #include -fg_window getHandle(forge::common::Window* pValue); +namespace forge +{ +namespace common +{ -fg_font getHandle(forge::common::Font* pValue); +fg_window getHandle(Window* pValue); -fg_image getHandle(forge::common::Image* pValue); +fg_font getHandle(Font* pValue); -fg_chart getHandle(forge::common::Chart* pValue); +fg_image getHandle(Image* pValue); -fg_histogram getHandle(forge::common::Histogram* pValue); +fg_chart getHandle(Chart* pValue); -fg_plot getHandle(forge::common::Plot* pValue); +fg_histogram getHandle(Histogram* pValue); -fg_surface getHandle(forge::common::Surface* pValue); +fg_plot getHandle(Plot* pValue); -fg_vector_field getHandle(forge::common::VectorField* pValue); +fg_surface getHandle(Surface* pValue); -forge::common::Window* getWindow(const fg_window& pValue); +fg_vector_field getHandle(VectorField* pValue); -forge::common::Font* getFont(const fg_font& pValue); +Window* getWindow(const fg_window& pValue); -forge::common::Image* getImage(const fg_image& pValue); +Font* getFont(const fg_font& pValue); -forge::common::Chart* getChart(const fg_chart& pValue); +Image* getImage(const fg_image& pValue); -forge::common::Histogram* getHistogram(const fg_histogram& pValue); +Chart* getChart(const fg_chart& pValue); -forge::common::Plot* getPlot(const fg_plot& pValue); +Histogram* getHistogram(const fg_histogram& pValue); -forge::common::Surface* getSurface(const fg_surface& pValue); +Plot* getPlot(const fg_plot& pValue); -forge::common::VectorField* getVectorField(const fg_vector_field& pValue); +Surface* getSurface(const fg_surface& pValue); + +VectorField* getVectorField(const fg_vector_field& pValue); + +} +} diff --git a/src/backend/common/util.cpp b/src/backend/common/util.cpp index 7c4cd2e6..d86aee26 100644 --- a/src/backend/common/util.cpp +++ b/src/backend/common/util.cpp @@ -15,6 +15,11 @@ #include #endif +namespace forge +{ +namespace common +{ + using std::string; string getEnvVar(const std::string &key) @@ -35,3 +40,6 @@ string getEnvVar(const std::string &key) return str==NULL ? string("") : string(str); #endif } + +} +} diff --git a/src/backend/common/util.hpp b/src/backend/common/util.hpp index e1cd85a6..5c50d19d 100644 --- a/src/backend/common/util.hpp +++ b/src/backend/common/util.hpp @@ -13,4 +13,12 @@ #pragma once +namespace forge +{ +namespace common +{ + std::string getEnvVar(const std::string &key); + +} +} diff --git a/src/backend/opengl/chart_impl.cpp b/src/backend/opengl/chart_impl.cpp index 4f4d9264..e1b10489 100644 --- a/src/backend/opengl/chart_impl.cpp +++ b/src/backend/opengl/chart_impl.cpp @@ -35,6 +35,11 @@ using namespace gl; using namespace std; +namespace forge +{ +namespace opengl +{ + typedef std::vector::const_iterator StringIter; static const int CHART2D_FONT_SIZE = 12; @@ -76,11 +81,6 @@ int calcTrgtFntSize(const float w, const float h) return CHART2D_FONT_SIZE; } -namespace forge -{ -namespace opengl -{ - /********************* BEGIN-AbstractChart *********************/ void AbstractChart::renderTickLabels( diff --git a/src/backend/opengl/colormap_impl.cpp b/src/backend/opengl/colormap_impl.cpp index f92a1bd7..cb47332f 100644 --- a/src/backend/opengl/colormap_impl.cpp +++ b/src/backend/opengl/colormap_impl.cpp @@ -26,6 +26,8 @@ colormap_impl::colormap_impl() mRedMapBuffer(0), mMoodMapBuffer(0), mHeatMapBuffer(0), mBlueMapBuffer(0) { + using namespace forge::common; + size_t channel_bytes = sizeof(float)*4; /* 4 is for 4 channels */ mDefMapLen = (GLuint)(sizeof(cmap_default) / channel_bytes); mSpecMapLen = (GLuint)(sizeof(cmap_spectrum) / channel_bytes); diff --git a/src/backend/opengl/err_opengl.cpp b/src/backend/opengl/err_opengl.cpp index 568e8be3..daee70e6 100644 --- a/src/backend/opengl/err_opengl.cpp +++ b/src/backend/opengl/err_opengl.cpp @@ -17,6 +17,11 @@ using namespace gl; +namespace forge +{ +namespace opengl +{ + void commonErrorCheck(const char *pMsg, const char* pFile, int pLine) { GLenum x = glGetError(); @@ -41,3 +46,6 @@ void glForceErrorCheck(const char *pMsg, const char* pFile, int pLine) { commonErrorCheck(pMsg, pFile, pLine); } + +} +} diff --git a/src/backend/opengl/err_opengl.hpp b/src/backend/opengl/err_opengl.hpp index 98835e81..e52e2b05 100644 --- a/src/backend/opengl/err_opengl.hpp +++ b/src/backend/opengl/err_opengl.hpp @@ -11,8 +11,16 @@ #include +namespace forge +{ +namespace opengl +{ + void glErrorCheck(const char *pMsg, const char* pFile, int pLine); void glForceErrorCheck(const char *pMsg, const char* pFile, int pLine); #define CheckGL(msg) glErrorCheck (msg, __FILE__, __LINE__) #define ForceCheckGL(msg) glForceErrorCheck(msg, __FILE__, __LINE__) + +} +} diff --git a/src/backend/opengl/font_atlas_impl.cpp b/src/backend/opengl/font_atlas_impl.cpp index 41e3e4c2..40c3dd96 100644 --- a/src/backend/opengl/font_atlas_impl.cpp +++ b/src/backend/opengl/font_atlas_impl.cpp @@ -60,13 +60,13 @@ using namespace gl; -static const int BORDER_GAP = 4; - namespace forge { namespace opengl { +static const int BORDER_GAP = 4; + int FontAtlas::fit(const size_t pIndex, const size_t pWidth, const size_t pHeight) { auto node = nodes[pIndex]; diff --git a/src/backend/opengl/font_impl.cpp b/src/backend/opengl/font_impl.cpp index d4f446f7..05b20f3f 100644 --- a/src/backend/opengl/font_impl.cpp +++ b/src/backend/opengl/font_impl.cpp @@ -63,6 +63,9 @@ namespace forge namespace opengl { +const float MIN_FONT_SIZE = 8.0f; +const float MAX_FONT_SIZE = 24.0f; + #ifdef NDEBUG /* Relase Mode */ #define FT_THROW_ERROR(msg, error) \ diff --git a/src/backend/opengl/font_impl.hpp b/src/backend/opengl/font_impl.hpp index cd6fb571..a8a83a37 100644 --- a/src/backend/opengl/font_impl.hpp +++ b/src/backend/opengl/font_impl.hpp @@ -16,9 +16,6 @@ #include #include -static const float MIN_FONT_SIZE = 8.0f; -static const float MAX_FONT_SIZE = 24.0f; - namespace forge { namespace opengl diff --git a/src/backend/opengl/surface_impl.cpp b/src/backend/opengl/surface_impl.cpp index cb7863a2..8dff105f 100644 --- a/src/backend/opengl/surface_impl.cpp +++ b/src/backend/opengl/surface_impl.cpp @@ -23,6 +23,12 @@ using namespace gl; using namespace std; + +namespace forge +{ +namespace opengl +{ + void generateGridIndices(std::vector& indices, unsigned short rows, unsigned short cols) { @@ -51,11 +57,6 @@ void generateGridIndices(std::vector& indices, } } -namespace forge -{ -namespace opengl -{ - void surface_impl::bindResources(const int pWindowId) { if (mVAOMap.find(pWindowId) == mVAOMap.end()) { diff --git a/src/backend/opengl/update_buffer.cpp b/src/backend/opengl/update_buffer.cpp index 983c8392..bc6a3a1e 100644 --- a/src/backend/opengl/update_buffer.cpp +++ b/src/backend/opengl/update_buffer.cpp @@ -22,7 +22,7 @@ fg_err fg_update_vertex_buffer(const unsigned pBufferId, glBufferSubData(GL_ARRAY_BUFFER, 0, pBufferSize, pBufferData); glBindBuffer(GL_ARRAY_BUFFER, 0); } - CATCHALL + CATCHALL; return FG_ERR_NONE; } @@ -36,7 +36,7 @@ fg_err fg_update_pixel_buffer(const unsigned pBufferId, glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, pBufferSize, pBufferData); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } - CATCHALL + CATCHALL; return FG_ERR_NONE; } @@ -46,7 +46,7 @@ fg_err fg_finish() try { glFinish(); } - CATCHALL + CATCHALL; return FG_ERR_NONE; } diff --git a/src/backend/opengl/vector_field_impl.cpp b/src/backend/opengl/vector_field_impl.cpp index fbe1a94e..a93e63c9 100644 --- a/src/backend/opengl/vector_field_impl.cpp +++ b/src/backend/opengl/vector_field_impl.cpp @@ -20,9 +20,6 @@ using namespace gl; using namespace std; -// identity matrix -static const glm::mat4 I(1.0f); - namespace forge { namespace opengl diff --git a/src/backend/opengl/window_impl.cpp b/src/backend/opengl/window_impl.cpp index c954e3c1..81e85210 100644 --- a/src/backend/opengl/window_impl.cpp +++ b/src/backend/opengl/window_impl.cpp @@ -21,6 +21,9 @@ using namespace gl; using namespace forge; +namespace forge +{ + #ifdef USE_FREEIMAGE #include @@ -68,9 +71,6 @@ class FI_BitmapResource }; #endif //USE_FREEIMAGE -namespace forge -{ - /* following function is thread safe */ int getNextUniqueId() { From 5c3f78c1f9c9c56dbe6f5cb1e6831ca23debc274 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 16 Mar 2018 10:28:57 +0530 Subject: [PATCH 20/55] feat: option to use static stdc++ & gcc libs --- CMakeLists.txt | 4 ++++ src/backend/opengl/CMakeLists.txt | 12 +++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4241abec..cc2565bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,10 @@ include(platform) option(BUILD_SHARED_LIBS "Build shared/static library" ON) option(USE_HUNTER "Use Hunter cmake package handler" OFF) option(USE_STATIC_FREEIMAGE "Use static version of freeimage" OFF) +option(USE_STATIC_STDCPP "Use static libstdc++ for generating forge library" OFF) +option(USE_STATIC_GCC "Use static libgcc for generating forge library" OFF) +mark_as_advanced(USE_STATIC_STDCPP) +mark_as_advanced(USE_STATIC_GCC) if(USE_HUNTER) set(HUNTER_TLS_VERIFY OFF) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 4eb42f82..90a094c4 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -103,11 +103,13 @@ target_link_libraries(${BackendTarget} ) if(UNIX) - target_link_libraries(${BackendTarget} - PRIVATE - FontConfig::FontConfig - ${X11_X11_LIB} - ) + target_link_libraries(${BackendTarget} + PRIVATE + FontConfig::FontConfig + ${X11_X11_LIB} + $<$,$>:-static-libstdc++> + $<$,$>:-static-libgcc> + ) endif(UNIX) add_dependencies(${BackendTarget} ${glsl_shader_targets}) From d8ee939393ba15cff67363f382ceb5077ee65a6d Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 16 Mar 2018 11:21:50 +0530 Subject: [PATCH 21/55] refactor: CMake option variables to have FG_ prefix Also marked some varaibles as advanced as they don't need to be modified for most of the use cases. --- CMakeLists.txt | 82 ++++++++++++++++---------- CMakeModules/InternalUtils.cmake | 27 +++++++++ examples/CMakeLists.txt | 23 +++++--- src/backend/opengl/CMakeLists.txt | 16 ++--- src/backend/opengl/glfw/CMakeLists.txt | 2 +- src/backend/opengl/sdl/CMakeLists.txt | 2 +- 6 files changed, 101 insertions(+), 51 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc2565bf..6155f28a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.5) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") +set(CMAKE_MODULE_PATH + ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") set(CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}prefix;${CMAKE_PREFIX_PATH}") include(BuildType) @@ -9,15 +10,10 @@ include(GetPrerequisites) include(InternalUtils) include(platform) -option(BUILD_SHARED_LIBS "Build shared/static library" ON) -option(USE_HUNTER "Use Hunter cmake package handler" OFF) -option(USE_STATIC_FREEIMAGE "Use static version of freeimage" OFF) -option(USE_STATIC_STDCPP "Use static libstdc++ for generating forge library" OFF) -option(USE_STATIC_GCC "Use static libgcc for generating forge library" OFF) -mark_as_advanced(USE_STATIC_STDCPP) -mark_as_advanced(USE_STATIC_GCC) +option(BUILD_SHARED_LIBS "Build shared/static library" ON) +option(FG_ENABLE_HUNTER "Use Hunter cmake package handler" OFF) -if(USE_HUNTER) +if(FG_ENABLE_HUNTER) set(HUNTER_TLS_VERIFY OFF) set(HUNTER_BUILD_SHARED_LIBS OFF) include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) @@ -36,7 +32,15 @@ include(Version) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -if(USE_HUNTER) +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE + PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + +if(FG_ENABLE_HUNTER) hunter_add_package(glbinding) hunter_add_package(glm) hunter_add_package(freetype) @@ -58,36 +62,50 @@ find_package(X11 QUIET) find_package(FreeImage QUIET) find_package(Boost REQUIRED) -option(BUILD_DOCS "Build Documentation" ${DOXYGEN_FOUND}) -option(BUILD_EXAMPLES "Build Examples" ON) -option(WITH_FREEIMAGE "Use FreeImage to add support for - saving framebuffer to disk" ${FreeImage_FOUND}) +option(FG_BUILD_DOCS + "Build Documentation" ${DOXYGEN_FOUND}) +option(FG_BUILD_EXAMPLES + "Build Examples" ON) +option(FG_WITH_FREEIMAGE + "Use FreeImage to add support for saving framebuffer to disk" + ${FreeImage_FOUND}) + +option(FG_USE_STATIC_FREEIMAGE + "Use static version of freeimage" OFF) +option(FG_USE_STATIC_STDCPP + "Use static libstdc++ for generating forge library" OFF) +option(FG_USE_STATIC_GCC + "Use static libgcc for generating forge library" OFF) + +set(FG_USE_WINDOW_TOOLKIT "glfw3" CACHE STRING "Choose Window toolkit") +set_property(CACHE FG_USE_WINDOW_TOOLKIT PROPERTY STRINGS "glfw3" "sdl2") + +mark_as_advanced( + FG_USE_STATIC_FREEIMAGE + FG_USE_STATIC_STDCPP + FG_USE_STATIC_GCC + ) + +fg_deprecate(BUILD_DOCS FG_BUILD_DOCS) +fg_deprecate(BUILD_EXAMPLES FG_BUILD_EXAMPLES) +fg_deprecate(WITH_FREEIMAGE FG_WITH_FREEIMAGE) +fg_deprecate(USE_STATIC_FREEIMAGE FG_USE_STATIC_FREEIMAGE) +fg_deprecate(WITH_TOOLKIT FG_USE_WINDOW_TOOLKIT) if(Boost_FOUND AND NOT TARGET Boost::boost) add_library(Boost::boost INTERFACE IMPORTED) - set_property(TARGET Boost::boost PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS}) + set_property(TARGET Boost::boost + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS}) endif(Boost_FOUND AND NOT TARGET Boost::boost) - -set(WINDOW_TOOLKIT "glfw3" CACHE STRING "Choose Window toolkit") -set_property(CACHE WINDOW_TOOLKIT PROPERTY STRINGS "glfw3" "sdl2") - -# Set a default build type if none was specified -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) - # Set the possible values of build type for cmake-gui - set_property(CACHE CMAKE_BUILD_TYPE - PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") -endif() - add_subdirectory(src/backend/common) add_subdirectory(src/backend/glsl_shaders) add_subdirectory(src/api/c) add_subdirectory(src/api/cpp) add_subdirectory(src/backend/opengl) -conditional_directory(BUILD_DOCS docs) -conditional_directory(BUILD_EXAMPLES examples) +conditional_directory(FG_BUILD_DOCS docs) +conditional_directory(FG_BUILD_EXAMPLES examples) #-------------------------------------------------------------------- # Install include folder, docs, examples etc. @@ -148,10 +166,10 @@ configure_package_config_file( #-------------------------------------------------------------------- # Install examples #-------------------------------------------------------------------- -# install the examples irrespective of the BUILD_EXAMPLES value +# install the examples irrespective of the FG_BUILD_EXAMPLES value # only the examples source files are installed, so the installation of these -# source files does not depend on BUILD_EXAMPLES -# when BUILD_EXAMPLES is OFF, the examples source is installed without +# source files does not depend on FG_BUILD_EXAMPLES +# when FG_BUILD_EXAMPLES is OFF, the examples source is installed without # building the example executables install(DIRECTORY examples/ #NOTE The slash at the end is important DESTINATION ${FG_INSTALL_EXAMPLE_DIR} diff --git a/CMakeModules/InternalUtils.cmake b/CMakeModules/InternalUtils.cmake index 2db476aa..e436604e 100644 --- a/CMakeModules/InternalUtils.cmake +++ b/CMakeModules/InternalUtils.cmake @@ -32,3 +32,30 @@ function(resolve_dependencies_paths out_deps in_deps context search_dirs) endforeach() set(${out_deps} ${out_list} PARENT_SCOPE) endfunction() + +function(__fg_deprecate_var var access value) + if(access STREQUAL "READ_ACCESS") + message(DEPRECATION "Variable ${var} is deprecated. Use FG_${var} instead.") + endif() +endfunction() + +function(fg_deprecate var newvar) + if(DEFINED ${var}) + message(DEPRECATION "Variable ${var} is deprecated. Use ${newvar} instead.") + get_property(doc CACHE ${newvar} PROPERTY HELPSTRING) + set(${newvar} ${${var}} CACHE BOOL "${doc}" FORCE) + unset(${var} CACHE) + endif() + variable_watch(${var} __fg_deprecate_var) +endfunction() + +# mark CUDA cmake cache variables as advanced +# this should have been taken care of by FindCUDA I think. +mark_as_advanced( + CMAKE_CUDA_HOST_COMPILER + CUDA_HOST_COMPILER + CUDA_SDK_ROOT_DIR + CUDA_TOOLKIT_ROOT_DIR + CUDA_USE_STATIC_CUDA_RUNTIME + CUDA_rt_LIBRARY + ) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 783f544f..a42b3998 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -6,7 +6,7 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") -if(USE_HUNTER) +if(FG_ENABLE_HUNTER) hunter_add_package(OpenCL) endif() @@ -25,18 +25,23 @@ if(APPLE) endif() endif() -option(BUILD_EXAMPLES_CUDA "Turn off/on building cuda examples" ${CUDA_FOUND}) -option(BUILD_EXAMPLES_OPENCL "Turn off/on building opencl examples" ${OpenCL_FOUND}) -mark_as_advanced(BUILD_EXAMPLES_CUDA BUILD_EXAMPLES_OPENCL) - include(CMakeParseArguments) include(ConditionalDirectory) include(CMakeDependentOption) include(IfNotThisThenInclude) -cmake_dependent_option(USE_SYSTEM_CL2HPP "Use system cl2.hpp header" OFF "OpenCL_FOUND" OFF) +option(FG_BUILD_CUDA_EXAMPLES "Turn off/on building cuda examples" ${CUDA_FOUND}) +option(FG_BUILD_OPENCL_EXAMPLES "Turn off/on building opencl examples" ${OpenCL_FOUND}) + +cmake_dependent_option(FG_USE_SYSTEM_CL2HPP "Use system cl2.hpp header" OFF "OpenCL_FOUND" OFF) + +include_if_not(FG_USE_SYSTEM_CL2HPP build_cl2hpp) + +mark_as_advanced(FG_BUILD_CUDA_EXAMPLES FG_BUILD_OPENCL_EXAMPLES) -include_if_not(USE_SYSTEM_CL2HPP build_cl2hpp) +fg_deprecate(BUILD_EXAMPLES_CUDA FG_BUILD_CUDA_EXAMPLES) +fg_deprecate(BUILD_EXAMPLES_OPENCL FG_BUILD_OPENCL_EXAMPLES) +fg_deprecate(USE_SYSTEM_CL2HPP FG_USE_SYSTEM_CL2HPP) add_library(OSCompileFlags INTERFACE) @@ -90,5 +95,5 @@ function(add_example target_name source backend) endfunction() add_subdirectory(cpu) -conditional_directory(BUILD_EXAMPLES_CUDA cuda) -conditional_directory(BUILD_EXAMPLES_OPENCL opencl) +conditional_directory(FG_BUILD_CUDA_EXAMPLES cuda) +conditional_directory(FG_BUILD_OPENCL_EXAMPLESCL opencl) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 90a094c4..5d95f370 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -60,17 +60,17 @@ target_sources(${BackendTarget} ${CMAKE_CURRENT_SOURCE_DIR}/window_impl.cpp ) -if(${WINDOW_TOOLKIT} STREQUAL "glfw3") +if(${FG_USE_WINDOW_TOOLKIT} STREQUAL "glfw3") add_subdirectory(glfw) target_compile_definitions(${BackendTarget} PRIVATE USE_GLFW) -elseif(${WINDOW_TOOLKIT} STREQUAL "sdl2") +elseif(${FG_USE_WINDOW_TOOLKIT} STREQUAL "sdl2") add_subdirectory(sdl) target_compile_definitions(${BackendTarget} PRIVATE USE_SDL) endif() -if(WITH_FREEIMAGE) +if(FG_WITH_FREEIMAGE) target_compile_definitions(${BackendTarget} PRIVATE USE_FREEIMAGE) - if (USE_STATIC_FREEIMAGE) + if (FG_USE_STATIC_FREEIMAGE) target_link_libraries(${BackendTarget} PRIVATE FreeImage::FreeImage_STATIC) else () target_link_libraries(${BackendTarget} PRIVATE FreeImage::FreeImage) @@ -107,8 +107,8 @@ if(UNIX) PRIVATE FontConfig::FontConfig ${X11_X11_LIB} - $<$,$>:-static-libstdc++> - $<$,$>:-static-libgcc> + $<$,$>:-static-libstdc++> + $<$,$>:-static-libgcc> ) endif(UNIX) @@ -120,9 +120,9 @@ source_group("api\\c" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/api/c source_group("backend" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/common/*|${CMAKE_CURRENT_SOURCE_DIR}/*) source_group("backend\\shaders" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/glsl_shaders/*) -if(${WINDOW_TOOLKIT} STREQUAL "glfw3") +if(${FG_USE_WINDOW_TOOLKIT} STREQUAL "glfw3") source_group("backend\\glfw" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/opengl/glfw/*) -elseif(${WINDOW_TOOLKIT} STREQUAL "sdl2") +elseif(${FG_USE_WINDOW_TOOLKIT} STREQUAL "sdl2") source_group("backend\\sdl2" REGULAR_EXPRESSION ${Forge_SOURCE_DIR}/src/backend/opengl/sdl/*) endif() diff --git a/src/backend/opengl/glfw/CMakeLists.txt b/src/backend/opengl/glfw/CMakeLists.txt index 23e28f13..9ce49100 100644 --- a/src/backend/opengl/glfw/CMakeLists.txt +++ b/src/backend/opengl/glfw/CMakeLists.txt @@ -1,4 +1,4 @@ -if(USE_HUNTER) +if(FG_ENABLE_HUNTER) hunter_add_package(glfw) endif() diff --git a/src/backend/opengl/sdl/CMakeLists.txt b/src/backend/opengl/sdl/CMakeLists.txt index dd7c85a2..ae3ca82a 100644 --- a/src/backend/opengl/sdl/CMakeLists.txt +++ b/src/backend/opengl/sdl/CMakeLists.txt @@ -1,4 +1,4 @@ -if(USE_HUNTER) +if(FG_ENABLE_HUNTER) hunter_add_package(SDL2) endif() From 8371e7b756c25909ff249166c4c6efcf91e04603 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 16 Mar 2018 11:25:19 +0530 Subject: [PATCH 22/55] fix: mark hunter _DIR as advanced hunter packages are polluting the cmake cache space and thus have been mark as advanced as one wouldn't need to modify then in most cases. --- CMakeModules/Hunter/config.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeModules/Hunter/config.cmake b/CMakeModules/Hunter/config.cmake index e8e15572..1a7bc948 100644 --- a/CMakeModules/Hunter/config.cmake +++ b/CMakeModules/Hunter/config.cmake @@ -7,6 +7,7 @@ macro(myhunter_config pkg_name ver) CONFIGURATION_TYPES Release CMAKE_ARGS CMAKE_POSITION_INDEPENDENT_CODE=ON ${ARGN} ) + mark_as_advanced(${pkg_name}_DIR) endmacro() myhunter_config(Boost 1.66.0) From 8a3a8fab5dd4294592b9376e81860ae3e649bfe5 Mon Sep 17 00:00:00 2001 From: pradeep Date: Sat, 17 Mar 2018 16:59:03 +0530 Subject: [PATCH 23/55] fix:skip standard paths for find_package when using Hunter --- CMakeLists.txt | 21 ++++++++++++--------- examples/CMakeLists.txt | 4 +++- src/backend/opengl/glfw/CMakeLists.txt | 5 +++-- src/backend/opengl/sdl/CMakeLists.txt | 5 +++-- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6155f28a..8c442f9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,21 +46,24 @@ if(FG_ENABLE_HUNTER) hunter_add_package(freetype) hunter_add_package(Boost) - find_package(freetype CONFIG REQUIRED) + find_package(glbinding REQUIRED NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) + find_package(glm REQUIRED NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) + find_package(freetype CONFIG REQUIRED NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) + find_package(Boost REQUIRED NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) else() - find_package(freetype REQUIRED) + find_package(glbinding REQUIRED) + find_package(glm REQUIRED) + find_package(freetype REQUIRED) + find_package(Boost REQUIRED) endif() -find_package(Doxygen QUIET) -find_package(glbinding REQUIRED) -find_package(glm REQUIRED) - +#packages not available via hunter +find_package(Doxygen QUIET) +find_package(X11 QUIET) +find_package(FreeImage QUIET) if(UNIX) find_package(FontConfig REQUIRED) endif() -find_package(X11 QUIET) -find_package(FreeImage QUIET) -find_package(Boost REQUIRED) option(FG_BUILD_DOCS "Build Documentation" ${DOXYGEN_FOUND}) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a42b3998..47c210e0 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -8,11 +8,13 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeMod if(FG_ENABLE_HUNTER) hunter_add_package(OpenCL) + find_package(OpenCL 1.2 QUIET NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) +else () + find_package(OpenCL 1.2 QUIET) endif() find_package(OpenGL REQUIRED) find_package(CUDA QUIET) -find_package(OpenCL 1.2 QUIET) if(APPLE) find_package(X11) diff --git a/src/backend/opengl/glfw/CMakeLists.txt b/src/backend/opengl/glfw/CMakeLists.txt index 9ce49100..e39127a2 100644 --- a/src/backend/opengl/glfw/CMakeLists.txt +++ b/src/backend/opengl/glfw/CMakeLists.txt @@ -1,9 +1,10 @@ if(FG_ENABLE_HUNTER) hunter_add_package(glfw) + find_package(glfw3 NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) +else () + find_package(glfw3) endif() -find_package(glfw3) - add_library(wtk_interface INTERFACE) target_include_directories(wtk_interface diff --git a/src/backend/opengl/sdl/CMakeLists.txt b/src/backend/opengl/sdl/CMakeLists.txt index ae3ca82a..3b68dfca 100644 --- a/src/backend/opengl/sdl/CMakeLists.txt +++ b/src/backend/opengl/sdl/CMakeLists.txt @@ -1,9 +1,10 @@ if(FG_ENABLE_HUNTER) hunter_add_package(SDL2) + find_package(SDL2 NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) +else() + find_package(SDL2) endif() -find_package(SDL2) - add_library(wtk_interface INTERFACE) target_include_directories(wtk_interface From 6c6805822dff3adfc0a6be83c944d787f4dcdcfc Mon Sep 17 00:00:00 2001 From: pradeep Date: Tue, 20 Mar 2018 12:18:24 +0530 Subject: [PATCH 24/55] refactor: merge cmake static c++ lib flags options Earlier, there were two separate flags. From, now on just FG_USE_STATIC_CPPFLAGS would suffice --- CMakeLists.txt | 9 +++------ examples/CMakeLists.txt | 2 +- src/backend/opengl/CMakeLists.txt | 4 ++-- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c442f9f..10af8762 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,18 +75,15 @@ option(FG_WITH_FREEIMAGE option(FG_USE_STATIC_FREEIMAGE "Use static version of freeimage" OFF) -option(FG_USE_STATIC_STDCPP - "Use static libstdc++ for generating forge library" OFF) -option(FG_USE_STATIC_GCC - "Use static libgcc for generating forge library" OFF) +option(FG_USE_STATIC_CPPFLAGS + "Use static libstdc++ & libgcc for generating forge library" OFF) set(FG_USE_WINDOW_TOOLKIT "glfw3" CACHE STRING "Choose Window toolkit") set_property(CACHE FG_USE_WINDOW_TOOLKIT PROPERTY STRINGS "glfw3" "sdl2") mark_as_advanced( FG_USE_STATIC_FREEIMAGE - FG_USE_STATIC_STDCPP - FG_USE_STATIC_GCC + FG_USE_STATIC_CPPFLAGS ) fg_deprecate(BUILD_DOCS FG_BUILD_DOCS) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 47c210e0..3380f959 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -17,7 +17,7 @@ find_package(OpenGL REQUIRED) find_package(CUDA QUIET) if(APPLE) - find_package(X11) + find_package(X11 REQUIRED) if(X11_FOUND AND NOT TARGET X11::x11) add_library(X11::x11 UNKNOWN IMPORTED) set_target_properties(X11::x11 PROPERTIES diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 5d95f370..9dd06efd 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -107,8 +107,8 @@ if(UNIX) PRIVATE FontConfig::FontConfig ${X11_X11_LIB} - $<$,$>:-static-libstdc++> - $<$,$>:-static-libgcc> + $<$,$>:-static-libstdc++> + $<$,$>:-static-libgcc> ) endif(UNIX) From ab89d79ea8909efb80cf33b51e588aeca76509cf Mon Sep 17 00:00:00 2001 From: pradeep Date: Tue, 20 Mar 2018 12:19:52 +0530 Subject: [PATCH 25/55] fix: remove obsolete dependency, x11 --- CMakeLists.txt | 1 - src/backend/opengl/CMakeLists.txt | 2 -- 2 files changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 10af8762..45eb7ccb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,7 +59,6 @@ endif() #packages not available via hunter find_package(Doxygen QUIET) -find_package(X11 QUIET) find_package(FreeImage QUIET) if(UNIX) find_package(FontConfig REQUIRED) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 9dd06efd..9a6316e3 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -85,7 +85,6 @@ target_include_directories(${BackendTarget} ${CMAKE_CURRENT_SOURCE_DIR} ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR}/include - ${X11_INCLUDE_DIR} ) target_link_libraries(${BackendTarget} @@ -106,7 +105,6 @@ if(UNIX) target_link_libraries(${BackendTarget} PRIVATE FontConfig::FontConfig - ${X11_X11_LIB} $<$,$>:-static-libstdc++> $<$,$>:-static-libgcc> ) From 914d248532e7fce0b647c9d589824fc77e8f8ddd Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 23 Mar 2018 09:57:08 +0530 Subject: [PATCH 26/55] fix: FindFreeImage script to handle dlls --- CMakeModules/FindFreeImage.cmake | 150 ++++++++++++++++++------------- 1 file changed, 88 insertions(+), 62 deletions(-) diff --git a/CMakeModules/FindFreeImage.cmake b/CMakeModules/FindFreeImage.cmake index 67745b94..523cd732 100644 --- a/CMakeModules/FindFreeImage.cmake +++ b/CMakeModules/FindFreeImage.cmake @@ -1,13 +1,25 @@ -# FindFreeImage.cmake -# Author: Umar Arshad -# Modified on 15-JUL-2017 by Pradeep Garigipati +# Copyright (c) 2018, ArrayFire +# All rights reserved. +# +# This file is distributed under 3-clause BSD license. +# The complete license agreement can be obtained at: +# http://arrayfire.com/licenses/BSD-3-Clause +# +# Targets defined by this script +# FreeImage::FreeImage +# FreeImage::FreeImage_STATIC +# +# Note: +# 1. The static version target is only defined if the static lib is found +# 2. Environment variable FreeImage_ROOT can be defined on Windows where +# FreeImage is just a zip file of header and library files. # -# Finds the FreeImage libraries # Sets the following variables: # FreeImage_FOUND # FreeImage_INCLUDE_DIR -# FreeImage_DYNAMIC_LIBRARY +# FreeImage_LINK_LIBRARY # FreeImage_STATIC_LIBRARY +# FreeImage_DLL_LIBRARY - Windows only # # Usage: # find_package(FreeImage) @@ -25,73 +37,87 @@ # NOTE: You do not need to include the FreeImage include directories since they # will be included as part of the target_link_libraries command -set(PX ${CMAKE_STATIC_LIBRARY_PREFIX}) -set(SX ${CMAKE_STATIC_LIBRARY_SUFFIX}) - find_path(FreeImage_INCLUDE_DIR - NAMES FreeImage.h - HINTS ${PROJECT_SOURCE_DIR}/extern/FreeImage - PATHS - /usr/include - /usr/local/include - /sw/include - /opt/local/include - DOC "The directory where FreeImage.h resides") + NAMES FreeImage.h + PATHS + /usr/include + /usr/local/include + /sw/include + /opt/local/include + ${FreeImage_ROOT} + DOC "The directory where FreeImage.h resides") -find_library(FreeImage_DYNAMIC_LIBRARY - NAMES FreeImage freeimage - HINTS ${PROJECT_SOURCE_DIR}/FreeImage - PATHS - /usr/local - /usr/X11 - /usr - /sw - /opt/local - /usr/lib/x86_64-linux-gnu - PATH_SUFFIXES - lib64 - lib - DOC "The FreeImage library") +find_library(FreeImage_LINK_LIBRARY + NAMES FreeImage freeimage + PATHS + /usr/lib64 + /usr/lib + /usr/local/lib64 + /usr/local/lib + /sw/lib + /opt/local/lib + ${FreeImage_ROOT} + DOC "The FreeImage library") find_library(FreeImage_STATIC_LIBRARY - NAMES ${PX}FreeImageLIB${SX} ${PX}FreeImage${SX} ${PX}freeimage${SX} - HINTS ${PROJECT_SOURCE_DIR}/FreeImage + NAMES + ${CMAKE_STATIC_LIBRARY_PREFIX}FreeImageLIB${CMAKE_STATIC_LIBRARY_SUFFIX} + ${CMAKE_STATIC_LIBRARY_PREFIX}FreeImage${CMAKE_STATIC_LIBRARY_SUFFIX} + ${CMAKE_STATIC_LIBRARY_PREFIX}freeimage${CMAKE_STATIC_LIBRARY_SUFFIX} + PATHS + /usr/lib64 + /usr/lib + /usr/local/lib64 + /usr/local/lib + /sw/lib + /opt/local/lib + ${FreeImage_ROOT} + DOC "The FreeImage static library") + +if (WIN32) + find_file(FreeImage_DLL_LIBRARY + NAMES + ${CMAKE_SHARED_LIBRARY_PREFIX}FreeImage${CMAKE_SHARED_LIBRARY_SUFFIX} + ${CMAKE_SHARED_LIBRARY_PREFIX}freeimage${CMAKE_SHARED_LIBRARY_SUFFIX} PATHS - /usr/local - /usr/X11 - /usr - /sw - /opt/local - /usr/lib/x86_64-linux-gnu - PATH_SUFFIXES - lib64 - lib - DOC "The FreeImage library") + ${FreeImage_ROOT} + DOC "The FreeImage dll") + mark_as_advanced(FreeImage_DLL_LIBRARY) +endif () mark_as_advanced( - FreeImage_INCLUDE_DIR - FreeImage_DYNAMIC_LIBRARY - FreeImage_STATIC_LIBRARY - ) + FreeImage_INCLUDE_DIR + FreeImage_LINK_LIBRARY + FreeImage_STATIC_LIBRARY) include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(FreeImage - REQUIRED_VARS FreeImage_INCLUDE_DIR FreeImage_DYNAMIC_LIBRARY - ) + REQUIRED_VARS FreeImage_INCLUDE_DIR FreeImage_LINK_LIBRARY) -if (FreeImage_FOUND AND NOT TARGET FreeImage::FreeImage) - add_library(FreeImage::FreeImage UNKNOWN IMPORTED) - set_target_properties(FreeImage::FreeImage PROPERTIES +if(FreeImage_FOUND AND NOT TARGET FreeImage::FreeImage) + add_library(FreeImage::FreeImage SHARED IMPORTED) + if(WIN32) + set_target_properties(FreeImage::FreeImage + PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGE "C" - IMPORTED_LOCATION "${FreeImage_DYNAMIC_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}") + INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}" + IMPORTED_LOCATION "${FreeImage_DLL_LIBRARY}" + IMPORTED_IMPLIB "${FreeImage_LINK_LIBRARY}") + else(WIN32) + set_target_properties(FreeImage::FreeImage + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}" + IMPORTED_LOCATION "${FreeImage_LINK_LIBRARY}" + IMPORTED_NO_SONAME FALSE) + endif(WIN32) +endif() - if (FreeImage_STATIC_LIBRARY) - add_library(FreeImage::FreeImage_STATIC UNKNOWN IMPORTED) - set_target_properties(FreeImage::FreeImage_STATIC PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGE "C" - IMPORTED_LOCATION "${FreeImage_STATIC_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}") - endif (FreeImage_STATIC_LIBRARY) -endif () +if(FreeImage_STATIC_LIBRARY AND NOT TARGET FreeImage::FreeImage_STATIC) + add_library(FreeImage::FreeImage_STATIC STATIC IMPORTED) + set_target_properties(FreeImage::FreeImage_STATIC + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGE "C" + INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}" + IMPORTED_LOCATION "${FreeImage_STATIC_LIBRARY}") +endif() \ No newline at end of file From a5bbb5d3481f84031d40b291afb1201e8dfe990a Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 23 Mar 2018 09:57:48 +0530 Subject: [PATCH 27/55] fix: repalce autoresolve dependencies with manual install --- CMakeLists.txt | 2 +- CMakeModules/InternalUtils.cmake | 9 --------- CMakeModules/platform.cmake | 10 ---------- src/backend/opengl/CMakeLists.txt | 17 +++++++++-------- src/backend/opengl/glfw/CMakeLists.txt | 6 ++++++ src/backend/opengl/sdl/CMakeLists.txt | 6 ++++++ 6 files changed, 22 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45eb7ccb..bea752d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,4 +174,4 @@ install(DIRECTORY examples/ #NOTE The slash at the end is important DESTINATION ${FG_INSTALL_EXAMPLE_DIR} COMPONENT examples) -include(CPackConfig) +include(CPackConfig) \ No newline at end of file diff --git a/CMakeModules/InternalUtils.cmake b/CMakeModules/InternalUtils.cmake index e436604e..e83b1da1 100644 --- a/CMakeModules/InternalUtils.cmake +++ b/CMakeModules/InternalUtils.cmake @@ -24,15 +24,6 @@ function(get_native_path out_path path) set(${out_path} ${native_path} PARENT_SCOPE) endfunction() -function(resolve_dependencies_paths out_deps in_deps context search_dirs) - set(out_list "") - foreach(current_dependency ${in_deps}) - gp_resolve_item(${context} "${current_dependency}" "" "${search_dirs}" resolved_file) - list(APPEND out_list "${resolved_file}") - endforeach() - set(${out_deps} ${out_list} PARENT_SCOPE) -endfunction() - function(__fg_deprecate_var var access value) if(access STREQUAL "READ_ACCESS") message(DEPRECATION "Variable ${var} is deprecated. Use FG_${var} instead.") diff --git a/CMakeModules/platform.cmake b/CMakeModules/platform.cmake index 4709e832..b7787624 100644 --- a/CMakeModules/platform.cmake +++ b/CMakeModules/platform.cmake @@ -14,13 +14,3 @@ if(APPLE) # CMake searches by default. set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};/usr/local/opt") endif() - -function(get_target_library_path out_path target) - set(library_full_name "${CMAKE_SHARED_LIBRARY_PREFIX}${target}${CMAKE_SHARED_LIBRARY_SUFFIX}") - set(binary_path "${CMAKE_CURRENT_BINARY_DIR}/${library_full_name}") - if (WIN32) - set(binary_path "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/${library_full_name}") - endif () - get_native_path(full_path ${binary_path}) - set(${out_path} ${full_path} PARENT_SCOPE) -endfunction() diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 9a6316e3..24d0053b 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -139,12 +139,13 @@ install(TARGETS forge ) # install dependencies -get_target_library_path(binary_location forge) -if (EXISTS "${binary_location}") - get_prerequisites(${binary_location} dependencies 1 1 "" "${prerequisites_search_dirs}") - resolve_dependencies_paths(forge_deps - "${dependencies}" "${binary_location}" "${prerequisites_search_dirs}") - install(FILES ${forge_deps} +if (WIN32) + if (NOT FG_USE_STATIC_FREEIMAGE) + install(FILES $ + DESTINATION ${FG_INSTALL_BIN_DIR} + COMPONENT dependencies) + endif () + install(FILES $ DESTINATION ${FG_INSTALL_BIN_DIR} - COMPONENT dependencies) -endif () + COMPONENT dependencies) +endif () \ No newline at end of file diff --git a/src/backend/opengl/glfw/CMakeLists.txt b/src/backend/opengl/glfw/CMakeLists.txt index e39127a2..45a93c21 100644 --- a/src/backend/opengl/glfw/CMakeLists.txt +++ b/src/backend/opengl/glfw/CMakeLists.txt @@ -23,3 +23,9 @@ target_link_libraries(wtk_interface INTERFACE glfw) if (NOT BUILD_SHARED_LIBS) install(TARGETS wtk_interface EXPORT ForgeTargets) endif () + +if (WIN32) + install(FILES $ + DESTINATION ${FG_INSTALL_BIN_DIR} + COMPONENT dependencies) +endif () \ No newline at end of file diff --git a/src/backend/opengl/sdl/CMakeLists.txt b/src/backend/opengl/sdl/CMakeLists.txt index 3b68dfca..3edf83a7 100644 --- a/src/backend/opengl/sdl/CMakeLists.txt +++ b/src/backend/opengl/sdl/CMakeLists.txt @@ -23,3 +23,9 @@ target_link_libraries(wtk_interface INTERFACE SDL2::SDL2) if (NOT BUILD_SHARED_LIBS) install(TARGETS wtk_interface EXPORT ForgeTargets) endif () + +if (WIN32) + install(FILES $ + DESTINATION ${FG_INSTALL_BIN_DIR} + COMPONENT dependencies) +endif () \ No newline at end of file From 63db8e7f3927f9ee1fd4aca0bf9e06f9e044ada5 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 23 Mar 2018 10:05:13 +0530 Subject: [PATCH 28/55] refactor: remove newlines from last para in LICENSE The new lines are creating discontinued reading experience in GUI installers. --- LICENSE | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/LICENSE b/LICENSE index 3aae2e6f..da13a879 100644 --- a/LICENSE +++ b/LICENSE @@ -15,13 +15,4 @@ are permitted provided that the following conditions are met: contributors may be used to endorse or promote products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 014548c664ff91db59ac5a3dd6f7be14f6e32d24 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 23 Mar 2018 10:12:18 +0530 Subject: [PATCH 29/55] fix: appveyor config to use FreeImage_ROOT in cmake args --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 338478ef..ab528fc4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -140,6 +140,6 @@ build_script: - cd %APPVEYOR_BUILD_FOLDER% - mkdir build - cd build - - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%\build\package -DCMAKE_PREFIX_PATH="c:\projects\dependencies\glbinding;c:\projects\dependencies\glfw-3.2.1\build\package\lib\cmake\glfw3;c:\projects\dependencies\glm\build\package\lib\cmake\glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_DYNAMIC_LIBRARY="c:\projects\dependencies\FreeImage\Dist\x64\FreeImage.lib" -DFreeImage_INCLUDE_DIR="c:\projects\dependencies\FreeImage\Dist\x64" + - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%\build\package -DCMAKE_PREFIX_PATH="c:\projects\dependencies\glbinding;c:\projects\dependencies\glfw-3.2.1\build\package\lib\cmake\glfw3;c:\projects\dependencies\glm\build\package\lib\cmake\glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_ROOT="c:\projects\dependencies\FreeImage\Dist\x64" - cmake --build . --target ALL_BUILD --config %configuration% -- /nologo - cmake --build . --target INSTALL --config %configuration% -- /nologo From 98d568eb009eb521bb3d4a8804df81f86c6e9119 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 23 Mar 2018 10:20:52 +0530 Subject: [PATCH 30/55] fix: install condition for freeimage on windows --- src/backend/opengl/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 24d0053b..6771d9f9 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -140,7 +140,7 @@ install(TARGETS forge # install dependencies if (WIN32) - if (NOT FG_USE_STATIC_FREEIMAGE) + if (FG_WITH_FREEIMAGE AND NOT FG_USE_STATIC_FREEIMAGE) install(FILES $ DESTINATION ${FG_INSTALL_BIN_DIR} COMPONENT dependencies) @@ -148,4 +148,4 @@ if (WIN32) install(FILES $ DESTINATION ${FG_INSTALL_BIN_DIR} COMPONENT dependencies) -endif () \ No newline at end of file +endif () From 4272762fa0a1772be3410fb77f3197f42fec5d55 Mon Sep 17 00:00:00 2001 From: Filip Matzner Date: Thu, 5 Apr 2018 14:47:26 +0200 Subject: [PATCH 31/55] Use standard installation path for CMake targets --- CMakeModules/FGInstallDirs.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeModules/FGInstallDirs.cmake b/CMakeModules/FGInstallDirs.cmake index 0d6a1708..613ac03e 100644 --- a/CMakeModules/FGInstallDirs.cmake +++ b/CMakeModules/FGInstallDirs.cmake @@ -40,7 +40,7 @@ endif() # CMake files if(NOT DEFINED FG_INSTALL_CMAKE_DIR) - set(FG_INSTALL_CMAKE_DIR "cmake" CACHE PATH "Installation path for CMake files") + set(FG_INSTALL_CMAKE_DIR "lib/cmake/Forge" CACHE PATH "Installation path for CMake files") endif() # Use absolute paths (these changes are internal and will not show up in cache) From 40562cd016fda2f4c06f059b19909e65d926e8e6 Mon Sep 17 00:00:00 2001 From: Filip Matzner Date: Thu, 5 Apr 2018 14:53:21 +0200 Subject: [PATCH 32/55] Make variable names consistent with the documentation --- CMakeModules/ForgeConfig.cmake.in | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeModules/ForgeConfig.cmake.in b/CMakeModules/ForgeConfig.cmake.in index baa92c95..8c25e91b 100644 --- a/CMakeModules/ForgeConfig.cmake.in +++ b/CMakeModules/ForgeConfig.cmake.in @@ -36,15 +36,15 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= -SET(FORGE_VERSION "@FORGE_VERSION@") +SET(Forge_VERSION "@Forge_VERSION@") @PACKAGE_INIT@ -SET_AND_CHECK(FORGE_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/@FG_INSTALL_INC_DIR@") -SET_AND_CHECK(FORGE_LIBRARY_DIRS "${PACKAGE_PREFIX_DIR}/@FG_INSTALL_LIB_DIR@") +SET_AND_CHECK(Forge_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/@FG_INSTALL_INC_DIR@") +SET_AND_CHECK(Forge_LIBRARY_DIRS "${PACKAGE_PREFIX_DIR}/@FG_INSTALL_LIB_DIR@") -FIND_LIBRARY(FORGE_LIBRARIES forge HINTS ${FORGE_LIBRARY_DIRS}) +FIND_LIBRARY(Forge_LIBRARIES forge HINTS ${Forge_LIBRARY_DIRS}) INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(FORGE DEFAULT_MSG - FORGE_INCLUDE_DIRS FORGE_LIBRARIES) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Forge DEFAULT_MSG + Forge_INCLUDE_DIRS Forge_LIBRARIES) From f033e778502b70fc301edd39a890abad9439b7c0 Mon Sep 17 00:00:00 2001 From: Filip Matzner Date: Thu, 5 Apr 2018 15:46:46 +0200 Subject: [PATCH 33/55] Use different default INSTALL_CMAKE_DIR for WIN32 --- CMakeModules/FGInstallDirs.cmake | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeModules/FGInstallDirs.cmake b/CMakeModules/FGInstallDirs.cmake index 613ac03e..640547ae 100644 --- a/CMakeModules/FGInstallDirs.cmake +++ b/CMakeModules/FGInstallDirs.cmake @@ -40,7 +40,12 @@ endif() # CMake files if(NOT DEFINED FG_INSTALL_CMAKE_DIR) - set(FG_INSTALL_CMAKE_DIR "lib/cmake/Forge" CACHE PATH "Installation path for CMake files") + if(WIN32) + set(cmake_dir "cmake") + else() + set(cmake_dir "lib/cmake/Forge") + endif() + set(FG_INSTALL_CMAKE_DIR "${cmake_dir}" CACHE PATH "Installation path for CMake files") endif() # Use absolute paths (these changes are internal and will not show up in cache) From 596e417e35f1d8eddb5fc1a7c0c9d876b751eda1 Mon Sep 17 00:00:00 2001 From: Filip Matzner Date: Thu, 5 Apr 2018 16:30:46 +0200 Subject: [PATCH 34/55] Include ForgeTargets in ForgeConfig --- CMakeModules/ForgeConfig.cmake.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeModules/ForgeConfig.cmake.in b/CMakeModules/ForgeConfig.cmake.in index 8c25e91b..f4dd9b4e 100644 --- a/CMakeModules/ForgeConfig.cmake.in +++ b/CMakeModules/ForgeConfig.cmake.in @@ -48,3 +48,5 @@ FIND_LIBRARY(Forge_LIBRARIES forge HINTS ${Forge_LIBRARY_DIRS}) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Forge DEFAULT_MSG Forge_INCLUDE_DIRS Forge_LIBRARIES) + +INCLUDE("@PACKAGE_CMAKE_DIR@/ForgeTargets.cmake") From 01148fcbeb1279489ab05e63cea6e9a166027963 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 6 Apr 2018 18:04:48 +0530 Subject: [PATCH 35/55] Remove type tag from commit msg format --- CONTRIBUTING.md | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f7bb8dcd..96e8c739 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -120,16 +120,16 @@ from the upstream repository: ## Git Commit Guidelines -We have very precise rules over how our git commit messages can be formatted. This leads to **more +We follow some rules on how our git commit messages can be formatted. This leads to **more readable messages** that are easy to follow when looking through the **project history** and while generating change log. ### Commit Message Format Each commit message consists of a **header**, a **body** and a **footer**. The header has a special -format that includes a **type**, a **scope** and a **subject**: +format that includes a **scope** and a **subject**: ``` -: + @@ -142,21 +142,7 @@ Any line of the commit message cannot be longer 100 characters! This allows the to read on GitHub as well as in various git tools. ### Revert -If the commit reverts a previous commit, it should begin with `revert: `, followed by the header of the reverted commit. -In the body it should say: `This reverts commit .`, where the hash is the SHA of the commit being reverted. - -### Type -Must be one of the following: - -* **feat**: A new feature -* **fix**: A bug fix -* **docs**: Documentation only changes -* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing - semi-colons, etc) -* **refactor**: A code change that neither fixes a bug nor adds a feature -* **perf**: A code change that improves performance -* **misc**: Changes to the build process or auxiliary tools and libraries such as documentation - generation +If the commit reverts a previous commit, it should begin with the word `reverts `, followed by the header of the reverted commit. In the body it should say: `This reverts commit .`, where the hash is the SHA of the commit being reverted. ### Subject The subject contains succinct description of the change: From 63e4a2037e42c00554a26de2355d962f91a9ab20 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 14 Feb 2018 14:26:55 +0530 Subject: [PATCH 36/55] Remove unused glm header inclusion --- src/backend/opengl/common.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/backend/opengl/common.hpp b/src/backend/opengl/common.hpp index fedfb6a1..fc9cff5a 100644 --- a/src/backend/opengl/common.hpp +++ b/src/backend/opengl/common.hpp @@ -18,7 +18,6 @@ #pragma warning (pop) #define GLM_FORCE_RADIANS #include -#include #include #include From a558675a97ff4cea43f9414f5859ac4fd4ec441b Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 11 Apr 2018 20:03:33 +0530 Subject: [PATCH 37/55] Fix cmake script that locates freetype --- CMakeLists.txt | 9 +++++++-- CMakeModules/{Findfreetype.cmake => freetype.cmake} | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) rename CMakeModules/{Findfreetype.cmake => freetype.cmake} (98%) diff --git a/CMakeLists.txt b/CMakeLists.txt index bea752d6..03ca7875 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,11 @@ if(FG_ENABLE_HUNTER) else() find_package(glbinding REQUIRED) find_package(glm REQUIRED) - find_package(freetype REQUIRED) + + # freetype.cmake builds freetype on windows + # and calls find_package(Freetype) on other platforms + include(freetype) + find_package(Boost REQUIRED) endif() @@ -174,4 +178,5 @@ install(DIRECTORY examples/ #NOTE The slash at the end is important DESTINATION ${FG_INSTALL_EXAMPLE_DIR} COMPONENT examples) -include(CPackConfig) \ No newline at end of file +include(CPackConfig) + diff --git a/CMakeModules/Findfreetype.cmake b/CMakeModules/freetype.cmake similarity index 98% rename from CMakeModules/Findfreetype.cmake rename to CMakeModules/freetype.cmake index c82c71fc..23ea73a8 100644 --- a/CMakeModules/Findfreetype.cmake +++ b/CMakeModules/freetype.cmake @@ -1,4 +1,3 @@ -# FindFreeType.cmake # Author: Pradeep Garigipati # # Heavy work is done by FindFreetype.cmake that comes along with From c585cb3f8d11521e07b30bc7bccef3607fe26d71 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 11 Apr 2018 17:47:07 +0530 Subject: [PATCH 38/55] Update travis config for OSX --- .travis.yml | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index be869cc1..81c26bb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,29 +4,39 @@ # #----------------------------------------------------------------------------- -sudo: required - -services: - - docker - language: cpp notifications: email: false -env: - matrix: - - VER=5 CC_NAME=gcc CXX_NAME=g++ - - VER=4.9 CC_NAME=gcc CXX_NAME=g++ - - VER=3.5 CC_NAME=clang CXX_NAME=clang++ - - VER=3.9 CC_NAME=clang CXX_NAME=clang++ +matrix: + include: + - os: linux + sudo: required + services: docker + env: VER=5 CC_NAME=gcc CXX_NAME=g++ + - os: linux + sudo: required + services: docker + env: VER=4.9 CC_NAME=gcc CXX_NAME=g++ + - os: linux + sudo: required + services: docker + env: VER=3.5 CC_NAME=clang CXX_NAME=clang++ + - os: linux + sudo: required + services: docker + env: VER=3.9 CC_NAME=clang CXX_NAME=clang++ + - os: osx + osx_image: xcode9.3 before_install: - - docker run -d --name ubuntu-test -v $(pwd):/travis ubuntu:latest tail -f /dev/null - - docker ps + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run -d --name ubuntu-test -v $(pwd):/travis ubuntu:latest tail -f /dev/null; fi + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker ps; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install glfw glbinding fontconfig freeimage glm boost; fi install: - - docker exec -t ubuntu-test bash -c "apt-get update; + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker exec -t ubuntu-test bash -c "apt-get update; apt-get install -y software-properties-common python-software-properties git-core; apt-get install -y build-essential cmake cmake-data libboost-thread-dev libboost-date-time-dev; apt-get install -y libfontconfig1-dev libfreeimage-dev libfreetype6-dev; @@ -42,10 +52,12 @@ install: apt-get install -y ocl-icd-opencl-dev; cd /travis; git clone --branch 0.9.8.5 https://github.com/g-truc/glm.git; - cd glm && cmake -DCMAKE_INSTALL_PREFIX=/travis/glm/package && make install;" + cd glm && cmake -DCMAKE_INSTALL_PREFIX=/travis/glm/package && make install;"; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew info cmake; fi script: - - docker exec -t ubuntu-test bash -c "cd /travis; + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker exec -t ubuntu-test bash -c "cd /travis; export GLM_DIR=/travis/glm/package/lib/x86_64-linux-gnu/cmake/glm; cmake -DCMAKE_C_COMPILER=$CC_NAME-$VER -DCMAKE_CXX_COMPILER=$CXX_NAME-$VER -Dglm_DIR=$GLM_DIR . && - make install" + make install"; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then cmake . -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/package && make install; fi From 916bfc69ee7b380026d9f5046a70b0bd0d571624 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 11 Apr 2018 20:57:40 +0530 Subject: [PATCH 39/55] Update README with OSX build badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e53f1429..f51b14d8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ You can find the most recent and updated documentation [here](http://arrayfire.o ### Build Status | Platform | Linux x86 | Linux armv7l | Linux aarch64 | Windows | OSX | |:--------:|:---------:|:------------:|:-------------:|:-------:|:---:| -| Status | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | `Unknown` | `Unknown` | [![Build Status](https://ci.appveyor.com/api/projects/status/github/arrayfire/forge?branch=master&svg=true)](https://ci.appveyor.com/project/9prady9/forge-jwb4e) | `Unknown` | +| Status | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | `Unknown` | `Unknown` | [![Build Status](https://ci.appveyor.com/api/projects/status/github/arrayfire/forge?branch=master&svg=true)](https://ci.appveyor.com/project/9prady9/forge-jwb4e) | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | ### Dependencies * [glbinding](https://github.com/cginternals/glbinding) From d725571e2c3182b48a9e41e70c3d5277a60272b9 Mon Sep 17 00:00:00 2001 From: pradeep Date: Thu, 12 Apr 2018 15:22:46 +0530 Subject: [PATCH 40/55] Update HunterGate version to v0.20.38 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03ca7875..80daeb25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,8 +18,8 @@ if(FG_ENABLE_HUNTER) set(HUNTER_BUILD_SHARED_LIBS OFF) include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) HunterGate( - URL "https://github.com/ruslo/hunter/archive/v0.20.18.tar.gz" - SHA1 "c2614bc107a5172c167a5784f476b6fb39e314a9" + URL "https://github.com/ruslo/hunter/archive/v0.20.38.tar.gz" + SHA1 "efd84db1349e38974f53d4c4fc0b368a3b49f022" FILEPATH "${CMAKE_CURRENT_LIST_DIR}/CMakeModules/Hunter/config.cmake" ) mark_as_advanced(HUNTER_TLS_VERIFY) From a04bb7475faaed5f1c731b8951c1bee35790e20c Mon Sep 17 00:00:00 2001 From: pradeep Date: Thu, 12 Apr 2018 15:23:05 +0530 Subject: [PATCH 41/55] Fix hunter config to use glm 0.9.7.6 if GCC > 7.2 --- CMakeModules/Hunter/config.cmake | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeModules/Hunter/config.cmake b/CMakeModules/Hunter/config.cmake index 1a7bc948..8d73e49a 100644 --- a/CMakeModules/Hunter/config.cmake +++ b/CMakeModules/Hunter/config.cmake @@ -13,7 +13,14 @@ endmacro() myhunter_config(Boost 1.66.0) myhunter_config(freetype 2.6.2) myhunter_config(OpenCL 2.1-p0) -myhunter_config(glm 0.9.8.5) + +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.2.0") + myhunter_config(glm 0.9.7.6) + else() + myhunter_config(glm 0.9.8.5) + endif() +endif () #myhunter_config(freeimage hunter-v3.17.0) ##freeimag dependencies From 927d5fd76754645d4285aaf8cc88cb82a335f0e0 Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 11 Apr 2018 08:10:30 +0530 Subject: [PATCH 42/55] cmake script style fixes --- CMakeLists.txt | 16 +++++----------- CMakeModules/Version.cmake | 9 +++------ src/backend/opengl/CMakeLists.txt | 3 +-- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 80daeb25..a2d586be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,8 +86,7 @@ set_property(CACHE FG_USE_WINDOW_TOOLKIT PROPERTY STRINGS "glfw3" "sdl2") mark_as_advanced( FG_USE_STATIC_FREEIMAGE - FG_USE_STATIC_CPPFLAGS - ) + FG_USE_STATIC_CPPFLAGS) fg_deprecate(BUILD_DOCS FG_BUILD_DOCS) fg_deprecate(BUILD_EXAMPLES FG_BUILD_EXAMPLES) @@ -119,8 +118,7 @@ install(DIRECTORY include/ FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" - PATTERN ".gitignore" EXCLUDE - ) + PATTERN ".gitignore" EXCLUDE) install(EXPORT ForgeTargets NAMESPACE Forge:: @@ -134,8 +132,7 @@ export(EXPORT ForgeTargets include(CMakePackageConfigHelpers) write_basic_package_version_file( "${Forge_BINARY_DIR}/cmake/ForgeConfigVersion.cmake" - COMPATIBILITY SameMajorVersion -) + COMPATIBILITY SameMajorVersion) # This config file will be installed so we need to set the install_destination # path relative to the install path @@ -145,8 +142,7 @@ configure_package_config_file( "${PROJECT_SOURCE_DIR}/CMakeModules/ForgeConfig.cmake.in" "cmake/install/ForgeConfig.cmake" INSTALL_DESTINATION "${FG_INSTALL_CMAKE_DIR}" - PATH_VARS INCLUDE_DIRS CMAKE_DIR -) + PATH_VARS INCLUDE_DIRS CMAKE_DIR) install(FILES ${Forge_BINARY_DIR}/cmake/install/ForgeConfig.cmake ${Forge_BINARY_DIR}/cmake/ForgeConfigVersion.cmake @@ -163,8 +159,7 @@ configure_package_config_file( "cmake/ForgeConfig.cmake" INSTALL_DESTINATION "${Forge_BINARY_DIR}/cmake" PATH_VARS INCLUDE_DIRS CMAKE_DIR - INSTALL_PREFIX "${Forge_BINARY_DIR}" -) + INSTALL_PREFIX "${Forge_BINARY_DIR}") #-------------------------------------------------------------------- # Install examples @@ -179,4 +174,3 @@ install(DIRECTORY examples/ #NOTE The slash at the end is important COMPONENT examples) include(CPackConfig) - diff --git a/CMakeModules/Version.cmake b/CMakeModules/Version.cmake index b3bccc7d..52043479 100644 --- a/CMakeModules/Version.cmake +++ b/CMakeModules/Version.cmake @@ -29,8 +29,7 @@ execute_process( COMMAND git log -1 --format=%h WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE -) + OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT GIT_COMMIT_HASH) message(STATUS "No git. Setting hash to default") @@ -39,10 +38,8 @@ endif() configure_file( ${PROJECT_SOURCE_DIR}/CMakeModules/version.h.in - ${PROJECT_SOURCE_DIR}/include/fg/version.h -) + ${PROJECT_BINARY_DIR}/include/fg/version.h) configure_file( ${PROJECT_SOURCE_DIR}/CMakeModules/version.hpp.in - ${PROJECT_BINARY_DIR}/src/backend/common/version.hpp -) + ${PROJECT_BINARY_DIR}/src/backend/common/version.hpp) diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 6771d9f9..992c73fd 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -135,8 +135,7 @@ install(TARGETS forge LIBRARY DESTINATION ${FG_INSTALL_LIB_DIR} ARCHIVE DESTINATION ${FG_INSTALL_LIB_DIR} FRAMEWORK DESTINATION framework - INCLUDES DESTINATION ${FG_INSTALL_INC_DIR} - ) + INCLUDES DESTINATION ${FG_INSTALL_INC_DIR}) # install dependencies if (WIN32) From 08ecc5164646f69cf5fe6031a2caf5303b607c8f Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 11 Apr 2018 08:21:26 +0530 Subject: [PATCH 43/55] Mark all install cmake variables as advanced Variables that fit the pattern `FG_INSTALL_*` are marked as advanced --- CMakeModules/FGInstallDirs.cmake | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/CMakeModules/FGInstallDirs.cmake b/CMakeModules/FGInstallDirs.cmake index 640547ae..50afaede 100644 --- a/CMakeModules/FGInstallDirs.cmake +++ b/CMakeModules/FGInstallDirs.cmake @@ -19,11 +19,6 @@ if(NOT DEFINED FG_INSTALL_INC_DIR) set(FG_INSTALL_INC_DIR "include" CACHE PATH "Installation path for headers") endif() -# Data files -if(NOT DEFINED FG_INSTALL_DATA_DIR) - set(FG_INSTALL_DATA_DIR "data" CACHE PATH "Installation path for data files") -endif() - # Documentation if(NOT DEFINED FG_INSTALL_DOC_DIR) set(FG_INSTALL_DOC_DIR "doc" CACHE PATH "Installation path for documentation") @@ -59,3 +54,12 @@ if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_PREFIX}) "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_PREFIX}" ABSOLUTE) endif() + +mark_as_advanced( + FG_INSTALL_CMAKE_DIR + FG_INSTALL_MAN_DIR + FG_INSTALL_EXAMPLE_DIR + FG_INSTALL_DOC_DIR + FG_INSTALL_INC_DIR + FG_INSTALL_LIB_DIR + FG_INSTALL_BIN_DIR) From 002b591a3230b68ecbeae3a6b25b75f7153d8fbd Mon Sep 17 00:00:00 2001 From: pradeep Date: Wed, 11 Apr 2018 15:43:31 +0530 Subject: [PATCH 44/55] Refactor install & ForgeConfig script commands * Install version header as part of the headers component * Remove configure_file command for NSIS template file on non-windows platforms. * Move glsl_shader headers under `PROJECT_BINARY_DIR/include` * Remove unused target properties from examples targets * Merge ConditionalDirectory and IfNotThisThenInclude scripts into InternalUtils cmake script. --- CMakeLists.txt | 18 +-- CMakeModules/CPackConfig.cmake | 11 +- CMakeModules/FGInstallDirs.cmake | 20 +++- CMakeModules/ForgeConfig.cmake.in | 109 +++++++++++------- CMakeModules/InternalUtils.cmake | 3 +- examples/CMakeLists.txt | 32 ++--- .../CMakeModules/ConditionalDirectory.cmake | 6 - .../CMakeModules/IfNotThisThenInclude.cmake | 7 -- examples/CMakeModules/InternalUtils.cmake | 46 ++++++++ examples/cuda/CMakeLists.txt | 11 +- examples/opencl/CMakeLists.txt | 2 +- src/backend/glsl_shaders/CMakeLists.txt | 2 +- src/backend/opengl/CMakeLists.txt | 3 +- 13 files changed, 164 insertions(+), 106 deletions(-) delete mode 100644 examples/CMakeModules/ConditionalDirectory.cmake delete mode 100644 examples/CMakeModules/IfNotThisThenInclude.cmake create mode 100644 examples/CMakeModules/InternalUtils.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index a2d586be..bba8697f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,7 @@ cmake_minimum_required(VERSION 3.5) -set(CMAKE_MODULE_PATH - ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") -set(CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}prefix;${CMAKE_PREFIX_PATH}") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") +list(APPEND CMAKE_PREFIX_PATH "${CMAKE_BINARY_DIR}/cmake") include(BuildType) include(FGInstallDirs) @@ -106,9 +105,6 @@ add_subdirectory(src/api/c) add_subdirectory(src/api/cpp) add_subdirectory(src/backend/opengl) -conditional_directory(FG_BUILD_DOCS docs) -conditional_directory(FG_BUILD_EXAMPLES examples) - #-------------------------------------------------------------------- # Install include folder, docs, examples etc. #-------------------------------------------------------------------- @@ -119,11 +115,16 @@ install(DIRECTORY include/ PATTERN "*.h" PATTERN "*.hpp" PATTERN ".gitignore" EXCLUDE) +# The Forge version header is generated and thus need to be +# included explicitly +install(FILES ${Forge_BINARY_DIR}/include/fg/version.h + DESTINATION "${FG_INSTALL_INC_DIR}/fg/" + COMPONENT headers) install(EXPORT ForgeTargets NAMESPACE Forge:: DESTINATION ${FG_INSTALL_CMAKE_DIR} - COMPONENT cmake) + COMPONENT forge) export(EXPORT ForgeTargets NAMESPACE Forge:: @@ -174,3 +175,6 @@ install(DIRECTORY examples/ #NOTE The slash at the end is important COMPONENT examples) include(CPackConfig) + +conditional_directory(FG_BUILD_DOCS docs) +conditional_directory(FG_BUILD_EXAMPLES examples) diff --git a/CMakeModules/CPackConfig.cmake b/CMakeModules/CPackConfig.cmake index a5e64774..cef240bc 100644 --- a/CMakeModules/CPackConfig.cmake +++ b/CMakeModules/CPackConfig.cmake @@ -187,8 +187,9 @@ file(GLOB_RECURSE CACHES "${CMAKE_SOURCE_DIR}/CMakeCache.txt") include(CPack) -# Configure file with custom definitions for NSIS. -configure_file( - ${PROJECT_SOURCE_DIR}/CMakeModules/nsis/NSIS.definitions.nsh.in - ${CMAKE_CURRENT_BINARY_DIR}/NSIS.definitions.nsh -) +if (WIN32) + # Configure file with custom definitions for NSIS. + configure_file( + ${PROJECT_SOURCE_DIR}/CMakeModules/nsis/NSIS.definitions.nsh.in + ${CMAKE_CURRENT_BINARY_DIR}/NSIS.definitions.nsh) +endif () diff --git a/CMakeModules/FGInstallDirs.cmake b/CMakeModules/FGInstallDirs.cmake index 50afaede..d7148ed1 100644 --- a/CMakeModules/FGInstallDirs.cmake +++ b/CMakeModules/FGInstallDirs.cmake @@ -19,18 +19,30 @@ if(NOT DEFINED FG_INSTALL_INC_DIR) set(FG_INSTALL_INC_DIR "include" CACHE PATH "Installation path for headers") endif() +set(DATA_DIR "share/Forge") + # Documentation if(NOT DEFINED FG_INSTALL_DOC_DIR) - set(FG_INSTALL_DOC_DIR "doc" CACHE PATH "Installation path for documentation") + if (WIN32) + set(docs_dir "doc") + else () + set(docs_dir "${DATA_DIR}/doc") + endif () + set(FG_INSTALL_DOC_DIR "${docs_dir}" CACHE PATH "Installation path for documentation") endif() if(NOT DEFINED FG_INSTALL_EXAMPLE_DIR) - set(FG_INSTALL_EXAMPLE_DIR "examples" CACHE PATH "Installation path for examples") + if (WIN32) + set(examples_dir "examples") + else () + set(examples_dir "${DATA_DIR}/examples") + endif () + set(FG_INSTALL_EXAMPLE_DIR "${examples_dir}" CACHE PATH "Installation path for examples") endif() # Man pages if(NOT DEFINED FG_INSTALL_MAN_DIR) - set(FG_INSTALL_MAN_DIR "man" CACHE PATH "Installation path for man pages") + set(FG_INSTALL_MAN_DIR "${DATA_DIR}/man" CACHE PATH "Installation path for man pages") endif() # CMake files @@ -38,7 +50,7 @@ if(NOT DEFINED FG_INSTALL_CMAKE_DIR) if(WIN32) set(cmake_dir "cmake") else() - set(cmake_dir "lib/cmake/Forge") + set(cmake_dir "${DATA_DIR}/cmake") endif() set(FG_INSTALL_CMAKE_DIR "${cmake_dir}" CACHE PATH "Installation path for CMake files") endif() diff --git a/CMakeModules/ForgeConfig.cmake.in b/CMakeModules/ForgeConfig.cmake.in index f4dd9b4e..e4c7737f 100644 --- a/CMakeModules/ForgeConfig.cmake.in +++ b/CMakeModules/ForgeConfig.cmake.in @@ -1,52 +1,77 @@ +# Copyright (c) 2018, ArrayFire +# All rights reserved. +# +# This file is distributed under 3-clause BSD license. +# The complete license agreement can be obtained at: +# http://arrayfire.com/licenses/BSD-3-Clause + +# Forge +# ----- +# +# This is the cmake configuration file for Forge library. It provides +# the following imported targets. +# +# ``Forge::forge`` - the target for Forge +# +# This target can be used to link with your application using the +# ``target_link_library`` command. Here is an example of how to use these +# targets in your application: +# +# add_executable(mybinary source.cpp) +# target_link_library(mybinary PRIVATE Forge::forge) +# +# This example creates a mybinary executable from the source.cpp file and links +# against the Forge library. Note you do *not* need to set the include +# directories as they are automatically included with the target. +# +# This is the recommended way of linking against Forge +# +# +# Legacy Variables +# ---------------- +# # Defines the following variables: -# Forge_INCLUDE_DIRS - Location of Forge's include directory. -# Forge_LIBRARIES - Location of Forge's libraries. -# Forge_FOUND - True if Forge has been located +# Forge_INCLUDE_DIRS - Path to Forge include directory. +# Forge_LIBRARIES - Path to Forge libraries used in link commands. +# Forge_FOUND - True if Forge backend has been found. # # You may provide a hint to where Forge's root directory may be located -# by setting Forge_DIR. +# by setting Forge_DIR. You do not need to set this if you installed +# Forge using the official installers or the package manager(please submit +# a bug report if any issues). If CMake is unable to locate Forge then +# set the Forge_DIR to the directory of this file. # -#============================================================================= -# Copyright (c) 2015, ArrayFire -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, -# are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright notice, this -# list of conditions and the following disclaimer in the documentation and/or -# other materials provided with the distribution. -# -# * Neither the name of the ArrayFire nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#============================================================================= - -SET(Forge_VERSION "@Forge_VERSION@") +# If you are trying to link against a source build then this should be set to +# the build directory. @PACKAGE_INIT@ -SET_AND_CHECK(Forge_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/@FG_INSTALL_INC_DIR@") -SET_AND_CHECK(Forge_LIBRARY_DIRS "${PACKAGE_PREFIX_DIR}/@FG_INSTALL_LIB_DIR@") +set_and_check(Forge_INCLUDE_DIRS @PACKAGE_INCLUDE_DIRS@) + +set(Forge_FOUND OFF) -FIND_LIBRARY(Forge_LIBRARIES forge HINTS ${Forge_LIBRARY_DIRS}) +if (NOT TARGET Forge::forge AND + NOT TARGET forge AND + EXISTS @PACKAGE_CMAKE_DIR@/ForgeTargets.cmake) + include(@PACKAGE_CMAKE_DIR@/ForgeTargets.cmake) +endif () -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Forge DEFAULT_MSG - Forge_INCLUDE_DIRS Forge_LIBRARIES) +if (TARGET Forge::forge) + get_property(config TARGET Forge::forge PROPERTY IMPORTED_CONFIGURATIONS) + if(NOT config) + set(config "NOCONFIG") + endif() + get_property(loc TARGET Forge::forge PROPERTY IMPORTED_LOCATION_${config}) +endif () -INCLUDE("@PACKAGE_CMAKE_DIR@/ForgeTargets.cmake") +if ((TARGET Forge::forge AND EXISTS ${loc}) + OR + TARGET forge) + set(Forge_FOUND ON) + if (TARGET forge AND NOT TARGET Forge::forge) + add_library(Forge::forge ALIAS forge) + endif () + set(Forge_LIBRARIES Forge::forge) +else () + set(Forge_FOUND OFF) +endif () diff --git a/CMakeModules/InternalUtils.cmake b/CMakeModules/InternalUtils.cmake index e83b1da1..581a6fbb 100644 --- a/CMakeModules/InternalUtils.cmake +++ b/CMakeModules/InternalUtils.cmake @@ -48,5 +48,4 @@ mark_as_advanced( CUDA_SDK_ROOT_DIR CUDA_TOOLKIT_ROOT_DIR CUDA_USE_STATIC_CUDA_RUNTIME - CUDA_rt_LIBRARY - ) + CUDA_rt_LIBRARY) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 3380f959..db5cd282 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -4,7 +4,7 @@ project(Forge-Examples LANGUAGES CXX) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") if(FG_ENABLE_HUNTER) hunter_add_package(OpenCL) @@ -13,9 +13,16 @@ else () find_package(OpenCL 1.2 QUIET) endif() +find_package(Forge REQUIRED) find_package(OpenGL REQUIRED) find_package(CUDA QUIET) +mark_as_advanced( + CUDA_HOST_COMPILER + CUDA_USE_STATIC_CUDA_RUNTIME + CUDA_rt_LIBRARY + CMAKE_CUDA_HOST_COMPILER) + if(APPLE) find_package(X11 REQUIRED) if(X11_FOUND AND NOT TARGET X11::x11) @@ -28,9 +35,8 @@ if(APPLE) endif() include(CMakeParseArguments) -include(ConditionalDirectory) include(CMakeDependentOption) -include(IfNotThisThenInclude) +include(InternalUtils) option(FG_BUILD_CUDA_EXAMPLES "Turn off/on building cuda examples" ${CUDA_FOUND}) option(FG_BUILD_OPENCL_EXAMPLES "Turn off/on building opencl examples" ${OpenCL_FOUND}) @@ -45,23 +51,6 @@ fg_deprecate(BUILD_EXAMPLES_CUDA FG_BUILD_CUDA_EXAMPLES) fg_deprecate(BUILD_EXAMPLES_OPENCL FG_BUILD_OPENCL_EXAMPLES) fg_deprecate(USE_SYSTEM_CL2HPP FG_USE_SYSTEM_CL2HPP) -add_library(OSCompileFlags INTERFACE) - -if (WIN32) - target_compile_definitions(OSCompileFlags - INTERFACE OS_WIN WIN32_MEAN_AND_LEAN) -elseif (APPLE) - target_compile_definitions(OSCompileFlags INTERFACE OS_MAC) -else(WIN32) - target_compile_definitions(OSCompileFlags INTERFACE OS_LNX) -endif(WIN32) - -if(TARGET forge) - add_library(Forge::forge ALIAS forge) -else() - include(${Forge_BINARY_DIR}/ForgeConfig.cmake) -endif() - function(add_example target_name source backend) set(options CXX11) set(single_value_args "") @@ -92,8 +81,7 @@ function(add_example target_name source backend) OpenGL::GL Forge::forge ${arg_LIBRARIES} - $<$:X11::x11> - ) + $<$:X11::x11>) endfunction() add_subdirectory(cpu) diff --git a/examples/CMakeModules/ConditionalDirectory.cmake b/examples/CMakeModules/ConditionalDirectory.cmake deleted file mode 100644 index 8ba1cc72..00000000 --- a/examples/CMakeModules/ConditionalDirectory.cmake +++ /dev/null @@ -1,6 +0,0 @@ -# Includes the directory if the variable is set -function(conditional_directory variable directory) - if(${variable}) - add_subdirectory(${directory}) - endif() -endfunction() diff --git a/examples/CMakeModules/IfNotThisThenInclude.cmake b/examples/CMakeModules/IfNotThisThenInclude.cmake deleted file mode 100644 index 6ac5f720..00000000 --- a/examples/CMakeModules/IfNotThisThenInclude.cmake +++ /dev/null @@ -1,7 +0,0 @@ -# Includes the cmake script if the variable is NOT true -macro(include_if_not variable cmake_script) - if(NOT ${variable}) - include(${cmake_script}) - endif() -endmacro() - diff --git a/examples/CMakeModules/InternalUtils.cmake b/examples/CMakeModules/InternalUtils.cmake new file mode 100644 index 00000000..92a7f609 --- /dev/null +++ b/examples/CMakeModules/InternalUtils.cmake @@ -0,0 +1,46 @@ +# Copyright (c) 2018, ArrayFire +# All rights reserved. +# +# This file is distributed under 3-clause BSD license. +# The complete license agreement can be obtained at: +# http://arrayfire.com/licenses/BSD-3-Clause + +function(__fg_deprecate_var var access value) + if(access STREQUAL "READ_ACCESS") + message(DEPRECATION "Variable ${var} is deprecated. Use FG_${var} instead.") + endif() +endfunction() + +function(fg_deprecate var newvar) + if(DEFINED ${var}) + message(DEPRECATION "Variable ${var} is deprecated. Use ${newvar} instead.") + get_property(doc CACHE ${newvar} PROPERTY HELPSTRING) + set(${newvar} ${${var}} CACHE BOOL "${doc}" FORCE) + unset(${var} CACHE) + endif() + variable_watch(${var} __fg_deprecate_var) +endfunction() + +function(conditional_directory variable directory) + if(${variable}) + add_subdirectory(${directory}) + endif() +endfunction() + +# Includes the cmake script if the variable is NOT true +macro(include_if_not variable cmake_script) + if(NOT ${variable}) + include(${cmake_script}) + endif() +endmacro() + +add_library(OSCompileFlags INTERFACE) + +if (WIN32) + target_compile_definitions(OSCompileFlags + INTERFACE OS_WIN WIN32_MEAN_AND_LEAN) +elseif (APPLE) + target_compile_definitions(OSCompileFlags INTERFACE OS_MAC) +else(WIN32) + target_compile_definitions(OSCompileFlags INTERFACE OS_LNX) +endif(WIN32) diff --git a/examples/cuda/CMakeLists.txt b/examples/cuda/CMakeLists.txt index 95c46a0a..692c4c8d 100644 --- a/examples/cuda/CMakeLists.txt +++ b/examples/cuda/CMakeLists.txt @@ -6,10 +6,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES") if (${CMAKE_VERSION} VERSION_LESS "3.10.0") INCLUDE_DIRECTORIES( - ${Forge_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} - ${CMAKE_CURRENT_DIR} - ) + ${CMAKE_CURRENT_SOURCE_DIR}) else() enable_language(CUDA) endif () @@ -17,13 +15,10 @@ endif () macro(make_cuda_example target src) add_example(${target} ${src} cuda CXX11 INCLUDE_DIRS - ${Forge_SOURCE_DIR}/include ${CUDA_INCLUDE_DIRS} - ${CMAKE_CURRENT_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} LIBRARIES - ${CUDA_LIBRARIES} - ${Forge_LIBRARIES} - ) + ${CUDA_LIBRARIES}) endmacro(make_cuda_example) make_cuda_example(bubblechart bubblechart.cu) diff --git a/examples/opencl/CMakeLists.txt b/examples/opencl/CMakeLists.txt index 2a89cd33..fa7a9be6 100644 --- a/examples/opencl/CMakeLists.txt +++ b/examples/opencl/CMakeLists.txt @@ -4,7 +4,7 @@ project(Forge-OPENCL-Examples LANGUAGES CXX) macro(make_ocl_example target src) add_example(${target} ${src} opencl CXX11 - INCLUDE_DIRS ${CMAKE_CURRENT_DIR} + INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} LIBRARIES OpenCL::OpenCL;OpenCL::cl2hpp) endmacro(make_ocl_example) diff --git a/src/backend/glsl_shaders/CMakeLists.txt b/src/backend/glsl_shaders/CMakeLists.txt index 693f5530..c6267c14 100644 --- a/src/backend/glsl_shaders/CMakeLists.txt +++ b/src/backend/glsl_shaders/CMakeLists.txt @@ -14,7 +14,7 @@ convert_glsl_shaders_to_headers( SOURCES ${glsl_shaders} VARNAME shader_files EXTENSION "hpp" - OUTPUT_DIR "shader_headers" + OUTPUT_DIR "include/shader_headers" TARGETS glsl_shader_targets NAMESPACE "glsl" EOD "0" diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index 992c73fd..aaa0f4e1 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -80,10 +80,11 @@ endif() target_include_directories(${BackendTarget} PUBLIC $ + $ $ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${PROJECT_BINARY_DIR} + ${PROJECT_BINARY_DIR}/include ${PROJECT_SOURCE_DIR}/include ) From bfecfe5230207c5b686df50b6017f9483340d1f6 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 13 Apr 2018 13:23:28 +0530 Subject: [PATCH 45/55] Reorganize GUI installer comps heirarchy --- CMakeModules/CPackConfig.cmake | 38 +++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/CMakeModules/CPackConfig.cmake b/CMakeModules/CPackConfig.cmake index cef240bc..18e11267 100644 --- a/CMakeModules/CPackConfig.cmake +++ b/CMakeModules/CPackConfig.cmake @@ -7,7 +7,7 @@ cmake_minimum_required(VERSION 3.5) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/CMakeModules/nsis") +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules/nsis") include(Version) include(CPackIFW) @@ -48,13 +48,10 @@ set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}) # Platform specific settings for CPACK generators # - OSX specific -# - DragNDrop (OSX only) -# - PackageMaker (OSX only) -# - OSXX11 (OSX only) -# - Bundle (OSX only) +# - productbuild (OSX only) # - Windows # - NSIS64 Generator -if (WIN32) +if(WIN32) set(WIN_INSTALL_SOURCE ${PROJECT_SOURCE_DIR}/CMakeModules/nsis) set(LICENSE_FILE "${Forge_SOURCE_DIR}/LICENSE") @@ -70,15 +67,15 @@ if (WIN32) set(CPACK_NSIS_HELP_LINK "${APP_URL}") set(CPACK_NSIS_URL_INFO_ABOUT "${APP_URL}") set(CPACK_NSIS_INSTALLED_ICON_NAME "${MY_CPACK_PACKAGE_ICON}") - if (CMAKE_CL_64) + if(CMAKE_CL_64) set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") - else (CMAKE_CL_64) + else(CMAKE_CL_64) set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") - endif (CMAKE_CL_64) -else () + endif(CMAKE_CL_64) +else() set(CPACK_RESOURCE_FILE_LICENSE "${Forge_SOURCE_DIR}/LICENSE") set(CPACK_RESOURCE_FILE_README "${Forge_SOURCE_DIR}/README.md") -endif () +endif() # Set the default components installed in the package get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) @@ -92,25 +89,31 @@ cpack_add_install_type(Extra cpack_add_install_type(Runtime DISPLAY_NAME "Runtime") +cpack_add_component_group(backends + DISPLAY_NAME "Forge" + DESCRIPTION "Forge libraries") + cpack_add_component(dependencies - DISPLAY_NAME "Forge Library Dependencies" - DESCRIPTION "Libraries required by forge OpenGL backend" + DISPLAY_NAME "Forge Dependencies" + DESCRIPTION "Libraries required by Forge OpenGL backend" + PARENT_GROUP backends INSTALL_TYPES Development Runtime) cpack_add_component(forge DISPLAY_NAME "Forge" DESCRIPTION "Forge library." + PARENT_GROUP backends DEPENDS dependencies INSTALL_TYPES Development Runtime) cpack_add_component(documentation DISPLAY_NAME "Documentation" - DESCRIPTION "Doxygen documentation" + DESCRIPTION "Forge documentation files" INSTALL_TYPES Extra) cpack_add_component(headers DISPLAY_NAME "C/C++ Headers" - DESCRIPTION "Headers for the Forge Libraries." + DESCRIPTION "Development headers for the Forge library." INSTALL_TYPES Development) cpack_add_component(cmake @@ -135,10 +138,11 @@ set(CPACK_IFW_PACKAGE_ICON "${MY_CPACK_PACKAGE_ICON}") set(CPACK_IFW_PACKAGE_WINDOW_ICON "${CMAKE_SOURCE_DIR}/assets/arrayfire_icon.png") set(CPACK_IFW_PACKAGE_LOGO "${CMAKE_SOURCE_DIR}/assets/arrayfire_logo.png") if (WIN32) - set(CPACK_IFW_ADMIN_TARGET_DIRECTORY "$PROGRAMFILES64/${CPACK_PACKAGE_INSTALL_DIRECTORY}") + set(CPACK_IFW_ADMIN_TARGET_DIRECTORY "$PROGRAMFILES64/${CPACK_PACKAGE_INSTALL_DIRECTORY}") else () - set(CPACK_IFW_ADMIN_TARGET_DIRECTORY "/opt/${CPACK_PACKAGE_INSTALL_DIRECTORY}") + set(CPACK_IFW_ADMIN_TARGET_DIRECTORY "/opt/${CPACK_PACKAGE_INSTALL_DIRECTORY}") endif () +cpack_ifw_configure_component_group(backends) cpack_ifw_configure_component(dependencies) cpack_ifw_configure_component(forge) cpack_ifw_configure_component(documentation) From dc9381099c9761fa4540d647e4e9545e47299e97 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 13 Apr 2018 13:28:36 +0530 Subject: [PATCH 46/55] Add cmake folder shortcut in Windows installations This enables CMake to find Forge automatically if it is installed in standard location on Windows platform. --- CMakeModules/nsis/NSIS.template.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeModules/nsis/NSIS.template.in b/CMakeModules/nsis/NSIS.template.in index 51f81132..658784b6 100644 --- a/CMakeModules/nsis/NSIS.template.in +++ b/CMakeModules/nsis/NSIS.template.in @@ -695,6 +695,8 @@ Section "-Core installation" @CPACK_NSIS_CREATE_ICONS_EXTRA@ CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + CreateShortcut "$INSTDIR\..\cmake.lnk" "$INSTDIR\cmake" + ;Read a value from an InstallOptions INI file !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" @@ -850,6 +852,7 @@ Section "Uninstall" @CPACK_NSIS_DELETE_ICONS@ @CPACK_NSIS_DELETE_ICONS_EXTRA@ + Delete "$INSTDIR\..\cmake.lnk" ;Delete empty start menu parent diretories StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" From c947892acddc35a115b9a8522d906ade45800723 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 27 Apr 2018 19:18:46 +0530 Subject: [PATCH 47/55] Change hunter glfw package version to 3.3.0-p2 The version prior to this change, 3.3.0-p4, increased minimum cmake version to 3.8. To bring it down to 3.0, the version of glfw from hunter had to be changed to 3.3.0-p2 --- CMakeModules/Hunter/config.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeModules/Hunter/config.cmake b/CMakeModules/Hunter/config.cmake index 8d73e49a..46514944 100644 --- a/CMakeModules/Hunter/config.cmake +++ b/CMakeModules/Hunter/config.cmake @@ -59,7 +59,7 @@ myhunter_config(glbinding 2.1.3-p0 OPTION_BUILD_TOOLS=ON gtest_force_shared_crt=ON) -myhunter_config(glfw 3.3.0-p4 +myhunter_config(glfw 3.3.0-p2 GLFW_BUILD_DOCS=OFF GLFW_BUILD_EXAMPLES=OFF GLFW_BUILD_TESTS=OFF) From bb0f7572ace6787f7e782d710301a1efd4734ec8 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 27 Apr 2018 19:42:48 +0530 Subject: [PATCH 48/55] Use brew upgrade instead of install for osx travis --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 81c26bb2..8d7b59ce 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,8 @@ matrix: before_install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run -d --name ubuntu-test -v $(pwd):/travis ubuntu:latest tail -f /dev/null; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker ps; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install glfw glbinding fontconfig freeimage glm boost; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install glfw glbinding fontconfig freeimage glm; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade boost; fi install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker exec -t ubuntu-test bash -c "apt-get update; From 91534e1e6e84650cbd7a3ca445c0aff63d1c1b57 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 27 Apr 2018 20:48:31 +0530 Subject: [PATCH 49/55] Update hunter gate to v0.20.60 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bba8697f..f2435ac8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,8 @@ if(FG_ENABLE_HUNTER) set(HUNTER_BUILD_SHARED_LIBS OFF) include(${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterGate.cmake) HunterGate( - URL "https://github.com/ruslo/hunter/archive/v0.20.38.tar.gz" - SHA1 "efd84db1349e38974f53d4c4fc0b368a3b49f022" + URL "https://github.com/ruslo/hunter/archive/v0.20.60.tar.gz" + SHA1 "35a23a3e2f8a2c87f6762c43f3cc64a0bee50943" FILEPATH "${CMAKE_CURRENT_LIST_DIR}/CMakeModules/Hunter/config.cmake" ) mark_as_advanced(HUNTER_TLS_VERIFY) From d6da9afa7972a400f00bc3d7f8254911ae5035de Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 27 Apr 2018 20:48:59 +0530 Subject: [PATCH 50/55] Remove OpenCL package hunter cmds OpenCL package has been removed from hunter, not sure why though. It used to be present. --- examples/CMakeLists.txt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index db5cd282..181c7928 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -6,16 +6,10 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") -if(FG_ENABLE_HUNTER) - hunter_add_package(OpenCL) - find_package(OpenCL 1.2 QUIET NO_CMAKE_PATH NO_SYSTEM_ENVIRONMENT_PATH) -else () - find_package(OpenCL 1.2 QUIET) -endif() - -find_package(Forge REQUIRED) +find_package(OpenCL 1.2 QUIET) +find_package(CUDA QUIET) find_package(OpenGL REQUIRED) -find_package(CUDA QUIET) +find_package(Forge REQUIRED) mark_as_advanced( CUDA_HOST_COMPILER From 300f8cbaa5eef91ea60a88c1bd880d3cd3139995 Mon Sep 17 00:00:00 2001 From: pradeep Date: Fri, 27 Apr 2018 21:42:21 +0530 Subject: [PATCH 51/55] Fix typo in examples cmake variable name --- examples/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 181c7928..515b8e2e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -80,4 +80,4 @@ endfunction() add_subdirectory(cpu) conditional_directory(FG_BUILD_CUDA_EXAMPLES cuda) -conditional_directory(FG_BUILD_OPENCL_EXAMPLESCL opencl) +conditional_directory(FG_BUILD_OPENCL_EXAMPLES opencl) From eb3df6a7769e8b621c09b3d69f03da62488fbe9a Mon Sep 17 00:00:00 2001 From: pradeep Date: Mon, 30 Apr 2018 16:49:20 +0530 Subject: [PATCH 52/55] Update ci configurations * Change appveyor config to use vcpkg * Update travis config for 18.04 update * change build version format in appveyor config --- .travis.yml | 56 ++++++++++++++++++++++----------------- appveyor.yml | 20 +++++--------- appveyor_deps_install.ps1 | 44 ------------------------------ 3 files changed, 38 insertions(+), 82 deletions(-) delete mode 100644 appveyor_deps_install.ps1 diff --git a/.travis.yml b/.travis.yml index 8d7b59ce..f865ea88 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,51 +14,59 @@ matrix: - os: linux sudo: required services: docker - env: VER=5 CC_NAME=gcc CXX_NAME=g++ + env: VER_SUFFIX='-4.8' CC_NAME=gcc CXX_NAME=g++ - os: linux sudo: required services: docker - env: VER=4.9 CC_NAME=gcc CXX_NAME=g++ + env: VER_SUFFIX='-5' CC_NAME=gcc CXX_NAME=g++ - os: linux sudo: required services: docker - env: VER=3.5 CC_NAME=clang CXX_NAME=clang++ + env: VER_SUFFIX='' CC_NAME=gcc CXX_NAME=g++ #gcc 7.3 - os: linux sudo: required services: docker - env: VER=3.9 CC_NAME=clang CXX_NAME=clang++ + env: VER_SUFFIX='-3.9' CC_NAME=clang CXX_NAME=clang++ + - os: linux + sudo: required + services: docker + env: VER_SUFFIX='-4.0' CC_NAME=clang CXX_NAME=clang++ + - os: linux + sudo: required + services: docker + env: VER_SUFFIX='-5.0' CC_NAME=clang CXX_NAME=clang++ + - os: linux + sudo: required + services: docker + env: VER_SUFFIX='-6.0' CC_NAME=clang CXX_NAME=clang++ - os: osx osx_image: xcode9.3 before_install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run -d --name ubuntu-test -v $(pwd):/travis ubuntu:latest tail -f /dev/null; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker ps; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install glfw glbinding fontconfig freeimage glm; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade boost; fi install: - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker exec -t ubuntu-test bash -c "apt-get update; - apt-get install -y software-properties-common python-software-properties git-core; - apt-get install -y build-essential cmake cmake-data libboost-thread-dev libboost-date-time-dev; - apt-get install -y libfontconfig1-dev libfreeimage-dev libfreetype6-dev; - apt-get install -y libglfw3-dev; - add-apt-repository -y ppa:ubuntu-toolchain-r/test; - apt-get update; - apt-get install -y $CC_NAME-$VER $CXX_NAME-$VER; - apt-add-repository -y ppa:cginternals/ppa; - apt-get update; - apt-get install -y libglbinding-dev; - apt-get update; - apt-get install -y opencl-headers; - apt-get install -y ocl-icd-opencl-dev; - cd /travis; - git clone --branch 0.9.8.5 https://github.com/g-truc/glm.git; + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker exec -t ubuntu-test bash -c "apt-get update && + apt-get install -y software-properties-common git python-minimal && + apt-get install -y build-essential cmake cmake-data libboost-thread-dev libboost-date-time-dev && + apt-get install -y libfontconfig1-dev libfreeimage-dev libfreetype6-dev && + apt-get install -y libglfw3-dev libglbinding-dev && + add-apt-repository -y ppa:ubuntu-toolchain-r/test && + apt-get update && + apt-get install -y $CC_NAME$VER_SUFFIX $CXX_NAME$VER_SUFFIX && + apt-get install -y opencl-headers && + apt-get install -y ocl-icd-opencl-dev && + cd /travis && + git clone --branch 0.9.7.6 https://github.com/g-truc/glm.git && cd glm && cmake -DCMAKE_INSTALL_PREFIX=/travis/glm/package && make install;"; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install glfw glbinding fontconfig freeimage glm; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade boost; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew info cmake; fi script: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker exec -t ubuntu-test bash -c "cd /travis; export GLM_DIR=/travis/glm/package/lib/x86_64-linux-gnu/cmake/glm; - cmake -DCMAKE_C_COMPILER=$CC_NAME-$VER -DCMAKE_CXX_COMPILER=$CXX_NAME-$VER -Dglm_DIR=$GLM_DIR . && - make install"; fi + cmake -DCMAKE_C_COMPILER=$CC_NAME$VER_SUFFIX -DCMAKE_CXX_COMPILER=$CXX_NAME$VER_SUFFIX -Dglm_DIR=$GLM_DIR . && + make all"; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then cmake . -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/package && make install; fi diff --git a/appveyor.yml b/appveyor.yml index ab528fc4..e77533e6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,13 +7,14 @@ #---------------------------------# # version format -version: 1.0.{build}-{branch} +version: '{branch}-{build}' # branches to build branches: # whitelist only: - master + - v1.0 # blacklist except: @@ -70,7 +71,8 @@ environment: - generator: "Visual Studio 15 2017 Win64" install: - - ps: Invoke-Expression "$env:APPVEYOR_BUILD_FOLDER\appveyor_deps_install.ps1" + - ps: cd C:\Tools\vcpkg + - ps: vcpkg --triplet x64-windows install freeimage glbinding glfw3 glm opencl # scripts that are called at very beginning, before repo cloning init: @@ -106,7 +108,7 @@ configuration: # - Release cache: - - C:\projects\dependencies -> appveyor.yml + - C:\Tools\vcpkg\installed\ -> appveyor.yml build: parallel: true # enable MSBuild parallel builds @@ -118,16 +120,6 @@ build: # scripts to run before build before_build: - - ps: cd "$env:APPVEYOR_BUILD_FOLDER" - - ps: cd ..\dependencies\glm - - ps: if (-Not (Test-Path .\build -PathType Container)) { mkdir build } - - ps: cd build - - ps: if (-Not (Test-Path .\package\lib\cmake\glm\glmConfig.cmake)) { cmake .. -G "$env:generator" -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER\..\dependencies\glm\build\package"; cmake --build . --target INSTALL --config $env:configuration -- /nologo } - - ps: cd "$env:APPVEYOR_BUILD_FOLDER" - - ps: cd ..\dependencies\glfw-3.2.1 - - ps: if (-Not (Test-Path .\build -PathType Container)) { mkdir build } - - ps: cd build - - ps: if (-Not (Test-Path .\package\lib\cmake\glfw3\glfw3Config.cmake)) { cmake .. -G "$env:generator" -DCMAKE_INSTALL_PREFIX="$env:APPVEYOR_BUILD_FOLDER\..\dependencies\glfw-3.2.1\build\package" -DBUILD_SHARED_LIBS=ON -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF; cmake --build . --target INSTALL --config $env:configuration -- /nologo } # scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services) before_package: @@ -140,6 +132,6 @@ build_script: - cd %APPVEYOR_BUILD_FOLDER% - mkdir build - cd build - - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%\build\package -DCMAKE_PREFIX_PATH="c:\projects\dependencies\glbinding;c:\projects\dependencies\glfw-3.2.1\build\package\lib\cmake\glfw3;c:\projects\dependencies\glm\build\package\lib\cmake\glm" -DBOOST_ROOT="%BOOST_ROOT%" -DFreeImage_ROOT="c:\projects\dependencies\FreeImage\Dist\x64" + - cmake %APPVEYOR_BUILD_FOLDER% -G "%generator%" -DCMAKE_INSTALL_PREFIX=%APPVEYOR_BUILD_FOLDER%/build/package -DBOOST_ROOT="%BOOST_ROOT%" -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DFreeImage_ROOT="c:/tools/vcpkg/installed/x64-windows" - cmake --build . --target ALL_BUILD --config %configuration% -- /nologo - cmake --build . --target INSTALL --config %configuration% -- /nologo diff --git a/appveyor_deps_install.ps1 b/appveyor_deps_install.ps1 deleted file mode 100644 index 515c5516..00000000 --- a/appveyor_deps_install.ps1 +++ /dev/null @@ -1,44 +0,0 @@ -if (-Not (Test-Path -Path C:\projects\dependencies\glbinding\lib\glbinding.lib -PathType leaf)) -{ - if (-Not (Test-Path -Path C:\projects\glbinding-dev.zip -PathType leaf)) - { - (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-dev.zip', 'c:/projects/glbinding-dev.zip') - } - Expand-Archive -LiteralPath C:\projects\glbinding-dev.zip -DestinationPath C:\projects\dependencies\glbinding -} - -if (-Not (Test-Path -Path C:\projects\dependencies\glbinding\glbinding.dll -PathType leaf)) -{ - if (-Not (Test-Path -Path C:\projects\glbinding-rt.zip -PathType leaf)) - { - (new-object net.webclient).DownloadFile('https://github.com/cginternals/glbinding/releases/download/v2.1.1/glbinding-2.1.1-msvc2015-x64-runtime.zip', 'c:/projects/glbinding-rt.zip') - } - Expand-Archive -LiteralPath C:\projects\glbinding-rt.zip -DestinationPath C:\projects\dependencies\glbinding -} - -if (-Not (Test-Path -Path C:\projects\dependencies\glm\build\package\include\glm\glm.hpp -PathType leaf)) -{ - if (-Not (Test-Path -Path C:\projects\glm.zip -PathType leaf)) - { - (new-object net.webclient).DownloadFile('https://github.com/g-truc/glm/releases/download/0.9.8.5/glm-0.9.8.5.zip', 'c:/projects/glm.zip') - } - Expand-Archive -LiteralPath C:\projects\glm.zip -DestinationPath C:\projects\dependencies -} - -if (-Not (Test-Path -Path C:\projects\dependencies\glfw-3.2.1\build\package\lib\glfw3.dll -PathType leaf)) -{ - if (-Not (Test-Path -Path C:\projects\glfw3.zip -PathType leaf)) - { - (new-object net.webclient).DownloadFile('https://github.com/glfw/glfw/releases/download/3.2.1/glfw-3.2.1.zip', 'c:/projects/glfw3.zip') - } - Expand-Archive -LiteralPath C:\projects\glfw3.zip -DestinationPath C:\projects\dependencies -} - -if (-Not (Test-Path -Path C:\projects\dependencies\FreeImage\Dist\x64\FreeImage.dll -PathType leaf)) -{ - if (-Not (Test-Path -Path C:\projects\freeimage.zip -PathType leaf)) - { - (new-object net.webclient).DownloadFile('http://downloads.sourceforge.net/freeimage/FreeImage3170Win32Win64.zip', 'c:/projects/freeimage.zip') - } - Expand-Archive -LiteralPath C:\projects\freeimage.zip -DestinationPath C:\projects\dependencies -} \ No newline at end of file From dc01fe4d898bb3c714d4282342964fe9c40c8d35 Mon Sep 17 00:00:00 2001 From: pradeep Date: Mon, 30 Apr 2018 20:29:47 +0530 Subject: [PATCH 53/55] Fix freeimage find script --- CMakeModules/FindFreeImage.cmake | 60 +++++++++++++++++++------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/CMakeModules/FindFreeImage.cmake b/CMakeModules/FindFreeImage.cmake index 523cd732..f305d7f4 100644 --- a/CMakeModules/FindFreeImage.cmake +++ b/CMakeModules/FindFreeImage.cmake @@ -40,23 +40,27 @@ find_path(FreeImage_INCLUDE_DIR NAMES FreeImage.h PATHS - /usr/include - /usr/local/include - /sw/include - /opt/local/include - ${FreeImage_ROOT} + /usr + /usr/local + /sw + /opt/local + ${FreeImage_ROOT} + PATH_SUFFIXES + include DOC "The directory where FreeImage.h resides") find_library(FreeImage_LINK_LIBRARY NAMES FreeImage freeimage PATHS - /usr/lib64 - /usr/lib - /usr/local/lib64 - /usr/local/lib - /sw/lib - /opt/local/lib - ${FreeImage_ROOT} + /usr + /usr/local + /sw + /opt/local + ${FreeImage_ROOT} + PATH_SUFFIXES + lib + lib64 + x64/lib DOC "The FreeImage library") find_library(FreeImage_STATIC_LIBRARY @@ -65,13 +69,15 @@ find_library(FreeImage_STATIC_LIBRARY ${CMAKE_STATIC_LIBRARY_PREFIX}FreeImage${CMAKE_STATIC_LIBRARY_SUFFIX} ${CMAKE_STATIC_LIBRARY_PREFIX}freeimage${CMAKE_STATIC_LIBRARY_SUFFIX} PATHS - /usr/lib64 - /usr/lib - /usr/local/lib64 - /usr/local/lib - /sw/lib - /opt/local/lib + /usr + /usr/local + /sw + /opt/local ${FreeImage_ROOT} + PATH_SUFFIXES + lib + lib64 + x64/lib DOC "The FreeImage static library") if (WIN32) @@ -81,8 +87,14 @@ if (WIN32) ${CMAKE_SHARED_LIBRARY_PREFIX}freeimage${CMAKE_SHARED_LIBRARY_SUFFIX} PATHS ${FreeImage_ROOT} + PATH_SUFFIXES + lib + lib64 + x64/lib + bin + x64/bin DOC "The FreeImage dll") - mark_as_advanced(FreeImage_DLL_LIBRARY) + mark_as_advanced(FreeImage_DLL_LIBRARY) endif () mark_as_advanced( @@ -98,18 +110,18 @@ if(FreeImage_FOUND AND NOT TARGET FreeImage::FreeImage) add_library(FreeImage::FreeImage SHARED IMPORTED) if(WIN32) set_target_properties(FreeImage::FreeImage - PROPERTIES + PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGE "C" INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}" IMPORTED_LOCATION "${FreeImage_DLL_LIBRARY}" - IMPORTED_IMPLIB "${FreeImage_LINK_LIBRARY}") + IMPORTED_IMPLIB "${FreeImage_LINK_LIBRARY}") else(WIN32) set_target_properties(FreeImage::FreeImage - PROPERTIES + PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGE "C" INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}" IMPORTED_LOCATION "${FreeImage_LINK_LIBRARY}" - IMPORTED_NO_SONAME FALSE) + IMPORTED_NO_SONAME FALSE) endif(WIN32) endif() @@ -120,4 +132,4 @@ if(FreeImage_STATIC_LIBRARY AND NOT TARGET FreeImage::FreeImage_STATIC) IMPORTED_LINK_INTERFACE_LANGUAGE "C" INTERFACE_INCLUDE_DIRECTORIES "${FreeImage_INCLUDE_DIR}" IMPORTED_LOCATION "${FreeImage_STATIC_LIBRARY}") -endif() \ No newline at end of file +endif() From 4469d392fb140cbfbc989b8a06892f5090828df8 Mon Sep 17 00:00:00 2001 From: pradeep Date: Mon, 30 Apr 2018 20:31:09 +0530 Subject: [PATCH 54/55] Remove build script in favor of freetype from vcpkg --- CMakeLists.txt | 6 +--- CMakeModules/build_freetype.cmake | 53 ------------------------------ CMakeModules/freetype.cmake | 54 ------------------------------- appveyor.yml | 2 +- src/backend/opengl/CMakeLists.txt | 4 +-- 5 files changed, 4 insertions(+), 115 deletions(-) delete mode 100644 CMakeModules/build_freetype.cmake delete mode 100644 CMakeModules/freetype.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f2435ac8..7b7ee80e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,11 +52,7 @@ if(FG_ENABLE_HUNTER) else() find_package(glbinding REQUIRED) find_package(glm REQUIRED) - - # freetype.cmake builds freetype on windows - # and calls find_package(Freetype) on other platforms - include(freetype) - + find_package(Freetype REQUIRED) find_package(Boost REQUIRED) endif() diff --git a/CMakeModules/build_freetype.cmake b/CMakeModules/build_freetype.cmake deleted file mode 100644 index 597db960..00000000 --- a/CMakeModules/build_freetype.cmake +++ /dev/null @@ -1,53 +0,0 @@ - -include(ExternalProject) - -set(LIB_POSTFIX "") -if(CMAKE_BUILD_TYPE MATCHES Debug) - set(LIB_POSTFIX "d") -endif() - -set(prefix ${PROJECT_BINARY_DIR}/third_party/ft) -set(ft_filename ${CMAKE_STATIC_LIBRARY_PREFIX}freetype${LIB_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) -SET(freetype_location ${prefix}/lib/${ft_filename}) - -ExternalProject_Add( - ft-ext - GIT_REPOSITORY https://github.com/arrayfire/freetype2.git - GIT_TAG VER-2-7-1 - PREFIX "${prefix}" - INSTALL_DIR "${prefix}" - UPDATE_COMMAND "" - CONFIGURE_COMMAND ${CMAKE_COMMAND} -Wno-dev "-G${CMAKE_GENERATOR}" - -DWITH_HarfBuzz=OFF - -DWITH_ZLIB=OFF - -DWITH_BZip2=OFF - -DWITH_PNG=OFF - -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} - "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} -w -fPIC" - -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - "-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS} -w -fPIC" - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX:PATH= - BUILD_BYPRODUCTS ${freetype_location} - ) - -ExternalProject_Get_Property(ft-ext install_dir) - -set(freetype_INCLUDE_DIR ${install_dir}/include/freetype2 CACHE INTERNAL "" FORCE) -set(freetype_LIBRARY ${freetype_location} CACHE INTERNAL "" FORCE) - -mark_as_advanced(freetype_INCLUDE_DIR freetype_LIBRARY) - -include(FindPackageHandleStandardArgs) - -find_package_handle_standard_args(freetype REQUIRED_VARS freetype_LIBRARY freetype_INCLUDE_DIR) - -if (freetype_FOUND AND NOT TARGET freetype::freetype) - file(MAKE_DIRECTORY ${freetype_INCLUDE_DIR}) - add_library(freetype::freetype STATIC IMPORTED) - set_target_properties(freetype::freetype PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGE "C" - IMPORTED_LOCATION "${freetype_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${freetype_INCLUDE_DIR}") - add_dependencies(freetype::freetype ft-ext) -endif () diff --git a/CMakeModules/freetype.cmake b/CMakeModules/freetype.cmake deleted file mode 100644 index 23ea73a8..00000000 --- a/CMakeModules/freetype.cmake +++ /dev/null @@ -1,54 +0,0 @@ -# Author: Pradeep Garigipati -# -# Heavy work is done by FindFreetype.cmake that comes along with -# FreeType installation on your system if your OS is OSX/Unix. -# -# If the OS is Windows, the freetype is build as external project -# using the script build_freetype.cmake -# -# Sets the following variables: -# FreeType_FOUND -# FreeType_INCLUDE_DIR -# FreeType_LIBRARY -# -# Usage: -# find_package(FreeType) -# if (FreeType_FOUND) -# target_link_libraries(mylib PRIVATE freetype::freetype) -# endif (FreeType_FOUND) -# -# OR if you want to link against the static library: -# -# find_package(FreeType) -# if (FreeType_FOUND) -# target_link_libraries(mylib PRIVATE freetype::freetype_STATIC) -# endif (FreeType_FOUND) -# -# NOTE: You do not need to include the Freetype include directories since they -# will be included as part of the target_link_libraries command -if(WIN32) - include(build_freetype) -else(WIN32) - find_package(Freetype REQUIRED) - set(FreeType_INCLUDE_DIR ${FREETYPE_INCLUDE_DIRS}) - set(FreeType_LIBRARY ${FREETYPE_LIBRARIES}) - - mark_as_advanced( - FreeType_INCLUDE_DIR - FreeType_LIBRARY - ) - - include(FindPackageHandleStandardArgs) - - find_package_handle_standard_args(FreeType - REQUIRED_VARS FreeType_LIBRARY FreeType_INCLUDE_DIR - ) - - if (FreeType_FOUND AND NOT TARGET freetype::freetype) - add_library(freetype::freetype UNKNOWN IMPORTED) - set_target_properties(freetype::freetype PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGE "C" - IMPORTED_LOCATION "${FreeType_LIBRARY}" - INTERFACE_INCLUDE_DIRECTORIES "${FreeType_INCLUDE_DIR}") - endif () -endif(WIN32) diff --git a/appveyor.yml b/appveyor.yml index e77533e6..93fcec1d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -72,7 +72,7 @@ environment: install: - ps: cd C:\Tools\vcpkg - - ps: vcpkg --triplet x64-windows install freeimage glbinding glfw3 glm opencl + - ps: vcpkg --triplet x64-windows install freeimage glbinding glfw3 glm opencl freetype # scripts that are called at very beginning, before repo cloning init: diff --git a/src/backend/opengl/CMakeLists.txt b/src/backend/opengl/CMakeLists.txt index aaa0f4e1..7bb954c1 100755 --- a/src/backend/opengl/CMakeLists.txt +++ b/src/backend/opengl/CMakeLists.txt @@ -94,7 +94,7 @@ target_link_libraries(${BackendTarget} PRIVATE glbinding::glbinding glm - freetype::freetype + Freetype::Freetype Boost::boost backend_interface wtk_interface @@ -144,7 +144,7 @@ if (WIN32) install(FILES $ DESTINATION ${FG_INSTALL_BIN_DIR} COMPONENT dependencies) - endif () + endif () install(FILES $ DESTINATION ${FG_INSTALL_BIN_DIR} COMPONENT dependencies) From 9ce10b8208a2a122bfc954dcd9b6492611e043d2 Mon Sep 17 00:00:00 2001 From: pradeep Date: Mon, 30 Apr 2018 22:00:29 +0530 Subject: [PATCH 55/55] Style fixes to README to make it more compact --- README.md | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index f51b14d8..d7af49bd 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,23 @@ -Forge - High Performance Visualizations ---------------------------------------- +## Forge - High Performance Visualizations +| Platform | Linux x86 | Linux aarch64 | Windows | OSX | +|:--------:|:---------:|:-------------:|:-------:|:---:| +| Status | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | `Unknown` | [![Build Status](https://ci.appveyor.com/api/projects/status/github/arrayfire/forge?branch=master&svg=true)](https://ci.appveyor.com/project/9prady9/forge-jwb4e) | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | -[Join the chat at arrayfire-org#forge](https://join.slack.com/t/arrayfire-org/shared_invite/enQtMjI4MjIzMDMzMTczLWM4ODIyZjA3YmY3NWEwMjk2N2Q0YTQyNGMwZmU4ZjkxNGU0MjYzYmUzYTg3ZTM0MDQxOTE2OTJjNGVkOGEwN2M) + +[Join the slack chat channel](https://join.slack.com/t/arrayfire-org/shared_invite/enQtMjI4MjIzMDMzMTczLWM4ODIyZjA3YmY3NWEwMjk2N2Q0YTQyNGMwZmU4ZjkxNGU0MjYzYmUzYTg3ZTM0MDQxOTE2OTJjNGVkOGEwN2M) An OpenGL interop library that can be used with ArrayFire or any other application using CUDA or OpenCL compute backend. The goal of **Forge** is to provide high performance OpenGL visualizations for C/C++ applications that use CUDA/OpenCL. Forge uses OpenGL >=3.3 forward compatible contexts, so please make sure you have capable hardware before trying it out. -## Documentation +### Documentation You can find the most recent and updated documentation [here](http://arrayfire.org/forge/index.htm). -### Build Status -| Platform | Linux x86 | Linux armv7l | Linux aarch64 | Windows | OSX | -|:--------:|:---------:|:------------:|:-------------:|:-------:|:---:| -| Status | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | `Unknown` | `Unknown` | [![Build Status](https://ci.appveyor.com/api/projects/status/github/arrayfire/forge?branch=master&svg=true)](https://ci.appveyor.com/project/9prady9/forge-jwb4e) | [![Build Status](https://travis-ci.org/arrayfire/forge.svg?branch=master)](https://travis-ci.org/arrayfire/forge) | - ### Dependencies -* [glbinding](https://github.com/cginternals/glbinding) -* [GLFW](http://www.glfw.org/), optionally you can build with [SDL2](https://www.libsdl.org/) alternative too. -* [freetype](http://www.freetype.org/). On Windows, freetype is built as a third-party package by - CMake. -* [FreeImage](http://freeimage.sourceforge.net/) - optional. If FreeImage is found, this option is - automatically turned on. -* On `Linux` and `OS X`, [fontconfig](http://www.freedesktop.org/wiki/Software/fontconfig/) is required. - -Above dependencies are available through package managers on most of the Unix/Linux based distributions. +[glbinding](https://github.com/cginternals/glbinding), [GLFW](http://www.glfw.org/), [freetype](http://www.freetype.org/) and [FreeImage](http://freeimage.sourceforge.net/) (optional). + +On `Linux` & `OS X`, [fontconfig](http://www.freedesktop.org/wiki/Software/fontconfig/) is required. [SDL2](https://www.libsdl.org/) can be used as an alternative to `glfw`. + +Above dependencies are available through package managers on most of the Unix/Linux based distributions. On Windows, we recommend using [vcpkg](https://github.com/Microsoft/vcpkg) to quickly setup forge development environment. ### Sample Images | | |