diff --git a/.gitignore b/.gitignore index c2f1b514..881a2246 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ # IDE Generated files *.suo +.vs/ +CMakeSettings.json +.idea +cmake-build-debug/ # Compiled Object files *.slo @@ -56,3 +60,5 @@ SetBuildVars_X64.bat !src/openvr_plugin/resources/*.obj *.kdev4 + +.DS_Store diff --git a/.gitmodules b/.gitmodules index cf28d352..829d4f3d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "thirdparty/libusb"] - path = thirdparty/libusb - url = https://github.com/libusb/libusb.git [submodule "thirdparty/hidapi"] path = thirdparty/hidapi url = https://github.com/signal11/hidapi.git @@ -18,24 +15,15 @@ [submodule "thirdparty/protobuf"] path = thirdparty/protobuf url = https://github.com/google/protobuf.git -[submodule "thirdparty/imgui"] - path = thirdparty/imgui - url = https://github.com/ocornut/imgui.git [submodule "thirdparty/stb"] path = thirdparty/stb url = https://github.com/nothings/stb.git -[submodule "thirdparty/SDL2"] - path = thirdparty/SDL2 - url = https://github.com/spurious/SDL-mirror.git -[submodule "thirdparty/eigen"] - path = thirdparty/eigen - url = https://github.com/libigl/eigen.git [submodule "thirdparty/kalman"] path = thirdparty/kalman url = https://github.com/mherb/kalman.git [submodule "thirdparty/libstem_gamepad"] path = thirdparty/libstem_gamepad - url = https://github.com/cboulay/libstem_gamepad.git + url = https://github.com/psmoveservice/libstem_gamepad.git [submodule "thirdparty/lockfreequeue"] path = thirdparty/lockfreequeue url = https://github.com/cameron314/readerwriterqueue.git diff --git a/cmake/Environment.cmake b/cmake/Environment.cmake index 8bd9311f..c14dc23e 100644 --- a/cmake/Environment.cmake +++ b/cmake/Environment.cmake @@ -43,21 +43,21 @@ endif() #links against static runtime, so we need our apps to link #against the static runtime too. #https://cmake.org/Wiki/CMake_FAQ#How_can_I_build_my_MSVC_application_with_a_static_runtime.3F -IF(MSVC) - SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") +#IF(MSVC) +# SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") +# SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") - set(CompilerFlags - CMAKE_CXX_FLAGS - CMAKE_CXX_FLAGS_DEBUG - CMAKE_CXX_FLAGS_RELEASE - CMAKE_C_FLAGS - CMAKE_C_FLAGS_DEBUG - CMAKE_C_FLAGS_RELEASE - ) - foreach(CompilerFlag ${CompilerFlags}) - string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") - endforeach() -ELSE() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-switch") -ENDIF(MSVC) +# set(CompilerFlags +# CMAKE_CXX_FLAGS +# CMAKE_CXX_FLAGS_DEBUG +# CMAKE_CXX_FLAGS_RELEASE +# CMAKE_C_FLAGS +# CMAKE_C_FLAGS_DEBUG +# CMAKE_C_FLAGS_RELEASE +# ) +# foreach(CompilerFlag ${CompilerFlags}) +# string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") +# endforeach() +#ELSE() +# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-switch") +#ENDIF(MSVC) diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake deleted file mode 100644 index c04a1c23..00000000 --- a/cmake/FindSDL2.cmake +++ /dev/null @@ -1,163 +0,0 @@ -# Locate SDL2 library -# This module defines -# SDL2_LIBRARY, the name of the library to link against -# SDL2_FOUND, if false, do not try to link to SDL2 -# SDL2_INCLUDE_DIR, where to find SDL.h -# -# This module responds to the the flag: -# SDL2_BUILDING_LIBRARY -# If this is defined, then no SDL2main will be linked in because -# only applications need main(). -# Otherwise, it is assumed you are building an application and this -# module will attempt to locate and set the the proper link flags -# as part of the returned SDL2_LIBRARY variable. -# -# Don't forget to include SDLmain.h and SDLmain.m your project for the -# OS X framework based version. (Other versions link to -lSDL2main which -# this module will try to find on your behalf.) Also for OS X, this -# module will automatically add the -framework Cocoa on your behalf. -# -# -# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration -# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library -# (SDL2.dll, libsdl2.so, SDL2.framework, etc). -# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. -# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value -# as appropriate. These values are used to generate the final SDL2_LIBRARY -# variable, but when these values are unset, SDL2_LIBRARY does not get created. -# -# -# $SDL2DIR is an environment variable that would -# correspond to the ./configure --prefix=$SDL2DIR -# used in building SDL2. -# l.e.galup 9-20-02 -# -# Modified by Eric Wing. -# Added code to assist with automated building by using environmental variables -# and providing a more controlled/consistent search behavior. -# Added new modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). -# Also corrected the header search path to follow "proper" SDL guidelines. -# Added a search for SDL2main which is needed by some platforms. -# Added a search for threads which is needed by some platforms. -# Added needed compile switches for MinGW. -# -# On OSX, this will prefer the Framework version (if found) over others. -# People will have to manually change the cache values of -# SDL2_LIBRARY to override this selection or set the CMake environment -# CMAKE_INCLUDE_PATH to modify the search paths. -# -# Note that the header path has changed from SDL2/SDL.h to just SDL.h -# This needed to change because "proper" SDL convention -# is #include "SDL.h", not . This is done for portability -# reasons because not all systems place things in SDL2/ (see FreeBSD). - -#============================================================================= -# Copyright 2003-2009 Kitware, Inc. -# -# 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. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -SET(SDL2_SEARCH_PATHS - ~/Library/Frameworks - /Library/Frameworks - /usr/local - /usr - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt -) - -FIND_PATH(SDL2_INCLUDE_DIR SDL.h - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES include/SDL2 include - PATHS ${SDL2_SEARCH_PATHS} -) - -FIND_LIBRARY(SDL2_LIBRARY_TEMP - NAMES SDL2 - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES lib64 lib build/Release - PATHS ${SDL2_SEARCH_PATHS} -) - -IF(NOT SDL2_BUILDING_LIBRARY) - IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") - # Non-OS X framework versions expect you to also dynamically link to - # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms - # seem to provide SDL2main for compatibility even though they don't - # necessarily need it. - FIND_LIBRARY(SDL2MAIN_LIBRARY - NAMES SDL2main - HINTS - $ENV{SDL2DIR} - PATH_SUFFIXES lib64 lib build/Release - PATHS ${SDL2_SEARCH_PATHS} - ) - ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") -ENDIF(NOT SDL2_BUILDING_LIBRARY) - -# SDL2 may require threads on your system. -# The Apple build may not need an explicit flag because one of the -# frameworks may already provide it. -# But for non-OSX systems, I will use the CMake Threads package. -IF(NOT APPLE) - FIND_PACKAGE(Threads) -ENDIF(NOT APPLE) - -# MinGW needs an additional library, mwindows -# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows -# (Actually on second look, I think it only needs one of the m* libraries.) -IF(MINGW) - SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") -ENDIF(MINGW) - -IF(SDL2_LIBRARY_TEMP) - # For SDL2main - IF(NOT SDL2_BUILDING_LIBRARY) - IF(SDL2MAIN_LIBRARY) - SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) - ENDIF(SDL2MAIN_LIBRARY) - ENDIF(NOT SDL2_BUILDING_LIBRARY) - - # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. - # CMake doesn't display the -framework Cocoa string in the UI even - # though it actually is there if I modify a pre-used variable. - # I think it has something to do with the CACHE STRING. - # So I use a temporary variable until the end so I can set the - # "real" variable in one-shot. - IF(APPLE) - SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") - ENDIF(APPLE) - - # For threads, as mentioned Apple doesn't need this. - # In fact, there seems to be a problem if I used the Threads package - # and try using this line, so I'm just skipping it entirely for OS X. - IF(NOT APPLE) - SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) - ENDIF(NOT APPLE) - - # For MinGW library - IF(MINGW) - SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) - ENDIF(MINGW) - - # Set the final string here so the GUI reflects the final state. - SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") - # Set the temp variable to INTERNAL so it is not seen in the CMake GUI - SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") -ENDIF(SDL2_LIBRARY_TEMP) - -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) diff --git a/cmake/FindUSB1.cmake b/cmake/FindUSB1.cmake index a4379598..00519f7f 100755 --- a/cmake/FindUSB1.cmake +++ b/cmake/FindUSB1.cmake @@ -21,79 +21,23 @@ IF (LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) set(LIBUSB_FOUND TRUE) ELSE (LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) - set(LIBUSB_ROOT ${CMAKE_CURRENT_LIST_DIR}/../thirdparty/libusb) - # Because we want to use the static library, - # look locally only. + find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h - PATHS - ${LIBUSB_ROOT}/libusb - ${LIBUSB_ROOT}/libusb-1.0 + HINTS /usr/local/include + PATH_SUFFIXES + libusb-1.0 ) - # There are 4 platform-specific ways we might get the libraries. - # 1 - Windows MSVC, download the source, compile with MSVC - # 2 - Windows MSVC, download pre-compiled binaries <- Do not use; wrong CRT library - # 3 - Windows MinGW, download pre-compiled binaries - # 4 - OSX, download the source, build, but do not install - # 5 - OSX, homebrew OR download the source, build, and install - # Each of these puts the compiled library into a different folder - # and that is also architecture-specific. - - set(LIBUSB_LIB_SEARCH_PATH_RELEASE ${LIBUSB_ROOT}) - set(LIBUSB_LIB_SEARCH_PATH_DEBUG ${LIBUSB_ROOT}) - IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - IF(MINGW) - set(LIBUSB_PLATFORM_PREFIX MinGW) # Does this get used? - #TODO: Add self-compiled folder for MinGW - IF (${CMAKE_C_SIZEOF_DATA_PTR} EQUAL 8) - list(APPEND LIBUSB_LIB_SEARCH_PATH_RELEASE - ${LIBUSB_ROOT}/MinGW64/static) - list(APPEND LIBUSB_LIB_SEARCH_PATH_DEBUG - ${LIBUSB_ROOT}/MinGW64/static) - ELSE() - list(APPEND LIBUSB_LIB_SEARCH_PATH_RELEASE - ${LIBUSB_ROOT}/MinGW32/static) - list(APPEND LIBUSB_LIB_SEARCH_PATH_DEBUG - ${LIBUSB_ROOT}/MinGW32/static) - ENDIF() - ELSE() # MSVC? - set(LIBUSB_PLATFORM_PREFIX MS) # Does this get used? - IF (${CMAKE_C_SIZEOF_DATA_PTR} EQUAL 8) - list(APPEND LIBUSB_LIB_SEARCH_PATH_RELEASE - ${LIBUSB_ROOT}/x64/Release/lib) - list(APPEND LIBUSB_LIB_SEARCH_PATH_DEBUG - ${LIBUSB_ROOT}/x64/Debug/lib) - ELSE() - list(APPEND LIBUSB_LIB_SEARCH_PATH_RELEASE - ${LIBUSB_ROOT}/Win32/Release/lib) - list(APPEND LIBUSB_LIB_SEARCH_PATH_DEBUG - ${LIBUSB_ROOT}/Win32/Debug/lib) - ENDIF() - ENDIF() - ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - list(APPEND LIBUSB_LIB_SEARCH_PATH_RELEASE - ${LIBUSB_ROOT}/libusb/.libs - /usr/local/lib) - list(APPEND LIBUSB_LIB_SEARCH_PATH_DEBUG - ${LIBUSB_ROOT}/libusb/.libs - /usr/local/lib) - ENDIF() - FIND_LIBRARY(LIBUSB_LIBRARY_RELEASE - NAMES libusb-1.0.a libusb-1.0.lib libusb-1.0 usb-1.0 usb - PATHS ${LIBUSB_LIB_SEARCH_PATH_RELEASE}) - FIND_LIBRARY(LIBUSB_LIBRARY_DEBUG + FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb-1.0.a libusb-1.0.lib libusb-1.0 usb-1.0 usb - PATHS ${LIBUSB_LIB_SEARCH_PATH_DEBUG}) - SET(LIBUSB_LIBRARIES - debug ${LIBUSB_LIBRARY_DEBUG} - optimized ${LIBUSB_LIBRARY_RELEASE}) + PATHS /usr/local/lib) - include(FindPackageHandleStandardArgs) - FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR) + include(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBUSB DEFAULT_MSG LIBUSB_LIBRARIES LIBUSB_INCLUDE_DIR) - MARK_AS_ADVANCED(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES) + MARK_AS_ADVANCED(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES) ENDIF (LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES) \ No newline at end of file diff --git a/cmake/ThirdParty.cmake b/cmake/ThirdParty.cmake index d6b1a4fc..e49fa253 100644 --- a/cmake/ThirdParty.cmake +++ b/cmake/ThirdParty.cmake @@ -1,6 +1,4 @@ -# When not using MSVC, we recommend using system-wide libraries -# (installed via homebrew on Mac or apt-get in Linux/Ubuntu) -# In MSVC, we auto-download the source and make it an external_project +# This is where we find thirdparty libraries and packages that are common to two or more targets. # Platform specific libraries SET(PLATFORM_LIBS) @@ -32,115 +30,45 @@ ELSE() #Linux list(APPEND PLATFORM_LIBS rt) ENDIF() +IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + find_package(PkgConfig REQUIRED) +ENDIF() + # Eigen3 IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - # TODO: Convert this to ExternalProject_Add - # Can manually set EIGEN3_INCLUDE_DIR to "${ROOT_DIR}/thirdparty/eigen - MESSAGE(STATUS "Using Eigen3 in submodule") - LIST(APPEND CMAKE_MODULE_PATH "${ROOT_DIR}/thirdparty/eigen/cmake") - SET(ENV{EIGEN3_ROOT} "${ROOT_DIR}/thirdparty/eigen") - find_package(Eigen3 REQUIRED) + find_package(Eigen3 CONFIG REQUIRED) ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") MESSAGE(STATUS "Using homebrew Eigen3") find_package(Eigen3 REQUIRED CONFIG PATHS /usr/local/opt/eigen/lib/cmake/eigen3) ELSE() - LIST(APPEND CMAKE_MODULE_PATH "${ROOT_DIR}/thirdparty/eigen/cmake") - SET(ENV{EIGEN3_ROOT} "/usr/include/eigen3") - find_package(Eigen3 REQUIRED) + find_package(Eigen3 REQUIRED) # TODO: Test as CONFIG ENDIF() +# Use with: +# target_link_libraries(main PRIVATE Eigen3::Eigen) # OpenCV # Override by adding "-DOpenCV_DIR=C:\path\to\opencv\build" to your cmake command IF(NOT OpenCV_DIR) - IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - ExternalProject_Add(opencv - PREFIX ${ROOT_DIR}/deps/opencv - GIT_REPOSITORY https://github.com/opencv/opencv.git - GIT_SHALLOW 1 - GIT_TAG 3.1.0 - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_INCLUDE_PATH=${ROOT_DIR}/deps/local/include - -DCMAKE_LIBRARY_PATH=${ROOT_DIR}/deps/local/lib - -DBUILD_WITH_STATIC_CRT:BOOL=ON - -DBUILD_SHARED_LIBS:BOOL=OFF - -DBUILD_DOCS:BOOL=OFF - -DBUILD_EXAMPLES:BOOL=OFF - -DBUILD_TESTS:BOOL=OFF - -DBUILD_PERF_TESTS:BOOL=OFF - #-DCMAKE_BUILD_TYPE:STRING=Release - -DWITH_FFMPEG:BOOL=OFF - -DWITH_OPENEXR:BOOL=OFF - -DWITH_JASPER:BOOL=OFF - -DWITH_TIFF:BOOL=OFF - -DWITH_IPP:BOOL=OFF - -DBUILD_opencv_apps:BOOL=OFF - -DBUILD_opencv_calib3d:BOOL=ON - -DBUILD_opencv_flann:BOOL=ON - -DBUILD_opencv_features2d:BOOL=ON - -DBUILD_opencv_objdetect:BOOL=ON - -DBUILD_opencv_photo:BOOL=ON - -DBUILD_opencv_ts:BOOL=OFF - -DBUILD_opencv_ml:BOOL=ON - -DBUILD_opencv_video:BOOL=ON - -DBUILD_opencv_java:BOOL=OFF - -DBUILD_opencv_python2:BOOL=OFF - -DBUILD_opencv_python3:BOOL=OFF - -DPYTHON2_LIBRARY:STRING=C:/Python27/libs/python27.lib - -DPYTHON3_LIBRARY:STRING=C:/Python35/libs/python35.lib - INSTALL_DIR ${ROOT_DIR}/deps/local/ - ) - - add_definitions(-DHAS_OPENCV) - - set(OpenCV_DIR ${ROOT_DIR}/deps/local) - set(OpenCV_INCLUDE_DIRS ${ROOT_DIR}/deps/local/include ) - if (${CMAKE_C_SIZEOF_DATA_PTR} EQUAL 8) - set(OPENCV_LIBS_DIR ${ROOT_DIR}/deps/local/x64/vc14/staticlib) - else() - set(OPENCV_LIBS_DIR ${ROOT_DIR}/deps/local/x86/vc14/staticlib) - endif() - - foreach(__CVLIB core calib3d features2d flann imgproc imgcodecs ml highgui objdetect video videoio) - set(OpenCV_${__CVLIB}_LIBRARY debug ${OPENCV_LIBS_DIR}/opencv_${__CVLIB}310d.lib optimized ${OPENCV_LIBS_DIR}/opencv_${__CVLIB}310.lib CACHE STRING "" FORCE) - set(OpenCV_LIBS ${OpenCV_LIBS} ${OpenCV_${__CVLIB}_LIBRARY}) - endforeach(__CVLIB) - - foreach(__CVLIB libjpeg libpng libwebp zlib) - set(OpenCV_${__CVLIB}_LIBRARY debug ${OPENCV_LIBS_DIR}/${__CVLIB}d.lib optimized ${OPENCV_LIBS_DIR}/${__CVLIB}.lib CACHE STRING "" FORCE) - set(OpenCV_LIBS ${OpenCV_LIBS} ${OpenCV_${__CVLIB}_LIBRARY}) - endforeach(__CVLIB) - - LIST(APPEND OpenCV_LIBS vfw32.lib) - - ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # Location of homebrew opencv3's OpenCVConfig.cmake # Alternatively, can do `brew ln opencv3 --force` MESSAGE(STATUS "Using homebrew opencv3") - set(OpenCV_DIR "/usr/local/opt/opencv3/share/OpenCV") + set(OpenCV_DIR "/usr/local/opt/opencv@3/share/OpenCV") ELSE() - set(OpenCV_DIR “/usr/local/share/OpenCV”) + set(OpenCV_DIR “/usr/share/OpenCV”) ENDIF()#Windows or Darwin + LIST(APPEND CMAKE_MODULE_PATH ${OpenCV_DIR}) ENDIF(NOT OpenCV_DIR) -LIST(APPEND CMAKE_MODULE_PATH ${OpenCV_DIR}) -set(OpenCV_STATIC ON) -IF(NOT(${CMAKE_SYSTEM_NAME} MATCHES "Windows")) - FIND_PACKAGE(OpenCV REQUIRED) -ENDIF() - +# set(OpenCV_STATIC ON) +FIND_PACKAGE(OpenCV REQUIRED) +# Use with: +#target_include_directories(main PRIVATE ${OpenCV_INCLUDE_DIRS}) +#target_link_libraries(main PRIVATE ${OpenCV_LIBS}) # Boost IF(MSVC) - # Default location of pre-compiled Boost for Windows - # Override by adding "-DBOOST_ROOT=C:\path\to\boost\ -DBOOST_LIBRARYDIR=C:\path\to\boost\lib32-msvc-14.0\" to your cmake command - IF (NOT BOOST_ROOT) - SET(BOOST_ROOT "C:/local/boost_1_61_0/") - SET(BOOST_LIBRARYDIR "C:/local/boost_1_61_0/lib32-msvc-14.0/") - ENDIF() - # Disable asio auto linking in date-time and regex add_definitions(-DBOOST_DATE_TIME_NO_LIB) add_definitions(-DBOOST_REGEX_NO_LIB) @@ -149,24 +77,32 @@ IF(MSVC) ENDIF() SET(Boost_DEBUG OFF) #Switch this and next to ON for help debugging Boost problems. SET(Boost_DETAILED_FAILURE_MSG OFF) -set(Boost_USE_STATIC_LIBS ON) # only find static libs +set(Boost_USE_STATIC_LIBS OFF) # only find static libs set(Boost_USE_MULTITHREADED ON) -set(Boost_USE_STATIC_RUNTIME ON) #Not default. Because our app is linking against static runtime (see above). -find_package(Boost REQUIRED) # Future targets can specify components. +set(Boost_USE_STATIC_RUNTIME OFF) # Default = OFF +find_package(Boost REQUIRED) +# Because the version of Boost supported depends on cmake and can often lag behind, +# we cannot use (e.g.) target_link_libraries(${target} Boost::filesystem) +# So, use: +# find_package(Boost REQUIRED COMPONENTS ) +# target_include_directories(${target} ${Boost_INCLUDE_DIRS}) +# target_link_libraries(${target} ${Boost_LIBRARIES}) # Protobuf -IF(MSVC) - set(PROTOBUF_SRC_ROOT_FOLDER ${ROOT_DIR}/thirdparty/protobuf) - #PROTOBUF_IMPORT_DIRS ? - # Default location of protobuf for Windows - #SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "${ROOT_DIR}/thirdparty/protobuf") -ENDIF(MSVC) -set(PROTOBUF_ORIG_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES}") # Store original -set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib .so .dylib .dll) # Prefer static libs -find_package(Protobuf REQUIRED) -set(CMAKE_FIND_LIBRARY_SUFFIXES "${PROTOBUF_ORIG_FIND_LIBRARY_SUFFIXES}") # Restore original -include_directories(${CMAKE_BINARY_DIR}/psmoveprotocol) # This is where the .proto files are compiled to. +set(Protobuf_DEBUG OFF) # Turn on to debug protobuf issues. +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + find_package(Protobuf CONFIG REQUIRED) + # Use with: target_link_libraries(PSMoveProtocol PRIVATE protobuf::libprotoc protobuf::libprotobuf) +ELSE() + find_package(Protobuf REQUIRED) + # Use with: + # target_include_directories(${target} ${Protobuf_INCLUDE_DIRS}) + # target_link_libraries(${target} ${Protobuf_LIBRARIES}) +ENDIF() +# Also, .proto files can be added to a target with: +# protobuf_generate(TARGET ${target} PROTOS ${my.proto}) + IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # protobuf current generates many warnings in MacOS: #'OSMemoryBarrier' is deprecated: first deprecated in macOS 10.12 - Use std::atomic_thread_fence() from instead @@ -175,27 +111,16 @@ ENDIF() # SDL and GL -set(SDL_GL_INCLUDE_DIRS) -set(SDL_GL_LIBS) +find_package(SDL2 CONFIG REQUIRED) IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_library(OPENGL_FRAMEWORK OpenGL) - find_package(SDL2) - list(APPEND SDL_GL_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) - list(APPEND SDL_GL_LIBS - ${SDL2_LIBRARY} ${OPENGL_FRAMEWORK} ${GLUT_FRAMEWORK}) + list(APPEND SDL2_LIBRARIES ${OPENGL_FRAMEWORK} ${GLUT_FRAMEWORK}) ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - find_package(SDL2) - list(APPEND SDL_GL_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) - list(APPEND SDL_GL_LIBS ${SDL2_LIBRARY} GL) -ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - SET(ENV{SDL2DIR} ${ROOT_DIR}/thirdparty/SDL2/) - find_package(SDL2) - list(APPEND SDL_GL_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) - list(APPEND SDL_GL_LIBS - ${SDL2_LIBRARY} - imm32.lib - version.lib) + list(APPEND SDL2_LIBRARIES GL) ENDIF() +# Use with: +# target_include_directories(main ${SDL2_INCLUDE_DIRS}) +# target_link_libraries(main PRIVATE ${SDL2_LIBRARIES}) # For PSEye camera @@ -236,24 +161,36 @@ IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows" #list(APPEND PSEYE_LIBRARIES ${LIBUSB_LIBRARIES}) ENDIF() +# We don't officially support anything but the PS3Eye camera at the moment +# and it's currently confusing debugging other peoples camera issues with +# random webcams being opened. +# However, this is the only way to open the PS3Eye on Linux. +option(EnableWebcam "EnableWebcam" OFF) +IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set(EnableWebcam ON) +ENDIF() +IF(${EnableWebcam}) + add_compile_definitions(ENABLE_WEBCAM) +ENDIF() + # hidapi set(HIDAPI_INCLUDE_DIRS ${ROOT_DIR}/thirdparty/hidapi/hidapi) -set(HIDAPI_SRC) -set(HIDAPI_LIBS) IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - list(APPEND HIDAPI_SRC ${ROOT_DIR}/thirdparty/hidapi/windows/hid.c) + set(HIDAPI_SRC ${ROOT_DIR}/thirdparty/hidapi/windows/hid.c) ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - list(APPEND HIDAPI_SRC ${ROOT_DIR}/thirdparty/hidapi/mac/hid.c) + set(HIDAPI_SRC ${ROOT_DIR}/thirdparty/hidapi/mac/hid.c) ELSE() - list(APPEND HIDAPI_SRC ${ROOT_DIR}/thirdparty/hidapi/linux/hid.c) - find_package(PkgConfig REQUIRED) + set(HIDAPI_SRC ${ROOT_DIR}/thirdparty/hidapi/linux/hid.c) +# I tried using hidapi from apt-get but it didn't work. +# pkg_check_modules(HIDAPI REQUIRED hidapi-libusb) +# pkg_check_modules(HIDAPI REQUIRED hidapi-hidraw) pkg_check_modules(UDEV REQUIRED libudev) - list(APPEND HIDAPI_INCLUDE_DIRS ${UDEV_INCLUDE_DIRS}) - list(APPEND HIDAPI_LIBS ${UDEV_LIBRARIES}) + list(APPEND HIDAPI_INCLUDE_DIRS ${UDEV_INCLUDEDIR}) + list(APPEND HIDAPI_LIBRARIES ${UDEV_LIBRARIES}) pkg_check_modules(BLUEZ REQUIRED bluez) - list(APPEND HIDAPI_INCLUDE_DIRS ${BLUEZ_INCLUDE_DIRS}) - list(APPEND HIDAPI_LIBS ${BLUEZ_LIBRARIES}) + list(APPEND HIDAPI_INCLUDE_DIRS ${BLUEZ_INCLUDEDIR}) + list(APPEND HIDAPI_LIBRARIES ${BLUEZ_LIBRARIES}) ENDIF() @@ -266,4 +203,4 @@ ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") list(APPEND LIBSTEM_GAMEPAD_SRC ${ROOT_DIR}/thirdparty/libstem_gamepad/source/gamepad/Gamepad_macosx.c) ELSE() list(APPEND LIBSTEM_GAMEPAD_SRC ${ROOT_DIR}/thirdparty/libstem_gamepad/source/gamepad/Gamepad_linux.c) -ENDIF() \ No newline at end of file +ENDIF() diff --git a/doc/BUILD_MACOS.md b/doc/BUILD_MACOS.md new file mode 100644 index 00000000..0430a3f2 --- /dev/null +++ b/doc/BUILD_MACOS.md @@ -0,0 +1,13 @@ +Temporary build notes: + +* install homebrew + * `/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"` # Install homebrew +* `brew update` +* `brew install cmake git sdl2 libusb eigen opencv@3 boost protobuf glm` +* cd into root PSMoveService folder +* `mkdir build_deps && cd build_deps` + * From root PSMoveService folder +* `git clone https://github.com/ocornut/imgui.git` +* `cd ..` +* `mkdir build && cd build` +* `cmake ..` diff --git a/doc/BUILD_UBUNTU.md b/doc/BUILD_UBUNTU.md new file mode 100644 index 00000000..141112b5 --- /dev/null +++ b/doc/BUILD_UBUNTU.md @@ -0,0 +1,39 @@ +## Linux + +Tested with Ubuntu 18.04 AMD64. Not quite ready. + +### Prerequisites + +The following should be run from inside the cloned PSMoveService directory. + +1. `mkdir build_deps && cd build_deps` +1. Build tools + * `sudo apt-get install build-essential git checkinstall pkg-config autoconf automake libtool` + * Ubuntu ships with an old version of cmake. We need to manually install a more recent version: + * `wget https://github.com/Kitware/CMake/releases/download/v3.13.4/cmake-3.13.4-Linux-x86_64.sh` + * `sudo sh cmake-3.13.4-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir` +1. Third party libraries from apt-get + * `sudo apt-get install libopencv-dev libsdl2-dev libeigen3-dev libbluetooth-dev libhidapi-dev libusb-1.0 libprotobuf-dev protobuf-compiler libglm-dev` +1. You will probably have to close your terminal window and open a new one. +1. ImGui - Unlike Windows with vcpkg, there's no package-manager version of ImGui, so we download it. I don't think we have to build. + * `git clone https://github.com/ocornut/imgui.git` +1. We need a newish version of boost, one that has boost.asio.io_context instead of .io_service + * `wget -O boost.tar.bz2 "https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.bz2"` + * `tar xvfj boost.tar.bz2` + * `cd boost_1_69_0` + * `sudo ./bootstrap.sh` + * TODO: Add `--with-libraries=library-name-list` to shorten compile time. + * `sudo ./b2 install` + * `cd ..` + +### Generate project files + +1. Assuming you are still in the build_deps folder, do a `cd ..` +1. `mkdir build && cd build` +1. `cmake ..` +1. `make .` + +### udev access + +1. `sudo cp misc/99-psmove.rules /etc/udev/rules.d/` +1. `sudo udevadm trigger` diff --git a/doc/BUILD_WIN.md b/doc/BUILD_WIN.md new file mode 100644 index 00000000..2a09b55a --- /dev/null +++ b/doc/BUILD_WIN.md @@ -0,0 +1,20 @@ +Temporary build notes: + +* Download vcpkg +* >vcpkg install sdl2:x64-windows libusb:x64-windows opencv:x64-windows boost:x64-windows eigen3:x64-windows protobuf:x64-windows glm:x64-windows imgui:x64-windows +* Build with VS2017 integrated cmake + * Open PSMoveService folder in Visual Studio 2017. Let cmake scan and attempt to configure. + See [here](https://docs.microsoft.com/en-us/cpp/ide/cmake-tools-for-visual-cpp?view=vs-2017#ide-integration). + * Using the dropdown menu, make sure your configuration is set to x64-Release (or Debug if so desired). + * Set your CMake configuration settings from the cmake menu + ``` + , + "variables": [{ + "name": "CMAKE_TOOLCHAIN_FILE", + "value": "D:\\Tools\\Misc\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" + }] + ``` +* Alternatively, Config and generate with command line + * cmake .. -G "Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:\Tools\Misc\vcpkg\scripts\buildsystems\vcpkg.cmake + * Optional addons: -DVCPKG_TARGET_TRIPLET=x64-windows -DCMAKE_BUILD_TYPE=Release + diff --git a/misc/99-psmove.rules b/misc/99-psmove.rules new file mode 100644 index 00000000..611040b1 --- /dev/null +++ b/misc/99-psmove.rules @@ -0,0 +1,14 @@ +# hidraw interface: Bluetooth (=0005), PS Move Motion Controller (=054c:03d5) +SUBSYSTEM=="hidraw", KERNELS=="0005:054C:03D5.*", MODE="0666" + +# hidraw interface: USB (=0003), PS Move Motion Controller (=054c:03d5) +SUBSYSTEM=="hidraw", KERNELS=="0003:054C:03D5.*", MODE="0666" + +# hidraw interface: Bluetooth (=0005), PS4 Move Motion Controller, CECH-ZCM2 (=054c:0c5e) +SUBSYSTEM=="hidraw", KERNELS=="0005:054C:0C5E.*", MODE="0666" + +# hidraw interface: USB (=0003), PS4 Move Motion Controller, CECH-ZCM2 (=054c:0c5e) +SUBSYSTEM=="hidraw", KERNELS=="0003:054C:0C5E.*", MODE="0666" + +# libusb interface: obsolete (we use hidraw for everything now) +#SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="03d5", MODE="0666" diff --git a/src/psmoveclient/CMakeLists.txt b/src/psmoveclient/CMakeLists.txt index 288753f5..66e85277 100644 --- a/src/psmoveclient/CMakeLists.txt +++ b/src/psmoveclient/CMakeLists.txt @@ -7,29 +7,30 @@ include (GenerateExportHeader) set(CMAKE_INSTALL_PREFIX ${ROOT_DIR}/dist) -set(PSMOVE_CLIENT_INCL_DIRS) -set(PSMOVE_CLIENT_REQ_LIBS) +set(PSMOVECLIENT_LIBRARY_SRC) +set(PSMOVECLIENT_INCL_DIRS) +set(PSMOVECLIENT_REQ_LIBS) -list(APPEND PSMOVE_CLIENT_INCL_DIRS - ${ROOT_DIR}/thirdparty/Boost.Application/include/ - ${ROOT_DIR}/thirdparty/type_index/include/) +list(APPEND PSMOVECLIENT_INCL_DIRS + ${ROOT_DIR}/thirdparty/type_index/include/ + ${ROOT_DIR}/thirdparty/Boost.Application/include/) +# https://github.com/cboulay/PSMoveService/issues/39 ? -# Protobuf -list(APPEND PSMOVE_CLIENT_INCL_DIRS ${PROTOBUF_INCLUDE_DIRS}) -list(APPEND PSMOVE_CLIENT_REQ_LIBS ${PROTOBUF_LIBRARIES}) +# Protobuf - Transitively through PSMoveProtocol +# list(APPEND PSMOVECLIENT_REQ_LIBS protobuf::libprotoc protobuf::libprotobuf) # Boost find_package(Boost REQUIRED QUIET COMPONENTS system) -list(APPEND PSMOVE_CLIENT_INCL_DIRS ${Boost_INCLUDE_DIRS}) -list(APPEND PSMOVE_CLIENT_REQ_LIBS ${Boost_LIBRARIES}) +list(APPEND PSMOVECLIENT_INCL_DIRS ${Boost_INCLUDE_DIRS}) +list(APPEND PSMOVECLIENT_REQ_LIBS ${Boost_LIBRARIES}) -# PSMoveProtocol -include_directories(${ROOT_DIR}/src/psmoveprotocol/) -list(APPEND PSMOVE_CLIENT_REQ_LIBS PSMoveProtocol) +# PSMoveProtocol - brings protobuf +list(APPEND PSMOVECLIENT_INCL_DIRS ${ROOT_DIR}/src/psmoveprotocol/) +list(APPEND PSMOVECLIENT_REQ_LIBS PSMoveProtocol) # PSMoveMath -include_directories(${ROOT_DIR}/src/psmovemath/) -list(APPEND PSMOVE_CLIENT_REQ_LIBS PSMoveMath) +list(APPEND PSMOVECLIENT_INCL_DIRS ${ROOT_DIR}/src/psmovemath/) +list(APPEND PSMOVECLIENT_REQ_LIBS PSMoveMath) # Source files that are needed for the shared library file(GLOB PSMOVECLIENT_LIBRARY_SRC @@ -37,36 +38,23 @@ file(GLOB PSMOVECLIENT_LIBRARY_SRC "${CMAKE_CURRENT_LIST_DIR}/*.cpp" ) -# TODO: Build PSMoveClient as a STATIC or OBJECT w/ $ -add_library(PSMoveClient_static STATIC ${PSMOVECLIENT_LIBRARY_SRC}) -target_include_directories(PSMoveClient_static PUBLIC ${PSMOVE_CLIENT_INCL_DIRS}) -target_link_libraries(PSMoveClient_static PUBLIC ${PLATFORM_LIBS} ${PSMOVE_CLIENT_REQ_LIBS}) -target_compile_definitions(PSMoveClient_static PRIVATE PSMOVECLIENT_CPP_API) -target_compile_definitions(PSMoveClient_static PRIVATE PSMoveClient_STATIC) +# Build PSMoveClient CPP SHARED library. +add_library(PSMoveClient SHARED ${PSMOVECLIENT_LIBRARY_SRC}) +target_include_directories(PSMoveClient PRIVATE ${PSMOVECLIENT_INCL_DIRS}) +target_link_libraries(PSMoveClient PRIVATE ${PLATFORM_LIBS} ${PSMOVECLIENT_REQ_LIBS}) +set_target_properties(PSMoveClient PROPERTIES PUBLIC_HEADER "ClientConstants.h;PSMoveClient_export.h; PSMoveClient.h") +target_compile_definitions(PSMoveClient PRIVATE PSMoveClient_EXPORTS) +target_compile_definitions(PSMoveClient PRIVATE PSMOVECLIENT_CPP_API) -# -# PSMoveClient_CAPI Shared library -# -set(PSMOVE_CLIENT_CAPI_REQ_LIBS) - -# PSMoveClient_static -list(APPEND PSMOVE_CLIENT_CAPI_REQ_LIBS PSMoveClient_static) -#Via PSMoveClient_static, transitively inherits PSMoveProtocol < Protobuf, Boost, PSMoveMath - -# Source files to develop the shared library. -list(APPEND PSMOVECLIENT_CAPI_LIBRARY_SRC - "${CMAKE_CURRENT_LIST_DIR}/PSMoveClient_export.h" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveClient_CAPI.h" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveClient_CAPI.cpp" -) - -# Shared library +# Build PSMoveClient_CAPI SHARED library. add_library(PSMoveClient_CAPI SHARED ${PSMOVECLIENT_LIBRARY_SRC}) -target_include_directories(PSMoveClient_CAPI PUBLIC ${CMAKE_CURRENT_LIST_DIR}) -target_link_libraries(PSMoveClient_CAPI PRIVATE ${PSMOVE_CLIENT_CAPI_REQ_LIBS}) +target_include_directories(PSMoveClient_CAPI PRIVATE ${PSMOVECLIENT_INCL_DIRS}) +target_link_libraries(PSMoveClient_CAPI PRIVATE ${PLATFORM_LIBS} ${PSMOVECLIENT_REQ_LIBS}) set_target_properties(PSMoveClient_CAPI PROPERTIES PUBLIC_HEADER "ClientConstants.h;ClientGeometry_CAPI.h;PSMoveClient_CAPI.h;PSMoveClient_export.h") set_target_properties(PSMoveClient_CAPI PROPERTIES CXX_VISIBILITY_PRESET hidden) set_target_properties(PSMoveClient_CAPI PROPERTIES C_VISIBILITY_PRESET hidden) +target_compile_definitions(PSMoveClient_CAPI PRIVATE PSMoveClient_CAPI_EXPORTS) + # Install IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") diff --git a/src/psmoveclient/ClientNetworkManager.cpp b/src/psmoveclient/ClientNetworkManager.cpp index a5fed7c9..33b48b25 100644 --- a/src/psmoveclient/ClientNetworkManager.cpp +++ b/src/psmoveclient/ClientNetworkManager.cpp @@ -38,10 +38,10 @@ class ClientNetworkManagerImpl : m_server_host(host) , m_server_port(port) - , m_io_service() - , m_tcp_socket(m_io_service) + , m_io_context() + , m_tcp_socket(m_io_context) , m_tcp_connection_id(-1) - , m_udp_socket(m_io_service, udp::endpoint(udp::v4(), 0)) + , m_udp_socket(m_io_context, udp::endpoint(udp::v4(), 0)) , m_udp_server_endpoint() , m_udp_remote_endpoint() , m_connection_stopped(false) @@ -69,7 +69,7 @@ class ClientNetworkManagerImpl bool start() { - tcp::resolver resolver(m_io_service); + tcp::resolver resolver(m_io_context); tcp::resolver::iterator endpoint_iter= resolver.resolve(tcp::resolver::query(tcp::v4(), m_server_host, m_server_port)); m_connection_stopped= false; @@ -108,7 +108,7 @@ class ClientNetworkManagerImpl // * TCP request has finished writing // * TCP response has finished receiving // * UDP data frame has finished writing - m_io_service.poll(); + m_io_context.poll(); // In the event that a UDP data frame write completed immediately, // we should start another UDP data frame write. @@ -291,7 +291,7 @@ class ClientNetworkManagerImpl CLIENT_LOG_DEBUG(" ") << msg_size << " bytes"; // Start an asynchronous operation to send the data frame - // NOTE: Even if the write completes immediate, the callback will only be called from io_service::poll() + // NOTE: Even if the write completes immediate, the callback will only be called from io_context::poll() m_udp_socket.async_send_to( boost::asio::buffer(m_input_data_frame_buffer, sizeof(m_input_data_frame_buffer)), m_udp_server_endpoint, @@ -598,7 +598,7 @@ class ClientNetworkManagerImpl m_has_pending_udp_write = true; // Start an asynchronous operation to send the data frame - // NOTE: Even if the write completes immediate, the callback will only be called from io_service::poll() + // NOTE: Even if the write completes immediate, the callback will only be called from io_context::poll() m_udp_socket.async_send_to( boost::asio::buffer(m_input_data_frame_buffer, sizeof(m_input_data_frame_buffer)), m_udp_server_endpoint, @@ -719,7 +719,7 @@ class ClientNetworkManagerImpl std::string m_server_host; std::string m_server_port; - asio::io_service m_io_service; + asio::io_context m_io_context; tcp::socket m_tcp_socket; int m_tcp_connection_id; diff --git a/src/psmoveclient/PSMoveClient_export.h b/src/psmoveclient/PSMoveClient_export.h index 5b957240..14fc1fae 100644 --- a/src/psmoveclient/PSMoveClient_export.h +++ b/src/psmoveclient/PSMoveClient_export.h @@ -59,7 +59,7 @@ #define PSM_PRIVATE_FUNCTION(rval) __attribute__((visibility("hidden"))) rval PSM_CALL #define PSM_PRIVATE_CLASS __attribute__((visibility("hidden"))) #endif //defined _WIN32 || defined __CYGWIN__ - #elif defined(PSMoveClient_STATIC) || defined(PSMoveClient_CAPI_STATIC) // Building static lib + #elif defined(PSMoveClient_NOEXPORT) || defined(PSMoveClient_CAPI_NOEXPORT) // Building static lib #define PSM_PUBLIC_FUNCTION(rval) PSM_EXTERN_C rval PSM_CALL #define PSM_PUBLIC_CLASS #define PSM_PRIVATE_FUNCTION(rval) rval PSM_CALL diff --git a/src/psmoveconfigtool/AppStage_AccelerometerCalibration.cpp b/src/psmoveconfigtool/AppStage_AccelerometerCalibration.cpp index aa324a6c..35056ee8 100644 --- a/src/psmoveconfigtool/AppStage_AccelerometerCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_AccelerometerCalibration.cpp @@ -360,7 +360,6 @@ void AppStage_AccelerometerCalibration::renderUI() const float k_panel_width = 500; const char *k_window_title = "Accelerometer Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_ColorCalibration.cpp b/src/psmoveconfigtool/AppStage_ColorCalibration.cpp index fd41caf2..77a68e4b 100644 --- a/src/psmoveconfigtool/AppStage_ColorCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_ColorCalibration.cpp @@ -379,7 +379,6 @@ void AppStage_ColorCalibration::renderUI() const float k_panel_width = 300.f; const char *k_window_title = "Color Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | @@ -884,8 +883,8 @@ void AppStage_ColorCalibration::renderUI() // Tracker Alignment Marker if (m_bShowAlignment) { - float prevAlpha = ImGui::GetStyle().WindowFillAlphaDefault; - ImGui::GetStyle().WindowFillAlphaDefault = 0.f; + //float prevAlpha = ImGui::GetStyle().WindowFillAlphaDefault; + //ImGui::GetStyle().WindowFillAlphaDefault = 0.f; float align_window_size = 30.f; float x0 = (ImGui::GetIO().DisplaySize.x - align_window_size) / 2; @@ -895,7 +894,6 @@ void AppStage_ColorCalibration::renderUI() ImGui::SetNextWindowSize(ImVec2(align_window_size, align_window_size)); ImGui::Begin("Alignment Window", nullptr, ImGuiWindowFlags_NoTitleBar | - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | @@ -947,7 +945,7 @@ void AppStage_ColorCalibration::renderUI() ); ImGui::End(); - ImGui::GetStyle().WindowFillAlphaDefault = prevAlpha; + //ImGui::GetStyle().WindowFillAlphaDefault = prevAlpha; } } break; diff --git a/src/psmoveconfigtool/AppStage_ComputeTrackerPoses.cpp b/src/psmoveconfigtool/AppStage_ComputeTrackerPoses.cpp index 1e16e348..70039580 100644 --- a/src/psmoveconfigtool/AppStage_ComputeTrackerPoses.cpp +++ b/src/psmoveconfigtool/AppStage_ComputeTrackerPoses.cpp @@ -320,7 +320,6 @@ void AppStage_ComputeTrackerPoses::renderUI() const float k_panel_width = 300.f; const char *k_window_title = "Compute Tracker Poses"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | @@ -457,8 +456,8 @@ void AppStage_ComputeTrackerPoses::renderUI() // Tracker Alignment Marker if (m_bShowAlignment) { - float prevAlpha = ImGui::GetStyle().WindowFillAlphaDefault; - ImGui::GetStyle().WindowFillAlphaDefault = 0.f; + //float prevAlpha = ImGui::GetStyle().WindowFillAlphaDefault; + //ImGui::GetStyle().WindowFillAlphaDefault = 0.f; float align_window_size = 30.f; float x0 = (ImGui::GetIO().DisplaySize.x - align_window_size) / 2; @@ -468,7 +467,6 @@ void AppStage_ComputeTrackerPoses::renderUI() ImGui::SetNextWindowSize(ImVec2(align_window_size, align_window_size)); ImGui::Begin("Alignment Window", nullptr, ImGuiWindowFlags_NoTitleBar | - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | @@ -490,7 +488,7 @@ void AppStage_ComputeTrackerPoses::renderUI() ); ImGui::End(); - ImGui::GetStyle().WindowFillAlphaDefault = prevAlpha; + //ImGui::GetStyle().WindowFillAlphaDefault = prevAlpha; } break; diff --git a/src/psmoveconfigtool/AppStage_ControllerSettings.cpp b/src/psmoveconfigtool/AppStage_ControllerSettings.cpp index 6d83b398..88fc1861 100644 --- a/src/psmoveconfigtool/AppStage_ControllerSettings.cpp +++ b/src/psmoveconfigtool/AppStage_ControllerSettings.cpp @@ -328,7 +328,6 @@ void AppStage_ControllerSettings::renderUI() { const char *k_window_title= "Controller Settings"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | @@ -341,8 +340,9 @@ void AppStage_ControllerSettings::renderUI() ImGui::SetNextWindowPosCenter(); ImGui::SetNextWindowSize(ImVec2(350, 490)); ImGui::Begin("Controller Settings", nullptr, window_flags | ImGuiWindowFlags_MenuBar); + - if (ImGui::CollapsingHeader("Host Info", 0, true, true)) + if (ImGui::CollapsingHeader("Host Info", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) { if (m_hostSerial.length() > 1 && m_hostSerial != "00:00:00:00:00:00") { @@ -358,7 +358,7 @@ void AppStage_ControllerSettings::renderUI() { ControllerInfo &controllerInfo= m_controllerInfos[m_selectedControllerIndex]; - if (ImGui::CollapsingHeader("Controller Settings", 0, true, true)) + if (ImGui::CollapsingHeader("Controller Settings", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) { if (m_selectedControllerIndex > 0) { @@ -513,7 +513,7 @@ void AppStage_ControllerSettings::renderUI() if (!m_app->excludePositionSettings && (controllerInfo.IsBluetooth || controllerInfo.ControllerType == PSMController_Virtual)) { - if (ImGui::CollapsingHeader("Filters", 0, true, false)) + if (ImGui::CollapsingHeader("Filters", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) { if ((controllerInfo.ControllerType == PSMController_Move && controllerInfo.IsBluetooth) || controllerInfo.ControllerType == PSMController_Virtual) @@ -593,7 +593,10 @@ void AppStage_ControllerSettings::renderUI() if (controllerInfo.ControllerType == PSMController_Move && controllerInfo.IsBluetooth) { - if (ImGui::CollapsingHeader("Controller Calibration", 0, true, m_app->excludePositionSettings)) + ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Framed; + if (m_app->excludePositionSettings) + flags |= ImGuiTreeNodeFlags_DefaultOpen; + if (ImGui::CollapsingHeader("Controller Calibration", flags)) { if (controllerInfo.HasMagnetometer) { @@ -625,7 +628,10 @@ void AppStage_ControllerSettings::renderUI() if (controllerInfo.IsBluetooth || controllerInfo.ControllerType == PSMController_Virtual) { - if (ImGui::CollapsingHeader("Controller Tests", 0, true, m_app->excludePositionSettings)) + ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Framed; + if (m_app->excludePositionSettings) + flags |= ImGuiTreeNodeFlags_DefaultOpen; + if (ImGui::CollapsingHeader("Controller Tests", flags)) { if (controllerInfo.ControllerType == PSMController_Move) { diff --git a/src/psmoveconfigtool/AppStage_DistortionCalibration.cpp b/src/psmoveconfigtool/AppStage_DistortionCalibration.cpp index cb837cb3..f5a3f532 100644 --- a/src/psmoveconfigtool/AppStage_DistortionCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_DistortionCalibration.cpp @@ -586,7 +586,6 @@ void AppStage_DistortionCalibration::renderUI() const float k_panel_width = 200.f; const char *k_window_title = "Distortion Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_GyroscopeCalibration.cpp b/src/psmoveconfigtool/AppStage_GyroscopeCalibration.cpp index 499a0178..83ea3e24 100644 --- a/src/psmoveconfigtool/AppStage_GyroscopeCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_GyroscopeCalibration.cpp @@ -392,7 +392,6 @@ void AppStage_GyroscopeCalibration::renderUI() const float k_panel_width = 500; const char *k_window_title = "Gyroscope Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_HMDAccelerometerCalibration.cpp b/src/psmoveconfigtool/AppStage_HMDAccelerometerCalibration.cpp index 2e028449..dc277c8c 100644 --- a/src/psmoveconfigtool/AppStage_HMDAccelerometerCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_HMDAccelerometerCalibration.cpp @@ -314,7 +314,6 @@ void AppStage_HMDAccelerometerCalibration::renderUI() const float k_panel_width = 500; const char *k_window_title = "HMD Accelerometer Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_HMDGyroscopeCalibration.cpp b/src/psmoveconfigtool/AppStage_HMDGyroscopeCalibration.cpp index 1ba51fbc..f26db974 100644 --- a/src/psmoveconfigtool/AppStage_HMDGyroscopeCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_HMDGyroscopeCalibration.cpp @@ -387,7 +387,6 @@ void AppStage_HMDGyroscopeCalibration::renderUI() const float k_panel_width = 500; const char *k_window_title = "HMD Gyroscope Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_HMDModelCalibration.cpp b/src/psmoveconfigtool/AppStage_HMDModelCalibration.cpp index 63da6adc..ea9a96ca 100644 --- a/src/psmoveconfigtool/AppStage_HMDModelCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_HMDModelCalibration.cpp @@ -545,7 +545,6 @@ void AppStage_HMDModelCalibration::renderUI() const float k_panel_width = 300.f; const char *k_window_title = "Compute HMD Model"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_HMDSettings.cpp b/src/psmoveconfigtool/AppStage_HMDSettings.cpp index 9fd9bb9f..70f314d5 100644 --- a/src/psmoveconfigtool/AppStage_HMDSettings.cpp +++ b/src/psmoveconfigtool/AppStage_HMDSettings.cpp @@ -137,7 +137,6 @@ void AppStage_HMDSettings::renderUI() { const char *k_window_title = "HMD Settings"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_MagnetometerCalibration.cpp b/src/psmoveconfigtool/AppStage_MagnetometerCalibration.cpp index 5782fb9b..0f0f508b 100644 --- a/src/psmoveconfigtool/AppStage_MagnetometerCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_MagnetometerCalibration.cpp @@ -646,7 +646,6 @@ void AppStage_MagnetometerCalibration::renderUI() const float k_panel_width= 500; const char *k_window_title= "Magnetometer Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_MainMenu.cpp b/src/psmoveconfigtool/AppStage_MainMenu.cpp index 7419445f..d1ff4227 100644 --- a/src/psmoveconfigtool/AppStage_MainMenu.cpp +++ b/src/psmoveconfigtool/AppStage_MainMenu.cpp @@ -63,7 +63,6 @@ void AppStage_MainMenu::renderUI() case connectedToService: { ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | @@ -100,7 +99,6 @@ void AppStage_MainMenu::renderUI() case pendingConnectToToService: { ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | @@ -119,7 +117,6 @@ void AppStage_MainMenu::renderUI() case disconnectedFromService: { ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_OpticalCalibration.cpp b/src/psmoveconfigtool/AppStage_OpticalCalibration.cpp index 8df0dd1a..e30fe74c 100644 --- a/src/psmoveconfigtool/AppStage_OpticalCalibration.cpp +++ b/src/psmoveconfigtool/AppStage_OpticalCalibration.cpp @@ -543,7 +543,6 @@ void AppStage_OpticalCalibration::renderUI() const float k_panel_width = 500; const char *k_window_title = "Optical Noise Calibration"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_PairController.cpp b/src/psmoveconfigtool/AppStage_PairController.cpp index 5e39adef..af40ccbb 100644 --- a/src/psmoveconfigtool/AppStage_PairController.cpp +++ b/src/psmoveconfigtool/AppStage_PairController.cpp @@ -59,7 +59,6 @@ void AppStage_PairController::renderUI() { const char *k_window_title= "Controller Pairing"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_ServiceSettings.cpp b/src/psmoveconfigtool/AppStage_ServiceSettings.cpp index aba965ae..4bd73c0a 100644 --- a/src/psmoveconfigtool/AppStage_ServiceSettings.cpp +++ b/src/psmoveconfigtool/AppStage_ServiceSettings.cpp @@ -37,7 +37,6 @@ void AppStage_ServiceSettings::update() void AppStage_ServiceSettings::renderUI() { ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_TestButtons.cpp b/src/psmoveconfigtool/AppStage_TestButtons.cpp index 0d508788..b720356d 100644 --- a/src/psmoveconfigtool/AppStage_TestButtons.cpp +++ b/src/psmoveconfigtool/AppStage_TestButtons.cpp @@ -143,7 +143,6 @@ void AppStage_TestButtons::renderUI() const float k_panel_width = 500; const char *k_window_title = "Test Buttons"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_TestRumble.cpp b/src/psmoveconfigtool/AppStage_TestRumble.cpp index 25f1e4c9..94913b71 100644 --- a/src/psmoveconfigtool/AppStage_TestRumble.cpp +++ b/src/psmoveconfigtool/AppStage_TestRumble.cpp @@ -129,7 +129,6 @@ void AppStage_TestRumble::renderUI() const float k_panel_width = 500; const char *k_window_title = "Test Rumble"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_TestTracker.cpp b/src/psmoveconfigtool/AppStage_TestTracker.cpp index 57e1e07f..ef6e36fe 100644 --- a/src/psmoveconfigtool/AppStage_TestTracker.cpp +++ b/src/psmoveconfigtool/AppStage_TestTracker.cpp @@ -99,7 +99,6 @@ void AppStage_TestTracker::renderUI() const float k_panel_width = 300.f; const char *k_window_title = "Video Feed Test"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppStage_TrackerSettings.cpp b/src/psmoveconfigtool/AppStage_TrackerSettings.cpp index 2b36c66e..21119f27 100644 --- a/src/psmoveconfigtool/AppStage_TrackerSettings.cpp +++ b/src/psmoveconfigtool/AppStage_TrackerSettings.cpp @@ -167,7 +167,6 @@ void AppStage_TrackerSettings::renderUI() { const char *k_window_title = "Tracker Settings"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/AppSubStage_CalibrateWithMat.cpp b/src/psmoveconfigtool/AppSubStage_CalibrateWithMat.cpp index ace61c16..effd89d7 100644 --- a/src/psmoveconfigtool/AppSubStage_CalibrateWithMat.cpp +++ b/src/psmoveconfigtool/AppSubStage_CalibrateWithMat.cpp @@ -577,7 +577,6 @@ void AppSubStage_CalibrateWithMat::renderUI() const float k_panel_width = 450.f; const char *k_window_title = "Compute Tracker Poses"; const ImGuiWindowFlags window_flags = - ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | diff --git a/src/psmoveconfigtool/CMakeLists.txt b/src/psmoveconfigtool/CMakeLists.txt index c8dd52f5..08491599 100644 --- a/src/psmoveconfigtool/CMakeLists.txt +++ b/src/psmoveconfigtool/CMakeLists.txt @@ -1,6 +1,11 @@ set(ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) set(PSMOVECONFIGTOOL_INCL_DIRS) set(PSMOVECONFIGTOOL_REQ_LIBS) +# Source files that are needed for the psmove config tool +file(GLOB PSMOVECONFIGTOOL_SRC + "${CMAKE_CURRENT_LIST_DIR}/*.h" + "${CMAKE_CURRENT_LIST_DIR}/*.cpp" +) # Boost find_package(Boost REQUIRED QUIET COMPONENTS date_time) @@ -9,46 +14,50 @@ list(APPEND PSMOVECONFIGTOOL_REQ_LIBS ${Boost_LIBRARIES}) # platform independent include paths list(APPEND PSMOVECONFIGTOOL_INCL_DIRS - ${EIGEN3_INCLUDE_DIR} - ${ROOT_DIR}/thirdparty/glm ${ROOT_DIR}/thirdparty/sparseicp ${ROOT_DIR}/thirdparty/stb - ${ROOT_DIR}/thirdparty/imgui ${ROOT_DIR}/src/psmoveclient/ ${ROOT_DIR}/src/psmovemath/ ${ROOT_DIR}/src/psmoveprotocol/ - ${PROTOBUF_INCLUDE_DIRS}) +) # platform independent libraries list(APPEND PSMOVECONFIGTOOL_REQ_LIBS PSMoveClient_CAPI PSMoveMath PSMoveProtocol - ${PROTOBUF_LIBRARIES}) + Eigen3::Eigen + ${Protobuf_LIBRARIES}) +list(APPEND PSMOVECONFIGTOOL_INCL_DIRS ${Protobuf_INCLUDE_DIRS}) # SDL/GL -list(APPEND PSMOVECONFIGTOOL_INCL_DIRS ${SDL_GL_INCLUDE_DIRS}) -list(APPEND PSMOVECONFIGTOOL_REQ_LIBS ${SDL_GL_LIBS}) +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + list(APPEND PSMOVECONFIGTOOL_REQ_LIBS SDL2::SDL2 SDL2::SDL2main) +ELSE() + list(APPEND PSMOVECONFIGTOOL_REQ_LIBS ${SDL2_LIBRARIES}) +ENDIF() +list(APPEND PSMOVECONFIGTOOL_INCL_DIRS ${SDL2_INCLUDE_DIRS}) # OpenCV list(APPEND PSMOVECONFIGTOOL_INCL_DIRS ${OpenCV_INCLUDE_DIRS}) list(APPEND PSMOVECONFIGTOOL_REQ_LIBS ${OpenCV_LIBS}) -# Source files that are needed for the psmove config tool -file(GLOB PSMOVECONFIGTOOL_SRC - "${CMAKE_CURRENT_LIST_DIR}/*.h" - "${CMAKE_CURRENT_LIST_DIR}/*.cpp" - "${ROOT_DIR}/thirdparty/imgui/*.cpp" -) +#ImGui +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + find_package(imgui CONFIG REQUIRED) + list(APPEND PSMOVECONFIGTOOL_REQ_LIBS imgui::imgui) +ELSE() #((${CMAKE_SYSTEM_NAME} MATCHES "Linux") OR (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) + # No installable ImGui package on Linux/MacOS. Add headers and source manually. See build docs. + list(APPEND PSMOVECONFIGTOOL_INCL_DIRS + ${ROOT_DIR}/build_deps/imgui) + file(GLOB IMGUI_SRC "${ROOT_DIR}/build_deps/imgui/*.cpp") + list(APPEND PSMOVECONFIGTOOL_SRC ${IMGUI_SRC}) +ENDIF() # PSMoveConfigTool add_executable(PSMoveConfigTool ${PSMOVECONFIGTOOL_SRC}) -target_include_directories(PSMoveConfigTool PUBLIC ${PSMOVECONFIGTOOL_INCL_DIRS}) -target_link_libraries(PSMoveConfigTool ${PSMOVECONFIGTOOL_REQ_LIBS}) - -IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") -add_dependencies(PSMoveService opencv) -ENDIF() +target_include_directories(PSMoveConfigTool PRIVATE ${PSMOVECONFIGTOOL_INCL_DIRS}) +target_link_libraries(PSMoveConfigTool PRIVATE ${PSMOVECONFIGTOOL_REQ_LIBS}) # Allow access to the protocol buffers (extracting response parameters) target_compile_definitions(PSMoveConfigTool diff --git a/src/psmoveconfigtool/Renderer.cpp b/src/psmoveconfigtool/Renderer.cpp index 962cbff5..ce7bebde 100644 --- a/src/psmoveconfigtool/Renderer.cpp +++ b/src/psmoveconfigtool/Renderer.cpp @@ -44,13 +44,14 @@ static const float k_camera_z_far= 5000.f; static const ImVec4 k_clear_color = ImColor(114, 144, 154); static const glm::vec3 k_psmove_frustum_color = glm::vec3(0.1f, 0.7f, 0.3f); +static char* g_ClipboardTextData = NULL; //-- statics ----- Renderer *Renderer::m_instance= NULL; //-- prototypes ----- -static const char* ImGui_ImplSdl_GetClipboardText(); -static void ImGui_ImplSdl_SetClipboardText(const char* text); +static const char* ImGui_ImplSDL2_GetClipboardText(void*); +static void ImGui_ImplSDL2_SetClipboardText(void*, const char* text); static void ImGui_ImplSdl_RenderDrawLists(ImDrawData* draw_data); //-- public methods ----- @@ -81,6 +82,8 @@ bool Renderer::init() { bool success = true; + // https://github.com/ocornut/imgui/blob/master/examples/example_sdl_opengl2/main.cpp + Log_INFO("Renderer::init()", "Initializing Renderer Context"); if (SDL_Init(SDL_INIT_VIDEO) == 0) @@ -103,12 +106,16 @@ bool Renderer::init() SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); + SDL_DisplayMode current; + SDL_GetCurrentDisplayMode(0, ¤t); + snprintf(szWindowTitle, sizeof(szWindowTitle), "PSMove Config Tool"); + SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI); m_window = SDL_CreateWindow(szWindowTitle, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, k_window_pixel_width, k_window_pixel_height, - SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); + window_flags); m_windowWidth= k_window_pixel_width; m_windowHeight= k_window_pixel_height; @@ -132,7 +139,19 @@ bool Renderer::init() // Setup ImGui key-bindings and callback functions if (success) { - ImGuiIO& io = ImGui::GetIO(); + ImGui::CreateContext(); + ImGuiIO& io = ImGui::GetIO(); (void)io; + + // Setup Dear ImGui style + ImGui::StyleColorsDark(); + //ImGui::StyleColorsClassic(); + + // ImGui_ImplSDL2_InitForOpenGL(window, gl_context); https://github.com/ocornut/imgui/blob/master/examples/imgui_impl_sdl.cpp#L123 + + //io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; // We can honor GetMouseCursor() values (optional) + //io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos; // We can honor io.WantSetMousePos requests (optional, rarely used) + io.BackendPlatformName = "imgui_impl_sdl"; + io.KeyMap[ImGuiKey_Tab] = SDLK_TAB; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. io.KeyMap[ImGuiKey_LeftArrow] = SDL_SCANCODE_LEFT; io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; @@ -153,9 +172,12 @@ bool Renderer::init() io.KeyMap[ImGuiKey_Y] = SDLK_y; io.KeyMap[ImGuiKey_Z] = SDLK_z; - io.RenderDrawListsFn = ImGui_ImplSdl_RenderDrawLists; // Alternatively you can set this to NULL and call ImGui::GetDrawData() after ImGui::Render() to get the same ImDrawData pointer. - io.SetClipboardTextFn = ImGui_ImplSdl_SetClipboardText; - io.GetClipboardTextFn = ImGui_ImplSdl_GetClipboardText; + io.RenderDrawListsFn = ImGui_ImplSdl_RenderDrawLists; + // Alternatively you can set this to NULL and call ImGui::GetDrawData() after ImGui::Render() to get the same ImDrawData pointer. + + io.SetClipboardTextFn = ImGui_ImplSDL2_SetClipboardText; + io.GetClipboardTextFn = ImGui_ImplSDL2_GetClipboardText; + io.ClipboardUserData = NULL; #ifdef _WIN32 SDL_SysWMinfo wmInfo; @@ -164,6 +186,9 @@ bool Renderer::init() io.ImeWindowHandle = wmInfo.info.win.window; #endif + // https://github.com/ocornut/imgui/blob/master/examples/example_sdl_opengl2/main.cpp#L50 + io.BackendRendererName = "imgui_impl_opengl2"; + m_Time= 0.0f; m_MouseWheel= 0.0f; m_FontTexture= 0; @@ -201,7 +226,12 @@ void Renderer::destroy() m_FontTexture = 0; } - ImGui::Shutdown(); + // Destroy last known clipboard data + if (g_ClipboardTextData) + SDL_free(g_ClipboardTextData); + g_ClipboardTextData = NULL; + + ImGui::DestroyContext(); if (m_glContext != NULL) { @@ -226,6 +256,7 @@ void Renderer::destroy() bool Renderer::onSDLEvent(const SDL_Event *event) { + // https://github.com/ocornut/imgui/blob/master/examples/imgui_impl_sdl.cpp#L82 ImGuiIO& io = ImGui::GetIO(); switch (event->type) @@ -327,7 +358,7 @@ void Renderer::renderUIBegin() // Setup time step Uint32 time = SDL_GetTicks(); double current_time = time / 1000.0; - io.DeltaTime = m_Time > 0.0 ? (float)(current_time - m_Time) : (float)(1.0f/60.0f); + io.DeltaTime = (current_time - m_Time) > 0.0 ? (float)(current_time - m_Time) : (float)(1.0f/60.0f); m_Time = current_time; // Setup inputs @@ -1293,12 +1324,15 @@ void drawVirtualHMDModel(const glm::mat4 &transform, const glm::vec3 &color) } // -- IMGUI Callbacks ----- -static const char* ImGui_ImplSdl_GetClipboardText() +static const char* ImGui_ImplSDL2_GetClipboardText(void*) { - return SDL_GetClipboardText(); + if (g_ClipboardTextData) + SDL_free(g_ClipboardTextData); + g_ClipboardTextData = SDL_GetClipboardText(); + return g_ClipboardTextData; } -static void ImGui_ImplSdl_SetClipboardText(const char* text) +static void ImGui_ImplSDL2_SetClipboardText(void*, const char* text) { SDL_SetClipboardText(text); } diff --git a/src/psmovemath/CMakeLists.txt b/src/psmovemath/CMakeLists.txt index 43879b4b..9579ca6f 100644 --- a/src/psmovemath/CMakeLists.txt +++ b/src/psmovemath/CMakeLists.txt @@ -1,24 +1,18 @@ cmake_minimum_required(VERSION 3.0) -set(ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) -set(PSMOVE_MATH_INCL_DIRS) +find_package(glm CONFIG REQUIRED) -list(APPEND PSMOVE_MATH_INCL_DIRS - ${EIGEN3_INCLUDE_DIR} - ${ROOT_DIR}/thirdparty/glm/) - -# Source files that are needed for the static library +# Source files that are needed for the object library file(GLOB PSMOVE_MATH_LIBRARY_SRC "${CMAKE_CURRENT_LIST_DIR}/*.cpp" "${CMAKE_CURRENT_LIST_DIR}/*.h" ) -# Static library -add_library(PSMoveMath STATIC ${PSMOVE_MATH_LIBRARY_SRC}) - -target_include_directories(PSMoveMath PUBLIC ${PSMOVE_MATH_INCL_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) -set_target_properties(PSMoveMath PROPERTIES - COMPILE_FLAGS "-DBUILDING_STATIC_LIBRARY -fPIC") +# Object library +add_library(PSMoveMath OBJECT ${PSMOVE_MATH_LIBRARY_SRC}) +set_property(TARGET PSMoveMath PROPERTY POSITION_INDEPENDENT_CODE ON) +# target_include_directories(PSMoveMath PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) +target_link_libraries(PSMoveMath PRIVATE Eigen3::Eigen glm) #MacOS OpenCV must be self-built, this links against older std, which is hidden #Therefore the PSMoveConfigTool must be hidden diff --git a/src/psmoveprotocol/CMakeLists.txt b/src/psmoveprotocol/CMakeLists.txt index 3cb35952..fea24e60 100644 --- a/src/psmoveprotocol/CMakeLists.txt +++ b/src/psmoveprotocol/CMakeLists.txt @@ -1,14 +1,5 @@ +cmake_minimum_required(VERSION 3.12) set(PSMOVEPROTOCOL_LIBRARY_SRC) # Container for source files -set(PSMOVEPROTOCOL_INCLUDE_DIRS) # Container for include directories -set(PSMOVEPROTOCOL_REQUIRED_LIBS) # Container for library dependencies - -# Dependencies - -# Protobuf -list(APPEND PSMOVEPROTOCOL_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS}) -list(APPEND PSMOVEPROTOCOL_REQUIRED_LIBS ${PROTOBUF_LIBRARIES}) -protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${CMAKE_CURRENT_LIST_DIR}/PSMoveProtocol.proto) -#See http://stackoverflow.com/questions/20824194/cmake-with-google-protocol-buffers # Source files and headers file(GLOB PSMOVEPROTOCOL_LIBRARY_SRC @@ -16,15 +7,22 @@ file(GLOB PSMOVEPROTOCOL_LIBRARY_SRC "${CMAKE_CURRENT_LIST_DIR}/*.h" ) -list(APPEND PSMOVEPROTOCOL_LIBRARY_SRC ${PROTO_SRCS} ${PROTO_HDRS}) +# PSMoveProtocol library +add_library(PSMoveProtocol OBJECT ${PSMOVEPROTOCOL_LIBRARY_SRC}) +set_property(TARGET PSMoveProtocol PROPERTY POSITION_INDEPENDENT_CODE ON) +target_include_directories(PSMoveProtocol PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + target_link_libraries(PSMoveProtocol PUBLIC protobuf::libprotoc protobuf::libprotobuf) +ELSE() + target_link_libraries(PSMoveProtocol PUBLIC ${Protobuf_LIBRARIES}) + target_include_directories(PSMoveProtocol PUBLIC ${Protobuf_INCLUDE_DIRS}) +ENDIF() +protobuf_generate( + TARGET PSMoveProtocol + PROTOS ${CMAKE_CURRENT_LIST_DIR}/PSMoveProtocol.proto +) + -# Static library -add_library(PSMoveProtocol STATIC ${PSMOVEPROTOCOL_LIBRARY_SRC}) -target_include_directories(PSMoveProtocol PUBLIC ${PSMOVEPROTOCOL_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) -target_link_libraries(PSMoveProtocol PRIVATE ${PSMOVEPROTOCOL_REQUIRED_LIBS}) -set_target_properties(PSMoveProtocol PROPERTIES - COMPILE_FLAGS "-DBUILDING_STATIC_LIBRARY -fPIC") - # Install IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") install(FILES ProtocolVersion.h SharedConstants.h @@ -36,4 +34,4 @@ IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") ELSE() #Linux/Darwin install(FILES ProtocolVersion.h SharedConstants.h DESTINATION include) -ENDIF() \ No newline at end of file +ENDIF() diff --git a/src/psmoveservice/CMakeLists.txt b/src/psmoveservice/CMakeLists.txt index b51e42bc..82110ffe 100644 --- a/src/psmoveservice/CMakeLists.txt +++ b/src/psmoveservice/CMakeLists.txt @@ -1,290 +1,283 @@ -cmake_minimum_required(VERSION 3.0) - -# Dependencies -set(PSMOVE_SERVICE_INCL_DIRS) -set(PSMOVE_SERVICE_REQ_LIBS) - -list(APPEND PSMOVE_SERVICE_REQ_LIBS ${PLATFORM_LIBS}) - -# Source files for PSMoveService -file(GLOB PSMOVESERVICE_CONFIG_SRC - "${CMAKE_CURRENT_LIST_DIR}/PSMoveConfig/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveConfig/*.h" -) -source_group("Config" FILES ${PSMOVESERVICE_CONFIG_SRC}) - -file(GLOB PSMOVESERVICE_CONTROLLER_SRC - "${CMAKE_CURRENT_LIST_DIR}/PSDualShock4/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/PSDualShock4/*.h" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveController/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveController/*.h" - "${CMAKE_CURRENT_LIST_DIR}/PSNaviController/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/PSNaviController/*.h" - "${CMAKE_CURRENT_LIST_DIR}/VirtualController/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/VirtualController/*.h" -) -source_group("Controller" FILES ${PSMOVESERVICE_CONTROLLER_SRC}) - -file(GLOB PSMOVESERVICE_DEVICE_ENUM_SRC - "${CMAKE_CURRENT_LIST_DIR}/Device/Enumerator/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Device/Enumerator/*.h" -) -source_group("Device\\Enumerator" FILES ${PSMOVESERVICE_DEVICE_ENUM_SRC}) - -file(GLOB PSMOVESERVICE_DEVICE_INT_SRC - "${CMAKE_CURRENT_LIST_DIR}/Device/Interface/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Device/Interface/*.h" -) -source_group("Device\\Interface" FILES ${PSMOVESERVICE_DEVICE_INT_SRC}) - -file(GLOB PSMOVESERVICE_DEVICE_MGR_SRC - "${CMAKE_CURRENT_LIST_DIR}/Device/Manager/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Device/Manager/*.h" -) -source_group("Device\\Manager" FILES ${PSMOVESERVICE_DEVICE_MGR_SRC}) - -file(GLOB PSMOVESERVICE_DEVICE_USB_SRC - "${CMAKE_CURRENT_LIST_DIR}/Device/USB/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Device/USB/*.h" -) -source_group("Device\\USB" FILES ${PSMOVESERVICE_DEVICE_USB_SRC}) - -file(GLOB PSMOVESERVICE_DEVICE_VIEW_SRC - "${CMAKE_CURRENT_LIST_DIR}/Device/View/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Device/View/*.h" -) -source_group("Device\\View" FILES ${PSMOVESERVICE_DEVICE_VIEW_SRC}) - -file(GLOB PSMOVESERVICE_HMD_SRC - "${CMAKE_CURRENT_LIST_DIR}/MorpheusHMD/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/MorpheusHMD/*.h" - "${CMAKE_CURRENT_LIST_DIR}/VirtualHMD/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/VirtualHMD/*.h" -) -source_group("HMD" FILES ${PSMOVESERVICE_HMD_SRC}) - -file(GLOB PSMOVESERVICE_FILTER_SRC - "${CMAKE_CURRENT_LIST_DIR}/Filter/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Filter/*.h" -) -source_group("Filter" FILES ${PSMOVESERVICE_FILTER_SRC}) - -list(APPEND PSMOVESERVICE_PLATFORM_SRC - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueries.h - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequests.h - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequests.cpp) -IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - list(APPEND PSMOVESERVICE_PLATFORM_SRC - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequestsWin32.cpp - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueriesWin32.cpp - ${CMAKE_CURRENT_LIST_DIR}/Platform/PlatformDeviceAPIWin32.h - ${CMAKE_CURRENT_LIST_DIR}/Platform/PlatformDeviceAPIWin32.cpp) -ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - list(APPEND PSMOVESERVICE_PLATFORM_SRC - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequestsOSX.mm - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueriesOSX.mm) -ELSE() - list(APPEND PSMOVESERVICE_PLATFORM_SRC - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequestsLinux.cpp - ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueriesLinux.cpp) -ENDIF() -source_group("Platform" FILES ${PSMOVESERVICE_PLATFORM_SRC}) - -file(GLOB PSMOVESERVICE_SERVER_SRC - "${CMAKE_CURRENT_LIST_DIR}/Server/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Server/*.h" -) -source_group("Server" FILES ${PSMOVESERVICE_SERVER_SRC}) - -file(GLOB PSMOVESERVICE_TRACKER_SRC - "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/*.h" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/PSEye/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/PSEye/*.h" -) -source_group("Tracker" FILES ${PSMOVESERVICE_TRACKER_SRC}) - -file(GLOB PSMOVESERVICE_UTILS_SRC - "${CMAKE_CURRENT_LIST_DIR}/Utils/*.cpp" - "${CMAKE_CURRENT_LIST_DIR}/Utils/*.h" -) -source_group("Utils" FILES ${PSMOVESERVICE_UTILS_SRC}) - -set(PSMOVESERVICE_SRC - ${PSMOVESERVICE_CONFIG_SRC} - ${PSMOVESERVICE_CONTROLLER_SRC} - ${PSMOVESERVICE_DEVICE_ENUM_SRC} - ${PSMOVESERVICE_DEVICE_INT_SRC} - ${PSMOVESERVICE_DEVICE_MGR_SRC} - ${PSMOVESERVICE_DEVICE_USB_SRC} - ${PSMOVESERVICE_DEVICE_VIEW_SRC} - ${PSMOVESERVICE_HMD_SRC} - ${PSMOVESERVICE_FILTER_SRC} - ${PSMOVESERVICE_PLATFORM_SRC} - ${PSMOVESERVICE_SERVER_SRC} - ${PSMOVESERVICE_TRACKER_SRC} - ${PSMOVESERVICE_UTILS_SRC} -) - -list(APPEND PSMOVE_SERVICE_INCL_DIRS - ${CMAKE_CURRENT_LIST_DIR}/Device/Enumerator - ${CMAKE_CURRENT_LIST_DIR}/Device/Interface - ${CMAKE_CURRENT_LIST_DIR}/Device/Manager - ${CMAKE_CURRENT_LIST_DIR}/Device/USB - ${CMAKE_CURRENT_LIST_DIR}/Device/View - ${CMAKE_CURRENT_LIST_DIR}/Filter - ${CMAKE_CURRENT_LIST_DIR}/MorpheusHMD - ${CMAKE_CURRENT_LIST_DIR}/VirtualHMD - ${CMAKE_CURRENT_LIST_DIR}/Platform - ${CMAKE_CURRENT_LIST_DIR}/PSMoveConfig - ${CMAKE_CURRENT_LIST_DIR}/PSDualShock4 - ${CMAKE_CURRENT_LIST_DIR}/PSMoveController - ${CMAKE_CURRENT_LIST_DIR}/PSNaviController - ${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker - ${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/PSEye - ${CMAKE_CURRENT_LIST_DIR}/Server - ${CMAKE_CURRENT_LIST_DIR}/Utils - ${CMAKE_CURRENT_LIST_DIR}/VirtualController -) - -# Lockfree Queue -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/thirdparty/lockfreequeue) - -# Eigen math library -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${EIGEN3_INCLUDE_DIR}) - -# mherb/Kalman library -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/thirdparty/kalman/include) - -# Boost.Application and type_index are header only (?) -list(APPEND PSMOVE_SERVICE_INCL_DIRS - ${ROOT_DIR}/thirdparty/Boost.Application/include/ - ${ROOT_DIR}/thirdparty/Boost.Application/example/ - ${ROOT_DIR}/thirdparty/type_index/include/) - -# Protobuf (already found in top-level CMakeLists) -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${PROTOBUF_INCLUDE_DIRS}) -list(APPEND PSMOVE_SERVICE_REQ_LIBS ${PROTOBUF_LIBRARIES}) - -# Boost. TODO: Trim this list. -find_package(Boost REQUIRED QUIET COMPONENTS atomic chrono filesystem program_options system thread) -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${Boost_INCLUDE_DIRS}) -list(APPEND PSMOVE_SERVICE_REQ_LIBS ${Boost_LIBRARIES}) - -# hidapi -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${HIDAPI_INCLUDE_DIRS}) -list(APPEND PSMOVESERVICE_SRC ${HIDAPI_SRC}) -list(APPEND PSMOVE_SERVICE_REQ_LIBS ${HIDAPI_LIBS}) - -# LibUSB for device management -find_package(USB1 REQUIRED) -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${LIBUSB_INCLUDE_DIR}) -list(APPEND PSMOVE_SERVICE_REQ_LIBS ${LIBUSB_LIBRARIES}) - -# libstem_gamepad -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${LIBSTEM_GAMEPAD_INCLUDE_DIRS}) -list(APPEND PSMOVESERVICE_SRC ${LIBSTEM_GAMEPAD_SRC}) - -# PSMoveDataFrame -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/src/psmoveprotocol/) -list(APPEND PSMOVE_SERVICE_REQ_LIBS PSMoveProtocol) - -# PSMoveMath -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/src/psmovemath/) -list(APPEND PSMOVE_SERVICE_REQ_LIBS PSMoveMath) - -# Tracker -# Requires OpenCV, PS3EYEDriver (Mac/Win64), CLEye (Win32) - -# OpenCV - empty on Windows -IF(MSVC) # not necessary for OpenCV > 2.8 on other build systems - list(APPEND PSMOVE_SERVICE_INCL_DIRS ${OpenCV_INCLUDE_DIRS}) -ENDIF() -list(APPEND PSMOVE_SERVICE_REQ_LIBS ${OpenCV_LIBS}) - -# PS Eye - This brings in LIBUSB on Windows and Mac, but not Linux -list(APPEND PSMOVESERVICE_SRC ${PSEYE_SRC}) -list(APPEND PSMOVE_SERVICE_INCL_DIRS ${PSEYE_INCLUDE_DIRS}) -list(APPEND PSMOVE_SERVICE_REQ_LIBS ${PSEYE_LIBRARIES}) - -add_executable(PSMoveService ${PSMOVESERVICE_SRC}) -target_include_directories(PSMoveService PUBLIC ${PSMOVE_SERVICE_INCL_DIRS}) -target_link_libraries(PSMoveService ${PSMOVE_SERVICE_REQ_LIBS}) - -IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - add_dependencies(PSMoveService opencv) -ENDIF() - -# Install -IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - install(TARGETS PSMoveService - CONFIGURATIONS Debug - RUNTIME DESTINATION ${PSM_DEBUG_INSTALL_PATH}/bin - LIBRARY DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib - ARCHIVE DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib) - install(TARGETS PSMoveService - CONFIGURATIONS Release - RUNTIME DESTINATION ${PSM_RELEASE_INSTALL_PATH}/bin - LIBRARY DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib - ARCHIVE DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib) - IF(${ISWIN32}) - install(DIRECTORY "${ROOT_DIR}/thirdparty/CLEYE/x86/bin/" - CONFIGURATIONS Debug - DESTINATION ${PSM_DEBUG_INSTALL_PATH}/bin - FILES_MATCHING PATTERN "*.dll") - install(DIRECTORY "${ROOT_DIR}/thirdparty/CLEYE/x86/bin/" - CONFIGURATIONS Release - DESTINATION ${PSM_RELEASE_INSTALL_PATH}/bin - FILES_MATCHING PATTERN "*.dll") - ENDIF()#ISWIN32 -ELSE() #Linux/Darwin -ENDIF() - -# On Windows builds we want to create an additional admin version of PSMS. -# This is used for when we want to pair new controllers. -# Part of the pairing process in Windows requires manually poking entries in the -# "SYSTEM\CurrentControlSet\Services\HidBth\Parameters\Devices" registry key folder, -# which only an admin account can do. -# Since you can't change the permissions of an exe after it's started -# and since relaunching a process as admin is un-reliable, having a second -# admin version of the PSMS exe is the simplest option -# https://stackoverflow.com/questions/19617955/c-run-program-as-administrator -# https://blogs.msdn.microsoft.com/winsdk/2013/03/22/how-to-launch-a-process-as-a-full-administrator-when-uac-is-enabled/ -IF(MSVC) - # Create the new PSMS admin exe (same code as PSMS) - add_executable(PSMoveServiceAdmin ${PSMOVESERVICE_SRC}) - target_include_directories(PSMoveServiceAdmin PUBLIC ${PSMOVE_SERVICE_INCL_DIRS}) - target_link_libraries(PSMoveServiceAdmin ${PSMOVE_SERVICE_REQ_LIBS}) - - add_dependencies(PSMoveServiceAdmin opencv) - - # set the UAC level in the property sheet - set_target_properties(PSMoveServiceAdmin PROPERTIES LINK_FLAGS "/level='requireAdministrator' /uiAccess='false'") - - install(TARGETS PSMoveServiceAdmin - CONFIGURATIONS Debug - RUNTIME DESTINATION ${PSM_DEBUG_INSTALL_PATH}/bin - LIBRARY DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib - ARCHIVE DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib) - install(TARGETS PSMoveServiceAdmin - CONFIGURATIONS Release - RUNTIME DESTINATION ${PSM_RELEASE_INSTALL_PATH}/bin - LIBRARY DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib - ARCHIVE DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib) -ENDIF() - -IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - IF(NOT(${CMAKE_C_SIZEOF_DATA_PTR} EQUAL 8)) - IF(${CL_EYE_SDK_PATH} STREQUAL "CL_EYE_SDK_PATH-NOTFOUND") - #If the developer does not have CLEyeMulticam.dll on their system, - #copy it to the correct directory to prevent crashes. - #Windows service binaries should be distributed with this DLL. - #It will be up to CLEYE SDK users to delete this version of the DLL - #to use their system version. - add_custom_command(TARGET PSMoveService POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${ROOT_DIR}/thirdparty/CLEYE/x86/bin/CLEyeMulticam.dll" - $) - ENDIF() - ENDIF() -ENDIF()#ISWIN32 and CL_EYE_SDK_PATH-NOTFOUND +cmake_minimum_required(VERSION 3.0) + +# Dependencies +set(PSMOVE_SERVICE_INCL_DIRS) +set(PSMOVE_SERVICE_REQ_LIBS) + +list(APPEND PSMOVE_SERVICE_REQ_LIBS ${PLATFORM_LIBS}) + +# Source files for PSMoveService +file(GLOB PSMOVESERVICE_CONFIG_SRC + "${CMAKE_CURRENT_LIST_DIR}/PSMoveConfig/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/PSMoveConfig/*.h" +) +source_group("Config" FILES ${PSMOVESERVICE_CONFIG_SRC}) + +file(GLOB PSMOVESERVICE_CONTROLLER_SRC + "${CMAKE_CURRENT_LIST_DIR}/PSDualShock4/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/PSDualShock4/*.h" + "${CMAKE_CURRENT_LIST_DIR}/PSMoveController/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/PSMoveController/*.h" + "${CMAKE_CURRENT_LIST_DIR}/PSNaviController/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/PSNaviController/*.h" + "${CMAKE_CURRENT_LIST_DIR}/VirtualController/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/VirtualController/*.h" +) +source_group("Controller" FILES ${PSMOVESERVICE_CONTROLLER_SRC}) + +file(GLOB PSMOVESERVICE_DEVICE_ENUM_SRC + "${CMAKE_CURRENT_LIST_DIR}/Device/Enumerator/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Device/Enumerator/*.h" +) +source_group("Device\\Enumerator" FILES ${PSMOVESERVICE_DEVICE_ENUM_SRC}) + +file(GLOB PSMOVESERVICE_DEVICE_INT_SRC + "${CMAKE_CURRENT_LIST_DIR}/Device/Interface/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Device/Interface/*.h" +) +source_group("Device\\Interface" FILES ${PSMOVESERVICE_DEVICE_INT_SRC}) + +file(GLOB PSMOVESERVICE_DEVICE_MGR_SRC + "${CMAKE_CURRENT_LIST_DIR}/Device/Manager/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Device/Manager/*.h" +) +source_group("Device\\Manager" FILES ${PSMOVESERVICE_DEVICE_MGR_SRC}) + +file(GLOB PSMOVESERVICE_DEVICE_USB_SRC + "${CMAKE_CURRENT_LIST_DIR}/Device/USB/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Device/USB/*.h" +) +source_group("Device\\USB" FILES ${PSMOVESERVICE_DEVICE_USB_SRC}) + +file(GLOB PSMOVESERVICE_DEVICE_VIEW_SRC + "${CMAKE_CURRENT_LIST_DIR}/Device/View/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Device/View/*.h" +) +source_group("Device\\View" FILES ${PSMOVESERVICE_DEVICE_VIEW_SRC}) + +file(GLOB PSMOVESERVICE_HMD_SRC + "${CMAKE_CURRENT_LIST_DIR}/MorpheusHMD/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/MorpheusHMD/*.h" + "${CMAKE_CURRENT_LIST_DIR}/VirtualHMD/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/VirtualHMD/*.h" +) +source_group("HMD" FILES ${PSMOVESERVICE_HMD_SRC}) + +file(GLOB PSMOVESERVICE_FILTER_SRC + "${CMAKE_CURRENT_LIST_DIR}/Filter/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Filter/*.h" +) +source_group("Filter" FILES ${PSMOVESERVICE_FILTER_SRC}) + +list(APPEND PSMOVESERVICE_PLATFORM_SRC + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueries.h + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequests.h + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequests.cpp) +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + list(APPEND PSMOVESERVICE_PLATFORM_SRC + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequestsWin32.cpp + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueriesWin32.cpp + ${CMAKE_CURRENT_LIST_DIR}/Platform/PlatformDeviceAPIWin32.h + ${CMAKE_CURRENT_LIST_DIR}/Platform/PlatformDeviceAPIWin32.cpp) +ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + list(APPEND PSMOVESERVICE_PLATFORM_SRC + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequestsOSX.mm + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueriesOSX.mm) +ELSE() + list(APPEND PSMOVESERVICE_PLATFORM_SRC + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothRequestsLinux.cpp + ${CMAKE_CURRENT_LIST_DIR}/Platform/BluetoothQueriesLinux.cpp + ${CMAKE_CURRENT_LIST_DIR}/Platform/PlatformDeviceAPILinux.h + ${CMAKE_CURRENT_LIST_DIR}/Platform/PlatformDeviceAPILinux.cpp) +ENDIF() +source_group("Platform" FILES ${PSMOVESERVICE_PLATFORM_SRC}) + +file(GLOB PSMOVESERVICE_SERVER_SRC + "${CMAKE_CURRENT_LIST_DIR}/Server/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Server/*.h" +) +source_group("Server" FILES ${PSMOVESERVICE_SERVER_SRC}) + +file(GLOB PSMOVESERVICE_TRACKER_SRC + "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/*.h" + "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/PSEye/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/PSEye/*.h" +) +source_group("Tracker" FILES ${PSMOVESERVICE_TRACKER_SRC}) + +file(GLOB PSMOVESERVICE_UTILS_SRC + "${CMAKE_CURRENT_LIST_DIR}/Utils/*.cpp" + "${CMAKE_CURRENT_LIST_DIR}/Utils/*.h" +) +source_group("Utils" FILES ${PSMOVESERVICE_UTILS_SRC}) + +set(PSMOVESERVICE_SRC + ${PSMOVESERVICE_CONFIG_SRC} + ${PSMOVESERVICE_CONTROLLER_SRC} + ${PSMOVESERVICE_DEVICE_ENUM_SRC} + ${PSMOVESERVICE_DEVICE_INT_SRC} + ${PSMOVESERVICE_DEVICE_MGR_SRC} + ${PSMOVESERVICE_DEVICE_USB_SRC} + ${PSMOVESERVICE_DEVICE_VIEW_SRC} + ${PSMOVESERVICE_HMD_SRC} + ${PSMOVESERVICE_FILTER_SRC} + ${PSMOVESERVICE_PLATFORM_SRC} + ${PSMOVESERVICE_SERVER_SRC} + ${PSMOVESERVICE_TRACKER_SRC} + ${PSMOVESERVICE_UTILS_SRC} +) + +list(APPEND PSMOVE_SERVICE_INCL_DIRS + ${CMAKE_CURRENT_LIST_DIR}/Device/Enumerator + ${CMAKE_CURRENT_LIST_DIR}/Device/Interface + ${CMAKE_CURRENT_LIST_DIR}/Device/Manager + ${CMAKE_CURRENT_LIST_DIR}/Device/USB + ${CMAKE_CURRENT_LIST_DIR}/Device/View + ${CMAKE_CURRENT_LIST_DIR}/Filter + ${CMAKE_CURRENT_LIST_DIR}/MorpheusHMD + ${CMAKE_CURRENT_LIST_DIR}/VirtualHMD + ${CMAKE_CURRENT_LIST_DIR}/Platform + ${CMAKE_CURRENT_LIST_DIR}/PSMoveConfig + ${CMAKE_CURRENT_LIST_DIR}/PSDualShock4 + ${CMAKE_CURRENT_LIST_DIR}/PSMoveController + ${CMAKE_CURRENT_LIST_DIR}/PSNaviController + ${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker + ${CMAKE_CURRENT_LIST_DIR}/PSMoveTracker/PSEye + ${CMAKE_CURRENT_LIST_DIR}/Server + ${CMAKE_CURRENT_LIST_DIR}/Utils + ${CMAKE_CURRENT_LIST_DIR}/VirtualController +) + +# Lockfree Queue +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/thirdparty/lockfreequeue) + +# Eigen math library +list(APPEND PSMOVE_SERVICE_REQ_LIBS Eigen3::Eigen) + +# mherb/Kalman library +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/thirdparty/kalman/include) + +# Boost.Application and type_index are header only (?) +list(APPEND PSMOVE_SERVICE_INCL_DIRS + ${ROOT_DIR}/thirdparty/Boost.Application/include/ + ${ROOT_DIR}/thirdparty/Boost.Application/example/) + +# Protobuf (already found in top-level CMakeLists) +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${Protobuf_INCLUDE_DIRS}) +list(APPEND PSMOVE_SERVICE_REQ_LIBS ${Protobuf_LIBRARIES}) + +# Boost. TODO: Trim this list. +find_package(Boost REQUIRED QUIET COMPONENTS atomic chrono filesystem program_options system thread) +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${Boost_INCLUDE_DIRS}) +list(APPEND PSMOVE_SERVICE_REQ_LIBS ${Boost_LIBRARIES}) + +# hidapi +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${HIDAPI_INCLUDE_DIRS}) +list(APPEND PSMOVESERVICE_SRC ${HIDAPI_SRC}) +list(APPEND PSMOVE_SERVICE_REQ_LIBS ${HIDAPI_LIBRARIES}) + +# LibUSB for device management +find_package(USB1 REQUIRED) +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${LIBUSB_INCLUDE_DIR}) +list(APPEND PSMOVE_SERVICE_REQ_LIBS ${LIBUSB_LIBRARIES}) + +# libstem_gamepad +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${LIBSTEM_GAMEPAD_INCLUDE_DIRS}) +list(APPEND PSMOVESERVICE_SRC ${LIBSTEM_GAMEPAD_SRC}) + +# PSMoveProtocol OBJECT lib +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/src/psmoveprotocol/) +list(APPEND PSMOVE_SERVICE_REQ_LIBS PSMoveProtocol) + +# PSMoveMath OBJECT lib +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${ROOT_DIR}/src/psmovemath/) +list(APPEND PSMOVE_SERVICE_REQ_LIBS PSMoveMath) + +# Tracker +# Requires OpenCV, PS3EYEDriver (Mac/Win64), CLEye (Win32) + +# OpenCV +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${OpenCV_INCLUDE_DIRS}) +list(APPEND PSMOVE_SERVICE_REQ_LIBS ${OpenCV_LIBS}) + +# PS Eye - This brings in LIBUSB on Windows and Mac, but not Linux +list(APPEND PSMOVESERVICE_SRC ${PSEYE_SRC}) +list(APPEND PSMOVE_SERVICE_INCL_DIRS ${PSEYE_INCLUDE_DIRS}) +list(APPEND PSMOVE_SERVICE_REQ_LIBS ${PSEYE_LIBRARIES}) + +add_executable(PSMoveService ${PSMOVESERVICE_SRC}) +target_include_directories(PSMoveService PRIVATE ${PSMOVE_SERVICE_INCL_DIRS}) +target_link_libraries(PSMoveService PRIVATE ${PSMOVE_SERVICE_REQ_LIBS}) + +# Install +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + install(TARGETS PSMoveService + CONFIGURATIONS Debug + RUNTIME DESTINATION ${PSM_DEBUG_INSTALL_PATH}/bin + LIBRARY DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib + ARCHIVE DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib) + install(TARGETS PSMoveService + CONFIGURATIONS Release + RUNTIME DESTINATION ${PSM_RELEASE_INSTALL_PATH}/bin + LIBRARY DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib + ARCHIVE DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib) + IF(${ISWIN32}) + install(DIRECTORY "${ROOT_DIR}/thirdparty/CLEYE/x86/bin/" + CONFIGURATIONS Debug + DESTINATION ${PSM_DEBUG_INSTALL_PATH}/bin + FILES_MATCHING PATTERN "*.dll") + install(DIRECTORY "${ROOT_DIR}/thirdparty/CLEYE/x86/bin/" + CONFIGURATIONS Release + DESTINATION ${PSM_RELEASE_INSTALL_PATH}/bin + FILES_MATCHING PATTERN "*.dll") + ENDIF()#ISWIN32 +ELSE() #Linux/Darwin +ENDIF() + +# On Windows builds we want to create an additional admin version of PSMS. +# This is used for when we want to pair new controllers. +# Part of the pairing process in Windows requires manually poking entries in the +# "SYSTEM\CurrentControlSet\Services\HidBth\Parameters\Devices" registry key folder, +# which only an admin account can do. +# Since you can't change the permissions of an exe after it's started +# and since relaunching a process as admin is un-reliable, having a second +# admin version of the PSMS exe is the simplest option +# https://stackoverflow.com/questions/19617955/c-run-program-as-administrator +# https://blogs.msdn.microsoft.com/winsdk/2013/03/22/how-to-launch-a-process-as-a-full-administrator-when-uac-is-enabled/ +IF(MSVC) + # Create the new PSMS admin exe (same code as PSMS) + add_executable(PSMoveServiceAdmin ${PSMOVESERVICE_SRC}) + target_include_directories(PSMoveServiceAdmin PRIVATE ${PSMOVE_SERVICE_INCL_DIRS}) + target_link_libraries(PSMoveServiceAdmin ${PSMOVE_SERVICE_REQ_LIBS}) + + # set the UAC level in the property sheet + set_target_properties(PSMoveServiceAdmin PROPERTIES LINK_FLAGS "/level='requireAdministrator' /uiAccess='false'") + + install(TARGETS PSMoveServiceAdmin + CONFIGURATIONS Debug + RUNTIME DESTINATION ${PSM_DEBUG_INSTALL_PATH}/bin + LIBRARY DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib + ARCHIVE DESTINATION ${PSM_DEBUG_INSTALL_PATH}/lib) + install(TARGETS PSMoveServiceAdmin + CONFIGURATIONS Release + RUNTIME DESTINATION ${PSM_RELEASE_INSTALL_PATH}/bin + LIBRARY DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib + ARCHIVE DESTINATION ${PSM_RELEASE_INSTALL_PATH}/lib) +ENDIF() + +IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + IF(NOT(${CMAKE_C_SIZEOF_DATA_PTR} EQUAL 8)) + IF(${CL_EYE_SDK_PATH} STREQUAL "CL_EYE_SDK_PATH-NOTFOUND") + #If the developer does not have CLEyeMulticam.dll on their system, + #copy it to the correct directory to prevent crashes. + #Windows service binaries should be distributed with this DLL. + #It will be up to CLEYE SDK users to delete this version of the DLL + #to use their system version. + add_custom_command(TARGET PSMoveService POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${ROOT_DIR}/thirdparty/CLEYE/x86/bin/CLEyeMulticam.dll" + $) + ENDIF() + ENDIF() +ENDIF()#ISWIN32 and CL_EYE_SDK_PATH-NOTFOUND diff --git a/src/psmoveservice/Device/View/ServerTrackerView.cpp b/src/psmoveservice/Device/View/ServerTrackerView.cpp index 86ac842e..b054702f 100644 --- a/src/psmoveservice/Device/View/ServerTrackerView.cpp +++ b/src/psmoveservice/Device/View/ServerTrackerView.cpp @@ -542,8 +542,8 @@ class OpenCVBufferState t_opencv_int_contour_list contours; cv::findContours(gsLowerROI, contours, - CV_RETR_EXTERNAL, - CV_CHAIN_APPROX_SIMPLE, //CV_CHAIN_APPROX_NONE? + cv::RETR_EXTERNAL, + cv::CHAIN_APPROX_SIMPLE, //CV_CHAIN_APPROX_NONE? ofs); // Compute the area of each contour diff --git a/src/psmoveservice/PSMoveTracker/PS3EyeTracker.cpp b/src/psmoveservice/PSMoveTracker/PS3EyeTracker.cpp index 33208de8..27a3258f 100644 --- a/src/psmoveservice/PSMoveTracker/PS3EyeTracker.cpp +++ b/src/psmoveservice/PSMoveTracker/PS3EyeTracker.cpp @@ -298,7 +298,7 @@ bool PS3EyeTracker::open() // Opens the first HID device for the tracker bool PS3EyeTracker::matchesDeviceEnumerator(const DeviceEnumerator *enumerator) const { // Down-cast the enumerator so we can use the correct get_path. - const TrackerDeviceEnumerator *pEnum = static_cast(enumerator); + const auto *pEnum = dynamic_cast(enumerator); bool matches = false; @@ -314,7 +314,7 @@ bool PS3EyeTracker::matchesDeviceEnumerator(const DeviceEnumerator *enumerator) bool PS3EyeTracker::open(const DeviceEnumerator *enumerator) { - const TrackerDeviceEnumerator *tracker_enumerator = static_cast(enumerator); + const auto *tracker_enumerator = dynamic_cast(enumerator); const char *cur_dev_path = tracker_enumerator->get_path(); bool bSuccess = false; @@ -446,7 +446,7 @@ CommonDeviceState::eDeviceType PS3EyeTracker::getDeviceType() const const CommonDeviceState *PS3EyeTracker::getState(int lookBack) const { - const int queueSize = static_cast(TrackerStates.size()); + const auto queueSize = static_cast(TrackerStates.size()); const CommonDeviceState * result = (lookBack < queueSize) ? &TrackerStates.at(queueSize - lookBack - 1) : nullptr; @@ -473,31 +473,50 @@ bool PS3EyeTracker::getVideoFrameDimensions( if (out_width != nullptr) { - int width = static_cast(VideoCapture->get(cv::CAP_PROP_FRAME_WIDTH)); + auto width = static_cast(VideoCapture->get(cv::CAP_PROP_FRAME_WIDTH)); if (out_stride != nullptr) { - int format = static_cast(VideoCapture->get(cv::CAP_PROP_FORMAT)); + // We need to determine the number of bytes per pixel. + // which VideoCapture->get() property? + // CAP_PROP_FOURCC: 4-character code of codec. See http://www.fourcc.org/codecs.php + // CAP_PROP_MODE: Backend-specific value indicating the current capture mode. + // CAP_PROP_FORMAT: Get the Format of the Mat objects returned by VideoCapture::retrieve() + // --> CV_MAKETYPE(IPL2CV_DEPTH(frame.depth), frame.nChannels) + + auto format = static_cast(VideoCapture->get(cv::CAP_PROP_FORMAT)); int bytes_per_pixel; if (format != -1) { - switch (format) + // format is from an enum, with entries structured as + // CV_N(S|U)CK where N is the depth, Signed or Unsigned, K is the number of channels per pixel. + // https://stackoverflow.com/questions/14364563/minmaxloc-datatype/14365886#14365886 + int chans_per_pixel = (format >> CV_CN_SHIFT) + 1; + int mat_depth = CV_MAT_DEPTH(format); + int bytes_per_chan; + switch (mat_depth) { - case cv::CAP_MODE_BGR: - case cv::CAP_MODE_RGB: - bytes_per_pixel = 3; + case CV_8U: + case CV_8S: + bytes_per_chan = 1; break; - case cv::CAP_MODE_YUYV: - bytes_per_pixel = 2; + case CV_16U: + case CV_16S: + bytes_per_chan = 2; break; - case cv::CAP_MODE_GRAY: - bytes_per_pixel = 1; + case CV_32S: + case CV_32F: + bytes_per_chan = 3; + break; + case CV_64F: + bytes_per_chan = 4; break; default: assert(false && "Unknown video format?"); break; } + bytes_per_pixel = bytes_per_chan * chans_per_pixel; } else { @@ -514,7 +533,7 @@ bool PS3EyeTracker::getVideoFrameDimensions( if (out_height != nullptr) { - int height = static_cast(VideoCapture->get(cv::CAP_PROP_FRAME_HEIGHT)); + auto height = static_cast(VideoCapture->get(cv::CAP_PROP_FRAME_HEIGHT)); *out_height = height; } @@ -706,7 +725,7 @@ void PS3EyeTracker::gatherTrackerOptions( PSMoveProtocol::Response_ResultTrackerSettings* settings) const { PSMoveProtocol::OptionSet *optionSet = settings->add_option_sets(); - + optionSet->set_option_name(OPTION_FOV_SETTING); optionSet->add_option_strings(OPTION_FOV_RED_DOT); optionSet->add_option_strings(OPTION_FOV_BLUE_DOT); @@ -719,8 +738,8 @@ bool PS3EyeTracker::setOptionIndex( { bool bValidOption = false; - if (option_name == OPTION_FOV_SETTING && - option_index >= 0 && + if (option_name == OPTION_FOV_SETTING && + option_index >= 0 && option_index < PS3EyeTrackerConfig::eFOVSetting::MAX_FOV_SETTINGS) { cfg.fovSetting = static_cast(option_index); @@ -733,7 +752,7 @@ bool PS3EyeTracker::setOptionIndex( } bool PS3EyeTracker::getOptionIndex( - const std::string &option_name, + const std::string &option_name, int &out_option_index) const { bool bValidOption = false; @@ -748,7 +767,7 @@ bool PS3EyeTracker::getOptionIndex( } void PS3EyeTracker::gatherTrackingColorPresets( - const std::string &controller_serial, + const std::string &controller_serial, PSMoveProtocol::Response_ResultTrackerSettings* settings) const { const CommonHSVColorRangeTable *table= cfg.getColorRangeTable(controller_serial); @@ -756,7 +775,7 @@ void PS3EyeTracker::gatherTrackingColorPresets( for (int list_index = 0; list_index < MAX_TRACKING_COLOR_TYPES; ++list_index) { const CommonHSVColorRange &hsvRange = table->color_presets[list_index]; - const eCommonTrackingColorID colorType = static_cast(list_index); + const auto colorType = static_cast(list_index); PSMoveProtocol::TrackingColorPreset *colorPreset= settings->add_color_presets(); colorPreset->set_color_type(static_cast(colorType)); @@ -770,8 +789,8 @@ void PS3EyeTracker::gatherTrackingColorPresets( } void PS3EyeTracker::setTrackingColorPreset( - const std::string &controller_serial, - eCommonTrackingColorID color, + const std::string &controller_serial, + eCommonTrackingColorID color, const CommonHSVColorRange *preset) { // cfg.ColorPresets[color] = *preset; // from generic_camera conflict @@ -782,8 +801,8 @@ void PS3EyeTracker::setTrackingColorPreset( } void PS3EyeTracker::getTrackingColorPreset( - const std::string &controller_serial, - eCommonTrackingColorID color, + const std::string &controller_serial, + eCommonTrackingColorID color, CommonHSVColorRange *out_preset) const { const CommonHSVColorRangeTable *table= cfg.getColorRangeTable(controller_serial); diff --git a/src/psmoveservice/PSMoveTracker/PSEye/PSEyeVideoCapture.cpp b/src/psmoveservice/PSMoveTracker/PSEye/PSEyeVideoCapture.cpp index a51ead29..61bacbb6 100644 --- a/src/psmoveservice/PSMoveTracker/PSEye/PSEyeVideoCapture.cpp +++ b/src/psmoveservice/PSMoveTracker/PSEye/PSEyeVideoCapture.cpp @@ -39,7 +39,7 @@ enum class cv::IVideoCapture { public: - virtual ~IVideoCapture() {} + virtual ~IVideoCapture() = default; virtual double getProperty(int) const { return 0; } virtual bool setProperty(int, double) { return false; } virtual bool grabFrame() = 0; @@ -516,17 +516,13 @@ bool PSEyeVideoCapture::open(int index) } // PS3EYE-specific camera capture if available, else use base class open() - - //###HipsterSloth $TODO - // Disabling the OpenCV camera open fallback. - // We don't officially support anything but the PS3Eye camera at the moment - // and it's currently confusing debugging other peoples camera issues with - // this code path in place (random web cams getting opened) - //if (!isOpened()) - //{ - // std::cout << "Attempting cv::VideoCapture::open(index)" << std::endl; - // return cv::VideoCapture::open(index); - //} +#ifdef ENABLE_WEBCAM + if (!isOpened()) + { + std::cout << "Attempting cv::VideoCapture::open(index)" << std::endl; + return cv::VideoCapture::open(index); + } +#endif return isOpened(); } @@ -612,6 +608,7 @@ double PSEyeVideoCapture::get(int propId) const } } #endif + // propId from cv::VideoCaptureProperties return cv::VideoCapture::get(propId); } diff --git a/src/psmoveservice/Platform/BluetoothQueriesLinux.cpp b/src/psmoveservice/Platform/BluetoothQueriesLinux.cpp index 69e662a5..37c538ce 100644 --- a/src/psmoveservice/Platform/BluetoothQueriesLinux.cpp +++ b/src/psmoveservice/Platform/BluetoothQueriesLinux.cpp @@ -8,11 +8,22 @@ #include #include #include +#include //-- Queries ----- bool bluetooth_get_host_address(std::string &out_address) { bool bSuccess = true; + + bdaddr_t btaddr; + char pszaddr[18]; + + // Assume only one bt adapter. + int dev_id = hci_get_route(NULL); + hci_devba(dev_id, &btaddr); + ba2str(&btaddr, pszaddr); + out_address.assign(pszaddr); + return bSuccess; } \ No newline at end of file diff --git a/src/psmoveservice/Platform/BluetoothRequestsLinux.cpp b/src/psmoveservice/Platform/BluetoothRequestsLinux.cpp index 19d250ce..a6baae87 100644 --- a/src/psmoveservice/Platform/BluetoothRequestsLinux.cpp +++ b/src/psmoveservice/Platform/BluetoothRequestsLinux.cpp @@ -323,6 +323,46 @@ AsyncBluetoothPairDeviceRequest::start() bool success= true; const int controller_id= m_controllerView->getDeviceID(); + // Reset the pairing device state + BluetoothPairDeviceState *state= reinterpret_cast(m_internal_state); + state->initialize(controller_id); + state->bUsesAuthentication= m_controllerView->getUsesBluetoothAuthentication(); + state->controller_serial_string= m_controllerView->getSerial(); + state->controller_device_type= m_controllerView->getControllerDeviceType(); + + // Make sure the controller we're working with is a USB connection + if (success && m_controllerView->getIsOpen() && m_controllerView->getIsBluetooth()) + { + SERVER_LOG_ERROR("AsyncBluetoothPairDeviceRequest") + << "Controller " << controller_id + << " isn't an open USB device"; + success= false; + } + + // Find the bluetooth address of the host adapter + if (success) + { + success= AsyncBluetoothPairDeviceRequest__findBluetoothRadio(state); + } + + // Assign this host address on the controller. + // NOTE: This needs to be done on the main thread since the controller view isn't thread safe. + if (success) + { + success= AsyncBluetoothPairDeviceRequest__registerHostAddress(m_controllerView, state); + } + + // Kick off the worker thread to do the rest of the work + if (success) + { + + } + + if (success) + { + m_status = AsyncBluetoothRequest::running; + } + if (!success) { m_status = AsyncBluetoothRequest::failed; @@ -357,4 +397,40 @@ AsyncBluetoothPairDeviceRequest::getDescription() description << "[Pair] ID: " << m_controllerView->getDeviceID() << " Conn: " << m_connectionId; return description.str(); +} + +//-- AsyncBluetoothPairDeviceRequest State Machine ----- +static bool +AsyncBluetoothPairDeviceRequest__findBluetoothRadio(BluetoothPairDeviceState *state) +{ + assert(state->isMainThread()); + bool bSuccess= true; + + return bSuccess; +} + +static bool +AsyncBluetoothPairDeviceRequest__registerHostAddress( + ServerControllerViewPtr &controllerView, + BluetoothPairDeviceState *state) +{ + assert(state->isMainThread()); + const int controller_id= controllerView->getDeviceID(); + bool bSuccess= true; + + if (controllerView->setHostBluetoothAddress(state->host_address_string)) + { + SERVER_LOG_INFO("AsyncBluetoothPairDeviceRequest") + << "Assigned host address " << state->host_address_string + << " to controller id " << controller_id; + } + else + { + SERVER_LOG_ERROR("AsyncBluetoothPairDeviceRequest") + << "Failed to set host address " << state->host_address_string + << " on controller id " << controller_id; + bSuccess= false; + } + + return bSuccess; } \ No newline at end of file diff --git a/src/psmoveservice/Platform/PlatformDeviceAPILinux.cpp b/src/psmoveservice/Platform/PlatformDeviceAPILinux.cpp new file mode 100644 index 00000000..79e34c43 --- /dev/null +++ b/src/psmoveservice/Platform/PlatformDeviceAPILinux.cpp @@ -0,0 +1,79 @@ +// -- include ----- +#include "PlatformDeviceAPILinux.h" +#include "ServerLog.h" + +#include + +#include +#include +#include +#include + +//-- constants ----- +const char *k_reg_property_driver_desc = "DriverDesc"; +const char *k_reg_property_driver_version = "DriverVersion"; +const char *k_reg_property_matching_device_id = "MatchingDeviceId"; +const char *k_reg_property_provider_name = "ProviderName"; +const char *k_reg_property_vendor = "Vendor"; + + +// -- globals ---- +IDeviceHotplugListener *g_hotplug_broadcaster = nullptr; + +//-- private definitions ----- + + +// -- definitions ----- +PlatformDeviceAPILinux::PlatformDeviceAPILinux() +{ + +} + +PlatformDeviceAPILinux::~PlatformDeviceAPILinux() +{ + +} + +// System +bool PlatformDeviceAPILinux::startup(IDeviceHotplugListener *broadcaster) +{ + bool bSuccess = true; + + return bSuccess; +} + +void PlatformDeviceAPILinux::poll() +{ + +} + +void PlatformDeviceAPILinux::shutdown() +{ + +} + +// Events +void PlatformDeviceAPILinux::handle_bluetooth_request_started() +{ + +} + +void PlatformDeviceAPILinux::handle_bluetooth_request_finished() +{ + +} + +// Queries +bool PlatformDeviceAPILinux::get_device_property( + const DeviceClass deviceClass, + const int vendor_id, + const int product_id, + const char *property_name, + char *buffer, + const int buffer_size) +{ + bool success = false; + + + return success; +} diff --git a/src/psmoveservice/Platform/PlatformDeviceAPILinux.h b/src/psmoveservice/Platform/PlatformDeviceAPILinux.h new file mode 100644 index 00000000..2bb6abbb --- /dev/null +++ b/src/psmoveservice/Platform/PlatformDeviceAPILinux.h @@ -0,0 +1,33 @@ +#ifndef PLATFORM_DEVICE_API_LINUX_H +#define PLATFORM_DEVICE_API_LINUX_H + +// -- include ----- +#include "DevicePlatformInterface.h" + +// -- definitions ----- +class PlatformDeviceAPILinux : public IPlatformDeviceAPI +{ +public: + PlatformDeviceAPILinux(); + virtual ~PlatformDeviceAPILinux(); + + // System + bool startup(IDeviceHotplugListener *broadcaster) override; + void poll() override; + void shutdown() override; + + // Events + void handle_bluetooth_request_started() override; + void handle_bluetooth_request_finished() override; + + // Queries + bool get_device_property( + const DeviceClass deviceClass, + const int vendor_id, + const int product_id, + const char *property_name, + char *buffer, + const int buffer_size) override; +}; + +#endif // PLATFORM_DEVICE_API_LINUX_H diff --git a/src/psmoveservice/Server/PSMoveService.cpp b/src/psmoveservice/Server/PSMoveService.cpp index 8dc0da0c..c47b4827 100644 --- a/src/psmoveservice/Server/PSMoveService.cpp +++ b/src/psmoveservice/Server/PSMoveService.cpp @@ -37,8 +37,8 @@ class PSMoveServiceImpl { public: PSMoveServiceImpl() - : m_io_service() - , m_signals(m_io_service) + : m_io_context() + , m_signals(m_io_context) , m_usb_device_manager() , m_device_manager() , m_request_handler(&m_device_manager) @@ -179,7 +179,7 @@ class PSMoveServiceImpl */ if (success) { - if (!m_network_manager.startup(&m_io_service, &m_request_handler)) + if (!m_network_manager.startup(&m_io_context, &m_request_handler)) { SERVER_LOG_FATAL("PSMoveService") << "Failed to initialize the service network manager"; success= false; @@ -243,8 +243,8 @@ class PSMoveServiceImpl } private: - // The io_service used to perform asynchronous operations. - boost::asio::io_service m_io_service; + // The io_context used to perform asynchronous operations. + boost::asio::io_context m_io_context; // The signal_set is used to register for process termination notifications. boost::asio::signal_set m_signals; diff --git a/src/psmoveservice/Server/ServerNetworkManager.cpp b/src/psmoveservice/Server/ServerNetworkManager.cpp index 950bdf7e..8e019a9e 100644 --- a/src/psmoveservice/Server/ServerNetworkManager.cpp +++ b/src/psmoveservice/Server/ServerNetworkManager.cpp @@ -98,14 +98,14 @@ class ClientConnection : public boost::enable_shared_from_this static ClientConnectionPtr create( IServerNetworkEventListener* network_event_listener, - asio::io_service& io_service_ref, + asio::io_context& io_context_ref, udp::socket& udp_socket_ref, ServerRequestHandler &request_handler_ref) { return ClientConnectionPtr( new ClientConnection( network_event_listener, - io_service_ref, + io_context_ref, udp_socket_ref, request_handler_ref)); } @@ -232,7 +232,7 @@ class ClientConnection : public boost::enable_shared_from_this write_in_progress= true; // Start an asynchronous operation to send a heartbeat message. - // NOTE: Even if the write completes immediate, the callback will only be called from io_service::poll() + // NOTE: Even if the write completes immediate, the callback will only be called from io_context::poll() boost::asio::async_write( m_tcp_socket, boost::asio::buffer(m_response_write_buffer), @@ -280,7 +280,7 @@ class ClientConnection : public boost::enable_shared_from_this write_in_progress= true; // Start an asynchronous operation to send the data frame - // NOTE: Even if the write completes immediate, the callback will only be called from io_service::poll() + // NOTE: Even if the write completes immediate, the callback will only be called from io_context::poll() m_udp_socket_ref.async_send_to( boost::asio::buffer(m_output_dataframe_buffer, sizeof(m_output_dataframe_buffer)), m_udp_remote_endpoint, @@ -334,13 +334,13 @@ class ClientConnection : public boost::enable_shared_from_this ClientConnection( IServerNetworkEventListener *network_event_listener, - asio::io_service& io_service_ref, + asio::io_context& io_context_ref, udp::socket& udp_socket_ref , ServerRequestHandler &request_handler_ref) : m_network_event_listener(network_event_listener) , m_connection_id(next_connection_id) , m_request_handler_ref(request_handler_ref) - , m_tcp_socket(io_service_ref) + , m_tcp_socket(io_context_ref) , m_udp_socket_ref(udp_socket_ref) , m_udp_remote_endpoint() , m_is_udp_remote_endpoint_bound(false) @@ -548,11 +548,11 @@ int ClientConnection::next_connection_id = 0; class ServerNetworkManagerImpl : public IServerNetworkEventListener { public: - ServerNetworkManagerImpl(asio::io_service &io_service, NetworkManagerConfig &cfg, ServerRequestHandler &requestHandler) + ServerNetworkManagerImpl(asio::io_context &io_context, NetworkManagerConfig &cfg, ServerRequestHandler &requestHandler) : m_request_handler_ref(requestHandler) - , m_io_service(io_service) - , m_tcp_acceptor(m_io_service, tcp::endpoint(tcp::v4(), cfg.server_port)) - , m_udp_socket(m_io_service, udp::endpoint(udp::v4(), cfg.server_port)) + , m_io_context(io_context) + , m_tcp_acceptor(m_io_context, tcp::endpoint(tcp::v4(), cfg.server_port)) + , m_udp_socket(m_io_context, udp::endpoint(udp::v4(), cfg.server_port)) , m_udp_connecting_remote_endpoint() , m_packed_input_dataframe(std::shared_ptr(new PSMoveProtocol::DeviceInputDataFrame())) , m_udp_connection_result_write_buffer(false) @@ -583,7 +583,7 @@ class ServerNetworkManagerImpl : public IServerNetworkEventListener ClientConnectionPtr new_connection = ClientConnection::create( this, - m_tcp_acceptor.get_io_service(), + m_tcp_acceptor.get_io_context(), m_udp_socket, m_request_handler_ref); @@ -617,7 +617,7 @@ class ServerNetworkManagerImpl : public IServerNetworkEventListener // * TCP request has finished reading // * TCP response has finished writing // * UDP data frame has finished writing - m_io_service.poll(); + m_io_context.poll(); // In the event that a UDP data frame write completed immediately, // we should start another UDP data frame write. @@ -751,7 +751,7 @@ class ServerNetworkManagerImpl : public IServerNetworkEventListener ServerRequestHandler &m_request_handler_ref; // Core i/o functionality for TCP/UDP sockets - asio::io_service &m_io_service; + asio::io_context &m_io_context; // Handles waiting for and accepting new TCP connections tcp::acceptor m_tcp_acceptor; @@ -990,12 +990,12 @@ ServerNetworkManager::~ServerNetworkManager() } bool ServerNetworkManager::startup( - boost::asio::io_service *io_service, + boost::asio::io_context *io_context, ServerRequestHandler *requestHandler) { m_instance= this; - implementation_ptr= new ServerNetworkManagerImpl(*io_service, m_cfg, *requestHandler); + implementation_ptr= new ServerNetworkManagerImpl(*io_context, m_cfg, *requestHandler); implementation_ptr->start_connection_accept(); return true; diff --git a/src/psmoveservice/Server/ServerNetworkManager.h b/src/psmoveservice/Server/ServerNetworkManager.h index 3cbe7eb1..8534406c 100644 --- a/src/psmoveservice/Server/ServerNetworkManager.h +++ b/src/psmoveservice/Server/ServerNetworkManager.h @@ -6,14 +6,14 @@ #include "PSMoveConfig.h" //-- pre-declarations ----- -class ServerRequestHandler; - namespace boost { - namespace asio { - class io_service; - } + namespace asio { + class io_context; + } } +class ServerRequestHandler; + //-- definitions ----- class NetworkManagerConfig : public PSMoveConfig { @@ -37,7 +37,7 @@ class ServerNetworkManager public: /// Used in PSMoveService::m_network_manager /** - \param io_service Uses default initializer of boost::asio::io_service + \param io_context Uses default initializer of boost::asio::io_context \param request_handler Default ServerRequestHandler(ControllerManager) */ ServerNetworkManager(); @@ -49,7 +49,7 @@ class ServerNetworkManager /** Calls ServerNetworkManagerImpl::start_connection_accept() */ - bool startup(boost::asio::io_service *io_service, ServerRequestHandler *request_handler); + bool startup(boost::asio::io_context *io_context, ServerRequestHandler *request_handler); /// Called last by PSMoveService::update() /** diff --git a/src/psmoveservice/Server/ServerRequestHandler.cpp b/src/psmoveservice/Server/ServerRequestHandler.cpp index 0e309200..66bc6644 100644 --- a/src/psmoveservice/Server/ServerRequestHandler.cpp +++ b/src/psmoveservice/Server/ServerRequestHandler.cpp @@ -50,11 +50,11 @@ struct RequestConnectionState HMDStreamInfo active_hmd_stream_info[HMDManager::k_max_devices]; RequestConnectionState() - : connection_id(-1) - , active_controller_streams() - , active_tracker_streams() - , active_hmd_streams() - , pending_bluetooth_request(nullptr) + : connection_id(-1) + , active_controller_streams() + , active_tracker_streams() + , active_hmd_streams() + , pending_bluetooth_request(nullptr) { for (int index = 0; index < ControllerManager::k_max_devices; ++index) { @@ -65,7 +65,7 @@ struct RequestConnectionState { active_tracker_stream_info[index].Clear(); } - + for (int index = 0; index < HMDManager::k_max_devices; ++index) { active_hmd_stream_info[index].Clear(); @@ -89,8 +89,8 @@ class ServerRequestHandlerImpl { public: ServerRequestHandlerImpl(DeviceManager &deviceManager) - : m_device_manager(deviceManager) - , m_connection_state_map() + : m_device_manager(deviceManager) + , m_connection_state_map() { } @@ -132,31 +132,32 @@ class ServerRequestHandlerImpl connection_state->pending_bluetooth_request->update(); - switch(connection_state->pending_bluetooth_request->getStatusCode()) + AsyncBluetoothRequest::eStatusCode status = connection_state->pending_bluetooth_request->getStatusCode(); + switch(status) { - case AsyncBluetoothRequest::running: + case AsyncBluetoothRequest::running: { // Don't delete. Still have work to do delete_request= false; } break; - case AsyncBluetoothRequest::succeeded: + case AsyncBluetoothRequest::succeeded: { - SERVER_LOG_INFO("ServerRequestHandler") - << "Async bluetooth request(" - << connection_state->pending_bluetooth_request->getDescription() - << ") completed."; + SERVER_LOG_INFO("ServerRequestHandler") + << "Async bluetooth request(" + << connection_state->pending_bluetooth_request->getDescription() + << ") completed."; delete_request= true; } break; - case AsyncBluetoothRequest::failed: + case AsyncBluetoothRequest::failed: { - SERVER_LOG_ERROR("ServerRequestHandler") - << "Async bluetooth request(" - << connection_state->pending_bluetooth_request->getDescription() - << ") failed!"; + SERVER_LOG_ERROR("ServerRequestHandler") + << "Async bluetooth request(" + << connection_state->pending_bluetooth_request->getDescription() + << ") failed!"; delete_request= true; } break; - default: - assert(0 && "unreachable"); + default: + assert(0 && "unreachable"); } if (delete_request) @@ -258,7 +259,7 @@ class ServerRequestHandlerImpl handle_request__set_controller_hand(context, response); break; - // Tracker Requests + // Tracker Requests case PSMoveProtocol::Request_RequestType_GET_TRACKER_LIST: response = new PSMoveProtocol::Response; handle_request__get_tracker_list(context, response); @@ -332,7 +333,7 @@ class ServerRequestHandlerImpl handle_request__get_tracking_space_settings(context, response); break; - // HMD Requests + // HMD Requests case PSMoveProtocol::Request_RequestType_GET_HMD_LIST: response = new PSMoveProtocol::Response; handle_request__get_hmd_list(context, response); @@ -374,7 +375,7 @@ class ServerRequestHandlerImpl handle_request__set_hmd_data_stream_tracker_index(context, response); break; - // General Service Requests + // General Service Requests case PSMoveProtocol::Request_RequestType_GET_SERVICE_VERSION: response = new PSMoveProtocol::Response; handle_request__get_service_version(context, response); @@ -399,7 +400,7 @@ class ServerRequestHandlerImpl switch (data_frame->device_category()) { - case PSMoveProtocol::DeviceInputDataFrame::DeviceCategory::DeviceInputDataFrame_DeviceCategory_CONTROLLER: + case PSMoveProtocol::DeviceInputDataFrame::DeviceCategory::DeviceInputDataFrame_DeviceCategory_CONTROLLER: { handle_data_frame__controller_packet(connection_state, data_frame); } break; @@ -458,7 +459,7 @@ class ServerRequestHandlerImpl } } - + for (int tracker_id = 0; tracker_id < TrackerManager::k_max_devices; ++tracker_id) { // Restore any overridden camera settings from the config @@ -499,8 +500,8 @@ class ServerRequestHandlerImpl } void publish_controller_data_frame( - ServerControllerView *controller_view, - ServerRequestHandler::t_generate_controller_data_frame_for_stream callback) + ServerControllerView *controller_view, + ServerRequestHandler::t_generate_controller_data_frame_for_stream callback) { int controller_id= controller_view->getDeviceID(); @@ -513,7 +514,7 @@ class ServerRequestHandlerImpl if (connection_state->active_controller_streams.test(controller_id)) { const ControllerStreamInfo &streamInfo= - connection_state->active_controller_stream_info[controller_id]; + connection_state->active_controller_stream_info[controller_id]; // Fill out a data frame specific to this stream using the given callback DeviceOutputDataFramePtr data_frame(new PSMoveProtocol::DeviceOutputDataFrame); @@ -526,7 +527,7 @@ class ServerRequestHandlerImpl } void publish_tracker_data_frame( - class ServerTrackerView *tracker_view, + class ServerTrackerView *tracker_view, ServerRequestHandler::t_generate_tracker_data_frame_for_stream callback) { int tracker_id = tracker_view->getDeviceID(); @@ -540,7 +541,7 @@ class ServerRequestHandlerImpl if (connection_state->active_tracker_streams.test(tracker_id)) { const TrackerStreamInfo &streamInfo = - connection_state->active_tracker_stream_info[tracker_id]; + connection_state->active_tracker_stream_info[tracker_id]; // Fill out a data frame specific to this stream using the given callback DeviceOutputDataFramePtr data_frame(new PSMoveProtocol::DeviceOutputDataFrame); @@ -553,8 +554,8 @@ class ServerRequestHandlerImpl } void publish_hmd_data_frame( - class ServerHMDView *hmd_view, - ServerRequestHandler::t_generate_hmd_data_frame_for_stream callback) + class ServerHMDView *hmd_view, + ServerRequestHandler::t_generate_hmd_data_frame_for_stream callback) { int hmd_id = hmd_view->getDeviceID(); @@ -567,7 +568,7 @@ class ServerRequestHandlerImpl if (connection_state->active_hmd_streams.test(hmd_id)) { const HMDStreamInfo &streamInfo = - connection_state->active_hmd_stream_info[hmd_id]; + connection_state->active_hmd_stream_info[hmd_id]; // Fill out a data frame specific to this stream using the given callback DeviceOutputDataFramePtr data_frame(new PSMoveProtocol::DeviceOutputDataFrame); @@ -577,7 +578,7 @@ class ServerRequestHandlerImpl ServerNetworkManager::get_instance()->send_device_data_frame(connection_id, data_frame); } } - } + } protected: RequestConnectionStatePtr FindOrCreateConnectionState(int connection_id) @@ -608,7 +609,7 @@ class ServerRequestHandlerImpl if (ServerUtility::is_index_valid(controller_id, m_device_manager.getControllerViewMaxCount())) { ServerControllerViewPtr controller_view_ptr= m_device_manager.getControllerViewPtr(controller_id); - + if (controller_view_ptr->getIsOpen()) { controller_view= controller_view_ptr.get(); @@ -619,11 +620,11 @@ class ServerRequestHandlerImpl } void handle_request__get_controller_list( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const PSMoveProtocol::Request_RequestGetControllerList& request = - context.request->request_get_controller_list(); + context.request->request_get_controller_list(); PSMoveProtocol::Response_ResultControllerList* list= response->mutable_result_controller_list(); response->set_type(PSMoveProtocol::Response_ResponseType_CONTROLLER_LIST); @@ -651,7 +652,7 @@ class ServerRequestHandlerImpl std::string orientation_filter = ""; std::string position_filter = ""; std::string gyro_gain_setting = ""; - std::string controller_hand= ""; + std::string controller_hand= ""; float prediction_time = 0.f; @@ -659,7 +660,7 @@ class ServerRequestHandlerImpl switch(controller_view->getControllerDeviceType()) { - case CommonControllerState::PSMove: + case CommonControllerState::PSMove: { const PSMoveController *controller = controller_view->castCheckedConst(); const PSMoveControllerConfig *config = controller->getConfig(); @@ -669,22 +670,22 @@ class ServerRequestHandlerImpl firmware_version = config->firmware_version; firmware_revision = config->firmware_revision; prediction_time = config->prediction_time; - controller_hand= config->hand; + controller_hand= config->hand; has_magnetometer = controller->getSupportsMagnetometer(); controller_info->set_controller_type(PSMoveProtocol::PSMOVE); } - break; - case CommonControllerState::PSNavi: + break; + case CommonControllerState::PSNavi: { const PSNaviController *controller = controller_view->castCheckedConst(); const PSNaviControllerConfig &config = controller->getConfig(); controller_info->set_controller_type(PSMoveProtocol::PSNAVI); - parent_controller_serial = config.attached_to_controller; + parent_controller_serial = config.attached_to_controller; } - break; - case CommonControllerState::PSDualShock4: + break; + case CommonControllerState::PSDualShock4: { const PSDualShock4Controller *controller = controller_view->castCheckedConst(); const PSDualShock4ControllerConfig *config = controller->getConfig(); @@ -723,12 +724,12 @@ class ServerRequestHandlerImpl orientation_filter = config->orientation_filter_type; position_filter = config->position_filter_type; prediction_time = config->prediction_time; - controller_hand= config->hand; + controller_hand= config->hand; - controller_info->set_controller_type(PSMoveProtocol::PSDUALSHOCK4); + controller_info->set_controller_type(PSMoveProtocol::PSDUALSHOCK4); } - break; - case CommonControllerState::VirtualController: + break; + case CommonControllerState::VirtualController: { const VirtualController *controller = controller_view->castCheckedConst(); const VirtualControllerConfig *config = controller->getConfig(); @@ -738,20 +739,20 @@ class ServerRequestHandlerImpl controller_info->set_controller_type(PSMoveProtocol::VIRTUALCONTROLLER); gamepad_index= config->gamepad_index; - controller_hand= config->hand; + controller_hand= config->hand; } - break; - default: - assert(0 && "Unhandled controller type"); + break; + default: + assert(0 && "Unhandled controller type"); } controller_info->set_controller_id(controller_id); controller_info->set_connection_type( - bIsNonUSB - ? PSMoveProtocol::Response_ResultControllerList_ControllerInfo_ConnectionType_BLUETOOTH - : PSMoveProtocol::Response_ResultControllerList_ControllerInfo_ConnectionType_USB); + bIsNonUSB + ? PSMoveProtocol::Response_ResultControllerList_ControllerInfo_ConnectionType_BLUETOOTH + : PSMoveProtocol::Response_ResultControllerList_ControllerInfo_ConnectionType_USB); controller_info->set_tracking_color_type( - static_cast(controller_view->getTrackingColorID())); + static_cast(controller_view->getTrackingColorID())); controller_info->set_device_path(controller_view->getUSBDevicePath()); controller_info->set_device_serial(controller_view->getSerial()); controller_info->set_assigned_host_serial(controller_view->getAssignedHostBluetoothAddress()); @@ -765,12 +766,12 @@ class ServerRequestHandlerImpl controller_info->set_prediction_time(prediction_time); controller_info->set_gamepad_index(gamepad_index); - if (controller_hand == "Left") - controller_info->set_controller_hand(PSMoveProtocol::HAND_LEFT); - else if (controller_hand == "Right") - controller_info->set_controller_hand(PSMoveProtocol::HAND_RIGHT); - else - controller_info->set_controller_hand(PSMoveProtocol::HAND_ANY); + if (controller_hand == "Left") + controller_info->set_controller_hand(PSMoveProtocol::HAND_LEFT); + else if (controller_hand == "Right") + controller_info->set_controller_hand(PSMoveProtocol::HAND_RIGHT); + else + controller_info->set_controller_hand(PSMoveProtocol::HAND_ANY); } } @@ -778,11 +779,11 @@ class ServerRequestHandlerImpl } void handle_request__start_controller_data_stream( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const PSMoveProtocol::Request_RequestStartPSMoveDataStream& request= - context.request->request_start_psmove_data_stream(); + context.request->request_start_psmove_data_stream(); int controller_id= request.controller_id(); response->set_type(PSMoveProtocol::Response_ResponseType_CONTROLLER_STREAM_STARTED); @@ -795,7 +796,7 @@ class ServerRequestHandlerImpl if (controller_view->getIsStreamable()) { ControllerStreamInfo &streamInfo = - context.connection_state->active_controller_stream_info[controller_id]; + context.connection_state->active_controller_stream_info[controller_id]; // The controller manager will always publish updates regardless of who is listening. // All we have to do is keep track of which connections care about the updates. @@ -811,24 +812,24 @@ class ServerRequestHandlerImpl streamInfo.disable_roi = request.disable_roi(); SERVER_LOG_INFO("ServerRequestHandler") << "Start controller(" << controller_id << ") stream (" - << "pos=" << streamInfo.include_position_data - << ",phys=" << streamInfo.include_physics_data - << ",raw_sens=" << streamInfo.include_raw_sensor_data - << ",cal_sens=" << streamInfo.include_calibrated_sensor_data - << ",trkr=" << streamInfo.include_raw_tracker_data - << ",roi=" << streamInfo.disable_roi - << ")"; + << "pos=" << streamInfo.include_position_data + << ",phys=" << streamInfo.include_physics_data + << ",raw_sens=" << streamInfo.include_raw_sensor_data + << ",cal_sens=" << streamInfo.include_calibrated_sensor_data + << ",trkr=" << streamInfo.include_raw_tracker_data + << ",roi=" << streamInfo.disable_roi + << ")"; if (streamInfo.include_position_data) { controller_view->startTracking(); } - + // Attach the initial state of the controller { auto *stream_started_response= response->mutable_result_controller_stream_started(); PSMoveProtocol::DeviceOutputDataFrame* data_frame= stream_started_response->mutable_initial_data_frame(); - + ServerControllerView::generate_controller_data_frame_for_stream(controller_view.get(), &streamInfo, data_frame); } @@ -854,8 +855,8 @@ class ServerRequestHandlerImpl } void handle_request__stop_controller_data_stream( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { int controller_id= context.request->request_stop_psmove_data_stream().controller_id(); @@ -863,7 +864,7 @@ class ServerRequestHandlerImpl { ServerControllerViewPtr controller_view = m_device_manager.getControllerViewPtr(controller_id); ControllerStreamInfo &streamInfo = - context.connection_state->active_controller_stream_info[controller_id]; + context.connection_state->active_controller_stream_info[controller_id]; if (controller_view->getIsStreamable()) { @@ -901,8 +902,8 @@ class ServerRequestHandlerImpl } void handle_request__reset_orientation( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id= context.request->reset_orientation().controller_id(); ServerControllerViewPtr controllerView = m_device_manager.getControllerViewPtr(controller_id); @@ -917,13 +918,13 @@ class ServerRequestHandlerImpl { if (controllerView->recenterOrientation(q_pose)) { - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); - } - else - { - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); + } + else + { + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); + } } - } else { response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); @@ -931,11 +932,11 @@ class ServerRequestHandlerImpl } void handle_request__unpair_controller( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int connection_id= context.connection_state->connection_id; - const int controller_id= context.request->unpair_controller().controller_id(); + const int controller_id= context.request->unpair_controller().controller_id(); if (context.connection_state->pending_bluetooth_request == nullptr) { @@ -943,50 +944,50 @@ class ServerRequestHandlerImpl if (controllerView->getIsOpen()) { - context.connection_state->pending_bluetooth_request = - new AsyncBluetoothUnpairDeviceRequest(connection_id, controllerView); + context.connection_state->pending_bluetooth_request = + new AsyncBluetoothUnpairDeviceRequest(connection_id, controllerView); - std::string description = context.connection_state->pending_bluetooth_request->getDescription(); + std::string description = context.connection_state->pending_bluetooth_request->getDescription(); - if (context.connection_state->pending_bluetooth_request->start()) - { - SERVER_LOG_INFO("ServerRequestHandler") << "Async bluetooth request(" << description << ") started."; + if (context.connection_state->pending_bluetooth_request->start()) + { + SERVER_LOG_INFO("ServerRequestHandler") << "Async bluetooth request(" << description << ") started."; - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); - } - else - { - SERVER_LOG_ERROR("ServerRequestHandler") << "Async bluetooth request(" << description << ") failed to start!"; + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); + } + else + { + SERVER_LOG_ERROR("ServerRequestHandler") << "Async bluetooth request(" << description << ") failed to start!"; - delete context.connection_state->pending_bluetooth_request; - context.connection_state->pending_bluetooth_request = nullptr; + delete context.connection_state->pending_bluetooth_request; + context.connection_state->pending_bluetooth_request = nullptr; - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); + } } - } - else - { - SERVER_LOG_ERROR("ServerRequestHandler") - << "Can't start unpair request. Controller not open. Controller ID: " - << controller_id; + else + { + SERVER_LOG_ERROR("ServerRequestHandler") + << "Can't start unpair request. Controller not open. Controller ID: " + << controller_id; } } else { - SERVER_LOG_ERROR("ServerRequestHandler") - << "Can't start unpair request due to existing request: " - << context.connection_state->pending_bluetooth_request->getDescription(); + SERVER_LOG_ERROR("ServerRequestHandler") + << "Can't start unpair request due to existing request: " + << context.connection_state->pending_bluetooth_request->getDescription(); response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); } } void handle_request__pair_controller( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int connection_id= context.connection_state->connection_id; - const int controller_id= context.request->pair_controller().controller_id(); + const int controller_id= context.request->pair_controller().controller_id(); if (context.connection_state->pending_bluetooth_request == nullptr) { @@ -994,64 +995,64 @@ class ServerRequestHandlerImpl if (controllerView->getIsOpen()) { - context.connection_state->pending_bluetooth_request = - new AsyncBluetoothPairDeviceRequest(connection_id, controllerView); + context.connection_state->pending_bluetooth_request = + new AsyncBluetoothPairDeviceRequest(connection_id, controllerView); - if (context.connection_state->pending_bluetooth_request->start()) - { - SERVER_LOG_INFO("ServerRequestHandler") - << "Async bluetooth request(" - << context.connection_state->pending_bluetooth_request->getDescription() - << ") started."; + if (context.connection_state->pending_bluetooth_request->start()) + { + SERVER_LOG_INFO("ServerRequestHandler") + << "Async bluetooth request(" + << context.connection_state->pending_bluetooth_request->getDescription() + << ") started."; - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); - } - else - { - SERVER_LOG_ERROR("ServerRequestHandler") - << "Async bluetooth request(" - << context.connection_state->pending_bluetooth_request->getDescription() - << ") failed to start!"; + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); + } + else + { + SERVER_LOG_ERROR("ServerRequestHandler") + << "Async bluetooth request(" + << context.connection_state->pending_bluetooth_request->getDescription() + << ") failed to start!"; - delete context.connection_state->pending_bluetooth_request; - context.connection_state->pending_bluetooth_request= nullptr; + delete context.connection_state->pending_bluetooth_request; + context.connection_state->pending_bluetooth_request= nullptr; - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); + } } - } - else - { - SERVER_LOG_ERROR("ServerRequestHandler") - << "Can't start pair request. Controller not open. Controller ID: " - << controller_id; + else + { + SERVER_LOG_ERROR("ServerRequestHandler") + << "Can't start pair request. Controller not open. Controller ID: " + << controller_id; } } else { - SERVER_LOG_ERROR("ServerRequestHandler") - << "Can't start pair request due to existing request: " - << context.connection_state->pending_bluetooth_request->getDescription(); + SERVER_LOG_ERROR("ServerRequestHandler") + << "Can't start pair request due to existing request: " + << context.connection_state->pending_bluetooth_request->getDescription(); response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); } } void handle_request__cancel_bluetooth_request( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int connection_id= context.connection_state->connection_id; - const int controller_id= context.request->cancel_bluetooth_request().controller_id(); + const int controller_id= context.request->cancel_bluetooth_request().controller_id(); if (context.connection_state->pending_bluetooth_request != nullptr) { - SERVER_LOG_INFO("ServerRequestHandler") - << "Async bluetooth request(" - << context.connection_state->pending_bluetooth_request->getDescription() - << ") Canceled."; + SERVER_LOG_INFO("ServerRequestHandler") + << "Async bluetooth request(" + << context.connection_state->pending_bluetooth_request->getDescription() + << ") Canceled."; context.connection_state->pending_bluetooth_request->cancel(AsyncBluetoothRequest::userRequested); - + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); } else @@ -1063,17 +1064,17 @@ class ServerRequestHandlerImpl } void handle_request__set_led_tracking_color( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int connection_id = context.connection_state->connection_id; const int controller_id = context.request->set_led_tracking_color_request().controller_id(); const eCommonTrackingColorID newColorID= - static_cast(context.request->set_led_tracking_color_request().color_type()); + static_cast(context.request->set_led_tracking_color_request().color_type()); ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); - if (ControllerView && + if (ControllerView && ControllerView->getIsStreamable() && (ControllerView->getControllerDeviceType() == CommonDeviceState::PSMove || ControllerView->getControllerDeviceType() == CommonDeviceState::PSDualShock4 || @@ -1096,7 +1097,7 @@ class ServerRequestHandlerImpl ControllerView->setTrackingColorID(newColorID); response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); } - else + else { if (oldColorID != eCommonTrackingColorID::INVALID_COLOR) { @@ -1118,8 +1119,8 @@ class ServerRequestHandlerImpl } inline void set_config_vector( - const PSMoveProtocol::FloatVector &source_vector, - CommonDeviceVector &target_vector) + const PSMoveProtocol::FloatVector &source_vector, + CommonDeviceVector &target_vector) { target_vector.i = source_vector.i(); target_vector.j = source_vector.j(); @@ -1127,8 +1128,8 @@ class ServerRequestHandlerImpl } void handle_request__set_controller_magnetometer_calibration( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id= context.request->set_controller_magnetometer_calibration_request().controller_id(); @@ -1173,8 +1174,8 @@ class ServerRequestHandlerImpl } void handle_request__set_controller_accelerometer_calibration( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->set_controller_accelerometer_calibration_request().controller_id(); @@ -1192,8 +1193,8 @@ class ServerRequestHandlerImpl // Save the noise radius in controller config config.accelerometer_noise_radius= request.noise_radius(); config.accelerometer_variance = request.variance(); - - controller->setConfig(&config); + + controller->setConfig(&config); ControllerView->resetPoseFilter(); @@ -1209,8 +1210,8 @@ class ServerRequestHandlerImpl // Save the noise radius in controller config config.accelerometer_noise_radius= request.noise_radius(); config.accelerometer_variance = request.variance(); - - controller->setConfig(&config); + + controller->setConfig(&config); ControllerView->resetPoseFilter(); @@ -1228,8 +1229,8 @@ class ServerRequestHandlerImpl } void handle_request__set_controller_gyroscope_calibration( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->set_controller_gyroscope_calibration_request().controller_id(); @@ -1292,7 +1293,7 @@ class ServerRequestHandlerImpl if (bChanged) { - controller->setConfig(&config); + controller->setConfig(&config); } ControllerView->resetPoseFilter(); @@ -1305,14 +1306,14 @@ class ServerRequestHandlerImpl PSMoveControllerConfig config = *controller->getConfig(); const PSMoveProtocol::Request_RequestSetControllerGyroscopeCalibration &request = - context.request->set_controller_gyroscope_calibration_request(); + context.request->set_controller_gyroscope_calibration_request(); bool bChanged = false; - if (config.set_raw_gyro_bias(request.raw_bias().i(), request.raw_bias().j(), request.raw_bias().k())) - { - bChanged = true; - } + if (config.set_raw_gyro_bias(request.raw_bias().i(), request.raw_bias().j(), request.raw_bias().k())) + { + bChanged = true; + } if (request.drift() > 0.f) { @@ -1328,7 +1329,7 @@ class ServerRequestHandlerImpl if (bChanged) { - controller->setConfig(&config); + controller->setConfig(&config); } ControllerView->resetPoseFilter(); @@ -1347,14 +1348,14 @@ class ServerRequestHandlerImpl } void handle_request__set_optical_noise_calibration( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->request_set_optical_noise_calibration().controller_id(); ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); const PSMoveProtocol::Request_RequestSetOpticalNoiseCalibration &request = - context.request->request_set_optical_noise_calibration(); + context.request->request_set_optical_noise_calibration(); if (ControllerView && ControllerView->getIsOpen()) { @@ -1368,7 +1369,7 @@ class ServerRequestHandlerImpl config.orientation_variance_exp_fit_a = request.orientation_variance_exp_fit_a(); config.orientation_variance_exp_fit_b = request.orientation_variance_exp_fit_b(); - controller->setConfig(&config); + controller->setConfig(&config); ControllerView->resetPoseFilter(); @@ -1414,14 +1415,14 @@ class ServerRequestHandlerImpl } void handle_request__set_orientation_filter( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->request_set_orientation_filter().controller_id(); ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); const PSMoveProtocol::Request_RequestSetOrientationFilter &request = - context.request->request_set_orientation_filter(); + context.request->request_set_orientation_filter(); if (ControllerView && ControllerView->getIsOpen()) { @@ -1433,8 +1434,8 @@ class ServerRequestHandlerImpl if (config.orientation_filter_type != request.orientation_filter()) { config.orientation_filter_type = request.orientation_filter(); - - controller->setConfig(&config); + + controller->setConfig(&config); ControllerView->resetPoseFilter(); } @@ -1450,7 +1451,7 @@ class ServerRequestHandlerImpl { config.orientation_filter_type = request.orientation_filter(); - controller->setConfig(&config); + controller->setConfig(&config); ControllerView->resetPoseFilter(); } @@ -1469,14 +1470,14 @@ class ServerRequestHandlerImpl } void handle_request__set_position_filter( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->request_set_position_filter().controller_id(); ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); const PSMoveProtocol::Request_RequestSetPositionFilter &request = - context.request->request_set_position_filter(); + context.request->request_set_position_filter(); if (ControllerView && ControllerView->getIsOpen()) { @@ -1489,7 +1490,7 @@ class ServerRequestHandlerImpl { config.position_filter_type = request.position_filter(); - controller->setConfig(&config); + controller->setConfig(&config); ControllerView->resetPoseFilter(); } @@ -1505,7 +1506,7 @@ class ServerRequestHandlerImpl { config.position_filter_type = request.position_filter(); - controller->setConfig(&config); + controller->setConfig(&config); ControllerView->resetPoseFilter(); } @@ -1539,14 +1540,14 @@ class ServerRequestHandlerImpl } void handle_request__set_controller_prediction_time( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->request_set_controller_prediction_time().controller_id(); ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); const PSMoveProtocol::Request_RequestSetControllerPredictionTime &request = - context.request->request_set_controller_prediction_time(); + context.request->request_set_controller_prediction_time(); if (ControllerView && ControllerView->getIsOpen()) { @@ -1559,7 +1560,7 @@ class ServerRequestHandlerImpl { config.prediction_time = request.prediction_time(); - controller->setConfig(&config); + controller->setConfig(&config); } response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); @@ -1573,7 +1574,7 @@ class ServerRequestHandlerImpl { config.prediction_time = request.prediction_time(); - controller->setConfig(&config); + controller->setConfig(&config); } response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); @@ -1603,8 +1604,8 @@ class ServerRequestHandlerImpl } void handle_request__set_attached_controller( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int child_controller_id = context.request->request_set_attached_controller().child_controller_id(); const int parent_controller_id = context.request->request_set_attached_controller().parent_controller_id(); @@ -1616,7 +1617,7 @@ class ServerRequestHandlerImpl ParentControllerView && ParentControllerView->getIsOpen() && ChildControllerView != ParentControllerView) { - if (ParentControllerView->getControllerDeviceType() == CommonDeviceState::PSMove && + if (ParentControllerView->getControllerDeviceType() == CommonDeviceState::PSMove && ChildControllerView->getControllerDeviceType() == CommonDeviceState::PSNavi) { const PSMoveController *psmove = ParentControllerView->castChecked(); @@ -1641,15 +1642,15 @@ class ServerRequestHandlerImpl } void handle_request__set_gamepad_index( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->request_set_gamepad_index().controller_id(); const int gamepad_index = context.request->request_set_gamepad_index().gamepad_index(); ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); - if (ControllerView && + if (ControllerView && ControllerView->getIsOpen() && ControllerView->getControllerDeviceType() == CommonDeviceState::VirtualController) { @@ -1677,8 +1678,8 @@ class ServerRequestHandlerImpl } void handle_request__set_controller_data_stream_tracker_index( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int controller_id = context.request->request_set_controller_data_stream_tracker_index().controller_id(); const int tracker_id = context.request->request_set_controller_data_stream_tracker_index().tracker_id(); @@ -1688,7 +1689,7 @@ class ServerRequestHandlerImpl { ServerControllerViewPtr controller_view = m_device_manager.getControllerViewPtr(controller_id); ControllerStreamInfo &streamInfo = - context.connection_state->active_controller_stream_info[controller_id]; + context.connection_state->active_controller_stream_info[controller_id]; if (controller_view->getIsStreamable()) { @@ -1709,81 +1710,81 @@ class ServerRequestHandlerImpl } } - void handle_request__set_controller_hand( - const RequestContext &context, - PSMoveProtocol::Response *response) - { + void handle_request__set_controller_hand( + const RequestContext &context, + PSMoveProtocol::Response *response) + { const int controller_id = context.request->request_set_controller_hand().controller_id(); std::string hand; - switch (context.request->request_set_controller_hand().controller_hand()) - { - case PSMoveProtocol::HAND_LEFT: - hand= "Left"; - break; - case PSMoveProtocol::HAND_RIGHT: - hand= "Right"; - break; - case PSMoveProtocol::HAND_ANY: - default: - hand= "Any"; - break; - } - - ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); - - if (ControllerView && + switch (context.request->request_set_controller_hand().controller_hand()) + { + case PSMoveProtocol::HAND_LEFT: + hand= "Left"; + break; + case PSMoveProtocol::HAND_RIGHT: + hand= "Right"; + break; + case PSMoveProtocol::HAND_ANY: + default: + hand= "Any"; + break; + } + + ServerControllerViewPtr ControllerView = m_device_manager.getControllerViewPtr(controller_id); + + if (ControllerView && ControllerView->getIsOpen()) { - switch (ControllerView->getControllerDeviceType()) - { - case CommonDeviceState::PSMove: - { - PSMoveController *controller = ControllerView->castChecked(); - PSMoveControllerConfig config = *controller->getConfig(); - - config.hand = hand; - controller->setConfig(&config); - - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); - } - break; - case CommonDeviceState::PSDualShock4: - { - PSDualShock4Controller *controller = ControllerView->castChecked(); - PSDualShock4ControllerConfig config = *controller->getConfig(); - - config.hand = hand; - controller->setConfig(&config); - - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); - } - break; - case CommonDeviceState::VirtualController: - { - VirtualController *controller = ControllerView->castChecked(); - VirtualControllerConfig *config = controller->getConfigMutable(); - - config->hand = hand; - config->save(); - - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); - } - break; - default: - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); - } + switch (ControllerView->getControllerDeviceType()) + { + case CommonDeviceState::PSMove: + { + PSMoveController *controller = ControllerView->castChecked(); + PSMoveControllerConfig config = *controller->getConfig(); + + config.hand = hand; + controller->setConfig(&config); + + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); + } + break; + case CommonDeviceState::PSDualShock4: + { + PSDualShock4Controller *controller = ControllerView->castChecked(); + PSDualShock4ControllerConfig config = *controller->getConfig(); + + config.hand = hand; + controller->setConfig(&config); + + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); + } + break; + case CommonDeviceState::VirtualController: + { + VirtualController *controller = ControllerView->castChecked(); + VirtualControllerConfig *config = controller->getConfigMutable(); + + config->hand = hand; + config->save(); + + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); + } + break; + default: + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); + } } else { response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_ERROR); } - } + } // -- tracker requests ----- inline void common_device_pose_to_protocol_pose( - const CommonDevicePose &pose, - PSMoveProtocol::Pose *result) + const CommonDevicePose &pose, + PSMoveProtocol::Pose *result) { PSMoveProtocol::Orientation *orietation = result->mutable_orientation(); PSMoveProtocol::Position *position = result->mutable_position(); @@ -1799,8 +1800,8 @@ class ServerRequestHandlerImpl } void handle_request__get_tracker_list( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { PSMoveProtocol::Response_ResultTrackerList* list = response->mutable_result_tracker_list(); @@ -1816,30 +1817,30 @@ class ServerRequestHandlerImpl switch (tracker_view->getTrackerDeviceType()) { - case CommonControllerState::PS3EYE: - tracker_info->set_tracker_type(PSMoveProtocol::PS3EYE); - break; - default: - assert(0 && "Unhandled tracker type"); + case CommonControllerState::PS3EYE: + tracker_info->set_tracker_type(PSMoveProtocol::PS3EYE); + break; + default: + assert(0 && "Unhandled tracker type"); } switch (tracker_view->getTrackerDriverType()) { - case ITrackerInterface::Libusb: - tracker_info->set_tracker_driver(PSMoveProtocol::LIBUSB); - break; - case ITrackerInterface::CL: - tracker_info->set_tracker_driver(PSMoveProtocol::CL_EYE); - break; - case ITrackerInterface::CLMulti: - tracker_info->set_tracker_driver(PSMoveProtocol::CL_EYE_MULTICAM); - break; - // PSMoveProtocol::ISIGHT? - case ITrackerInterface::Generic_Webcam: - tracker_info->set_tracker_driver(PSMoveProtocol::GENERIC_WEBCAM); - break; - default: - assert(0 && "Unhandled tracker type"); + case ITrackerInterface::Libusb: + tracker_info->set_tracker_driver(PSMoveProtocol::LIBUSB); + break; + case ITrackerInterface::CL: + tracker_info->set_tracker_driver(PSMoveProtocol::CL_EYE); + break; + case ITrackerInterface::CLMulti: + tracker_info->set_tracker_driver(PSMoveProtocol::CL_EYE_MULTICAM); + break; + // PSMoveProtocol::ISIGHT? + case ITrackerInterface::Generic_Webcam: + tracker_info->set_tracker_driver(PSMoveProtocol::GENERIC_WEBCAM); + break; + default: + assert(0 && "Unhandled tracker type"); } tracker_info->set_tracker_id(tracker_id); @@ -1854,10 +1855,10 @@ class ServerRequestHandlerImpl float distortionP1, distortionP2; tracker_view->getCameraIntrinsics( - focalLengthX, focalLengthY, - principalX, principalY, - distortionK1, distortionK2, distortionK3, - distortionP1, distortionP2); + focalLengthX, focalLengthY, + principalX, principalY, + distortionK1, distortionK2, distortionK3, + distortionP1, distortionP2); tracker_view->getPixelDimensions(pixelWidth, pixelHeight); tracker_info->mutable_tracker_focal_lengths()->set_x(focalLengthX); @@ -1880,7 +1881,7 @@ class ServerRequestHandlerImpl { float hfov, vfov; float zNear, zFar; - + tracker_view->getFOV(hfov, vfov); tracker_view->getZRange(zNear, zFar); @@ -1895,7 +1896,7 @@ class ServerRequestHandlerImpl CommonDevicePose pose= tracker_view->getTrackerPose(); common_device_pose_to_protocol_pose(pose, tracker_info->mutable_tracker_pose()); - } + } } } @@ -1904,11 +1905,11 @@ class ServerRequestHandlerImpl } void handle_request__start_tracker_data_stream( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const PSMoveProtocol::Request_RequestStartTrackerDataStream& request = - context.request->request_start_tracker_data_stream(); + context.request->request_start_tracker_data_stream(); int tracker_id = request.tracker_id(); if (ServerUtility::is_index_valid(tracker_id, m_device_manager.getTrackerViewMaxCount())) @@ -1918,7 +1919,7 @@ class ServerRequestHandlerImpl if (tracker_view->getIsOpen()) { TrackerStreamInfo &streamInfo = - context.connection_state->active_tracker_stream_info[tracker_id]; + context.connection_state->active_tracker_stream_info[tracker_id]; // The tracker manager will always publish updates regardless of who is listening. // All we have to do is keep track of which connections care about the updates. @@ -1946,8 +1947,8 @@ class ServerRequestHandlerImpl } void handle_request__stop_tracker_data_stream( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { int tracker_id = context.request->request_stop_tracker_data_stream().tracker_id(); @@ -1984,7 +1985,7 @@ class ServerRequestHandlerImpl } void handle_request__get_tracker_settings(const RequestContext &context, - PSMoveProtocol::Response *response) + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_get_tracker_settings().tracker_id(); @@ -1996,7 +1997,7 @@ class ServerRequestHandlerImpl if (tracker_view->getIsOpen()) { PSMoveProtocol::Response_ResultTrackerSettings* settings = - response->mutable_result_tracker_settings(); + response->mutable_result_tracker_settings(); const int device_id = context.request->request_get_tracker_settings().device_id(); settings->set_frame_width(static_cast(tracker_view->getFrameWidth())); @@ -2008,13 +2009,13 @@ class ServerRequestHandlerImpl switch (context.request->request_get_tracker_settings().device_category()) { - case PSMoveProtocol::Request_RequestGetTrackerSettings_DeviceCategory_CONTROLLER: + case PSMoveProtocol::Request_RequestGetTrackerSettings_DeviceCategory_CONTROLLER: { ServerControllerView *controller_view = get_controller_view_or_null(device_id); - tracker_view->gatherTrackingColorPresets(controller_view, settings); + tracker_view->gatherTrackingColorPresets(controller_view, settings); } break; - case PSMoveProtocol::Request_RequestGetTrackerSettings_DeviceCategory_HMD: + case PSMoveProtocol::Request_RequestGetTrackerSettings_DeviceCategory_HMD: { ServerHMDView *hmd_view = get_hmd_view_or_null(device_id); @@ -2036,7 +2037,7 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_frame_width(const RequestContext &context, - PSMoveProtocol::Response *response) + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_frame_width().tracker_id(); @@ -2050,7 +2051,7 @@ class ServerRequestHandlerImpl const bool bSaveSetting = context.request->request_set_tracker_frame_width().save_setting(); const float desired_frame_width = context.request->request_set_tracker_frame_width().value(); PSMoveProtocol::Response_ResultSetTrackerFrameWidth* result_frame_width = - response->mutable_result_set_tracker_frame_width(); + response->mutable_result_set_tracker_frame_width(); // Set the desired frame width on the tracker tracker_view->setFrameWidth(desired_frame_width, bSaveSetting); @@ -2082,7 +2083,7 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_frame_height(const RequestContext &context, - PSMoveProtocol::Response *response) + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_frame_height().tracker_id(); @@ -2096,7 +2097,7 @@ class ServerRequestHandlerImpl const bool bSaveSetting = context.request->request_set_tracker_frame_height().save_setting(); const float desired_frame_height = context.request->request_set_tracker_frame_height().value(); PSMoveProtocol::Response_ResultSetTrackerFrameHeight* result_frame_height = - response->mutable_result_set_tracker_frame_height(); + response->mutable_result_set_tracker_frame_height(); // Set the desired frame height on the tracker tracker_view->setFrameHeight(desired_frame_height, bSaveSetting); @@ -2128,7 +2129,7 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_frame_rate(const RequestContext &context, - PSMoveProtocol::Response *response) + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_frame_rate().tracker_id(); @@ -2142,7 +2143,7 @@ class ServerRequestHandlerImpl const bool bSaveSetting = context.request->request_set_tracker_frame_rate().save_setting(); const float desired_frame_rate = context.request->request_set_tracker_frame_rate().value(); PSMoveProtocol::Response_ResultSetTrackerFrameRate* result_frame_rate = - response->mutable_result_set_tracker_frame_rate(); + response->mutable_result_set_tracker_frame_rate(); // Set the desired frame rate on the tracker tracker_view->setFrameRate(desired_frame_rate, bSaveSetting); @@ -2174,7 +2175,7 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_exposure(const RequestContext &context, - PSMoveProtocol::Response *response) + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_exposure().tracker_id(); @@ -2188,7 +2189,7 @@ class ServerRequestHandlerImpl const bool bSaveSetting= context.request->request_set_tracker_exposure().save_setting(); const float desired_exposure = context.request->request_set_tracker_exposure().value(); PSMoveProtocol::Response_ResultSetTrackerExposure* result_exposure = - response->mutable_result_set_tracker_exposure(); + response->mutable_result_set_tracker_exposure(); // Set the desired exposure on the tracker tracker_view->setExposure(desired_exposure, bSaveSetting); @@ -2220,7 +2221,7 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_gain(const RequestContext &context, - PSMoveProtocol::Response *response) + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_gain().tracker_id(); @@ -2234,7 +2235,7 @@ class ServerRequestHandlerImpl const bool bSaveSetting = context.request->request_set_tracker_gain().save_setting(); const double desired_gain = context.request->request_set_tracker_gain().value(); PSMoveProtocol::Response_ResultSetTrackerGain* result_gain = - response->mutable_result_set_tracker_gain(); + response->mutable_result_set_tracker_gain(); // Set the desired gain on the tracker tracker_view->setGain(desired_gain, bSaveSetting); @@ -2266,7 +2267,7 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_option(const RequestContext &context, - PSMoveProtocol::Response *response) + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_gain().tracker_id(); @@ -2280,7 +2281,7 @@ class ServerRequestHandlerImpl const std::string &option_name = context.request->request_set_tracker_option().option_name(); const int desired_option_index = context.request->request_set_tracker_option().option_index(); PSMoveProtocol::Response_ResultSetTrackerOption* result_gain = - response->mutable_result_set_tracker_option(); + response->mutable_result_set_tracker_option(); // Set the desired gain on the tracker if (tracker_view->setOptionIndex(option_name, desired_option_index)) @@ -2313,8 +2314,8 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_color_preset( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_color_preset().tracker_id(); @@ -2329,9 +2330,9 @@ class ServerRequestHandlerImpl const int device_id= context.request->request_set_tracker_color_preset().device_id(); const PSMoveProtocol::TrackingColorPreset &colorPreset = - context.request->request_set_tracker_color_preset().color_preset(); + context.request->request_set_tracker_color_preset().color_preset(); const eCommonTrackingColorID colorType= - static_cast(colorPreset.color_type()); + static_cast(colorPreset.color_type()); // Set the color preset on the tracker CommonHSVColorRange inHSVColorRange; @@ -2346,7 +2347,7 @@ class ServerRequestHandlerImpl switch (device_category) { - case PSMoveProtocol::Request_RequestSetTrackerColorPreset_DeviceCategory_CONTROLLER: + case PSMoveProtocol::Request_RequestSetTrackerColorPreset_DeviceCategory_CONTROLLER: { ServerControllerView *controller_view = get_controller_view_or_null(device_id); @@ -2355,7 +2356,7 @@ class ServerRequestHandlerImpl // Read back what actually got set tracker_view->getControllerTrackingColorPreset(controller_view, colorType, &outHSVColorRange); } break; - case PSMoveProtocol::Request_RequestSetTrackerColorPreset_DeviceCategory_HMD: + case PSMoveProtocol::Request_RequestSetTrackerColorPreset_DeviceCategory_HMD: { ServerHMDView *hmd_view = get_hmd_view_or_null(device_id); @@ -2364,14 +2365,14 @@ class ServerRequestHandlerImpl // Read back what actually got set tracker_view->getHMDTrackingColorPreset(hmd_view, colorType, &outHSVColorRange); } break; - } + } // tracker_view->saveSettings(); // Carried over from old generic_camera } // Get the resulting preset from the tracker { PSMoveProtocol::Response_ResultSetTrackerColorPreset *result = - response->mutable_result_set_tracker_color_preset(); + response->mutable_result_set_tracker_color_preset(); result->set_tracker_id(tracker_id); PSMoveProtocol::TrackingColorPreset *presetResult = result->mutable_new_color_preset(); @@ -2414,8 +2415,8 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_pose( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_pose().tracker_id(); if (ServerUtility::is_index_valid(tracker_id, m_device_manager.getTrackerViewMaxCount())) @@ -2423,8 +2424,8 @@ class ServerRequestHandlerImpl ServerTrackerViewPtr tracker_view = m_device_manager.getTrackerViewPtr(tracker_id); if (tracker_view->getIsOpen()) { - const PSMoveProtocol::Pose &srcPose = - context.request->request_set_tracker_pose().pose(); + const PSMoveProtocol::Pose &srcPose = + context.request->request_set_tracker_pose().pose(); CommonDevicePose destPose = protocol_pose_to_common_device_pose(srcPose); tracker_view->setTrackerPose(&destPose); @@ -2444,8 +2445,8 @@ class ServerRequestHandlerImpl } void handle_request__set_tracker_intrinsics( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_set_tracker_intrinsics().tracker_id(); if (ServerUtility::is_index_valid(tracker_id, m_device_manager.getTrackerViewMaxCount())) @@ -2456,10 +2457,10 @@ class ServerRequestHandlerImpl const auto &intrinsics= context.request->request_set_tracker_intrinsics(); tracker_view->setCameraIntrinsics( - intrinsics.tracker_focal_lengths().x(), intrinsics.tracker_focal_lengths().y(), - intrinsics.tracker_principal_point().x(), intrinsics.tracker_principal_point().y(), - intrinsics.tracker_k1(), intrinsics.tracker_k2(), intrinsics.tracker_k3(), - intrinsics.tracker_p1(), intrinsics.tracker_p2()); + intrinsics.tracker_focal_lengths().x(), intrinsics.tracker_focal_lengths().y(), + intrinsics.tracker_principal_point().x(), intrinsics.tracker_principal_point().y(), + intrinsics.tracker_k1(), intrinsics.tracker_k2(), intrinsics.tracker_k3(), + intrinsics.tracker_p1(), intrinsics.tracker_p2()); tracker_view->saveSettings(); response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); @@ -2476,8 +2477,8 @@ class ServerRequestHandlerImpl } void handle_request__save_tracker_profile( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_save_tracker_profile().tracker_id(); @@ -2501,9 +2502,9 @@ class ServerRequestHandlerImpl for (int preset_index = 0; preset_index < eCommonTrackingColorID::MAX_TRACKING_COLOR_TYPES; ++preset_index) { tracker_view->getControllerTrackingColorPreset( - controller_view, - static_cast(preset_index), - &trackerProfile.color_preset_table.color_presets[preset_index]); + controller_view, + static_cast(preset_index), + &trackerProfile.color_preset_table.color_presets[preset_index]); } m_device_manager.m_tracker_manager->saveDefaultTrackerProfile(&trackerProfile); @@ -2522,8 +2523,8 @@ class ServerRequestHandlerImpl } void handle_request__apply_tracker_profile( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_apply_tracker_profile().tracker_id(); @@ -2537,9 +2538,9 @@ class ServerRequestHandlerImpl const int controller_id= context.request->request_apply_tracker_profile().controller_id(); ServerControllerView *controller_view= get_controller_view_or_null(controller_id); - const TrackerProfile *trackerProfile = - m_device_manager.m_tracker_manager->getDefaultTrackerProfile(); - + const TrackerProfile *trackerProfile = + m_device_manager.m_tracker_manager->getDefaultTrackerProfile(); + // Apply the profile to the tracker tracker_view->setFrameWidth(trackerProfile->frame_width, true); //tracker_view->setFrameHeight(trackerProfile->frame_height, true); @@ -2557,7 +2558,7 @@ class ServerRequestHandlerImpl // Send the profile application result to the client { PSMoveProtocol::Response_ResultTrackerSettings* settings = - response->mutable_result_tracker_settings(); + response->mutable_result_tracker_settings(); settings->set_frame_width(static_cast(tracker_view->getFrameWidth())); settings->set_frame_height(static_cast(tracker_view->getFrameHeight())); @@ -2584,8 +2585,8 @@ class ServerRequestHandlerImpl } void handle_request__reload_tracker_settings( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int tracker_id = context.request->request_apply_tracker_profile().tracker_id(); @@ -2595,7 +2596,7 @@ class ServerRequestHandlerImpl { ServerTrackerViewPtr tracker_view = m_device_manager.getTrackerViewPtr(tracker_id); if (tracker_view->getIsOpen()) - { + { tracker_view->loadSettings(); response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); } @@ -2611,8 +2612,8 @@ class ServerRequestHandlerImpl } void handle_request__search_for_new_trackers( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { // The video polling threads tend to stall out when we are polling for new devices via libusb. // Until we have a better solution, best to just shut down all of the trackers @@ -2623,8 +2624,8 @@ class ServerRequestHandlerImpl } void handle_request__get_tracking_space_settings( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { PSMoveProtocol::Response_ResultTrackingSpaceSettings* settings = response->mutable_result_tracking_space_settings(); @@ -2652,8 +2653,8 @@ class ServerRequestHandlerImpl } void handle_request__get_hmd_list( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { PSMoveProtocol::Response_ResultHMDList* list = response->mutable_result_hmd_list(); @@ -2669,7 +2670,7 @@ class ServerRequestHandlerImpl switch (hmd_view->getHMDDeviceType()) { - case CommonHMDState::Morpheus: + case CommonHMDState::Morpheus: { const MorpheusHMD *morpheusHMD= hmd_view->castCheckedConst(); const MorpheusHMDConfig *config= morpheusHMD->getConfig(); @@ -2679,8 +2680,8 @@ class ServerRequestHandlerImpl hmd_info->set_orientation_filter(config->orientation_filter_type); hmd_info->set_position_filter(config->position_filter_type); } - break; - case CommonHMDState::VirtualHMD: + break; + case CommonHMDState::VirtualHMD: { const VirtualHMD *virtualHMD= hmd_view->castCheckedConst(); const VirtualHMDConfig *config= virtualHMD->getConfig(); @@ -2689,9 +2690,9 @@ class ServerRequestHandlerImpl hmd_info->set_prediction_time(config->prediction_time); hmd_info->set_position_filter(config->position_filter_type); } - break; - default: - assert(0 && "Unhandled tracker type"); + break; + default: + assert(0 && "Unhandled tracker type"); } hmd_info->set_hmd_id(hmd_id); @@ -2704,11 +2705,11 @@ class ServerRequestHandlerImpl } void handle_request__start_hmd_data_stream( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const PSMoveProtocol::Request_RequestStartHmdDataStream& request = - context.request->request_start_hmd_data_stream(); + context.request->request_start_hmd_data_stream(); int hmd_id = request.hmd_id(); if (ServerUtility::is_index_valid(hmd_id, m_device_manager.getHMDViewMaxCount())) @@ -2718,7 +2719,7 @@ class ServerRequestHandlerImpl if (hmd_view->getIsOpen()) { HMDStreamInfo &streamInfo = - context.connection_state->active_hmd_stream_info[hmd_id]; + context.connection_state->active_hmd_stream_info[hmd_id]; // The hmd manager will always publish updates regardless of who is listening. // All we have to do is keep track of which connections care about the updates. @@ -2734,13 +2735,13 @@ class ServerRequestHandlerImpl streamInfo.disable_roi = request.disable_roi(); SERVER_LOG_INFO("ServerRequestHandler") << "Start hmd(" << hmd_id << ") stream (" - << "pos=" << streamInfo.include_position_data - << ",phys=" << streamInfo.include_physics_data - << ",raw_sens=" << streamInfo.include_raw_sensor_data - << ",cal_sens=" << streamInfo.include_calibrated_sensor_data - << ",trkr=" << streamInfo.include_raw_tracker_data - << ",roi=" << streamInfo.disable_roi - << ")"; + << "pos=" << streamInfo.include_position_data + << ",phys=" << streamInfo.include_physics_data + << ",raw_sens=" << streamInfo.include_raw_sensor_data + << ",cal_sens=" << streamInfo.include_calibrated_sensor_data + << ",trkr=" << streamInfo.include_raw_tracker_data + << ",roi=" << streamInfo.disable_roi + << ")"; if (streamInfo.disable_roi) { @@ -2757,8 +2758,8 @@ class ServerRequestHandlerImpl } // Return the name of the shared memory block the video frames will be written to - response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); - } + response->set_result_code(PSMoveProtocol::Response_ResultCode_RESULT_OK); + } else { // Device not opened @@ -2772,8 +2773,8 @@ class ServerRequestHandlerImpl } void handle_request__stop_hmd_data_stream( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { int hmd_id = context.request->request_stop_hmd_data_stream().hmd_id(); @@ -2814,17 +2815,17 @@ class ServerRequestHandlerImpl void handle_request__set_hmd_led_tracking_color( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int connection_id = context.connection_state->connection_id; const int hmd_id = context.request->set_hmd_led_tracking_color_request().hmd_id(); const eCommonTrackingColorID newColorID= - static_cast(context.request->set_hmd_led_tracking_color_request().color_type()); + static_cast(context.request->set_hmd_led_tracking_color_request().color_type()); ServerHMDViewPtr HmdView = m_device_manager.getHMDViewPtr(hmd_id); - if (HmdView && + if (HmdView && HmdView->getHMDDeviceType() == CommonDeviceState::VirtualHMD) { const eCommonTrackingColorID oldColorID = HmdView->getTrackingColorID(); @@ -2866,8 +2867,8 @@ class ServerRequestHandlerImpl } void handle_request__set_hmd_accelerometer_calibration( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int hmd_id = context.request->set_hmd_accelerometer_calibration_request().hmd_id(); @@ -2907,8 +2908,8 @@ class ServerRequestHandlerImpl } void handle_request__set_hmd_gyroscope_calibration( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int hmd_id = context.request->set_hmd_accelerometer_calibration_request().hmd_id(); @@ -2938,14 +2939,14 @@ class ServerRequestHandlerImpl } void handle_request__set_hmd_orientation_filter( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int hmd_id = context.request->request_set_hmd_orientation_filter().hmd_id(); ServerHMDViewPtr HmdView = m_device_manager.getHMDViewPtr(hmd_id); const PSMoveProtocol::Request_RequestSetHMDOrientationFilter &request = - context.request->request_set_hmd_orientation_filter(); + context.request->request_set_hmd_orientation_filter(); if (HmdView && HmdView->getIsOpen()) { @@ -2976,14 +2977,14 @@ class ServerRequestHandlerImpl } void handle_request__set_hmd_position_filter( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int hmd_id = context.request->request_set_hmd_position_filter().hmd_id(); ServerHMDViewPtr HmdView = m_device_manager.getHMDViewPtr(hmd_id); const PSMoveProtocol::Request_RequestSetHMDPositionFilter &request = - context.request->request_set_hmd_position_filter(); + context.request->request_set_hmd_position_filter(); if (HmdView && HmdView->getIsOpen()) { @@ -3029,14 +3030,14 @@ class ServerRequestHandlerImpl } void handle_request__set_hmd_prediction_time( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int hmd_id = context.request->request_set_hmd_prediction_time().hmd_id(); ServerHMDViewPtr HmdView = m_device_manager.getHMDViewPtr(hmd_id); const PSMoveProtocol::Request_RequestSetHMDPredictionTime &request = - context.request->request_set_hmd_prediction_time(); + context.request->request_set_hmd_prediction_time(); if (HmdView && HmdView->getIsOpen()) { @@ -3078,8 +3079,8 @@ class ServerRequestHandlerImpl } void handle_request__set_hmd_data_stream_tracker_index( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { const int hmd_id = context.request->request_set_hmd_data_stream_tracker_index().hmd_id(); const int tracker_id = context.request->request_set_hmd_data_stream_tracker_index().tracker_id(); @@ -3089,7 +3090,7 @@ class ServerRequestHandlerImpl { ServerHMDViewPtr hmd_view = m_device_manager.getHMDViewPtr(hmd_id); HMDStreamInfo &streamInfo = - context.connection_state->active_hmd_stream_info[hmd_id]; + context.connection_state->active_hmd_stream_info[hmd_id]; SERVER_LOG_INFO("ServerRequestHandler") << "Set hmd(" << hmd_id << ") stream tracker id: " << tracker_id; @@ -3104,8 +3105,8 @@ class ServerRequestHandlerImpl } void handle_request__get_service_version( - const RequestContext &context, - PSMoveProtocol::Response *response) + const RequestContext &context, + PSMoveProtocol::Response *response) { PSMoveProtocol::Response_ResultServiceVersion* version_info = response->mutable_result_service_version(); @@ -3118,8 +3119,8 @@ class ServerRequestHandlerImpl // -- Data Frame Updates ----- void handle_data_frame__controller_packet( - RequestConnectionStatePtr connection_state, - DeviceInputDataFramePtr data_frame) + RequestConnectionStatePtr connection_state, + DeviceInputDataFramePtr data_frame) { const auto &controllerDataPacket = data_frame->controller_data_packet(); const int controller_id = controllerDataPacket.controller_id(); @@ -3131,7 +3132,7 @@ class ServerRequestHandlerImpl // Don't consider this data frame if the controller isn't in a streamable connection // or if the sequence number is old - if (controller_view->getIsStreamable() && + if (controller_view->getIsStreamable() && controllerDataPacket.sequence_num() > streamInfo.last_data_input_sequence_number) { // Remember the last sequence number we received from this connection @@ -3139,7 +3140,7 @@ class ServerRequestHandlerImpl switch (controller_view->getControllerDeviceType()) { - case CommonDeviceState::eDeviceType::PSMove: + case CommonDeviceState::eDeviceType::PSMove: { const auto &psmove_state= controllerDataPacket.psmove_state(); @@ -3163,7 +3164,7 @@ class ServerRequestHandlerImpl controller_view->clearLEDOverride(); } } - // Otherwise we are setting the override to a new color + // Otherwise we are setting the override to a new color else { // Sets the bulb LED color to some new override color @@ -3176,11 +3177,11 @@ class ServerRequestHandlerImpl streamInfo.led_override_active= controller_view->getIsLEDOverrideActive(); } } break; - case CommonDeviceState::eDeviceType::PSNavi: + case CommonDeviceState::eDeviceType::PSNavi: { // Nothing to update... } break; - case CommonDeviceState::eDeviceType::PSDualShock4: + case CommonDeviceState::eDeviceType::PSDualShock4: { const auto &psmove_state= controllerDataPacket.psdualshock4_state(); @@ -3206,7 +3207,7 @@ class ServerRequestHandlerImpl controller_view->clearLEDOverride(); } } - // Otherwise we are setting the override to a new color + // Otherwise we are setting the override to a new color else { // Sets the bulb LED color to some new override color @@ -3233,7 +3234,7 @@ class ServerRequestHandlerImpl ServerRequestHandler *ServerRequestHandler::m_instance = NULL; ServerRequestHandler::ServerRequestHandler(DeviceManager *deviceManager) - : m_implementation_ptr(new ServerRequestHandlerImpl(*deviceManager)) + : m_implementation_ptr(new ServerRequestHandlerImpl(*deviceManager)) { } @@ -3285,22 +3286,22 @@ void ServerRequestHandler::handle_client_connection_stopped(int connection_id) } void ServerRequestHandler::publish_controller_data_frame( - ServerControllerView *controller_view, - t_generate_controller_data_frame_for_stream callback) + ServerControllerView *controller_view, + t_generate_controller_data_frame_for_stream callback) { return m_implementation_ptr->publish_controller_data_frame(controller_view, callback); } void ServerRequestHandler::publish_tracker_data_frame( - class ServerTrackerView *tracker_view, - t_generate_tracker_data_frame_for_stream callback) + class ServerTrackerView *tracker_view, + t_generate_tracker_data_frame_for_stream callback) { return m_implementation_ptr->publish_tracker_data_frame(tracker_view, callback); } void ServerRequestHandler::publish_hmd_data_frame( - class ServerHMDView *hmd_view, - t_generate_hmd_data_frame_for_stream callback) + class ServerHMDView *hmd_view, + t_generate_hmd_data_frame_for_stream callback) { return m_implementation_ptr->publish_hmd_data_frame(hmd_view, callback); } diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index b974d2d1..0b787ca6 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -50,9 +50,6 @@ list(APPEND TEST_CAMERA_SRC add_executable(test_camera ${CMAKE_CURRENT_LIST_DIR}/test_camera.cpp ${TEST_CAMERA_SRC}) target_include_directories(test_camera PUBLIC ${TEST_CAMERA_INCL_DIRS}) target_link_libraries(test_camera ${PLATFORM_LIBS} ${TEST_CAMERA_REQ_LIBS}) -IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - add_dependencies(test_camera opencv) -ENDIF() SET_TARGET_PROPERTIES(test_camera PROPERTIES FOLDER Test) # The test_camera_parallel app @@ -60,9 +57,6 @@ IF((${CMAKE_SYSTEM_NAME} MATCHES "Windows") OR (${CMAKE_SYSTEM_NAME} MATCHES "Da add_executable(test_camera_parallel ${CMAKE_CURRENT_LIST_DIR}/test_camera_parallel.cpp ${TEST_CAMERA_SRC}) target_include_directories(test_camera_parallel PUBLIC ${TEST_CAMERA_INCL_DIRS}) target_link_libraries(test_camera_parallel ${PLATFORM_LIBS} ${TEST_CAMERA_REQ_LIBS}) - IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - add_dependencies(test_camera_parallel opencv) - ENDIF() SET_TARGET_PROPERTIES(test_camera_parallel PROPERTIES FOLDER Test) ENDIF() @@ -121,7 +115,7 @@ SET(TEST_PSMOVE_REQ_LIBS) # hidapi list(APPEND TEST_PSMOVE_INCL_DIRS ${HIDAPI_INCLUDE_DIRS}) list(APPEND TEST_PSMOVE_SRC ${HIDAPI_SRC}) -list(APPEND TEST_PSMOVE_REQ_LIBS ${HIDAPI_LIBS}) +list(APPEND TEST_PSMOVE_REQ_LIBS ${HIDAPI_LIBRARIES}) # libusb find_package(USB1 REQUIRED) @@ -131,6 +125,7 @@ list(APPEND TEST_PSMOVE_REQ_LIBS ${LIBUSB_LIBRARIES}) #Bluetooth IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows") # Why not Windows? + # list(APPEND TEST_PSMOVE_SRC ${ROOT_DIR}/src/psmoveservice/Platform/BluetoothQueriesWin32.cpp) ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") list(APPEND TEST_PSMOVE_SRC ${ROOT_DIR}/src/psmoveservice/Platform/BluetoothQueriesOSX.mm) ELSE() @@ -201,6 +196,7 @@ list(APPEND TEST_PSMOVE_SRC ${ROOT_DIR}/src/psmoveservice/Utils/WorkerThread.cpp) # psmoveprotocol +# list(APPEND TEST_PSMOVE_REQ_LIBS protobuf::libprotoc protobuf::libprotobuf) list(APPEND TEST_PSMOVE_INCL_DIRS ${ROOT_DIR}/src/psmoveprotocol) list(APPEND TEST_PSMOVE_REQ_LIBS PSMoveProtocol) @@ -237,7 +233,7 @@ SET(TEST_NAVI_REQ_LIBS) # hidapi list(APPEND TEST_NAVI_INCL_DIRS ${HIDAPI_INCLUDE_DIRS}) list(APPEND TEST_NAVI_SRC ${HIDAPI_SRC}) -list(APPEND TEST_NAVI_REQ_LIBS ${HIDAPI_LIBS}) +list(APPEND TEST_NAVI_REQ_LIBS ${HIDAPI_LIBRARIES}) # libusb find_package(USB1 REQUIRED) @@ -316,6 +312,7 @@ list(APPEND TEST_NAVI_SRC ${ROOT_DIR}/src/psmoveservice/Utils/WorkerThread.cpp) # psmoveprotocol +# list(APPEND TEST_NAVI_REQ_LIBS protobuf::libprotoc protobuf::libprotobuf) list(APPEND TEST_NAVI_INCL_DIRS ${ROOT_DIR}/src/psmoveprotocol) list(APPEND TEST_NAVI_REQ_LIBS PSMoveProtocol) @@ -360,7 +357,7 @@ ENDIF() # hidapi list(APPEND TEST_DS4_CTRLR_INCL_DIRS ${HIDAPI_INCLUDE_DIRS}) list(APPEND TEST_DS4_CTRLR_SRC ${HIDAPI_SRC}) -list(APPEND TEST_DS4_CTRLR_REQ_LIBS ${HIDAPI_LIBS}) +list(APPEND TEST_DS4_CTRLR_REQ_LIBS ${HIDAPI_LIBRARIES}) # libusb find_package(USB1 REQUIRED) @@ -440,6 +437,7 @@ list(APPEND TEST_DS4_CTRLR_SRC ${ROOT_DIR}/src/psmoveservice/Utils/WorkerThread.cpp) # psmoveprotocol +# list(APPEND TEST_DS4_CTRLR_REQ_LIBS protobuf::libprotoc protobuf::libprotobuf) list(APPEND TEST_DS4_CTRLR_INCL_DIRS ${ROOT_DIR}/src/psmoveprotocol) list(APPEND TEST_DS4_CTRLR_REQ_LIBS PSMoveProtocol) diff --git a/src/tests/test_camera.cpp b/src/tests/test_camera.cpp index c4049ecc..a8e838df 100644 --- a/src/tests/test_camera.cpp +++ b/src/tests/test_camera.cpp @@ -47,10 +47,10 @@ int main(int, char**) std::cout << "Please enter the initial frame width for the cameras:\n"; std::cin >> frame_width_init; - // Open all available cameras (up to 4 max) + // Open all available cameras (up to PSMOVESERVICE_MAX_TRACKER_COUNT max) for (int camera_index = 0; camera_index < PSMOVESERVICE_MAX_TRACKER_COUNT; ++camera_index) { - PSEyeVideoCapture *camera = new PSEyeVideoCapture(camera_index); // open the default camera + auto *camera = new PSEyeVideoCapture(camera_index); // open the default camera if (camera->isOpened()) { @@ -66,6 +66,11 @@ int main(int, char**) int last_frames = 0; camera_states.push_back({ camera, identifier, last_ticks, last_frames }); + + // Print some additional details. + int format = static_cast(camera->get(cv::CAP_PROP_FORMAT)); + std::cout << "CAP_PROP_FORMAT: " << format << std::endl; + std::cout << "Channels per pixel: " << (format >> CV_CN_SHIFT) + 1 << std::endl; } else { @@ -82,7 +87,7 @@ int main(int, char**) } ); - bool bKeepRunning = camera_states.size() > 0; + bool bKeepRunning = !camera_states.empty(); while (bKeepRunning) { // Render each camera frame in it's own window @@ -242,9 +247,7 @@ int main(int, char**) std::cout << state.identifier << ": Value of " << prop_str << " changed by " << val_diff << " and is now " << val << std::endl; } ); - } - else if (std::find(known_keys_check.begin(), known_keys_check.end(), wk) != known_keys_check.end()) - { + } else if (std::find(known_keys_check.begin(), known_keys_check.end(), wk) != known_keys_check.end()) { int cap_prop = CV_CAP_PROP_FPS; std::string prop_str("CV_CAP_PROP_FPS"); @@ -308,24 +311,23 @@ int main(int, char**) camera_states.begin(), camera_states.end(), [&camera_states, &cap_prop, &prop_str, &wk](camera_state &state) { - - double val = state.camera->get(cap_prop); - auto now_ticks = std::chrono::high_resolution_clock::now(); - switch (wk) - { - case 32: - std::cout << state.identifier << ": Fame rate is set to " << val << " and was actually " - << (1000 * state.last_frames / (float(std::chrono::duration(now_ticks - state.last_ticks).count()))) << " fps" << std::endl; - state.last_ticks = now_ticks; - state.last_frames = 0; - break; - default: - std::cout << state.identifier << ": Value of " << prop_str << " is " << val << std::endl; + double val = state.camera->get(cap_prop); + auto now_ticks = std::chrono::high_resolution_clock::now(); + switch (wk) + { + case 32: + std::cout << state.identifier << ": Fame rate is set to " << val << " and was actually " + << (1000 * state.last_frames / (float(std::chrono::duration(now_ticks - state.last_ticks).count()))) << " fps" << std::endl; + state.last_ticks = now_ticks; + state.last_frames = 0; + break; + default: + std::cout << state.identifier << ": Value of " << prop_str << " is " << val << std::endl; + } } - } - ); + ); } - else if (wk > 0) + else if (wk > 0 && wk != 255) { std::cout << "Unknown key has code " << wk << std::endl; } diff --git a/thirdparty/SDL2 b/thirdparty/SDL2 deleted file mode 160000 index ebcd2e89..00000000 --- a/thirdparty/SDL2 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ebcd2e8914bd29363cf1b6b3fa4f5f3d3aaf2ad3 diff --git a/thirdparty/eigen b/thirdparty/eigen deleted file mode 160000 index 1f05f515..00000000 --- a/thirdparty/eigen +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1f05f51517ec4fd91eed711e0f89e97a7c028c0e diff --git a/thirdparty/glm/copying.txt b/thirdparty/glm/copying.txt deleted file mode 100644 index 124698cc..00000000 --- a/thirdparty/glm/copying.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) 2005 - 2012 G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/thirdparty/glm/glm/core/_detail.hpp b/thirdparty/glm/glm/core/_detail.hpp deleted file mode 100644 index b842dea2..00000000 --- a/thirdparty/glm/glm/core/_detail.hpp +++ /dev/null @@ -1,468 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/_detail.hpp -/// @date 2008-07-24 / 2011-06-14 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef glm_core_detail -#define glm_core_detail - -#include "setup.hpp" -#include -#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) -#include -#endif - -namespace glm{ -namespace detail -{ - class half; - -#if(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available - typedef int64_t sint64; - typedef uint64_t uint64; -#elif(GLM_COMPILER & GLM_COMPILER_VC) - typedef signed __int64 sint64; - typedef unsigned __int64 uint64; -#elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG)) - __extension__ typedef signed long long sint64; - __extension__ typedef unsigned long long uint64; -#elif(GLM_COMPILER & GLM_COMPILER_BC) - typedef Int64 sint64; - typedef Uint64 uint64; -#else//unknown compiler - typedef signed long long sint64; - typedef unsigned long long uint64; -#endif//GLM_COMPILER - - template - struct If - { - template - static GLM_FUNC_QUALIFIER T apply(F functor, const T& val) - { - return functor(val); - } - }; - - template<> - struct If - { - template - static GLM_FUNC_QUALIFIER T apply(F, const T& val) - { - return val; - } - }; - - //template - //struct traits - //{ - // static const bool is_signed = false; - // static const bool is_float = false; - // static const bool is_vector = false; - // static const bool is_matrix = false; - // static const bool is_genType = false; - // static const bool is_genIType = false; - // static const bool is_genUType = false; - //}; - - //template <> - //struct traits - //{ - // static const bool is_float = true; - // static const bool is_genType = true; - //}; - - //template <> - //struct traits - //{ - // static const bool is_float = true; - // static const bool is_genType = true; - //}; - - //template <> - //struct traits - //{ - // static const bool is_float = true; - // static const bool is_genType = true; - //}; - - //template - //struct desc - //{ - // typedef genType type; - // typedef genType * pointer; - // typedef genType const* const_pointer; - // typedef genType const *const const_pointer_const; - // typedef genType *const pointer_const; - // typedef genType & reference; - // typedef genType const& const_reference; - // typedef genType const& param_type; - - // typedef typename genType::value_type value_type; - // typedef typename genType::size_type size_type; - // static const typename size_type value_size; - //}; - - //template - //const typename desc::size_type desc::value_size = genType::value_size(); - - union uif32 - { - GLM_FUNC_QUALIFIER uif32() : - i(0) - {} - - GLM_FUNC_QUALIFIER uif32(float f) : - f(f) - {} - - GLM_FUNC_QUALIFIER uif32(unsigned int i) : - i(i) - {} - - float f; - unsigned int i; - }; - - union uif64 - { - GLM_FUNC_QUALIFIER uif64() : - i(0) - {} - - GLM_FUNC_QUALIFIER uif64(double f) : - f(f) - {} - - GLM_FUNC_QUALIFIER uif64(uint64 i) : - i(i) - {} - - double f; - uint64 i; - }; - - typedef uif32 uif; - - ////////////////// - // int - - template - struct is_int - { - enum is_int_enum - { - _YES = 0, - _NO = 1 - }; - }; - -#define GLM_DETAIL_IS_INT(T) \ - template <> \ - struct is_int \ - { \ - enum is_int_enum \ - { \ - _YES = 1, \ - _NO = 0 \ - }; \ - } - - ////////////////// - // uint - - template - struct is_uint - { - enum is_uint_enum - { - _YES = 0, - _NO = 1 - }; - }; - -#define GLM_DETAIL_IS_UINT(T) \ - template <> \ - struct is_uint \ - { \ - enum is_uint_enum \ - { \ - _YES = 1, \ - _NO = 0 \ - }; \ - } - - //GLM_DETAIL_IS_UINT(unsigned long long) - - ////////////////// - // float - - template - struct is_float - { - enum is_float_enum - { - _YES = 0, - _NO = 1 - }; - }; - -#define GLM_DETAIL_IS_FLOAT(T) \ - template <> \ - struct is_float \ - { \ - enum is_float_enum \ - { \ - _YES = 1, \ - _NO = 0 \ - }; \ - } - - GLM_DETAIL_IS_FLOAT(detail::half); - GLM_DETAIL_IS_FLOAT(float); - GLM_DETAIL_IS_FLOAT(double); - GLM_DETAIL_IS_FLOAT(long double); - - ////////////////// - // bool - - template - struct is_bool - { - enum is_bool_enum - { - _YES = 0, - _NO = 1 - }; - }; - - template <> - struct is_bool - { - enum is_bool_enum - { - _YES = 1, - _NO = 0 - }; - }; - - ////////////////// - // vector - - template - struct is_vector - { - enum is_vector_enum - { - _YES = 0, - _NO = 1 - }; - }; - -# define GLM_DETAIL_IS_VECTOR(TYPE) \ - template \ - struct is_vector > \ - { \ - enum is_vector_enum \ - { \ - _YES = 1, \ - _NO = 0 \ - }; \ - } - - ////////////////// - // matrix - - template - struct is_matrix - { - enum is_matrix_enum - { - _YES = 0, - _NO = 1 - }; - }; - -#define GLM_DETAIL_IS_MATRIX(T) \ - template <> \ - struct is_matrix \ - { \ - enum is_matrix_enum \ - { \ - _YES = 1, \ - _NO = 0 \ - }; \ - } - - ////////////////// - // type - - template - struct type - { - enum type_enum - { - is_float = is_float::_YES, - is_int = is_int::_YES, - is_uint = is_uint::_YES, - is_bool = is_bool::_YES - }; - }; - - ////////////////// - // type - - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; - typedef detail::sint64 int64; - - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; - typedef detail::uint64 uint64; - - typedef detail::half float16; - typedef float float32; - typedef double float64; - - ////////////////// - // float_or_int_trait - - struct float_or_int_value - { - enum - { - GLM_ERROR, - GLM_FLOAT, - GLM_INT - }; - }; - - template - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_ERROR}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_INT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_FLOAT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_FLOAT}; - }; - - template <> - struct float_or_int_trait - { - enum{ID = float_or_int_value::GLM_FLOAT}; - }; - -}//namespace detail -}//namespace glm - -#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005)) -# define GLM_DEPRECATED __declspec(deprecated) -# define GLM_ALIGN(x) __declspec(align(x)) -# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct -# define GLM_RESTRICT __declspec(restrict) -# define GLM_RESTRICT_VAR __restrict -#elif((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31)) -# define GLM_DEPRECATED __attribute__((__deprecated__)) -# define GLM_ALIGN(x) __attribute__((aligned(x))) -# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x))) -# if(GLM_COMPILER >= GLM_COMPILER_GCC33) -# define GLM_RESTRICT __restrict__ -# define GLM_RESTRICT_VAR __restrict__ -# else -# define GLM_RESTRICT -# define GLM_RESTRICT_VAR -# endif -# define GLM_RESTRICT __restrict__ -# define GLM_RESTRICT_VAR __restrict__ -#else -# define GLM_DEPRECATED -# define GLM_ALIGN -# define GLM_ALIGNED_STRUCT(x) -# define GLM_RESTRICT -# define GLM_RESTRICT_VAR -#endif//GLM_COMPILER - -#endif//glm_core_detail diff --git a/thirdparty/glm/glm/core/_fixes.hpp b/thirdparty/glm/glm/core/_fixes.hpp deleted file mode 100644 index 1b4dddaa..00000000 --- a/thirdparty/glm/glm/core/_fixes.hpp +++ /dev/null @@ -1,55 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/_fixes.hpp -/// @date 2011-02-21 / 2011-11-22 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#include - -//! Workaround for compatibility with other libraries -#ifdef max -#undef max -#endif - -//! Workaround for compatibility with other libraries -#ifdef min -#undef min -#endif - -//! Workaround for Android -#ifdef isnan -#undef isnan -#endif - -//! Workaround for Android -#ifdef isinf -#undef isinf -#endif - -//! Workaround for Chrone Native Client -#ifdef log2 -#undef log2 -#endif - diff --git a/thirdparty/glm/glm/core/_swizzle.hpp b/thirdparty/glm/glm/core/_swizzle.hpp deleted file mode 100644 index 61be1d6b..00000000 --- a/thirdparty/glm/glm/core/_swizzle.hpp +++ /dev/null @@ -1,837 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/_swizzle.hpp -/// @date 2006-04-20 / 2011-02-16 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef glm_core_swizzle -#define glm_core_swizzle - -#include "_swizzle_func.hpp" - -namespace glm -{ - enum comp - { - X = 0, - R = 0, - S = 0, - Y = 1, - G = 1, - T = 1, - Z = 2, - B = 2, - P = 2, - W = 3, - A = 3, - Q = 3 - }; -}//namespace glm - -namespace glm{ -namespace detail -{ - // Internal class for implementing swizzle operators - template - struct _swizzle_base0 - { - typedef T value_type; - - protected: - value_type& elem (size_t i) { return (reinterpret_cast(_buffer))[i]; } - const value_type& elem (size_t i) const { return (reinterpret_cast(_buffer))[i]; } - - // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. - // The size 1 buffer is assumed to aligned to the actual members so that the - // elem() - char _buffer[1]; - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - V operator ()() const { return V(this->elem(E0), this->elem(E1)); } - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2)); } - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - V operator ()() const { return V(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } - }; - - // Internal class for implementing swizzle operators - /* - Template parameters: - - ValueType = type of scalar values (e.g. float, double) - VecType = class the swizzle is applies to (e.g. tvec3) - N = number of components in the vector (e.g. 3) - E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec - - DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles - containing duplicate elements so that they cannot be used as r-values). - */ - template - struct _swizzle_base2 : public _swizzle_base1 - { - typedef VecType vec_type; - typedef ValueType value_type; - - _swizzle_base2& operator= (const ValueType& t) - { - for (int i = 0; i < N; ++i) - (*this)[i] = t; - return *this; - } - - _swizzle_base2& operator= (const VecType& that) - { - struct op { - void operator() (value_type& e, value_type& t) { e = t; } - }; - _apply_op(that, op()); - return *this; - } - - void operator -= (const VecType& that) - { - struct op { - void operator() (value_type& e, value_type& t) { e -= t; } - }; - _apply_op(that, op()); - } - - void operator += (const VecType& that) - { - struct op { - void operator() (value_type& e, value_type& t) { e += t; } - }; - _apply_op(that, op()); - } - - void operator *= (const VecType& that) - { - struct op { - void operator() (value_type& e, value_type& t) { e *= t; } - }; - _apply_op(that, op()); - } - - void operator /= (const VecType& that) - { - struct op { - void operator() (value_type& e, value_type& t) { e /= t; } - }; - _apply_op(that, op()); - } - - value_type& operator[] (size_t i) - { - static const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - value_type operator[] (size_t i) const - { - static const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - protected: - template - void _apply_op(const VecType& that, T op) - { - // Make a copy of the data in this == &that. - // The copier should optimize out the copy in cases where the function is - // properly inlined and the copy is not necessary. - ValueType t[N]; - for (int i = 0; i < N; ++i) - t[i] = that[i]; - for (int i = 0; i < N; ++i) - op( (*this)[i], t[i] ); - } - }; - - // Specialization for swizzles containing duplicate elements. These cannot be modified. - template - struct _swizzle_base2 : public _swizzle_base1 - { - typedef VecType vec_type; - typedef ValueType value_type; - - struct Stub {}; - _swizzle_base2& operator= (Stub const &) {} - - value_type operator[] (size_t i) const - { - static const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - }; - - template - struct swizzle : public _swizzle_base2 - { - typedef _swizzle_base2 base_type; - - using base_type::operator=; - - operator VecType () const { return (*this)(); } - }; - -// -// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros -// -#define _GLM_SWIZZLE_TEMPLATE1 template -#define _GLM_SWIZZLE_TEMPLATE2 template -#define _GLM_SWIZZLE_TYPE1 glm::detail::swizzle -#define _GLM_SWIZZLE_TYPE2 glm::detail::swizzle - -// -// Wrapper for a binary operator (e.g. u.yy + v.zy) -// -#define _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - _GLM_SWIZZLE_TEMPLATE2 \ - V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ - { \ - return a() OPERAND b(); \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const V& b) \ - { \ - return a() OPERAND b; \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const V& a, const _GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) -// -#define _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const _GLM_SWIZZLE_TYPE1& a, const T& b) \ - { \ - return a() OPERAND b; \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - V operator OPERAND ( const T& a, const _GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Macro for wrapping a function taking one argument (e.g. abs()) -// -#define _GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ - _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a) \ - { \ - return FUNCTION(a()); \ - } - -// -// Macro for wrapping a function taking two vector arguments (e.g. dot()). -// -#define _GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ - _GLM_SWIZZLE_TEMPLATE2 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename V& b) \ - { \ - return FUNCTION(a(), b); \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const _GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a, b()); \ - } - -// -// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). -// -#define _GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ - _GLM_SWIZZLE_TEMPLATE2 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE2& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const _GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ - { \ - return FUNCTION(a(), b, c); \ - } \ - _GLM_SWIZZLE_TEMPLATE1 \ - typename _GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const _GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a, b(), c); \ - } - -}//namespace detail -}//namespace glm - -namespace glm -{ - namespace detail - { - _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) - _GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) - - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) - _GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) - } - - // - // Swizzles are distinct types from the unswizzled type. The below macros will - // provide template specializations for the swizzle types for the given functions - // so that the compiler does not have any ambiguity to choosing how to handle - // the function. - // - // The alternative is to use the operator()() when calling the function in order - // to explicitly convert the swizzled type to the unswizzled type. - // - - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); - //_GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); - - //_GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); - //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); - //_GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); - //_GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); -} - -#define _GLM_SWIZZLE2_2_MEMBERS(T,P,E0,E1) \ - struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; - -#define _GLM_SWIZZLE2_3_MEMBERS(T,P2,E0,E1) \ - struct { glm::detail::swizzle<3,T,P2,0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P2,0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P2,0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P2,0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P2,1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P2,1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P2,1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P2,1,1,1,-1> E1 ## E1 ## E1; }; - -#define _GLM_SWIZZLE2_4_MEMBERS(T,P2,E0,E1) \ - struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; - -#define _GLM_SWIZZLE3_2_MEMBERS(T,P2,E0,E1,E2) \ - struct { glm::detail::swizzle<2,T,P2,0,0,-1,-2> E0 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P2,0,1,-1,-2> E0 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P2,0,2,-1,-2> E0 ## E2; }; \ - struct { glm::detail::swizzle<2,T,P2,1,0,-1,-2> E1 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P2,1,1,-1,-2> E1 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P2,1,2,-1,-2> E1 ## E2; }; \ - struct { glm::detail::swizzle<2,T,P2,2,0,-1,-2> E2 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P2,2,1,-1,-2> E2 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P2,2,2,-1,-2> E2 ## E2; }; - -#define _GLM_SWIZZLE3_3_MEMBERS(T,P,E0,E1,E2) \ - struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; - -#define _GLM_SWIZZLE3_4_MEMBERS(T,P2,E0,E1,E2) \ - struct { glm::detail::swizzle<4,T,P2,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P2,2,2,2,2> E2 ## E2 ## E2 ## E2; }; - -#define _GLM_SWIZZLE4_2_MEMBERS(T,P,E0,E1,E2,E3) \ - struct { glm::detail::swizzle<2,T,P,0,0,-1,-2> E0 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P,0,1,-1,-2> E0 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P,0,2,-1,-2> E0 ## E2; }; \ - struct { glm::detail::swizzle<2,T,P,0,3,-1,-2> E0 ## E3; }; \ - struct { glm::detail::swizzle<2,T,P,1,0,-1,-2> E1 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P,1,1,-1,-2> E1 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P,1,2,-1,-2> E1 ## E2; }; \ - struct { glm::detail::swizzle<2,T,P,1,3,-1,-2> E1 ## E3; }; \ - struct { glm::detail::swizzle<2,T,P,2,0,-1,-2> E2 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P,2,1,-1,-2> E2 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P,2,2,-1,-2> E2 ## E2; }; \ - struct { glm::detail::swizzle<2,T,P,2,3,-1,-2> E2 ## E3; }; \ - struct { glm::detail::swizzle<2,T,P,3,0,-1,-2> E3 ## E0; }; \ - struct { glm::detail::swizzle<2,T,P,3,1,-1,-2> E3 ## E1; }; \ - struct { glm::detail::swizzle<2,T,P,3,2,-1,-2> E3 ## E2; }; \ - struct { glm::detail::swizzle<2,T,P,3,3,-1,-2> E3 ## E3; }; - -#define _GLM_SWIZZLE4_3_MEMBERS(T,P,E0,E1,E2,E3) \ - struct { glm::detail::swizzle<3,T,P,0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,0,0,3,-1> E0 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,0,1,3,-1> E0 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,0,2,3,-1> E0 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,0,3,0,-1> E0 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,0,3,1,-1> E0 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,0,3,2,-1> E0 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,0,3,3,-1> E0 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,1,0,3,-1> E1 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,1,1,3,-1> E1 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,1,2,3,-1> E1 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,1,3,0,-1> E1 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,1,3,1,-1> E1 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,1,3,2,-1> E1 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,1,3,3,-1> E1 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,2,0,3,-1> E2 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,2,1,3,-1> E2 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,2,2,2,-1> E2 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,2,2,3,-1> E2 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,2,3,0,-1> E2 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,2,3,1,-1> E2 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,2,3,2,-1> E2 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,2,3,3,-1> E2 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,3,0,0,-1> E3 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,3,0,1,-1> E3 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,3,0,2,-1> E3 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,3,0,3,-1> E3 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,3,1,0,-1> E3 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,3,1,1,-1> E3 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,3,1,2,-1> E3 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,3,1,3,-1> E3 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,3,2,0,-1> E3 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,3,2,1,-1> E3 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,3,2,2,-1> E3 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,3,2,3,-1> E3 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<3,T,P,3,3,0,-1> E3 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<3,T,P,3,3,1,-1> E3 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<3,T,P,3,3,2,-1> E3 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<3,T,P,3,3,3,-1> E3 ## E3 ## E3; }; - -#define _GLM_SWIZZLE4_4_MEMBERS(T,P,E0,E1,E2,E3) \ - struct { glm::detail::swizzle<4,T,P,0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ - struct { glm::detail::swizzle<4,T,P,3,3,3,3> E3 ## E3 ## E3 ## E3; }; - -#endif//glm_core_swizzle diff --git a/thirdparty/glm/glm/core/_swizzle_func.hpp b/thirdparty/glm/glm/core/_swizzle_func.hpp deleted file mode 100644 index 255a3ec9..00000000 --- a/thirdparty/glm/glm/core/_swizzle_func.hpp +++ /dev/null @@ -1,787 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/_swizzle_func.hpp -/// @date 2011-10-16 / 2011-10-16 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef glm_core_swizzle_func -#define glm_core_swizzle_func - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ - SWIZZLED_TYPE A ## B() CONST \ - { \ - return SWIZZLED_TYPE(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ - SWIZZLED_TYPE A ## B ## C() CONST \ - { \ - return SWIZZLED_TYPE(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ - SWIZZLED_TYPE A ## B ## C ## D() CONST \ - { \ - return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ - } - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B) \ - template \ - SWIZZLED_TYPE CLASS_TYPE::A ## B() CONST \ - { \ - return SWIZZLED_TYPE(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C) \ - template \ - SWIZZLED_TYPE CLASS_TYPE::A ## B ## C() CONST \ - { \ - return SWIZZLED_TYPE(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, CONST, A, B, C, D) \ - template \ - SWIZZLED_TYPE CLASS_TYPE::A ## B ## C ## D() CONST \ - { \ - return SWIZZLED_TYPE(this->A, this->B, this->C, this->D); \ - } - -#define GLM_MUTABLE - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, x, y) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, r, g) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, s, t) - -//GLM_SWIZZLE_GEN_REF_FROM_VEC2(valType, detail::vec2, detail::ref2) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, x, y, z) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, r, g, b) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, s, t, q) - -//GLM_SWIZZLE_GEN_REF_FROM_VEC3(valType, detail::vec3, detail::ref2, detail::ref3) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, GLM_MUTABLE, D, C) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B) - -#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, , D, B, C, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) - -//GLM_SWIZZLE_GEN_REF_FROM_VEC4(valType, detail::vec4, detail::ref2, detail::ref3, detail::ref4) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t) - -//GLM_SWIZZLE_GEN_VEC_FROM_VEC2(valType, detail::vec2, detail::vec2, detail::vec3, detail::vec4) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q) - -//GLM_SWIZZLE_GEN_VEC_FROM_VEC3(valType, detail::vec3, detail::vec2, detail::vec3, detail::vec4) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, A, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, B, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, C, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(TMPL_TYPE, CLASS_TYPE, SWIZZLED_TYPE, const, D, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC3_TYPE, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC4_TYPE, A, B, C, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, x, y, z, w) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, r, g, b, a) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(TMPL_TYPE, CLASS_TYPE, SWIZZLED_VEC2_TYPE, SWIZZLED_VEC3_TYPE, SWIZZLED_VEC4_TYPE, s, t, q, p) - -//GLM_SWIZZLE_GEN_VEC_FROM_VEC4(valType, detail::vec4, detail::vec2, detail::vec3, detail::vec4) - -#endif//glm_core_swizzle_func diff --git a/thirdparty/glm/glm/core/_vectorize.hpp b/thirdparty/glm/glm/core/_vectorize.hpp deleted file mode 100644 index e69d8091..00000000 --- a/thirdparty/glm/glm/core/_vectorize.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/_vectorize.hpp -/// @date 2011-10-14 / 2011-10-14 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#define VECTORIZE2_VEC(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec2 func( \ - detail::tvec2 const & v) \ - { \ - return detail::tvec2( \ - func(v.x), \ - func(v.y)); \ - } - -#define VECTORIZE3_VEC(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec3 func( \ - detail::tvec3 const & v) \ - { \ - return detail::tvec3( \ - func(v.x), \ - func(v.y), \ - func(v.z)); \ - } - -#define VECTORIZE4_VEC(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec4 func( \ - detail::tvec4 const & v) \ - { \ - return detail::tvec4( \ - func(v.x), \ - func(v.y), \ - func(v.z), \ - func(v.w)); \ - } - -#define VECTORIZE_VEC(func) \ - VECTORIZE2_VEC(func) \ - VECTORIZE3_VEC(func) \ - VECTORIZE4_VEC(func) - -#define VECTORIZE2_VEC_SCA(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec2 func \ - ( \ - detail::tvec2 const & x, \ - typename detail::tvec2::value_type const & y \ - ) \ - { \ - return detail::tvec2( \ - func(x.x, y), \ - func(x.y, y)); \ - } - -#define VECTORIZE3_VEC_SCA(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec3 func \ - ( \ - detail::tvec3 const & x, \ - typename detail::tvec3::value_type const & y \ - ) \ - { \ - return detail::tvec3( \ - func(x.x, y), \ - func(x.y, y), \ - func(x.z, y)); \ - } - -#define VECTORIZE4_VEC_SCA(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec4 func \ - ( \ - detail::tvec4 const & x, \ - typename detail::tvec4::value_type const & y \ - ) \ - { \ - return detail::tvec4( \ - func(x.x, y), \ - func(x.y, y), \ - func(x.z, y), \ - func(x.w, y)); \ - } - -#define VECTORIZE_VEC_SCA(func) \ - VECTORIZE2_VEC_SCA(func) \ - VECTORIZE3_VEC_SCA(func) \ - VECTORIZE4_VEC_SCA(func) - -#define VECTORIZE2_VEC_VEC(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec2 func \ - ( \ - detail::tvec2 const & x, \ - detail::tvec2 const & y \ - ) \ - { \ - return detail::tvec2( \ - func(x.x, y.x), \ - func(x.y, y.y)); \ - } - -#define VECTORIZE3_VEC_VEC(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec3 func \ - ( \ - detail::tvec3 const & x, \ - detail::tvec3 const & y \ - ) \ - { \ - return detail::tvec3( \ - func(x.x, y.x), \ - func(x.y, y.y), \ - func(x.z, y.z)); \ - } - -#define VECTORIZE4_VEC_VEC(func) \ - template \ - GLM_FUNC_QUALIFIER detail::tvec4 func \ - ( \ - detail::tvec4 const & x, \ - detail::tvec4 const & y \ - ) \ - { \ - return detail::tvec4( \ - func(x.x, y.x), \ - func(x.y, y.y), \ - func(x.z, y.z), \ - func(x.w, y.w)); \ - } - -#define VECTORIZE_VEC_VEC(func) \ - VECTORIZE2_VEC_VEC(func) \ - VECTORIZE3_VEC_VEC(func) \ - VECTORIZE4_VEC_VEC(func) diff --git a/thirdparty/glm/glm/core/dummy.cpp b/thirdparty/glm/glm/core/dummy.cpp deleted file mode 100644 index 443c072f..00000000 --- a/thirdparty/glm/glm/core/dummy.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/dummy.cpp -/// @date 2011-01-19 / 2011-06-15 -/// @author Christophe Riccio -/// -/// GLM is a header only library. There is nothing to compile. -/// dummy.cpp exist only a wordaround for CMake file. -/////////////////////////////////////////////////////////////////////////////////// - -#define GLM_MESSAGES -#include "../glm.hpp" -#include "../ext.hpp" - -//#error "GLM is a header only library" - -int main() -{ - -} diff --git a/thirdparty/glm/glm/core/func_common.hpp b/thirdparty/glm/glm/core/func_common.hpp deleted file mode 100644 index 3c268190..00000000 --- a/thirdparty/glm/glm/core/func_common.hpp +++ /dev/null @@ -1,428 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_common.hpp -/// @date 2008-03-08 / 2010-01-26 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.3 Common Functions -/// -/// @defgroup core_func_common Common functions -/// @ingroup core -/// -/// These all operate component-wise. The description is per component. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef GLM_CORE_func_common -#define GLM_CORE_func_common GLM_VERSION - -#include "_fixes.hpp" - -namespace glm -{ - /// @addtogroup core_func_common - /// @{ - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam genType floating-point or signed integer; scalar or vector types. - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType abs(genType const & x); - - /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. - /// - /// @tparam genType Floating-point or signed integer; scalar or vector types. - /// - /// @see GLSL sign man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType sign(genType const & x); - - /// Returns a value equal to the nearest integer that is less then or equal to x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL floor man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType floor(genType const & x); - - /// Returns a value equal to the nearest integer to x - /// whose absolute value is not larger than the absolute value of x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL trunc man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType trunc(genType const & x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// This includes the possibility that round(x) returns the - /// same value as roundEven(x) for all values of x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL round man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType round(genType const & x); - - /// Returns a value equal to the nearest integer to x. - /// A fractional part of 0.5 will round toward the nearest even - /// integer. (Both 3.5 and 4.5 for x will return 4.0.) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL roundEven man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// @see New round to even technique - template - genType roundEven(genType const & x); - - /// Returns a value equal to the nearest integer - /// that is greater than or equal to x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL ceil man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType ceil(genType const & x); - - /// Return x - floor(x). - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType fract(genType const & x); - - /// Modulus. Returns x - y * floor(x / y) - /// for each component in x using the floating point value y. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL mod man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType mod( - genType const & x, - genType const & y); - - /// Modulus. Returns x - y * floor(x / y) - /// for each component in x using the floating point value y. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL mod man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType mod( - genType const & x, - typename genType::value_type const & y); - - /// Returns the fractional part of x and sets i to the integer - /// part (as a whole number floating point value). Both the - /// return value and the output parameter will have the same - /// sign as x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL modf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType modf( - genType const & x, - genType & i); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType min( - genType const & x, - genType const & y); - - template - genType min( - genType const & x, - typename genType::value_type const & y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType max( - genType const & x, - genType const & y); - - template - genType max( - genType const & x, - typename genType::value_type const & y); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType clamp( - genType const & x, - genType const & minVal, - genType const & maxVal); - - template - genType clamp( - genType const & x, - typename genType::value_type const & minVal, - typename genType::value_type const & maxVal); - - //! @return If genTypeU is a floating scalar or vector: - //! Returns x * (1.0 - a) + y * a, i.e., the linear blend of - //! x and y using the floating-point value a. - //! The value for a is not restricted to the range [0, 1]. - //! - //! @return If genTypeU is a boolean scalar or vector: - //! Selects which vector each returned component comes - //! from. For a component of a that is false, the - //! corresponding component of x is returned. For a - //! component of a that is true, the corresponding - //! component of y is returned. Components of x and y that - //! are not selected are allowed to be invalid floating point - //! values and will have no effect on the results. Thus, this - //! provides different functionality than - //! genType mix(genType x, genType y, genType(a)) - //! where a is a Boolean vector. - /// - /// @see GLSL mix man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// - /// @param[in] x Value to interpolate. - /// @param[in] y Value to interpolate. - /// @param[in] a Interpolant. - /// - /// @tparam genTypeT Floating point scalar or vector. - /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. - /// - /// @code - /// #include - /// ... - /// float a; - /// bool b; - /// glm::dvec3 e; - /// glm::dvec3 f; - /// glm::vec4 g; - /// glm::vec4 h; - /// ... - /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. - /// glm::vec4 s = glm::mix(g, h, b); // Teturns g or h; - /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. - /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. - /// @endcode - template - genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a); - - //! Returns 0.0 if x < edge, otherwise it returns 1.0. - //! - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType step( - genType const & edge, - genType const & x); - - template - genType step( - typename genType::value_type const & edge, - genType const & x); - - /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and - /// performs smooth Hermite interpolation between 0 and 1 - /// when edge0 < x < edge1. This is useful in cases where - /// you would want a threshold function with a smooth - /// transition. This is equivalent to: - /// genType t; - /// t = clamp ((x edge0) / (edge1 edge0), 0, 1); - /// return t * t * (3 2 * t); - /// Results are undefined if edge0 >= edge1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL smoothstep man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType smoothstep( - genType const & edge0, - genType const & edge1, - genType const & x); - - template - genType smoothstep( - typename genType::value_type const & edge0, - typename genType::value_type const & edge1, - genType const & x); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - typename genType::bool_type isnan(genType const & x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL isinf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - typename genType::bool_type isinf(genType const & x); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam genType Single-precision floating-point scalar or vector types. - /// @tparam genIType Signed integer scalar or vector types. - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genIType floatBitsToInt(genType const & value); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam genType Single-precision floating-point scalar or vector types. - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genUType floatBitsToUint(genType const & value); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam genType Single-precision floating-point scalar or vector types. - /// @tparam genIType Signed integer scalar or vector types. - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// - /// @todo Clarify this declaration, we don't need to actually specify the return type - template - genType intBitsToFloat(genIType const & value); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam genType Single-precision floating-point scalar or vector types. - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// - /// @todo Clarify this declaration, we don't need to actually specify the return type - template - genType uintBitsToFloat(genUType const & value); - - /// Computes and returns a * b + c. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fma man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType fma(genType const & a, genType const & b, genType const & c); - - /// Splits x into a floating-point significand in the range - /// [0.5, 1.0) and an integral exponent of two, such that: - /// x = significand * exp(2, exponent) - /// - /// The significand is returned by the function and the - /// exponent is returned in the parameter exp. For a - /// floating-point value of zero, the significant and exponent - /// are both zero. For a floating-point value that is an - /// infinity or is not a number, the results are undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL frexp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType frexp(genType const & x, genIType & exp); - - /// Builds a floating-point number from x and the - /// corresponding integral exponent of two in exp, returning: - /// significand * exp(2, exponent) - /// - /// If this product is too large to be represented in the - /// floating-point type, the result is undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL ldexp man page; - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - genType ldexp(genType const & x, genIType const & exp); - - /// @} -}//namespace glm - -#include "func_common.inl" - -#endif//GLM_CORE_func_common diff --git a/thirdparty/glm/glm/core/func_common.inl b/thirdparty/glm/glm/core/func_common.inl deleted file mode 100644 index 0fe59277..00000000 --- a/thirdparty/glm/glm/core/func_common.inl +++ /dev/null @@ -1,1187 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_common.inl -/// @date 2008-08-03 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#include "_vectorize.hpp" - -namespace glm{ -namespace detail -{ - template - struct Abs_ - {}; - - template - struct Abs_ - { - static genFIType get(genFIType const & x) - { - GLM_STATIC_ASSERT( - detail::type::is_float || - detail::type::is_int, "'abs' only accept floating-point and integer inputs"); - return x >= genFIType(0) ? x : -x; - // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; - } - }; - - template - struct Abs_ - { - static genFIType get(genFIType const & x) - { - GLM_STATIC_ASSERT( - detail::type::is_uint, "'abs' only accept floating-point and integer inputs"); - return x; - } - }; -}//namespace detail - - // abs - template - GLM_FUNC_QUALIFIER genFIType abs - ( - genFIType const & x - ) - { - return detail::Abs_::is_signed>::get(x); - } - - VECTORIZE_VEC(abs) - - // sign - //Try something like based on x >> 31 to get the sign bit - template - GLM_FUNC_QUALIFIER genFIType sign - ( - genFIType const & x - ) - { - GLM_STATIC_ASSERT( - detail::type::is_float || - detail::type::is_int, "'sign' only accept signed inputs"); - - genFIType result; - if(x > genFIType(0)) - result = genFIType(1); - else if(x < genFIType(0)) - result = genFIType(-1); - else - result = genFIType(0); - return result; - } - - VECTORIZE_VEC(sign) - - // floor - template <> - GLM_FUNC_QUALIFIER detail::half floor(detail::half const & x) - { - return detail::half(::std::floor(float(x))); - } - - template - GLM_FUNC_QUALIFIER genType floor(genType const & x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'floor' only accept floating-point inputs"); - - return ::std::floor(x); - } - - VECTORIZE_VEC(floor) - - // trunc - template - GLM_FUNC_QUALIFIER genType trunc(genType const & x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'trunc' only accept floating-point inputs"); - return x < 0 ? -floor(-x) : floor(x); - } - - VECTORIZE_VEC(trunc) - - // round - template - GLM_FUNC_QUALIFIER genType round(genType const& x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'round' only accept floating-point inputs"); - - if(x < 0) - return genType(int(x - genType(0.5))); - return genType(int(x + genType(0.5))); - } - - VECTORIZE_VEC(round) - -/* - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType const& x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); - - return genType(int(x + genType(int(x) % 2))); - } -*/ - - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType const & x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'roundEven' only accept floating-point inputs"); - - int Integer = int(x); - genType IntegerPart = genType(Integer); - genType FractionalPart = fract(x); - - if(FractionalPart > genType(0.5) || FractionalPart < genType(0.5)) - { - return round(x); - } - else if((Integer % 2) == 0) - { - return IntegerPart; - } - else if(x <= genType(0)) // Work around... - { - return IntegerPart - 1; - } - else - { - return IntegerPart + 1; - } - //else // Bug on MinGW 4.5.2 - //{ - // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); - //} - } - - VECTORIZE_VEC(roundEven) - - // ceil - template - GLM_FUNC_QUALIFIER genType ceil(genType const & x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'ceil' only accept floating-point inputs"); - - return ::std::ceil(x); - } - - VECTORIZE_VEC(ceil) - - // fract - template - GLM_FUNC_QUALIFIER genType fract - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'fract' only accept floating-point inputs"); - - return x - ::std::floor(x); - } - - VECTORIZE_VEC(fract) - - // mod - template - GLM_FUNC_QUALIFIER genType mod - ( - genType const & x, - genType const & y - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'mod' only accept floating-point inputs"); - - return x - y * floor(x / y); - } - - VECTORIZE_VEC_SCA(mod) - VECTORIZE_VEC_VEC(mod) - - // modf - template - GLM_FUNC_QUALIFIER genType modf - ( - genType const & x, - genType & i - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'modf' only accept floating-point inputs"); - - return std::modf(x, &i); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 modf - ( - detail::tvec2 const & x, - detail::tvec2 & i - ) - { - return detail::tvec2( - modf(x.x, i.x), - modf(x.y, i.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 modf - ( - detail::tvec3 const & x, - detail::tvec3 & i - ) - { - return detail::tvec3( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 modf - ( - detail::tvec4 const & x, - detail::tvec4 & i - ) - { - return detail::tvec4( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z), - modf(x.w, i.w)); - } - - //// Only valid if (INT_MIN <= x-y <= INT_MAX) - //// min(x,y) - //r = y + ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT 1))); - //// max(x,y) - //r = x - ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - - // min - template - GLM_FUNC_QUALIFIER genType min - ( - genType const & x, - genType const & y - ) - { - GLM_STATIC_ASSERT( - detail::type::is_float || - detail::type::is_int || - detail::type::is_uint, "'min' only accept numbers"); - - return x < y ? x : y; - } - - VECTORIZE_VEC_SCA(min) - VECTORIZE_VEC_VEC(min) - - // max - template - GLM_FUNC_QUALIFIER genType max - ( - genType const & x, - genType const & y - ) - { - GLM_STATIC_ASSERT( - detail::type::is_float || - detail::type::is_int || - detail::type::is_uint, "'max' only accept numbers"); - - return x > y ? x : y; - } - - VECTORIZE_VEC_SCA(max) - VECTORIZE_VEC_VEC(max) - - // clamp - template - GLM_FUNC_QUALIFIER valType clamp - ( - valType const & x, - valType const & minVal, - valType const & maxVal - ) - { - GLM_STATIC_ASSERT( - detail::type::is_float || - detail::type::is_int || - detail::type::is_uint, "'clamp' only accept numbers"); - - // Old implementation, less predictable branching - //if(x >= maxVal) return maxVal; - //if(x <= minVal) return minVal; - //return x; - return max(min(x, maxVal), minVal); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 clamp - ( - detail::tvec2 const & x, - typename detail::tvec2::value_type const & minVal, - typename detail::tvec2::value_type const & maxVal - ) - { - return detail::tvec2( - clamp(x.x, minVal, maxVal), - clamp(x.y, minVal, maxVal)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 clamp - ( - detail::tvec3 const & x, - typename detail::tvec3::value_type const & minVal, - typename detail::tvec3::value_type const & maxVal - ) - { - return detail::tvec3( - clamp(x.x, minVal, maxVal), - clamp(x.y, minVal, maxVal), - clamp(x.z, minVal, maxVal)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 clamp - ( - detail::tvec4 const & x, - typename detail::tvec4::value_type const & minVal, - typename detail::tvec4::value_type const & maxVal - ) - { - return detail::tvec4( - clamp(x.x, minVal, maxVal), - clamp(x.y, minVal, maxVal), - clamp(x.z, minVal, maxVal), - clamp(x.w, minVal, maxVal)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 clamp - ( - detail::tvec2 const & x, - detail::tvec2 const & minVal, - detail::tvec2 const & maxVal - ) - { - return detail::tvec2( - clamp(x.x, minVal.x, maxVal.x), - clamp(x.y, minVal.y, maxVal.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 clamp - ( - detail::tvec3 const & x, - detail::tvec3 const & minVal, - detail::tvec3 const & maxVal - ) - { - return detail::tvec3( - clamp(x.x, minVal.x, maxVal.x), - clamp(x.y, minVal.y, maxVal.y), - clamp(x.z, minVal.z, maxVal.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 clamp - ( - detail::tvec4 const & x, - detail::tvec4 const & minVal, - detail::tvec4 const & maxVal - ) - { - return detail::tvec4( - clamp(x.x, minVal.x, maxVal.x), - clamp(x.y, minVal.y, maxVal.y), - clamp(x.z, minVal.z, maxVal.z), - clamp(x.w, minVal.w, maxVal.w)); - } - - // mix - template - GLM_FUNC_QUALIFIER genTypeT mix - ( - genTypeT const & x, - genTypeT const & y, - genTypeU const & a - ) - { - // It could be a vector too - //GLM_STATIC_ASSERT( - // detail::type::is_float && - // detail::type::is_float); - - //return x + a * (y - x); - return genTypeT(genTypeU(x) + a * genTypeU(y - x)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 mix - ( - detail::tvec2 const & x, - detail::tvec2 const & y, - valTypeB const & a - ) - { - return detail::tvec2( - detail::tvec2(x) + a * detail::tvec2(y - x)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 mix - ( - detail::tvec3 const & x, - detail::tvec3 const & y, - valTypeB const & a - ) - { - return detail::tvec3( - detail::tvec3(x) + a * detail::tvec3(y - x)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 mix - ( - detail::tvec4 const & x, - detail::tvec4 const & y, - valTypeB const & a - ) - { - return detail::tvec4( - detail::tvec4(x) + a * detail::tvec4(y - x)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 mix - ( - detail::tvec2 const & x, - detail::tvec2 const & y, - detail::tvec2 const & a - ) - { - return detail::tvec2( - detail::tvec2(x) + a * detail::tvec2(y - x)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 mix - ( - detail::tvec3 const & x, - detail::tvec3 const & y, - detail::tvec3 const & a - ) - { - return detail::tvec3( - detail::tvec3(x) + a * detail::tvec3(y - x)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 mix - ( - detail::tvec4 const & x, - detail::tvec4 const & y, - detail::tvec4 const & a - ) - { - return detail::tvec4( - detail::tvec4(x) + a * detail::tvec4(y - x)); - } - - //template - //GLM_FUNC_QUALIFIER genTypeT mix - //( - // genTypeT const & x, - // genTypeT const & y, - // float const & a - //) - //{ - // // It could be a vector too - // //GLM_STATIC_ASSERT( - // // detail::type::is_float && - // // detail::type::is_float); - - // return x + a * (y - x); - //} - - template - GLM_FUNC_QUALIFIER genType mix - ( - genType const & x, - genType const & y, - bool const & a - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); - - return a ? y : x; - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 mix - ( - detail::tvec2 const & x, - detail::tvec2 const & y, - typename detail::tvec2::bool_type a - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); - - detail::tvec2 result; - for - ( - typename detail::tvec2::size_type i = 0; - i < detail::tvec2::value_size(); - ++i - ) - { - result[i] = a[i] ? y[i] : x[i]; - } - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 mix - ( - detail::tvec3 const & x, - detail::tvec3 const & y, - typename detail::tvec3::bool_type a - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); - - detail::tvec3 result; - for - ( - typename detail::tvec3::size_type i = 0; - i < detail::tvec3::value_size(); - ++i - ) - { - result[i] = a[i] ? y[i] : x[i]; - } - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 mix - ( - detail::tvec4 const & x, - detail::tvec4 const & y, - typename detail::tvec4::bool_type a - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); - - detail::tvec4 result; - for - ( - typename detail::tvec4::size_type i = 0; - i < detail::tvec4::value_size(); - ++i - ) - { - result[i] = a[i] ? y[i] : x[i]; - } - return result; - } - - // step - template - GLM_FUNC_QUALIFIER genType step - ( - genType const & edge, - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); - - return x < edge ? genType(0) : genType(1); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 step - ( - typename detail::tvec2::value_type const & edge, - detail::tvec2 const & x - ) - { - return detail::tvec2( - x.x < edge ? T(0) : T(1), - x.y < edge ? T(0) : T(1)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 step - ( - typename detail::tvec3::value_type const & edge, - detail::tvec3 const & x - ) - { - return detail::tvec3( - x.x < edge ? T(0) : T(1), - x.y < edge ? T(0) : T(1), - x.z < edge ? T(0) : T(1)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 step - ( - typename detail::tvec4::value_type const & edge, - detail::tvec4 const & x - ) - { - return detail::tvec4( - x.x < edge ? T(0) : T(1), - x.y < edge ? T(0) : T(1), - x.z < edge ? T(0) : T(1), - x.w < edge ? T(0) : T(1)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 step - ( - detail::tvec2 const & edge, - detail::tvec2 const & x - ) - { - return detail::tvec2( - x.x < edge.x ? T(0) : T(1), - x.y < edge.y ? T(0) : T(1)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 step - ( - detail::tvec3 const & edge, - detail::tvec3 const & x - ) - { - return detail::tvec3( - x.x < edge.x ? T(0) : T(1), - x.y < edge.y ? T(0) : T(1), - x.z < edge.z ? T(0) : T(1)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 step - ( - detail::tvec4 const & edge, - detail::tvec4 const & x - ) - { - return detail::tvec4( - x.x < edge.x ? T(0) : T(1), - x.y < edge.y ? T(0) : T(1), - x.z < edge.z ? T(0) : T(1), - x.w < edge.w ? T(0) : T(1)); - } - - // smoothstep - template - GLM_FUNC_QUALIFIER genType smoothstep - ( - genType const & edge0, - genType const & edge1, - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'mix' only accept floating-point inputs"); - - genType tmp = clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)); - return tmp * tmp * (genType(3) - genType(2) * tmp); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 smoothstep - ( - typename detail::tvec2::value_type const & edge0, - typename detail::tvec2::value_type const & edge1, - detail::tvec2 const & x - ) - { - return detail::tvec2( - smoothstep(edge0, edge1, x.x), - smoothstep(edge0, edge1, x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 smoothstep - ( - typename detail::tvec3::value_type const & edge0, - typename detail::tvec3::value_type const & edge1, - detail::tvec3 const & x - ) - { - return detail::tvec3( - smoothstep(edge0, edge1, x.x), - smoothstep(edge0, edge1, x.y), - smoothstep(edge0, edge1, x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 smoothstep - ( - typename detail::tvec4::value_type const & edge0, - typename detail::tvec4::value_type const & edge1, - detail::tvec4 const & x - ) - { - return detail::tvec4( - smoothstep(edge0, edge1, x.x), - smoothstep(edge0, edge1, x.y), - smoothstep(edge0, edge1, x.z), - smoothstep(edge0, edge1, x.w)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 smoothstep - ( - detail::tvec2 const & edge0, - detail::tvec2 const & edge1, - detail::tvec2 const & x - ) - { - return detail::tvec2( - smoothstep(edge0.x, edge1.x, x.x), - smoothstep(edge0.y, edge1.y, x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 smoothstep - ( - detail::tvec3 const & edge0, - detail::tvec3 const & edge1, - detail::tvec3 const & x - ) - { - return detail::tvec3( - smoothstep(edge0.x, edge1.x, x.x), - smoothstep(edge0.y, edge1.y, x.y), - smoothstep(edge0.z, edge1.z, x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 smoothstep - ( - detail::tvec4 const & edge0, - detail::tvec4 const & edge1, - detail::tvec4 const & x - ) - { - return detail::tvec4( - smoothstep(edge0.x, edge1.x, x.x), - smoothstep(edge0.y, edge1.y, x.y), - smoothstep(edge0.z, edge1.z, x.z), - smoothstep(edge0.w, edge1.w, x.w)); - } - - template - GLM_FUNC_QUALIFIER bool isnan(genType const & x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'isnan' only accept floating-point inputs"); - -# if(GLM_COMPILER & GLM_COMPILER_VC) - return _isnan(x) != 0; -# elif(GLM_COMPILER & GLM_COMPILER_GCC) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return _isnan(x) != 0; -# else - return std::isnan(x) != 0; -# endif -# else - return std::isnan(x) != 0; -# endif - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isnan - ( - detail::tvec2 const & x - ) - { - return typename detail::tvec2::bool_type( - isnan(x.x), - isnan(x.y)); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isnan - ( - detail::tvec3 const & x - ) - { - return typename detail::tvec3::bool_type( - isnan(x.x), - isnan(x.y), - isnan(x.z)); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isnan - ( - detail::tvec4 const & x - ) - { - return typename detail::tvec4::bool_type( - isnan(x.x), - isnan(x.y), - isnan(x.z), - isnan(x.w)); - } - - template - GLM_FUNC_QUALIFIER bool isinf( - genType const & x) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'isinf' only accept floating-point inputs"); - -# if(GLM_COMPILER & GLM_COMPILER_VC) - return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# elif(GLM_COMPILER & GLM_COMPILER_GCC) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return _isinf(x) != 0; -# else - return std::isinf(x) != 0; -# endif -# else - return std::isinf(x) != 0; -# endif - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec2::bool_type isinf - ( - detail::tvec2 const & x - ) - { - return typename detail::tvec2::bool_type( - isinf(x.x), - isinf(x.y)); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec3::bool_type isinf - ( - detail::tvec3 const & x - ) - { - return typename detail::tvec3::bool_type( - isinf(x.x), - isinf(x.y), - isinf(x.z)); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec4::bool_type isinf - ( - detail::tvec4 const & x - ) - { - return typename detail::tvec4::bool_type( - isinf(x.x), - isinf(x.y), - isinf(x.z), - isinf(x.w)); - } - - GLM_FUNC_QUALIFIER int floatBitsToInt(float const & value) - { - union - { - float f; - int i; - } fi; - - fi.f = value; - return fi.i; - } - - GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToInt - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - floatBitsToInt(value.x), - floatBitsToInt(value.y)); - } - - GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToInt - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - floatBitsToInt(value.x), - floatBitsToInt(value.y), - floatBitsToInt(value.z)); - } - - GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToInt - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - floatBitsToInt(value.x), - floatBitsToInt(value.y), - floatBitsToInt(value.z), - floatBitsToInt(value.w)); - } - - GLM_FUNC_QUALIFIER uint floatBitsToUint(float const & value) - { - union - { - float f; - uint u; - } fu; - - fu.f = value; - return fu.u; - } - - GLM_FUNC_QUALIFIER detail::tvec2 floatBitsToUint - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - floatBitsToUint(value.x), - floatBitsToUint(value.y)); - } - - GLM_FUNC_QUALIFIER detail::tvec3 floatBitsToUint - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - floatBitsToUint(value.x), - floatBitsToUint(value.y), - floatBitsToUint(value.z)); - } - - GLM_FUNC_QUALIFIER detail::tvec4 floatBitsToUint - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - floatBitsToUint(value.x), - floatBitsToUint(value.y), - floatBitsToUint(value.z), - floatBitsToUint(value.w)); - } - - GLM_FUNC_QUALIFIER float intBitsToFloat(int const & value) - { - union - { - float f; - int i; - } fi; - - fi.i = value; - return fi.f; - } - - GLM_FUNC_QUALIFIER detail::tvec2 intBitsToFloat - - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - intBitsToFloat(value.x), - intBitsToFloat(value.y)); - } - - GLM_FUNC_QUALIFIER detail::tvec3 intBitsToFloat - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - intBitsToFloat(value.x), - intBitsToFloat(value.y), - intBitsToFloat(value.z)); - } - - GLM_FUNC_QUALIFIER detail::tvec4 intBitsToFloat - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - intBitsToFloat(value.x), - intBitsToFloat(value.y), - intBitsToFloat(value.z), - intBitsToFloat(value.w)); - } - - GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const & value) - { - union - { - float f; - uint u; - } fu; - - fu.u = value; - return fu.f; - } - - GLM_FUNC_QUALIFIER detail::tvec2 uintBitsToFloat - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - uintBitsToFloat(value.x), - uintBitsToFloat(value.y)); - } - - GLM_FUNC_QUALIFIER detail::tvec3 uintBitsToFloat - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - uintBitsToFloat(value.x), - uintBitsToFloat(value.y), - uintBitsToFloat(value.z)); - } - - GLM_FUNC_QUALIFIER detail::tvec4 uintBitsToFloat - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - uintBitsToFloat(value.x), - uintBitsToFloat(value.y), - uintBitsToFloat(value.z), - uintBitsToFloat(value.w)); - } - - template - GLM_FUNC_QUALIFIER genType fma - ( - genType const & a, - genType const & b, - genType const & c - ) - { - return a * b + c; - } - - template - GLM_FUNC_QUALIFIER genType frexp - ( - genType const & x, - int & exp - ) - { - return std::frexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 frexp - ( - detail::tvec2 const & x, - detail::tvec2 & exp - ) - { - return std::frexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 frexp - ( - detail::tvec3 const & x, - detail::tvec3 & exp - ) - { - return std::frexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 frexp - ( - detail::tvec4 const & x, - detail::tvec4 & exp - ) - { - return std::frexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER genType ldexp - ( - genType const & x, - int const & exp - ) - { - return std::frexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 ldexp - ( - detail::tvec2 const & x, - detail::tvec2 const & exp - ) - { - return std::frexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 ldexp - ( - detail::tvec3 const & x, - detail::tvec3 const & exp - ) - { - return std::frexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 ldexp - ( - detail::tvec4 const & x, - detail::tvec4 const & exp - ) - { - return std::frexp(x, exp); - } - -}//namespace glm diff --git a/thirdparty/glm/glm/core/func_exponential.hpp b/thirdparty/glm/glm/core/func_exponential.hpp deleted file mode 100644 index 69399e86..00000000 --- a/thirdparty/glm/glm/core/func_exponential.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_exponential.hpp -/// @date 2008-08-08 / 2011-06-14 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions -/// -/// @defgroup core_func_exponential Exponential functions -/// @ingroup core -/// -/// These all operate component-wise. The description is per component. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef glm_core_func_exponential -#define glm_core_func_exponential GLM_VERSION - -namespace glm -{ - /// @addtogroup core_func_exponential - /// @{ - - /// Returns x raised to the y power. - /// - /// @param x pow function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. - /// @param y - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL pow man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - genType pow(genType const & x, genType const & y); - - /// Returns the natural exponentiation of x, i.e., e^x. - /// - /// @param x exp function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL exp man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - genType exp(genType const & x); - - /// Returns the natural logarithm of x, i.e., - /// returns the value y which satisfies the equation x = e^y. - /// Results are undefined if x <= 0. - /// - /// @param x log function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL log man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - genType log(genType const & x); - - /// Returns 2 raised to the x power. - /// - /// @param x exp2 function is defined for input values of x defined in the range (inf-, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL exp2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - genType exp2(genType const & x); - - /// Returns the base 2 log of x, i.e., returns the value y, - /// which satisfies the equation x = 2 ^ y. - /// - /// @param x log2 function is defined for input values of x defined in the range (0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL log2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - genType log2(genType const & x); - - /// Returns the positive square root of x. - /// - /// @param x sqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL sqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - genType sqrt(genType const & x); - - /// Returns the reciprocal of the positive square root of x. - /// - /// @param x inversesqrt function is defined for input values of x defined in the range [0, inf+) in the limit of the type precision. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL inversesqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - genType inversesqrt(genType const & x); - - /// @} -}//namespace glm - -#include "func_exponential.inl" - -#endif//glm_core_func_exponential diff --git a/thirdparty/glm/glm/core/func_exponential.inl b/thirdparty/glm/glm/core/func_exponential.inl deleted file mode 100644 index 5ad49b7b..00000000 --- a/thirdparty/glm/glm/core/func_exponential.inl +++ /dev/null @@ -1,157 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_exponential.inl -/// @date 2008-08-03 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#include "_vectorize.hpp" - -namespace glm -{ - // pow - template - GLM_FUNC_QUALIFIER genType pow - ( - genType const & x, - genType const & y - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'pow' only accept floating-point input"); - - return ::std::pow(x, y); - } - - VECTORIZE_VEC_VEC(pow) - - // exp - template - GLM_FUNC_QUALIFIER genType exp - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'exp' only accept floating-point input"); - - return ::std::exp(x); - } - - VECTORIZE_VEC(exp) - - // log - template - GLM_FUNC_QUALIFIER genType log - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'log' only accept floating-point input"); - - return ::std::log(x); - } - - VECTORIZE_VEC(log) - - //exp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType exp2 - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'exp2' only accept floating-point input"); - - return ::std::exp(genType(0.69314718055994530941723212145818) * x); - } - - VECTORIZE_VEC(exp2) - -namespace _detail -{ - template - struct _compute_log2 - { - template - T operator() (T const & Value) const; -/* - { - GLM_STATIC_ASSERT(0, "'log2' parameter has an invalid template parameter type. GLM core features only supports floating-point types, include for integer types support. Others types are not supported."); - return Value; - } -*/ - }; - - template <> - struct _compute_log2 - { - template - T operator() (T const & Value) const - { - return T(::std::log(Value)) / T(0.69314718055994530941723212145818); - } - }; - -}//namespace _detail - - // log2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType log2 - ( - genType const & x - ) - { - assert(x > genType(0)); // log2 is only defined on the range (0, inf] - return _detail::_compute_log2::ID>()(x); - } - - VECTORIZE_VEC(log2) - - // sqrt - template - GLM_FUNC_QUALIFIER genType sqrt - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'sqrt' only accept floating-point input"); - - return genType(::std::sqrt(x)); - } - - VECTORIZE_VEC(sqrt) - - template - GLM_FUNC_QUALIFIER genType inversesqrt - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'inversesqrt' only accept floating-point input"); - - return genType(1) / ::std::sqrt(x); - } - - VECTORIZE_VEC(inversesqrt) - -}//namespace glm diff --git a/thirdparty/glm/glm/core/func_geometric.hpp b/thirdparty/glm/glm/core/func_geometric.hpp deleted file mode 100644 index d24a9c86..00000000 --- a/thirdparty/glm/glm/core/func_geometric.hpp +++ /dev/null @@ -1,138 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_geometric.hpp -/// @date 2008-08-03 / 2011-06-14 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions -/// -/// @defgroup core_func_geometric Geometric functions -/// @ingroup core -/// -/// These operate on vectors as vectors, not component-wise. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef glm_core_func_geometric -#define glm_core_func_geometric GLM_VERSION - -namespace glm -{ - /// @addtogroup core_func_geometric - /// @{ - - /// Returns the length of x, i.e., sqrt(x * x). - /// - /// @tparam genType Floating-point vector types. - /// - /// @see GLSL length man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - typename genType::value_type length( - genType const & x); - - /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). - /// - /// @tparam genType Floating-point vector types. - /// - /// @see GLSL distance man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - typename genType::value_type distance( - genType const & p0, - genType const & p1); - - /// Returns the dot product of x and y, i.e., result = x * y. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see GLSL dot man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - typename genType::value_type dot( - genType const & x, - genType const & y); - - /// Returns the cross product of x and y. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see GLSL cross man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - detail::tvec3 cross( - detail::tvec3 const & x, - detail::tvec3 const & y); - - /// Returns a vector in the same direction as x but with length of 1. - /// - /// @see GLSL normalize man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - genType normalize( - genType const & x); - - /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see GLSL faceforward man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - genType faceforward( - genType const & N, - genType const & I, - genType const & Nref); - - /// For the incident vector I and surface orientation N, - /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see GLSL reflect man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - genType reflect( - genType const & I, - genType const & N); - - /// For the incident vector I and surface normal N, - /// and the ratio of indices of refraction eta, - /// return the refraction vector. - /// - /// @tparam genType Floating-point vector types. - /// - /// @see GLSL refract man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - genType refract( - genType const & I, - genType const & N, - typename genType::value_type const & eta); - - /// @} -}//namespace glm - -#include "func_geometric.inl" - -#endif//glm_core_func_geometric diff --git a/thirdparty/glm/glm/core/func_geometric.inl b/thirdparty/glm/glm/core/func_geometric.inl deleted file mode 100644 index ccc5bbc5..00000000 --- a/thirdparty/glm/glm/core/func_geometric.inl +++ /dev/null @@ -1,324 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_geometric.inl -/// @date 2008-08-03 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#include "_vectorize.hpp" - -namespace glm -{ - // length - template - GLM_FUNC_QUALIFIER genType length - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); - - genType sqr = x * x; - return sqrt(sqr); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec2::value_type length - ( - detail::tvec2 const & v - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); - - typename detail::tvec2::value_type sqr = v.x * v.x + v.y * v.y; - return sqrt(sqr); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec3::value_type length - ( - detail::tvec3 const & v - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); - - typename detail::tvec3::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z; - return sqrt(sqr); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec4::value_type length - ( - detail::tvec4 const & v - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'length' only accept floating-point inputs"); - - typename detail::tvec4::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w; - return sqrt(sqr); - } - - // distance - template - GLM_FUNC_QUALIFIER genType distance - ( - genType const & p0, - genType const & p1 - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); - - return length(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec2::value_type distance - ( - detail::tvec2 const & p0, - detail::tvec2 const & p1 - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); - - return length(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec3::value_type distance - ( - detail::tvec3 const & p0, - detail::tvec3 const & p1 - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); - - return length(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec4::value_type distance - ( - detail::tvec4 const & p0, - detail::tvec4 const & p1 - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'distance' only accept floating-point inputs"); - - return length(p1 - p0); - } - - // dot - template - GLM_FUNC_QUALIFIER genType dot - ( - genType const & x, - genType const & y - - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); - - return x * y; - } - - template - GLM_FUNC_QUALIFIER typename detail::tvec2::value_type dot - ( - detail::tvec2 const & x, - detail::tvec2 const & y - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); - - return x.x * y.x + x.y * y.y; - } - - template - GLM_FUNC_QUALIFIER T dot - ( - detail::tvec3 const & x, - detail::tvec3 const & y - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); - - return x.x * y.x + x.y * y.y + x.z * y.z; - } -/* // SSE3 - GLM_FUNC_QUALIFIER float dot(const tvec4& x, const tvec4& y) - { - float Result; - __asm - { - mov esi, x - mov edi, y - movaps xmm0, [esi] - mulps xmm0, [edi] - haddps( _xmm0, _xmm0 ) - haddps( _xmm0, _xmm0 ) - movss Result, xmm0 - } - return Result; - } -*/ - template - GLM_FUNC_QUALIFIER T dot - ( - detail::tvec4 const & x, - detail::tvec4 const & y - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'dot' only accept floating-point inputs"); - - return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w; - } - - // cross - template - GLM_FUNC_QUALIFIER detail::tvec3 cross - ( - detail::tvec3 const & x, - detail::tvec3 const & y - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'cross' only accept floating-point inputs"); - - return detail::tvec3( - x.y * y.z - y.y * x.z, - x.z * y.x - y.z * x.x, - x.x * y.y - y.x * x.y); - } - - // normalize - template - GLM_FUNC_QUALIFIER genType normalize - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); - - return x < genType(0) ? genType(-1) : genType(1); - } - - // According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error - template - GLM_FUNC_QUALIFIER detail::tvec2 normalize - ( - detail::tvec2 const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); - - typename detail::tvec2::value_type sqr = x.x * x.x + x.y * x.y; - return x * inversesqrt(sqr); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 normalize - ( - detail::tvec3 const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); - - typename detail::tvec3::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z; - return x * inversesqrt(sqr); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 normalize - ( - detail::tvec4 const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'normalize' only accept floating-point inputs"); - - typename detail::tvec4::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w; - return x * inversesqrt(sqr); - } - - // faceforward - template - GLM_FUNC_QUALIFIER genType faceforward - ( - genType const & N, - genType const & I, - genType const & Nref - ) - { - return dot(Nref, I) < 0 ? N : -N; - } - - // reflect - template - genType reflect - ( - genType const & I, - genType const & N - ) - { - return I - N * dot(N, I) * genType(2); - } - - // refract - template - GLM_FUNC_QUALIFIER genType refract - ( - genType const & I, - genType const & N, - genType const & eta - ) - { - //It could be a vector - //GLM_STATIC_ASSERT(detail::type::is_float); - - genType dotValue = dot(N, I); - genType k = genType(1) - eta * eta * (genType(1) - dotValue * dotValue); - if(k < genType(0)) - return genType(0); - else - return eta * I - (eta * dotValue + sqrt(k)) * N; - } - - template - GLM_FUNC_QUALIFIER genType refract - ( - genType const & I, - genType const & N, - typename genType::value_type const & eta - ) - { - //It could be a vector - //GLM_STATIC_ASSERT(detail::type::is_float); - - typename genType::value_type dotValue = dot(N, I); - typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue); - if(k < typename genType::value_type(0)) - return genType(0); - else - return eta * I - (eta * dotValue + sqrt(k)) * N; - } - -}//namespace glm diff --git a/thirdparty/glm/glm/core/func_integer.hpp b/thirdparty/glm/glm/core/func_integer.hpp deleted file mode 100644 index c9ae0c09..00000000 --- a/thirdparty/glm/glm/core/func_integer.hpp +++ /dev/null @@ -1,201 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_integer.hpp -/// @date 2010-03-17 / 2011-06-18 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.8 Integer Functions -/// -/// @defgroup core_func_integer Integer functions -/// @ingroup core -/// -/// These all operate component-wise. The description is per component. -/// The notation [a, b] means the set of bits from bit-number a through bit-number -/// b, inclusive. The lowest-order bit is bit 0. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef glm_core_func_integer -#define glm_core_func_integer GLM_VERSION - -namespace glm -{ - /// @addtogroup core_func_integer - /// @{ - - /// Adds 32-bit unsigned integer x and y, returning the sum - /// modulo pow(2, 32). The value carry is set to 0 if the sum was - /// less than pow(2, 32), or to 1 otherwise. - /// - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see GLSL uaddCarry man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - genUType uaddCarry( - genUType const & x, - genUType const & y, - genUType & carry); - - /// Subtracts the 32-bit unsigned integer y from x, returning - /// the difference if non-negative, or pow(2, 32) plus the difference - /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. - /// - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see GLSL usubBorrow man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - genUType usubBorrow( - genUType const & x, - genUType const & y, - genUType & borrow); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam genUType Unsigned integer scalar or vector types. - /// - /// @see GLSL umulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - void umulExtended( - genUType const & x, - genUType const & y, - genUType & msb, - genUType & lsb); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam genIType Signed integer scalar or vector types. - /// - /// @see GLSL imulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - void imulExtended( - genIType const & x, - genIType const & y, - genIType & msb, - genIType & lsb); - - /// Extracts bits [offset, offset + bits - 1] from value, - /// returning them in the least significant bits of the result. - /// For unsigned data types, the most significant bits of the - /// result will be set to zero. For signed data types, the - /// most significant bits will be set to the value of bit offset + base 1. - /// - /// If bits is zero, the result will be zero. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used - /// to store the operand. - /// - /// @tparam genIUType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldExtract man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - genIUType bitfieldExtract( - genIUType const & Value, - int const & Offset, - int const & Bits); - - /// Returns the insertion the bits least-significant bits of insert into base. - /// - /// The result will have bits [offset, offset + bits - 1] taken - /// from bits [0, bits 1] of insert, and all other bits taken - /// directly from the corresponding bits of base. If bits is - /// zero, the result will simply be base. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used to - /// store the operand. - /// - /// @tparam genIUType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldInsert man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - genIUType bitfieldInsert( - genIUType const & Base, - genIUType const & Insert, - int const & Offset, - int const & Bits); - - /// Returns the reversal of the bits of value. - /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, - /// where bits is the total number of bits used to represent value. - /// - /// @tparam genIUType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldReverse man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - genIUType bitfieldReverse(genIUType const & value); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam genIUType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - /// - /// @todo Clarify the declaration to specify that scalars are suported. - template class genIUType> - typename genIUType::signed_type bitCount(genIUType const & Value); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - /// - /// @todo Clarify the declaration to specify that scalars are suported. - template class genIUType> - typename genIUType::signed_type findLSB(genIUType const & Value); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - /// - /// @todo Clarify the declaration to specify that scalars are suported. - template class genIUType> - typename genIUType::signed_type findMSB(genIUType const & Value); - - /// @} -}//namespace glm - -#include "func_integer.inl" - -#endif//glm_core_func_integer - diff --git a/thirdparty/glm/glm/core/func_integer.inl b/thirdparty/glm/glm/core/func_integer.inl deleted file mode 100644 index 5de9fcbf..00000000 --- a/thirdparty/glm/glm/core/func_integer.inl +++ /dev/null @@ -1,602 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_integer.inl -/// @date 2010-03-17 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#include "_vectorize.hpp" -#if(GLM_COMPILER & GLM_COMPILER_VC) -#include -#pragma intrinsic(_BitScanReverse) -#endif - -namespace glm -{ - // uaddCarry - template - GLM_FUNC_QUALIFIER genUType uaddCarry - ( - genUType const & x, - genUType const & y, - genUType & Carry - ) - { - detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y); - genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))); - Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0; - return Result; - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 uaddCarry - ( - detail::tvec2 const & x, - detail::tvec2 const & y, - detail::tvec2 & Carry - ) - { - return detail::tvec2( - uaddCarry(x[0], y[0], Carry[0]), - uaddCarry(x[1], y[1], Carry[1])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 uaddCarry - ( - detail::tvec3 const & x, - detail::tvec3 const & y, - detail::tvec3 & Carry - ) - { - return detail::tvec3( - uaddCarry(x[0], y[0], Carry[0]), - uaddCarry(x[1], y[1], Carry[1]), - uaddCarry(x[2], y[2], Carry[2])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 uaddCarry - ( - detail::tvec4 const & x, - detail::tvec4 const & y, - detail::tvec4 & Carry - ) - { - return detail::tvec4( - uaddCarry(x[0], y[0], Carry[0]), - uaddCarry(x[1], y[1], Carry[1]), - uaddCarry(x[2], y[2], Carry[2]), - uaddCarry(x[3], y[3], Carry[3])); - } - - // usubBorrow - template - GLM_FUNC_QUALIFIER genUType usubBorrow - ( - genUType const & x, - genUType const & y, - genUType & Borrow - ) - { - Borrow = x >= y ? 0 : 1; - if(x > y) - return genUType(detail::highp_int_t(x) - detail::highp_int_t(y)); - else - return genUType(detail::highp_int_t(1) << detail::highp_int_t(32) + detail::highp_int_t(x) - detail::highp_int_t(y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 usubBorrow - ( - detail::tvec2 const & x, - detail::tvec2 const & y, - detail::tvec2 & Borrow - ) - { - return detail::tvec2( - usubBorrow(x[0], y[0], Borrow[0]), - usubBorrow(x[1], y[1], Borrow[1])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 usubBorrow - ( - detail::tvec3 const & x, - detail::tvec3 const & y, - detail::tvec3 & Borrow - ) - { - return detail::tvec3( - usubBorrow(x[0], y[0], Borrow[0]), - usubBorrow(x[1], y[1], Borrow[1]), - usubBorrow(x[2], y[2], Borrow[2])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 usubBorrow - ( - detail::tvec4 const & x, - detail::tvec4 const & y, - detail::tvec4 & Borrow - ) - { - return detail::tvec4( - usubBorrow(x[0], y[0], Borrow[0]), - usubBorrow(x[1], y[1], Borrow[1]), - usubBorrow(x[2], y[2], Borrow[2]), - usubBorrow(x[3], y[3], Borrow[3])); - } - - // umulExtended - template - GLM_FUNC_QUALIFIER void umulExtended - ( - genUType const & x, - genUType const & y, - genUType & msb, - genUType & lsb - ) - { - detail::highp_uint_t ValueX64 = x; - detail::highp_uint_t ValueY64 = y; - detail::highp_uint_t Value64 = ValueX64 * ValueY64; - msb = *(genUType*)&genUType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); - lsb = *(genUType*)&genUType(Value64 >> detail::highp_uint_t(32)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 umulExtended - ( - detail::tvec2 const & x, - detail::tvec2 const & y, - detail::tvec2 & msb, - detail::tvec2 & lsb - ) - { - return detail::tvec2( - umulExtended(x[0], y[0], msb, lsb), - umulExtended(x[1], y[1], msb, lsb)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 umulExtended - ( - detail::tvec3 const & x, - detail::tvec3 const & y, - detail::tvec3 & msb, - detail::tvec3 & lsb - ) - { - return detail::tvec3( - umulExtended(x[0], y[0], msb, lsb), - umulExtended(x[1], y[1], msb, lsb), - umulExtended(x[2], y[2], msb, lsb)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 umulExtended - ( - detail::tvec4 const & x, - detail::tvec4 const & y, - detail::tvec4 & msb, - detail::tvec4 & lsb - ) - { - return detail::tvec4( - umulExtended(x[0], y[0], msb, lsb), - umulExtended(x[1], y[1], msb, lsb), - umulExtended(x[2], y[2], msb, lsb), - umulExtended(x[3], y[3], msb, lsb)); - } - - // imulExtended - template - GLM_FUNC_QUALIFIER void imulExtended - ( - genIType const & x, - genIType const & y, - genIType & msb, - genIType & lsb - ) - { - detail::highp_int_t ValueX64 = x; - detail::highp_int_t ValueY64 = y; - detail::highp_int_t Value64 = ValueX64 * ValueY64; - msb = *(genIType*)&genIType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1))); - lsb = *(genIType*)&genIType(Value64 >> detail::highp_uint_t(32)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 imulExtended - ( - detail::tvec2 const & x, - detail::tvec2 const & y, - detail::tvec2 & msb, - detail::tvec2 & lsb - ) - { - return detail::tvec2( - imulExtended(x[0], y[0], msb, lsb), - imulExtended(x[1], y[1], msb, lsb)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 imulExtended - ( - detail::tvec3 const & x, - detail::tvec3 const & y, - detail::tvec3 & msb, - detail::tvec3 & lsb - ) - { - return detail::tvec3( - imulExtended(x[0], y[0], msb, lsb), - imulExtended(x[1], y[1], msb, lsb), - imulExtended(x[2], y[2], msb, lsb)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 imulExtended - ( - detail::tvec4 const & x, - detail::tvec4 const & y, - detail::tvec4 & msb, - detail::tvec4 & lsb - ) - { - return detail::tvec4( - imulExtended(x[0], y[0], msb, lsb), - imulExtended(x[1], y[1], msb, lsb), - imulExtended(x[2], y[2], msb, lsb), - imulExtended(x[3], y[3], msb, lsb)); - } - - // bitfieldExtract - template - GLM_FUNC_QUALIFIER genIUType bitfieldExtract - ( - genIUType const & Value, - int const & Offset, - int const & Bits - ) - { - int GenSize = int(sizeof(genIUType)) << int(3); - - assert(Offset + Bits <= GenSize); - - genIUType ShiftLeft = Bits ? Value << (GenSize - (Bits + Offset)) : genIUType(0); - genIUType ShiftBack = ShiftLeft >> genIUType(GenSize - Bits); - - return ShiftBack; - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 bitfieldExtract - ( - detail::tvec2 const & Value, - int const & Offset, - int const & Bits - ) - { - return detail::tvec2( - bitfieldExtract(Value[0], Offset, Bits), - bitfieldExtract(Value[1], Offset, Bits)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 bitfieldExtract - ( - detail::tvec3 const & Value, - int const & Offset, - int const & Bits - ) - { - return detail::tvec3( - bitfieldExtract(Value[0], Offset, Bits), - bitfieldExtract(Value[1], Offset, Bits), - bitfieldExtract(Value[2], Offset, Bits)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 bitfieldExtract - ( - detail::tvec4 const & Value, - int const & Offset, - int const & Bits - ) - { - return detail::tvec4( - bitfieldExtract(Value[0], Offset, Bits), - bitfieldExtract(Value[1], Offset, Bits), - bitfieldExtract(Value[2], Offset, Bits), - bitfieldExtract(Value[3], Offset, Bits)); - } - - // bitfieldInsert - template - GLM_FUNC_QUALIFIER genIUType bitfieldInsert - ( - genIUType const & Base, - genIUType const & Insert, - int const & Offset, - int const & Bits - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - assert(Offset + Bits <= sizeof(genIUType)); - - if(Bits == 0) - return Base; - - genIUType Mask = 0; - for(int Bit = Offset; Bit < Offset + Bits; ++Bit) - Mask |= (1 << Bit); - - return (Base & ~Mask) | (Insert & Mask); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 bitfieldInsert - ( - detail::tvec2 const & Base, - detail::tvec2 const & Insert, - int const & Offset, - int const & Bits - ) - { - return detail::tvec2( - bitfieldInsert(Base[0], Insert[0], Offset, Bits), - bitfieldInsert(Base[1], Insert[1], Offset, Bits)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 bitfieldInsert - ( - detail::tvec3 const & Base, - detail::tvec3 const & Insert, - int const & Offset, - int const & Bits - ) - { - return detail::tvec3( - bitfieldInsert(Base[0], Insert[0], Offset, Bits), - bitfieldInsert(Base[1], Insert[1], Offset, Bits), - bitfieldInsert(Base[2], Insert[2], Offset, Bits)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 bitfieldInsert - ( - detail::tvec4 const & Base, - detail::tvec4 const & Insert, - int const & Offset, - int const & Bits - ) - { - return detail::tvec4( - bitfieldInsert(Base[0], Insert[0], Offset, Bits), - bitfieldInsert(Base[1], Insert[1], Offset, Bits), - bitfieldInsert(Base[2], Insert[2], Offset, Bits), - bitfieldInsert(Base[3], Insert[3], Offset, Bits)); - } - - // bitfieldReverse - template - GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - genIUType Out = 0; - std::size_t BitSize = sizeof(genIUType) * 8; - for(std::size_t i = 0; i < BitSize; ++i) - if(Value & (genIUType(1) << i)) - Out |= genIUType(1) << (BitSize - 1 - i); - return Out; - } - - VECTORIZE_VEC(bitfieldReverse) - - // bitCount - template - GLM_FUNC_QUALIFIER int bitCount(genIUType const & Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - - int Count = 0; - for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i) - { - if(Value & (1 << i)) - ++Count; - } - return Count; - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 bitCount - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - bitCount(value[0]), - bitCount(value[1])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 bitCount - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - bitCount(value[0]), - bitCount(value[1]), - bitCount(value[2])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 bitCount - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - bitCount(value[0]), - bitCount(value[1]), - bitCount(value[2]), - bitCount(value[3])); - } - - // findLSB - template - GLM_FUNC_QUALIFIER int findLSB - ( - genIUType const & Value - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - if(Value == 0) - return -1; - - genIUType Bit; - for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){} - return Bit; - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 findLSB - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - findLSB(value[0]), - findLSB(value[1])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 findLSB - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - findLSB(value[0]), - findLSB(value[1]), - findLSB(value[2])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 findLSB - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - findLSB(value[0]), - findLSB(value[1]), - findLSB(value[2]), - findLSB(value[3])); - } - - // findMSB -#if((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_VC)) - - template - GLM_FUNC_QUALIFIER int findMSB - ( - genIUType const & Value - ) - { - unsigned long Result(0); - _BitScanReverse(&Result, Value); - return int(Result); - } - -#elif((GLM_ARCH != GLM_ARCH_PURE) && (GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC40)) - - template - GLM_FUNC_QUALIFIER int findMSB - ( - genIUType const & Value - ) - { - return __builtin_clz(Value); - } - -#else - - template - GLM_FUNC_QUALIFIER int findMSB - ( - genIUType const & Value - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - if(Value == 0) - return -1; - - genIUType bit = genIUType(-1); - for(genIUType tmp = Value; tmp; tmp >>= 1, ++bit){} - return bit; - } -#endif//(GLM_COMPILER) - - template - GLM_FUNC_QUALIFIER detail::tvec2 findMSB - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - findMSB(value[0]), - findMSB(value[1])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 findMSB - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - findMSB(value[0]), - findMSB(value[1]), - findMSB(value[2])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 findMSB - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - findMSB(value[0]), - findMSB(value[1]), - findMSB(value[2]), - findMSB(value[3])); - } -}//namespace glm diff --git a/thirdparty/glm/glm/core/func_matrix.hpp b/thirdparty/glm/glm/core/func_matrix.hpp deleted file mode 100644 index 41acf596..00000000 --- a/thirdparty/glm/glm/core/func_matrix.hpp +++ /dev/null @@ -1,150 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_matrix.hpp -/// @date 2008-08-03 / 2011-06-15 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions -/// -/// @defgroup core_func_matrix Matrix functions -/// @ingroup core -/// -/// For each of the following built-in matrix functions, there is both a -/// single-precision floating point version, where all arguments and return values -/// are single precision, and a double-precision floating version, where all -/// arguments and return values are double precision. Only the single-precision -/// floating point version is shown. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef GLM_CORE_func_matrix -#define GLM_CORE_func_matrix GLM_VERSION - -namespace glm -{ - /// @addtogroup core_func_matrix - /// @{ - - /// Multiply matrix x by matrix y component-wise, i.e., - /// result[i][j] is the scalar product of x[i][j] and y[i][j]. - /// - /// @tparam matType Floating-point matrix types. - /// - /// @see GLSL matrixCompMult man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - matType matrixCompMult( - matType const & x, - matType const & y); - - /// Treats the first parameter c as a column vector - /// and the second parameter r as a row vector - /// and does a linear algebraic matrix multiply c * r. - /// - /// @tparam matType Floating-point matrix types. - /// - /// @see GLSL outerProduct man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - /// - /// @todo Clarify the declaration to specify that matType doesn't have to be provided when used. - template - matType outerProduct( - vecType const & c, - vecType const & r); - - /// Returns the transposed matrix of x - /// - /// @tparam matType Floating-point matrix types. - /// - /// @see GLSL transpose man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - typename matType::transpose_type transpose( - matType const & x); - - /// Return the determinant of a mat2 matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - typename detail::tmat2x2::value_type determinant( - detail::tmat2x2 const & m); - - /// Return the determinant of a mat3 matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - typename detail::tmat3x3::value_type determinant( - detail::tmat3x3 const & m); - - /// Return the determinant of a mat4 matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - typename detail::tmat4x4::value_type determinant( - detail::tmat4x4 const & m); - - /// Return the inverse of a mat2 matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see GLSL inverse man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - detail::tmat2x2 inverse( - detail::tmat2x2 const & m); - - /// Return the inverse of a mat3 matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see GLSL inverse man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - detail::tmat3x3 inverse( - detail::tmat3x3 const & m); - - /// Return the inverse of a mat4 matrix. - /// - /// @tparam valType Floating-point scalar types. - /// - /// @see GLSL inverse man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - detail::tmat4x4 inverse( - detail::tmat4x4 const & m); - - /// @} -}//namespace glm - -#include "func_matrix.inl" - -#endif//GLM_CORE_func_matrix diff --git a/thirdparty/glm/glm/core/func_matrix.inl b/thirdparty/glm/glm/core/func_matrix.inl deleted file mode 100644 index 3d8ab4f8..00000000 --- a/thirdparty/glm/glm/core/func_matrix.inl +++ /dev/null @@ -1,584 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_matrix.inl -/// @date 2008-03-08 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#include "_vectorize.hpp" - -namespace glm -{ - // matrixCompMult - template - GLM_FUNC_QUALIFIER matType matrixCompMult - ( - matType const & x, - matType const & y - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'matrixCompMult' only accept floating-point inputs"); - - matType result(matType::null); - for(typename matType::size_type i = 0; i < matType::row_size(); ++i) - result[i] = x[i] * y[i]; - return result; - } - - // outerProduct - template - GLM_FUNC_QUALIFIER detail::tmat2x2 outerProduct - ( - detail::tvec2 const & c, - detail::tvec2 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat2x2 m(detail::tmat2x2::null); - m[0][0] = c[0] * r[0]; - m[0][1] = c[1] * r[0]; - m[1][0] = c[0] * r[1]; - m[1][1] = c[1] * r[1]; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat3x3 outerProduct - ( - detail::tvec3 const & c, - detail::tvec3 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat3x3 m(detail::tmat3x3::null); - for(typename detail::tmat3x3::size_type i(0); i < m.length(); ++i) - m[i] = c * r[i]; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat4x4 outerProduct - ( - detail::tvec4 const & c, - detail::tvec4 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat4x4 m(detail::tmat4x4::null); - for(typename detail::tmat4x4::size_type i(0); i < m.length(); ++i) - m[i] = c * r[i]; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat2x3 outerProduct - ( - detail::tvec3 const & c, - detail::tvec2 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat2x3 m(detail::tmat2x3::null); - m[0][0] = c.x * r.x; - m[0][1] = c.y * r.x; - m[0][2] = c.z * r.x; - m[1][0] = c.x * r.y; - m[1][1] = c.y * r.y; - m[1][2] = c.z * r.y; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat3x2 outerProduct - ( - detail::tvec2 const & c, - detail::tvec3 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat3x2 m(detail::tmat3x2::null); - m[0][0] = c.x * r.x; - m[0][1] = c.y * r.x; - m[1][0] = c.x * r.y; - m[1][1] = c.y * r.y; - m[2][0] = c.x * r.z; - m[2][1] = c.y * r.z; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat2x4 outerProduct - ( - detail::tvec4 const & c, - detail::tvec2 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat2x4 m(detail::tmat2x4::null); - m[0][0] = c.x * r.x; - m[0][1] = c.y * r.x; - m[0][2] = c.z * r.x; - m[0][3] = c.w * r.x; - m[1][0] = c.x * r.y; - m[1][1] = c.y * r.y; - m[1][2] = c.z * r.y; - m[1][3] = c.w * r.y; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat4x2 outerProduct - ( - detail::tvec2 const & c, - detail::tvec4 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat4x2 m(detail::tmat4x2::null); - m[0][0] = c.x * r.x; - m[0][1] = c.y * r.x; - m[1][0] = c.x * r.y; - m[1][1] = c.y * r.y; - m[2][0] = c.x * r.z; - m[2][1] = c.y * r.z; - m[3][0] = c.x * r.w; - m[3][1] = c.y * r.w; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat3x4 outerProduct - ( - detail::tvec4 const & c, - detail::tvec3 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat3x4 m(detail::tmat3x4::null); - m[0][0] = c.x * r.x; - m[0][1] = c.y * r.x; - m[0][2] = c.z * r.x; - m[0][3] = c.w * r.x; - m[1][0] = c.x * r.y; - m[1][1] = c.y * r.y; - m[1][2] = c.z * r.y; - m[1][3] = c.w * r.y; - m[2][0] = c.x * r.z; - m[2][1] = c.y * r.z; - m[2][2] = c.z * r.z; - m[2][3] = c.w * r.z; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat4x3 outerProduct - ( - detail::tvec3 const & c, - detail::tvec4 const & r - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'outerProduct' only accept floating-point inputs"); - - detail::tmat4x3 m(detail::tmat4x3::null); - m[0][0] = c.x * r.x; - m[0][1] = c.y * r.x; - m[0][2] = c.z * r.x; - m[1][0] = c.x * r.y; - m[1][1] = c.y * r.y; - m[1][2] = c.z * r.y; - m[2][0] = c.x * r.z; - m[2][1] = c.y * r.z; - m[2][2] = c.z * r.z; - m[3][0] = c.x * r.w; - m[3][1] = c.y * r.w; - m[3][2] = c.z * r.w; - return m; - } - - template - GLM_FUNC_QUALIFIER detail::tmat2x2 transpose - ( - detail::tmat2x2 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat2x2 result(detail::tmat2x2::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat3x3 transpose - ( - detail::tmat3x3 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat3x3 result(detail::tmat3x3::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat4x4 transpose - ( - detail::tmat4x4 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat4x4 result(detail::tmat4x4::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[0][3] = m[3][0]; - - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[1][3] = m[3][1]; - - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - result[2][3] = m[3][2]; - - result[3][0] = m[0][3]; - result[3][1] = m[1][3]; - result[3][2] = m[2][3]; - result[3][3] = m[3][3]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat2x3 transpose - ( - detail::tmat3x2 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat2x3 result(detail::tmat2x3::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat3x2 transpose - ( - detail::tmat2x3 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat3x2 result(detail::tmat3x2::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat2x4 transpose - ( - detail::tmat4x2 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat2x4 result(detail::tmat2x4::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[0][3] = m[3][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[1][3] = m[3][1]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat4x2 transpose - ( - detail::tmat2x4 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat4x2 result(detail::tmat4x2::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[3][0] = m[0][3]; - result[3][1] = m[1][3]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat3x4 transpose - ( - detail::tmat4x3 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat3x4 result(detail::tmat3x4::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[0][3] = m[3][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[1][3] = m[3][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - result[2][3] = m[3][2]; - return result; - } - - template - GLM_FUNC_QUALIFIER detail::tmat4x3 transpose - ( - detail::tmat3x4 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'transpose' only accept floating-point inputs"); - - detail::tmat4x3 result(detail::tmat4x3::null); - result[0][0] = m[0][0]; - result[0][1] = m[1][0]; - result[0][2] = m[2][0]; - result[1][0] = m[0][1]; - result[1][1] = m[1][1]; - result[1][2] = m[2][1]; - result[2][0] = m[0][2]; - result[2][1] = m[1][2]; - result[2][2] = m[2][2]; - result[3][0] = m[0][3]; - result[3][1] = m[1][3]; - result[3][2] = m[2][3]; - return result; - } - - template - GLM_FUNC_QUALIFIER typename detail::tmat2x2::value_type determinant - ( - detail::tmat2x2 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); - - return m[0][0] * m[1][1] - m[1][0] * m[0][1]; - } - - template - GLM_FUNC_QUALIFIER typename detail::tmat3x3::value_type determinant - ( - detail::tmat3x3 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); - - return - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - } - - template - GLM_FUNC_QUALIFIER typename detail::tmat4x4::value_type determinant - ( - detail::tmat4x4 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'determinant' only accept floating-point inputs"); - - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - detail::tvec4 DetCof( - + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - return m[0][0] * DetCof[0] - + m[0][1] * DetCof[1] - + m[0][2] * DetCof[2] - + m[0][3] * DetCof[3]; - } - - template - GLM_FUNC_QUALIFIER detail::tmat2x2 inverse - ( - detail::tmat2x2 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); - - //valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; - T Determinant = determinant(m); - - detail::tmat2x2 Inverse( - + m[1][1] / Determinant, - - m[0][1] / Determinant, - - m[1][0] / Determinant, - + m[0][0] / Determinant); - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER detail::tmat3x3 inverse - ( - detail::tmat3x3 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); - - //valType Determinant = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - // - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - // + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - - T Determinant = determinant(m); - - detail::tmat3x3 Inverse(detail::tmat3x3::null); - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); - Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); - Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); - Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); - Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); - Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); - Inverse /= Determinant; - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER detail::tmat4x4 inverse - ( - detail::tmat4x4 const & m - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'inverse' only accept floating-point inputs"); - - T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - detail::tvec4 const SignA(+1, -1, +1, -1); - detail::tvec4 const SignB(-1, +1, -1, +1); - - detail::tvec4 Fac0(Coef00, Coef00, Coef02, Coef03); - detail::tvec4 Fac1(Coef04, Coef04, Coef06, Coef07); - detail::tvec4 Fac2(Coef08, Coef08, Coef10, Coef11); - detail::tvec4 Fac3(Coef12, Coef12, Coef14, Coef15); - detail::tvec4 Fac4(Coef16, Coef16, Coef18, Coef19); - detail::tvec4 Fac5(Coef20, Coef20, Coef22, Coef23); - - detail::tvec4 Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); - detail::tvec4 Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); - detail::tvec4 Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); - detail::tvec4 Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); - - detail::tvec4 Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); - detail::tvec4 Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); - detail::tvec4 Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); - detail::tvec4 Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); - - detail::tmat4x4 Inverse(Inv0, Inv1, Inv2, Inv3); - - detail::tvec4 Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); - - T Determinant = glm::dot(m[0], Row0); - - Inverse /= Determinant; - - return Inverse; - } -}//namespace glm diff --git a/thirdparty/glm/glm/core/func_noise.hpp b/thirdparty/glm/glm/core/func_noise.hpp deleted file mode 100644 index 296554e1..00000000 --- a/thirdparty/glm/glm/core/func_noise.hpp +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_noise.hpp -/// @date 2008-08-01 / 2011-06-18 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.13 Noise Functions -/// -/// @defgroup core_func_noise Noise functions -/// @ingroup core -/// -/// Noise functions are stochastic functions that can be used to increase visual -/// complexity. Values returned by the following noise functions give the -/// appearance of randomness, but are not truly random. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef glm_core_func_noise -#define glm_core_func_noise GLM_VERSION - -namespace glm -{ - /// @addtogroup core_func_noise - /// @{ - - /// Returns a 1D noise value based on the input value x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL noise1 man page - /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions - template - typename genType::value_type noise1(genType const & x); - - /// Returns a 2D noise value based on the input value x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL noise2 man page - /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions - template - detail::tvec2 noise2(genType const & x); - - /// Returns a 3D noise value based on the input value x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL noise3 man page - /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions - template - detail::tvec3 noise3(genType const & x); - - /// Returns a 4D noise value based on the input value x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL noise4 man page - /// @see GLSL 4.20.8 specification, section 8.13 Noise Functions - template - detail::tvec4 noise4(genType const & x); - - /// @} -}//namespace glm - -#include "func_noise.inl" - -#endif//glm_core_func_noise diff --git a/thirdparty/glm/glm/core/func_noise.inl b/thirdparty/glm/glm/core/func_noise.inl deleted file mode 100644 index af197e41..00000000 --- a/thirdparty/glm/glm/core/func_noise.inl +++ /dev/null @@ -1,364 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_noise.inl -/// @date 2008-08-01 / 2011-09-27 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T noise1(T const & x) - { - return noise1(glm::detail::tvec2(x, T(0))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(T const & x) - { - return glm::detail::tvec2( - noise1(x + T(0.0)), - noise1(x + T(1.0))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(T const & x) - { - return glm::detail::tvec3( - noise1(x - T(1.0)), - noise1(x + T(0.0)), - noise1(x + T(1.0))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(T const & x) - { - return glm::detail::tvec4( - noise1(x - T(1.0)), - noise1(x + T(0.0)), - noise1(x + T(1.0)), - noise1(x + T(2.0))); - } - - template - GLM_FUNC_QUALIFIER T noise1(glm::detail::tvec2 const & v) - { - detail::tvec4 const C = detail::tvec4( - T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 - T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) - T(-0.577350269189626), // -1.0 + 2.0 * C.x - T( 0.024390243902439)); // 1.0 / 41.0 - - // First corner - detail::tvec2 i = floor(v + dot(v, detail::tvec2(C[1]))); - detail::tvec2 x0 = v - i + dot(i, detail::tvec2(C[0])); - - // Other corners - //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 - //i1.y = 1.0 - i1.x; - detail::tvec2 i1 = (x0.x > x0.y) ? detail::tvec2(1, 0) : detail::tvec2(0, 1); - // x0 = x0 - 0.0 + 0.0 * C.xx ; - // x1 = x0 - i1 + 1.0 * C.xx ; - // x2 = x0 - 1.0 + 2.0 * C.xx ; - detail::tvec4 x12 = detail::tvec4(x0.x, x0.y, x0.x, x0.y) + detail::tvec4(C.x, C.x, C.z, C.z); - x12 = detail::tvec4(detail::tvec2(x12) - i1, x12.z, x12.w); - - // Permutations - i = mod(i, T(289)); // Avoid truncation effects in permutation - detail::tvec3 p = permute( - permute(i.y + detail::tvec3(T(0), i1.y, T(1))) - + i.x + detail::tvec3(T(0), i1.x, T(1))); - - detail::tvec3 m = max(T(0.5) - detail::tvec3( - dot(x0, x0), - dot(detail::tvec2(x12.x, x12.y), detail::tvec2(x12.x, x12.y)), - dot(detail::tvec2(x12.z, x12.w), detail::tvec2(x12.z, x12.w))), T(0)); - m = m * m ; - m = m * m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - detail::tvec3 x = T(2) * fract(p * C.w) - T(1); - detail::tvec3 h = abs(x) - T(0.5); - detail::tvec3 ox = floor(x + T(0.5)); - detail::tvec3 a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); - m *= T(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); - - // Compute final noise value at P - detail::tvec3 g; - g.x = a0.x * x0.x + h.x * x0.y; - //g.yz = a0.yz * x12.xz + h.yz * x12.yw; - g.y = a0.y * x12.x + h.y * x12.y; - g.z = a0.z * x12.z + h.z * x12.w; - return T(130) * dot(m, g); - } - - template - GLM_FUNC_QUALIFIER T noise1(detail::tvec3 const & v) - { - detail::tvec2 const C(1.0 / 6.0, 1.0 / 3.0); - detail::tvec4 const D(0.0, 0.5, 1.0, 2.0); - - // First corner - detail::tvec3 i(floor(v + dot(v, detail::tvec3(C.y)))); - detail::tvec3 x0(v - i + dot(i, detail::tvec3(C.x))); - - // Other corners - detail::tvec3 g(step(detail::tvec3(x0.y, x0.z, x0.x), x0)); - detail::tvec3 l(T(1) - g); - detail::tvec3 i1(min(g, detail::tvec3(l.z, l.x, l.y))); - detail::tvec3 i2(max(g, detail::tvec3(l.z, l.x, l.y))); - - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - detail::tvec3 x1(x0 - i1 + C.x); - detail::tvec3 x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y - detail::tvec3 x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y - - // Permutations - i = mod289(i); - detail::tvec4 p(permute(permute(permute( - i.z + detail::tvec4(T(0), i1.z, i2.z, T(1))) + - i.y + detail::tvec4(T(0), i1.y, i2.y, T(1))) + - i.x + detail::tvec4(T(0), i1.x, i2.x, T(1)))); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - T n_ = T(0.142857142857); // 1.0/7.0 - detail::tvec3 ns(n_ * detail::tvec3(D.w, D.y, D.z) - detail::tvec3(D.x, D.z, D.x)); - - detail::tvec4 j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) - - detail::tvec4 x_(floor(j * ns.z)); - detail::tvec4 y_(floor(j - T(7) * x_)); // mod(j,N) - - detail::tvec4 x(x_ * ns.x + ns.y); - detail::tvec4 y(y_ * ns.x + ns.y); - detail::tvec4 h(T(1) - abs(x) - abs(y)); - - detail::tvec4 b0(x.x, x.y, y.x, y.y); - detail::tvec4 b1(x.z, x.w, y.z, y.w); - - // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; - // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; - detail::tvec4 s0(floor(b0) * T(2) + T(1)); - detail::tvec4 s1(floor(b1) * T(2) + T(1)); - detail::tvec4 sh(-step(h, detail::tvec4(0.0))); - - detail::tvec4 a0 = detail::tvec4(b0.x, b0.z, b0.y, b0.w) + detail::tvec4(s0.x, s0.z, s0.y, s0.w) * detail::tvec4(sh.x, sh.x, sh.y, sh.y); - detail::tvec4 a1 = detail::tvec4(b1.x, b1.z, b1.y, b1.w) + detail::tvec4(s1.x, s1.z, s1.y, s1.w) * detail::tvec4(sh.z, sh.z, sh.w, sh.w); - - detail::tvec3 p0(a0.x, a0.y, h.x); - detail::tvec3 p1(a0.z, a0.w, h.y); - detail::tvec3 p2(a1.x, a1.y, h.z); - detail::tvec3 p3(a1.z, a1.w, h.w); - - // Normalise gradients - detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - - // Mix final noise value - detail::tvec4 m = max(T(0.6) - detail::tvec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), T(0)); - m = m * m; - return T(42) * dot(m * m, detail::tvec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); - } - - template - GLM_FUNC_QUALIFIER T noise1(detail::tvec4 const & v) - { - detail::tvec4 const C( - 0.138196601125011, // (5 - sqrt(5))/20 G4 - 0.276393202250021, // 2 * G4 - 0.414589803375032, // 3 * G4 - -0.447213595499958); // -1 + 4 * G4 - - // (sqrt(5) - 1)/4 = F4, used once below - T const F4 = T(0.309016994374947451); - - // First corner - detail::tvec4 i = floor(v + dot(v, vec4(F4))); - detail::tvec4 x0 = v - i + dot(i, vec4(C.x)); - - // Other corners - - // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) - detail::tvec4 i0; - detail::tvec3 isX = step(detail::tvec3(x0.y, x0.z, x0.w), detail::tvec3(x0.x)); - detail::tvec3 isYZ = step(detail::tvec3(x0.z, x0.w, x0.w), detail::tvec3(x0.y, x0.y, x0.z)); - // i0.x = dot(isX, vec3(1.0)); - //i0.x = isX.x + isX.y + isX.z; - //i0.yzw = T(1) - isX; - i0 = detail::tvec4(isX.x + isX.y + isX.z, T(1) - isX); - // i0.y += dot(isYZ.xy, vec2(1.0)); - i0.y += isYZ.x + isYZ.y; - //i0.zw += 1.0 - detail::tvec2(isYZ.x, isYZ.y); - i0.z += T(1) - isYZ.x; - i0.w += T(1) - isYZ.y; - i0.z += isYZ.z; - i0.w += T(1) - isYZ.z; - - // i0 now contains the unique values 0,1,2,3 in each channel - detail::tvec4 i3 = clamp(i0, 0.0, 1.0); - detail::tvec4 i2 = clamp(i0 - 1.0, 0.0, 1.0); - detail::tvec4 i1 = clamp(i0 - 2.0, 0.0, 1.0); - - // x0 = x0 - 0.0 + 0.0 * C.xxxx - // x1 = x0 - i1 + 0.0 * C.xxxx - // x2 = x0 - i2 + 0.0 * C.xxxx - // x3 = x0 - i3 + 0.0 * C.xxxx - // x4 = x0 - 1.0 + 4.0 * C.xxxx - detail::tvec4 x1 = x0 - i1 + C.x; - detail::tvec4 x2 = x0 - i2 + C.y; - detail::tvec4 x3 = x0 - i3 + C.z; - detail::tvec4 x4 = x0 + C.w; - - // Permutations - i = mod(i, T(289)); - T j0 = permute(permute(permute(permute(i.w) + i.z) + i.y) + i.x); - detail::tvec4 j1 = permute(permute(permute(permute( - i.w + detail::tvec4(i1.w, i2.w, i3.w, T(1))) - + i.z + detail::tvec4(i1.z, i2.z, i3.z, T(1))) - + i.y + detail::tvec4(i1.y, i2.y, i3.y, T(1))) - + i.x + detail::tvec4(i1.x, i2.x, i3.x, T(1))); - - // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope - // 7*7*6 = 294, which is close to the ring size 17*17 = 289. - detail::tvec4 ip = detail::tvec4(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); - - detail::tvec4 p0 = grad4(j0, ip); - detail::tvec4 p1 = grad4(j1.x, ip); - detail::tvec4 p2 = grad4(j1.y, ip); - detail::tvec4 p3 = grad4(j1.z, ip); - detail::tvec4 p4 = grad4(j1.w, ip); - - // Normalise gradients - detail::tvec4 norm = taylorInvSqrt(detail::tvec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - p4 *= taylorInvSqrt(dot(p4, p4)); - - // Mix contributions from the five corners - detail::tvec3 m0 = max(T(0.6) - detail::tvec3(dot(x0, x0), dot(x1, x1), dot(x2, x2)), T(0)); - detail::tvec2 m1 = max(T(0.6) - detail::tvec2(dot(x3, x3), dot(x4, x4) ), T(0)); - m0 = m0 * m0; - m1 = m1 * m1; - return T(49) * - (dot(m0 * m0, detail::tvec3(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + - dot(m1 * m1, detail::tvec2(dot(p3, x3), dot(p4, x4)))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec2 const & x) - { - return glm::detail::tvec2( - noise1(x + glm::detail::tvec2(0.0)), - noise1(glm::detail::tvec2(0.0) - x)); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec3 const & x) - { - return glm::detail::tvec2( - noise1(x + glm::detail::tvec3(0.0)), - noise1(glm::detail::tvec3(0.0) - x)); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec2 noise2(glm::detail::tvec4 const & x) - { - return glm::detail::tvec2( - noise1(x + glm::detail::tvec4(0.0)), - noise1(glm::detail::tvec4(0.0) - x)); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec2 const & x) - { - return glm::detail::tvec3( - noise1(x - glm::detail::tvec2(1.0)), - noise1(x + glm::detail::tvec2(0.0)), - noise1(x + glm::detail::tvec2(1.0))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec3 const & x) - { - return glm::detail::tvec3( - noise1(x - glm::detail::tvec3(1.0)), - noise1(x + glm::detail::tvec3(0.0)), - noise1(x + glm::detail::tvec3(1.0))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec3 noise3(glm::detail::tvec4 const & x) - { - return glm::detail::tvec3( - noise1(x - glm::detail::tvec4(1.0)), - noise1(x + glm::detail::tvec4(0.0)), - noise1(x + glm::detail::tvec4(1.0))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec2 const & x) - { - return glm::detail::tvec4( - noise1(x - glm::detail::tvec2(1.0)), - noise1(x + glm::detail::tvec2(0.0)), - noise1(x + glm::detail::tvec2(1.0)), - noise1(x + glm::detail::tvec2(2.0))); - } - - - template - GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec3 const & x) - { - return glm::detail::tvec4( - noise1(x - glm::detail::tvec3(1.0)), - noise1(x + glm::detail::tvec3(0.0)), - noise1(x + glm::detail::tvec3(1.0)), - noise1(x + glm::detail::tvec3(2.0))); - } - - template - GLM_FUNC_QUALIFIER glm::detail::tvec4 noise4(glm::detail::tvec4 const & x) - { - return glm::detail::tvec4( - noise1(x - glm::detail::tvec4(1.0)), - noise1(x + glm::detail::tvec4(0.0)), - noise1(x + glm::detail::tvec4(1.0)), - noise1(x + glm::detail::tvec4(2.0))); - } - -}//namespace glm diff --git a/thirdparty/glm/glm/core/func_packing.hpp b/thirdparty/glm/glm/core/func_packing.hpp deleted file mode 100644 index 91582b23..00000000 --- a/thirdparty/glm/glm/core/func_packing.hpp +++ /dev/null @@ -1,194 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_packing.hpp -/// @date 2010-03-17 / 2011-06-15 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions -/// -/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions -/// @ingroup core -/// -/// These functions do not operate component-wise, rather as described in each case. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef GLM_CORE_func_packing -#define GLM_CORE_func_packing GLM_VERSION - -namespace glm -{ - /// @addtogroup core_func_packing - /// @{ - - //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - //! Then, the results are packed into the returned 32-bit unsigned integer. - //! - //! The conversion for component c of v to fixed point is done as follows: - //! packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - //! - //! The first component of the vector will be written to the least significant bits of the output; - //! the last component will be written to the most significant bits. - //! - /// @see GLSL packUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packUnorm2x16(detail::tvec2 const & v); - - //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - //! Then, the results are packed into the returned 32-bit unsigned integer. - //! - //! The conversion for component c of v to fixed point is done as follows: - //! packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) - //! - //! The first component of the vector will be written to the least significant bits of the output; - //! the last component will be written to the most significant bits. - //! - /// @see GLSL packSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packSnorm2x16(detail::tvec2 const & v); - - //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - //! Then, the results are packed into the returned 32-bit unsigned integer. - //! - //! The conversion for component c of v to fixed point is done as follows: - //! packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - //! - //! The first component of the vector will be written to the least significant bits of the output; - //! the last component will be written to the most significant bits. - //! - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packUnorm4x8(detail::tvec4 const & v); - - //! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - //! Then, the results are packed into the returned 32-bit unsigned integer. - //! - //! The conversion for component c of v to fixed point is done as follows: - //! packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - //! - //! The first component of the vector will be written to the least significant bits of the output; - //! the last component will be written to the most significant bits. - //! - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::uint32 packSnorm4x8(detail::tvec4 const & v); - - //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - //! - //! The conversion for unpacked fixed-point value f to floating point is done as follows: - //! unpackUnorm2x16: f / 65535.0 - //! - //! The first component of the returned vector will be extracted from the least significant bits of the input; - //! the last component will be extracted from the most significant bits. - //! - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec2 unpackUnorm2x16(detail::uint32 const & p); - - //! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - //! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - //! - //! The conversion for unpacked fixed-point value f to floating point is done as follows: - //! unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - //! - //! The first component of the returned vector will be extracted from the least significant bits of the input; - //! the last component will be extracted from the most significant bits. - //! - /// @see GLSL unpackSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec2 unpackSnorm2x16(detail::uint32 const & p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec4 unpackUnorm4x8(detail::uint32 const & p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec4 unpackSnorm4x8(detail::uint32 const & p); - - /// Returns a double-precision value obtained by packing the components of v into a 64-bit value. - /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. - /// Otherwise, the bit- level representation of v is preserved. - /// The first vector component specifies the 32 least significant bits; - /// the second component specifies the 32 most significant bits. - /// - /// @see GLSL packDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - double packDouble2x32(detail::tvec2 const & v); - - /// Returns a two-component unsigned integer vector representation of v. - /// The bit-level representation of v is preserved. - /// The first component of the vector contains the 32 least significant bits of the double; - /// the second component consists the 32 most significant bits. - /// - /// @see GLSL unpackDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - detail::tvec2 unpackDouble2x32(double const & v); - - - /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these two 16- bit integers into a 32-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the second component specifies the 16 most-significant bits. - /// - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - uint packHalf2x16(vec2 const & v); - - /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the second component is obtained from the 16 most-significant bits of v. - /// - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - vec2 unpackHalf2x16(uint const & v); - - /// @} -}//namespace glm - -#include "func_packing.inl" - -#endif//GLM_CORE_func_packing - diff --git a/thirdparty/glm/glm/core/func_packing.inl b/thirdparty/glm/glm/core/func_packing.inl deleted file mode 100644 index b025895a..00000000 --- a/thirdparty/glm/glm/core/func_packing.inl +++ /dev/null @@ -1,178 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_packing.inl -/// @date 2010-03-17 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -namespace glm -{ - GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2 const & v) - { - detail::uint16 A(detail::uint16(round(clamp(v.x, 0.0f, 1.0f) * 65535.0f))); - detail::uint16 B(detail::uint16(round(clamp(v.y, 0.0f, 1.0f) * 65535.0f))); - return detail::uint32((B << 16) | A); - } - - GLM_FUNC_QUALIFIER detail::tvec2 unpackUnorm2x16(detail::uint32 const & p) - { - detail::uint32 Mask16((1 << 16) - 1); - detail::uint32 A((p >> 0) & Mask16); - detail::uint32 B((p >> 16) & Mask16); - return detail::tvec2( - A * 1.0f / 65535.0f, - B * 1.0f / 65535.0f); - } - - GLM_FUNC_QUALIFIER detail::uint32 packSnorm2x16(detail::tvec2 const & v) - { - union iu - { - detail::int16 i; - detail::uint16 u; - } A, B; - - detail::tvec2 Unpack = clamp(v ,-1.0f, 1.0f) * 32767.0f; - A.i = detail::int16(round(Unpack.x)); - B.i = detail::int16(round(Unpack.y)); - detail::uint32 Pack = (detail::uint32(B.u) << 16) | (detail::uint32(A.u) << 0); - return Pack; - } - - GLM_FUNC_QUALIFIER detail::tvec2 unpackSnorm2x16(detail::uint32 const & p) - { - union iu - { - detail::int16 i; - detail::uint16 u; - } A, B; - - detail::uint32 Mask16((1 << 16) - 1); - A.u = detail::uint16((p >> 0) & Mask16); - B.u = detail::uint16((p >> 16) & Mask16); - detail::tvec2 Pack(A.i, B.i); - - return clamp(Pack * 1.0f / 32767.0f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4 const & v) - { - detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f)); - detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f)); - detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f)); - detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f)); - return detail::uint32((D << 24) | (C << 16) | (B << 8) | A); - } - - GLM_FUNC_QUALIFIER detail::tvec4 unpackUnorm4x8(detail::uint32 const & p) - { - detail::uint32 Mask8((1 << 8) - 1); - detail::uint32 A((p >> 0) & Mask8); - detail::uint32 B((p >> 8) & Mask8); - detail::uint32 C((p >> 16) & Mask8); - detail::uint32 D((p >> 24) & Mask8); - return detail::tvec4( - A * 1.0f / 255.0f, - B * 1.0f / 255.0f, - C * 1.0f / 255.0f, - D * 1.0f / 255.0f); - } - - GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4 const & v) - { - union iu - { - detail::int8 i; - detail::uint8 u; - } A, B, C, D; - - detail::tvec4 Unpack = clamp(v ,-1.0f, 1.0f) * 127.0f; - A.i = detail::int8(round(Unpack.x)); - B.i = detail::int8(round(Unpack.y)); - C.i = detail::int8(round(Unpack.z)); - D.i = detail::int8(round(Unpack.w)); - detail::uint32 Pack = (detail::uint32(D.u) << 24) | (detail::uint32(C.u) << 16) | (detail::uint32(B.u) << 8) | (detail::uint32(A.u) << 0); - return Pack; - } - - GLM_FUNC_QUALIFIER detail::tvec4 unpackSnorm4x8(detail::uint32 const & p) - { - union iu - { - detail::int8 i; - detail::uint8 u; - } A, B, C, D; - - detail::uint32 Mask8((1 << 8) - 1); - A.u = detail::uint8((p >> 0) & Mask8); - B.u = detail::uint8((p >> 8) & Mask8); - C.u = detail::uint8((p >> 16) & Mask8); - D.u = detail::uint8((p >> 24) & Mask8); - detail::tvec4 Pack(A.i, B.i, C.i, D.i); - - return clamp(Pack * 1.0f / 127.0f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2 const & v) - { - return *(double*)&v; - } - - GLM_FUNC_QUALIFIER detail::tvec2 unpackDouble2x32(double const & v) - { - return *(detail::tvec2*)&v; - } - - GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2 const & v) - { - union helper - { - uint other; - struct - { - detail::hdata a, b; - } orig; - } Pack; - - Pack.orig.a = detail::toFloat16(v.x); - Pack.orig.b = detail::toFloat16(v.y); - return *(uint*)&Pack; - } - - GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v) - { - union helper - { - uint other; - struct - { - detail::hdata a, b; - } orig; - } Unpack; - Unpack.other = v; - - return vec2(detail::toFloat32(Unpack.orig.a), detail::toFloat32(Unpack.orig.b)); - } -}//namespace glm - diff --git a/thirdparty/glm/glm/core/func_trigonometric.hpp b/thirdparty/glm/glm/core/func_trigonometric.hpp deleted file mode 100644 index ba57cb67..00000000 --- a/thirdparty/glm/glm/core/func_trigonometric.hpp +++ /dev/null @@ -1,203 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_trigonometric.hpp -/// @date 2008-08-01 / 2011-06-15 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions -/// -/// @defgroup core_func_trigonometric Angle and Trigonometry Functions -/// @ingroup core -/// -/// Function parameters specified as angle are assumed to be in units of radians. -/// In no case will any of these functions result in a divide by zero error. If -/// the divisor of a ratio is 0, then results will be undefined. -/// -/// These all operate component-wise. The description is per component. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef GLM_CORE_func_trigonometric -#define GLM_CORE_func_trigonometric GLM_VERSION - -namespace glm -{ - /// @addtogroup core_func_trigonometric - /// @{ - - /// Converts degrees to radians and returns the result. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL radians man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType radians(genType const & degrees); - - /// Converts radians to degrees and returns the result. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL degrees man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType degrees(genType const & radians); - - /// The standard trigonometric sine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL sin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType sin(genType const & angle); - - /// The standard trigonometric cosine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL cos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType cos(genType const & angle); - - /// The standard trigonometric tangent function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL tan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType tan(genType const & angle); - - /// Arc sine. Returns an angle whose sine is x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// Results are undefined if |x| > 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL asin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType asin(genType const & x); - - /// Arc cosine. Returns an angle whose sine is x. - /// The range of values returned by this function is [0, PI]. - /// Results are undefined if |x| > 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL acos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType acos(genType const & x); - - /// Arc tangent. Returns an angle whose tangent is y/x. - /// The signs of x and y are used to determine what - /// quadrant the angle is in. The range of values returned - /// by this function is [-PI, PI]. Results are undefined - /// if x and y are both 0. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType atan(genType const & y, genType const & x); - - /// Arc tangent. Returns an angle whose tangent is y_over_x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType atan(genType const & y_over_x); - - /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL sinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType sinh(genType const & angle); - - /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL cosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType cosh(genType const & angle); - - /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL tanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType tanh(genType const & angle); - - /// Arc hyperbolic sine; returns the inverse of sinh. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL asinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType asinh(genType const & x); - - /// Arc hyperbolic cosine; returns the non-negative inverse - /// of cosh. Results are undefined if x < 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL acosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType acosh(genType const & x); - - /// Arc hyperbolic tangent; returns the inverse of tanh. - /// Results are undefined if abs(x) >= 1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL atanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - genType atanh(genType const & x); - - /// @} -}//namespace glm - -#include "func_trigonometric.inl" - -#endif//GLM_CORE_func_trigonometric - - diff --git a/thirdparty/glm/glm/core/func_trigonometric.inl b/thirdparty/glm/glm/core/func_trigonometric.inl deleted file mode 100644 index 6d87bf3e..00000000 --- a/thirdparty/glm/glm/core/func_trigonometric.inl +++ /dev/null @@ -1,246 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_trigonometric.inl -/// @date 2008-08-03 / 2011-06-15 -/// @author Christophe Riccio -/////////////////////////////////////////////////////////////////////////////////// - -#include "_vectorize.hpp" - -namespace glm -{ - // radians - template - GLM_FUNC_QUALIFIER genType radians - ( - genType const & degrees - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'radians' only accept floating-point input"); - - genType const pi = genType(3.1415926535897932384626433832795); - return degrees * (pi / genType(180)); - } - - VECTORIZE_VEC(radians) - - // degrees - template - GLM_FUNC_QUALIFIER genType degrees - ( - genType const & radians - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'degrees' only accept floating-point input"); - - const genType pi = genType(3.1415926535897932384626433832795); - return radians * (genType(180) / pi); - } - - VECTORIZE_VEC(degrees) - - // sin - template - GLM_FUNC_QUALIFIER genType sin - ( - genType const & angle - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'sin' only accept floating-point input"); - - return ::std::sin(angle); - } - - VECTORIZE_VEC(sin) - - // cos - template - GLM_FUNC_QUALIFIER genType cos(genType const & angle) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'cos' only accept floating-point input"); - - return ::std::cos(angle); - } - - VECTORIZE_VEC(cos) - - // tan - template - GLM_FUNC_QUALIFIER genType tan - ( - genType const & angle - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'tan' only accept floating-point input"); - - return ::std::tan(angle); - } - - VECTORIZE_VEC(tan) - - // asin - template - GLM_FUNC_QUALIFIER genType asin - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'asin' only accept floating-point input"); - - return ::std::asin(x); - } - - VECTORIZE_VEC(asin) - - // acos - template - GLM_FUNC_QUALIFIER genType acos - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'acos' only accept floating-point input"); - - return ::std::acos(x); - } - - VECTORIZE_VEC(acos) - - // atan - template - GLM_FUNC_QUALIFIER genType atan - ( - genType const & y, - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); - - return ::std::atan2(y, x); - } - - VECTORIZE_VEC_VEC(atan) - - template - GLM_FUNC_QUALIFIER genType atan - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); - - return ::std::atan(x); - } - - VECTORIZE_VEC(atan) - - // sinh - template - GLM_FUNC_QUALIFIER genType sinh - ( - genType const & angle - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'sinh' only accept floating-point input"); - - return std::sinh(angle); - } - - VECTORIZE_VEC(sinh) - - // cosh - template - GLM_FUNC_QUALIFIER genType cosh - ( - genType const & angle - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'cosh' only accept floating-point input"); - - return std::cosh(angle); - } - - VECTORIZE_VEC(cosh) - - // tanh - template - GLM_FUNC_QUALIFIER genType tanh - ( - genType const & angle - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'tanh' only accept floating-point input"); - - return std::tanh(angle); - } - - VECTORIZE_VEC(tanh) - - // asinh - template - GLM_FUNC_QUALIFIER genType asinh - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'asinh' only accept floating-point input"); - - return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x)); - } - - VECTORIZE_VEC(asinh) - - // acosh - template - GLM_FUNC_QUALIFIER genType acosh - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'acosh' only accept floating-point input"); - - if(x < genType(1)) - return genType(0); - return log(x + sqrt(x * x - genType(1))); - } - - VECTORIZE_VEC(acosh) - - // atanh - template - GLM_FUNC_QUALIFIER genType atanh - ( - genType const & x - ) - { - GLM_STATIC_ASSERT(detail::type::is_float, "'atanh' only accept floating-point input"); - - if(abs(x) >= genType(1)) - return 0; - return genType(0.5) * log((genType(1) + x) / (genType(1) - x)); - } - - VECTORIZE_VEC(atanh) - -}//namespace glm diff --git a/thirdparty/glm/glm/core/func_vector_relational.hpp b/thirdparty/glm/glm/core/func_vector_relational.hpp deleted file mode 100644 index 8afba380..00000000 --- a/thirdparty/glm/glm/core/func_vector_relational.hpp +++ /dev/null @@ -1,138 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -/// OpenGL Mathematics (glm.g-truc.net) -/// -/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net) -/// Permission is hereby granted, free of charge, to any person obtaining a copy -/// of this software and associated documentation files (the "Software"), to deal -/// in the Software without restriction, including without limitation the rights -/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -/// copies of the Software, and to permit persons to whom the Software is -/// furnished to do so, subject to the following conditions: -/// -/// The above copyright notice and this permission notice shall be included in -/// all copies or substantial portions of the Software. -/// -/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -/// THE SOFTWARE. -/// -/// @ref core -/// @file glm/core/func_vector_relational.hpp -/// @date 2008-08-03 / 2011-06-15 -/// @author Christophe Riccio -/// -/// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions -/// -/// @defgroup core_func_vector_relational Vector Relational Functions -/// @ingroup core -/// -/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to -/// operate on scalars and produce scalar Boolean results. For vector results, -/// use the following built-in functions. -/// -/// In all cases, the sizes of all the input and return vectors for any particular -/// call must match. -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef GLM_CORE_func_vector_relational -#define GLM_CORE_func_vector_relational GLM_VERSION - -#include "_detail.hpp" - -namespace glm -{ - /// @addtogroup core_func_vector_relational - /// @{ - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see GLSL lessThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - typename vecType::bool_type lessThan(vecType const & x, vecType const & y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see GLSL lessThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - typename vecType::bool_type lessThanEqual(vecType const & x, vecType const & y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see GLSL greaterThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - typename vecType::bool_type greaterThan(vecType const & x, vecType const & y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam vecType Floating-point or integer vector types. - /// - /// @see GLSL greaterThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - typename vecType::bool_type greaterThanEqual(vecType const & x, vecType const & y); - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam vecType Floating-point, integer or boolean vector types. - /// - /// @see GLSL equal man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - typename vecType::bool_type equal(vecType const & x, vecType const & y); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam vecType Floating-point, integer or boolean vector types. - /// - /// @see GLSL notEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - typename vecType::bool_type notEqual(vecType const & x, vecType const & y); - - /// Returns true if any component of x is true. - /// - /// @tparam vecType Boolean vector types. - /// - /// @see GLSL any man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template