diff --git a/.github/workflows/pr_build.yml b/.github/workflows/pr_build.yml
index 9d6984b5b2..c4210a2f74 100644
--- a/.github/workflows/pr_build.yml
+++ b/.github/workflows/pr_build.yml
@@ -36,6 +36,8 @@ jobs:
build_type: full
- os: macOS-latest
build_type: full
+ - os: macOS-latest
+ build_type: client
- os: ubuntu-18.04
build_type: full
apt-dependencies: mesa-common-dev libegl1 libglvnd-dev libdouble-conversion1 libpulse0
@@ -52,25 +54,39 @@ jobs:
run: |
echo ::set-output name=github_sha_short::`echo $GIT_COMMIT | cut -c1-7`
echo "JOB_NAME=build (${{matrix.os}}, ${{matrix.build_type}})" >> $GITHUB_ENV
+ echo "APP_TARGET_NAME=$APP_NAME" >> $GITHUB_ENV
# Linux build variables
if [[ "${{ matrix.os }}" = "ubuntu-"* ]]; then
echo "PYTHON_EXEC=python3" >> $GITHUB_ENV
echo "INSTALLER_EXT=*" >> $GITHUB_ENV
echo "CMAKE_BUILD_EXTRA=-- -j3" >> $GITHUB_ENV
- echo "CMAKE_EXTRA=-DBUILD_TOOLS:BOOLEAN=FALSE -DHIFI_PYTHON_EXEC:FILEPATH=$(which python3)" >> $GITHUB_ENV
+ if [ "${{ matrix.build_type }}" = "full" ]; then
+ echo "CMAKE_EXTRA=-DBUILD_TOOLS:BOOLEAN=FALSE -DHIFI_PYTHON_EXEC:FILEPATH=$(which python3)" >> $GITHUB_ENV
+ else
+ echo "CMAKE_EXTRA=-DCLIENT_ONLY=1 -DBUILD_TOOLS:BOOLEAN=FALSE -DHIFI_PYTHON_EXEC:FILEPATH=$(which python3)" >> $GITHUB_ENV
+ fi
fi
# Mac build variables
if [ "${{ matrix.os }}" = "macOS-latest" ]; then
echo "PYTHON_EXEC=python3" >> $GITHUB_ENV
echo "INSTALLER_EXT=dmg" >> $GITHUB_ENV
- echo "CMAKE_EXTRA=-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=OFF -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -G Xcode" >> $GITHUB_ENV
+ if [ "${{ matrix.build_type }}" = "full" ]; then
+ echo "CMAKE_EXTRA=-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=OFF -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -G Xcode" >> $GITHUB_ENV
+ else
+ echo "CMAKE_EXTRA=-DCLIENT_ONLY=1 -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED=OFF -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -G Xcode" >> $GITHUB_ENV
+ fi
+ echo "APP_TARGET_NAME=Vircadia" >> $GITHUB_ENV
fi
# Windows build variables
if [ "${{ matrix.os }}" = "windows-latest" ]; then
echo "PYTHON_EXEC=python" >> $GITHUB_ENV
echo "INSTALLER_EXT=exe" >> $GITHUB_ENV
- echo "CMAKE_EXTRA=-A x64" >> $GITHUB_ENV
+ if [ "${{ matrix.build_type }}" = "full" ]; then
+ echo "CMAKE_EXTRA=-A x64" >> $GITHUB_ENV
+ else
+ echo "CMAKE_EXTRA=-A x64 -DCLIENT_ONLY=1" >> $GITHUB_ENV
+ fi
fi
# Android + Quest build variables
if [[ "${{ matrix.build_type }}" == "android" ]]; then
@@ -86,9 +102,13 @@ jobs:
echo "${{ steps.buildenv1.outputs.symbols_archive }}"
echo "GIT_COMMIT_SHORT=${{ steps.buildenv1.outputs.github_sha_short }}" >> $GITHUB_ENV
if [[ "${{ matrix.build_type }}" != "android" ]]; then
- echo "ARTIFACT_PATTERN=Vircadia-PR${{ github.event.number }}-*.$INSTALLER_EXT" >> $GITHUB_ENV
- # Build type variables
- echo "INSTALLER=Vircadia-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV
+ if [ "${{ matrix.build_type }}" = "full" ]; then
+ echo "ARTIFACT_PATTERN=Vircadia-PR${{ github.event.number }}-*.$INSTALLER_EXT" >> $GITHUB_ENV
+ echo "INSTALLER=Vircadia-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV
+ else
+ echo "ARTIFACT_PATTERN=Vircadia-Interface-PR${{ github.event.number }}-*.$INSTALLER_EXT" >> $GITHUB_ENV
+ echo "INSTALLER=Vircadia-Interface-$RELEASE_NUMBER-$GIT_COMMIT_SHORT.$INSTALLER_EXT" >> $GITHUB_ENV
+ fi
else
echo "ARTIFACT_PATTERN=*.$INSTALLER_EXT" >> $GITHUB_ENV
fi
@@ -124,7 +144,7 @@ jobs:
if: matrix.build_type == 'full' || matrix.build_type == 'client'
working-directory: ${{runner.workspace}}/build
shell: bash
- run: cmake --build . --config $BUILD_TYPE --target $APP_NAME $CMAKE_BUILD_EXTRA
+ run: cmake --build . --config $BUILD_TYPE --target $APP_TARGET_NAME $CMAKE_BUILD_EXTRA
- name: Build Domain Server
if: matrix.build_type == 'full'
working-directory: ${{runner.workspace}}/build
@@ -136,7 +156,7 @@ jobs:
shell: bash
run: cmake --build . --config $BUILD_TYPE --target assignment-client $CMAKE_BUILD_EXTRA
- name: Build Console
- if: matrix.build_type == 'full'
+ if: matrix.build_type == 'full' || matrix.os == 'windows-latest'
working-directory: ${{runner.workspace}}/build
shell: bash
run: cmake --build . --config $BUILD_TYPE --target packaged-server-console $CMAKE_BUILD_EXTRA
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6abd8735f6..b303ff2938 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -132,6 +132,15 @@ else()
set(MOBILE 0)
endif()
+set(SCREENSHARE 0)
+if (WIN32)
+ set(SCREENSHARE 1)
+endif()
+if (APPLE AND NOT CLIENT_ONLY)
+ # Don't include Screenshare in OSX client-only builds.
+ set(SCREENSHARE 1)
+endif()
+
# Use default time server if none defined in environment
set_from_env(TIMESERVER_URL TIMESERVER_URL "http://timestamp.comodoca.com?td=sha256")
@@ -323,8 +332,11 @@ endif()
if (BUILD_CLIENT)
add_subdirectory(interface)
- add_subdirectory(screenshare)
- set_target_properties(interface PROPERTIES FOLDER "Apps")
+ if (APPLE)
+ set_target_properties(Vircadia PROPERTIES FOLDER "Apps")
+ else()
+ set_target_properties(interface PROPERTIES FOLDER "Apps")
+ endif()
option(USE_SIXENSE "Build Interface with sixense library/plugin" OFF)
endif()
@@ -334,6 +346,10 @@ if (BUILD_CLIENT OR BUILD_SERVER)
add_subdirectory(server-console)
endif()
+if (SCREENSHARE)
+ add_subdirectory(screenshare)
+endif()
+
# BUILD_TOOLS option will be handled inside the tools's CMakeLists.txt because 'scribe' tool is required for build anyway
add_subdirectory(tools)
diff --git a/README.md b/README.md
index 830236f458..a6bbf554ec 100644
--- a/README.md
+++ b/README.md
@@ -1,33 +1,43 @@
-# Vircadia (Codename Athena)
+

+
### What is this?
-Vircadia™ is a 3D social software project seeking to incrementally bring about a truly free and open metaverse, in desktop and XR.
+Vircadia™ is a 3D social software project seeking to incrementally bring about a truly free and open metaverse.
-### [Website](https://vircadia.com/) | [Discord](https://discordapp.com/invite/Pvx2vke) | [Download](https://vircadia.com/download-vircadia/)
+* Desktop and VR use
+* Hundreds of users simultaneously
+* Full-body avatars
+* FBX, glTF, and OBJ support
+* JavaScript scripting engine
+* 16km^3 world space in a server
+* Fully self-hosted
+* Apache 2.0
### Releases
[View Releases here](https://github.com/vircadia/vircadia/releases/)
-### How to build the Interface
+### How to deploy a Server
+
+- [For Windows and Linux](https://vircadia.com/deploy-a-server/)
+
+### Building
+
+#### How to build the Interface
- [For Windows](https://github.com/vircadia/vircadia/blob/master/BUILD_WIN.md)
- [For Mac](https://github.com/vircadia/vircadia/blob/master/BUILD_OSX.md)
- [For Linux](https://github.com/vircadia/vircadia/blob/master/BUILD_LINUX.md)
- [For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder)
-### How to deploy a Server
-
-- [For Windows and Linux](https://vircadia.com/deploy-a-server/)
-
-### How to build a Server
+#### How to build a Server
- [For Windows](https://github.com/vircadia/vircadia/blob/master/BUILD_WIN.md)
- [For Linux](https://github.com/vircadia/vircadia/blob/master/BUILD_LINUX.md)
- [For Linux - Vircadia Builder](https://github.com/vircadia/vircadia-builder)
-### How to generate an Installer
+#### How to generate an Installer
- [For Windows - Interface & Server](https://github.com/vircadia/vircadia/blob/master/INSTALLER.md)
- [For Mac - Interface](https://github.com/vircadia/vircadia/blob/master/INSTALLER.md#os-x)
@@ -48,7 +58,7 @@ Vircadia consists of many projects and codebases with its unifying structure's g
- The UI Framework (Codename Nyx) - Codebase coming soon.
- [The Metaverse (Codename Iamus)](https://github.com/vircadia/Iamus/)
- [The Metaverse Dashboard (Codename Iamus)](https://github.com/vircadia/project-iamus-dashboard/)
-- [The Launcher (Codename Pantheon)](https://github.com/vircadia/pantheon-launcher/)
+- [The Launcher (Codename Pantheon)](https://github.com/vircadia/pantheon-launcher/) - Currently Windows only.
#### Child Projects
- [Vircadia Builder for Linux](https://github.com/vircadia/vircadia-builder/)
diff --git a/android/apps/interface/CMakeLists.txt b/android/apps/interface/CMakeLists.txt
index 500d555915..2f21d22b12 100644
--- a/android/apps/interface/CMakeLists.txt
+++ b/android/apps/interface/CMakeLists.txt
@@ -1,6 +1,6 @@
set(TARGET_NAME native-lib)
setup_hifi_library()
-link_hifi_libraries(shared task networking gl gpu qml image fbx hfm render-utils physics entities octree ${PLATFORM_GL_BACKEND})
+link_hifi_libraries(shared task networking gl gpu qml image model-serializers hfm render-utils physics entities octree ${PLATFORM_GL_BACKEND})
target_opengl()
target_bullet()
diff --git a/android/apps/questInterface/CMakeLists.txt b/android/apps/questInterface/CMakeLists.txt
index 97ca46f6e5..72448cc9cf 100644
--- a/android/apps/questInterface/CMakeLists.txt
+++ b/android/apps/questInterface/CMakeLists.txt
@@ -2,7 +2,7 @@ set(TARGET_NAME questInterface)
setup_hifi_library()
link_hifi_libraries(
shared task networking qml
- image fbx hfm render-utils physics entities octree
+ image model-serializers hfm render-utils physics entities octree
oculusMobile oculusMobilePlugin
gl gpu ${PLATFORM_GL_BACKEND}
)
diff --git a/assignment-client/CMakeLists.txt b/assignment-client/CMakeLists.txt
index 285c3221f8..abb94f95e3 100644
--- a/assignment-client/CMakeLists.txt
+++ b/assignment-client/CMakeLists.txt
@@ -12,7 +12,7 @@ setup_thread_debugger()
# link in the shared libraries
link_hifi_libraries(
- audio avatars octree gpu graphics shaders fbx hfm entities
+ audio avatars octree gpu graphics shaders model-serializers hfm entities
networking animation recording shared script-engine embedded-webserver
controllers physics plugins midi image
material-networking model-networking ktx shaders
diff --git a/cmake/macros/GenerateInstallers.cmake b/cmake/macros/GenerateInstallers.cmake
index e09a7dc322..15690f6012 100644
--- a/cmake/macros/GenerateInstallers.cmake
+++ b/cmake/macros/GenerateInstallers.cmake
@@ -96,19 +96,23 @@ macro(GENERATE_INSTALLERS)
set(CPACK_PACKAGING_INSTALL_PREFIX /)
set(CPACK_OSX_PACKAGE_VERSION ${CMAKE_OSX_DEPLOYMENT_TARGET})
- # make sure a High Fidelity directory exists, in case this hits prior to other installs
- install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/${DMG_SUBFOLDER_NAME}\")")
+ # Create folder if used.
+ if (NOT INTERFACE_INSTALL_DIR STREQUAL ".")
+ # make sure a High Fidelity directory exists, in case this hits prior to other installs
+ install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/${DMG_SUBFOLDER_NAME}\")")
- # add the resource file to the Icon file inside the folder
- install(CODE
- "execute_process(COMMAND Rez -append ${DMG_SUBFOLDER_ICON} -o \${CMAKE_INSTALL_PREFIX}/${ESCAPED_DMG_SUBFOLDER_NAME}/Icon\\r)"
- )
+ # add the resource file to the Icon file inside the folder
+ install(CODE
+ "execute_process(COMMAND Rez -append ${DMG_SUBFOLDER_ICON} -o \${CMAKE_INSTALL_PREFIX}/${ESCAPED_DMG_SUBFOLDER_NAME}/Icon\\r)"
+ )
- # modify the folder to use that custom icon
- install(CODE "execute_process(COMMAND SetFile -a C \${CMAKE_INSTALL_PREFIX}/${ESCAPED_DMG_SUBFOLDER_NAME})")
+ # modify the folder to use that custom icon
+ install(CODE "execute_process(COMMAND SetFile -a C \${CMAKE_INSTALL_PREFIX}/${ESCAPED_DMG_SUBFOLDER_NAME})")
+
+ # hide the special Icon? file
+ install(CODE "execute_process(COMMAND SetFile -a V \${CMAKE_INSTALL_PREFIX}/${ESCAPED_DMG_SUBFOLDER_NAME}/Icon\\r)")
+ endif ()
- # hide the special Icon? file
- install(CODE "execute_process(COMMAND SetFile -a V \${CMAKE_INSTALL_PREFIX}/${ESCAPED_DMG_SUBFOLDER_NAME}/Icon\\r)")
endif ()
# configure a cpack properties file for custom variables in template
diff --git a/cmake/macros/MemoryDebugger.cmake b/cmake/macros/MemoryDebugger.cmake
index 2fedc4e7dc..244d47b02e 100644
--- a/cmake/macros/MemoryDebugger.cmake
+++ b/cmake/macros/MemoryDebugger.cmake
@@ -17,25 +17,34 @@ if ("$ENV{VIRCADIA_MEMORY_DEBUGGING}")
endif ()
if (VIRCADIA_MEMORY_DEBUGGING)
- if (UNIX)
- if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- # for clang on Linux
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=undefined -fsanitize=address -fsanitize=leak -fsanitize-recover=address")
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak -fsanitize-recover=address")
- SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak -fsanitize-recover=address")
- else ()
- # for gcc on Linux
- # For some reason, using -fstack-protector results in this error:
- # usr/bin/ld: ../../libraries/audio/libaudio.so: undefined reference to `FIR_1x4_AVX512(float*, float*, float*, float*, float*, float (*) [64], int)'
- # The '-DSTACK_PROTECTOR' argument below disables the usage of this function in the code. This should be fine as it only works on the latest Intel hardware,
- # and is an optimization that should make no functional difference.
-
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak -U_FORTIFY_SOURCE -DSTACK_PROTECTOR -fstack-protector-strong -fno-omit-frame-pointer")
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak ")
- SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak")
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=undefined -fsanitize=address -fsanitize-recover=address")
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize-recover=address")
+ SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize-recover=address")
+ if (UNIX)
+ # Only supported on Linux and OSX
+ # https://clang.llvm.org/docs/LeakSanitizer.html
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=leak")
+ SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=leak")
endif()
+ elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+ # for gcc
+ # For some reason, using -fstack-protector results in this error:
+ # usr/bin/ld: ../../libraries/audio/libaudio.so: undefined reference to `FIR_1x4_AVX512(float*, float*, float*, float*, float*, float (*) [64], int)'
+ # The '-DSTACK_PROTECTOR' argument below disables the usage of this function in the code. This should be fine as it only works on the latest Intel hardware,
+ # and is an optimization that should make no functional difference.
+
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak -U_FORTIFY_SOURCE -DSTACK_PROTECTOR -fstack-protector-strong -fno-omit-frame-pointer")
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak ")
+ SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined -fsanitize=address -fsanitize=leak")
+ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
+ # https://docs.microsoft.com/en-us/cpp/sanitizers/asan?view=msvc-160
+ # Supported experimentally starting from VS2019 v16.4, and officially from v16.9.
+ # UBSan and leak detection don't seem to be implemented yet.
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address /Zi")
else()
- message(FATAL_ERROR "Memory debugging is not supported on this platform." )
+ message(FATAL_ERROR "Memory debugging is not supported on this compiler.")
endif()
endif ()
endmacro(SETUP_MEMORY_DEBUGGER)
diff --git a/cmake/macros/SetPackagingParameters.cmake b/cmake/macros/SetPackagingParameters.cmake
index d7f1aa2786..abe93275f6 100644
--- a/cmake/macros/SetPackagingParameters.cmake
+++ b/cmake/macros/SetPackagingParameters.cmake
@@ -38,6 +38,12 @@ macro(SET_PACKAGING_PARAMETERS)
set(CLIENT_COMPONENT client)
set(SERVER_COMPONENT server)
+ if (APPLE)
+ set(INTERFACE_BUNDLE_NAME "Vircadia")
+ else()
+ set(INTERFACE_BUNDLE_NAME "interface")
+ endif()
+
if (RELEASE_TYPE STREQUAL "PRODUCTION")
set(DEPLOY_PACKAGE TRUE)
set(PRODUCTION_BUILD 1)
@@ -45,7 +51,6 @@ macro(SET_PACKAGING_PARAMETERS)
set(BUILD_ORGANIZATION "Vircadia")
set(HIGH_FIDELITY_PROTOCOL "hifi")
set(HIGH_FIDELITY_APP_PROTOCOL "hifiapp")
- set(INTERFACE_BUNDLE_NAME "interface")
set(INTERFACE_ICON_PREFIX "interface")
# add definition for this release type
@@ -68,7 +73,6 @@ macro(SET_PACKAGING_PARAMETERS)
set(PR_BUILD 1)
set(BUILD_VERSION "PR${RELEASE_NUMBER}")
set(BUILD_ORGANIZATION "Vircadia - PR${RELEASE_NUMBER}")
- set(INTERFACE_BUNDLE_NAME "interface")
set(INTERFACE_ICON_PREFIX "interface-beta")
# add definition for this release type
@@ -77,7 +81,6 @@ macro(SET_PACKAGING_PARAMETERS)
set(DEV_BUILD 1)
set(BUILD_VERSION "dev")
set(BUILD_ORGANIZATION "Vircadia - ${BUILD_VERSION}")
- set(INTERFACE_BUNDLE_NAME "interface")
set(INTERFACE_ICON_PREFIX "interface-beta")
# add definition for this release type
@@ -85,7 +88,11 @@ macro(SET_PACKAGING_PARAMETERS)
endif ()
set(NITPICK_BUNDLE_NAME "nitpick")
- set(NITPICK_ICON_PREFIX "nitpick")
+ if (RELEASE_TYPE STREQUAL "PRODUCTION")
+ set(NITPICK_ICON_PREFIX "nitpick")
+ else ()
+ set(NITPICK_ICON_PREFIX "nitpick-beta")
+ endif ()
string(TIMESTAMP BUILD_TIME "%d/%m/%Y")
@@ -125,10 +132,10 @@ macro(SET_PACKAGING_PARAMETERS)
set(DMG_SUBFOLDER_ICON "${HF_CMAKE_DIR}/installer/install-folder.rsrc")
- set(CONSOLE_INSTALL_DIR ${DMG_SUBFOLDER_NAME})
- set(INTERFACE_INSTALL_DIR ${DMG_SUBFOLDER_NAME})
- set(SCREENSHARE_INSTALL_DIR ${DMG_SUBFOLDER_NAME})
- set(NITPICK_INSTALL_DIR ${DMG_SUBFOLDER_NAME})
+ set(CONSOLE_INSTALL_DIR ".")
+ set(INTERFACE_INSTALL_DIR ".")
+ set(SCREENSHARE_INSTALL_DIR ".")
+ set(NITPICK_INSTALL_DIR ".")
if (CLIENT_ONLY)
set(CONSOLE_EXEC_NAME "Console.app")
@@ -147,7 +154,7 @@ macro(SET_PACKAGING_PARAMETERS)
set(SCREENSHARE_APP_CONTENTS "${SCREENSHARE_INSTALL_APP_PATH}/Contents")
- set(INTERFACE_INSTALL_APP_PATH "${CONSOLE_INSTALL_DIR}/${INTERFACE_BUNDLE_NAME}.app")
+ set(INTERFACE_INSTALL_APP_PATH "${INTERFACE_INSTALL_DIR}/${INTERFACE_BUNDLE_NAME}.app")
set(INTERFACE_ICON_FILENAME "${INTERFACE_ICON_PREFIX}.icns")
set(NITPICK_ICON_FILENAME "${NITPICK_ICON_PREFIX}.icns")
else ()
diff --git a/cmake/macros/SetupHifiClientServerPlugin.cmake b/cmake/macros/SetupHifiClientServerPlugin.cmake
index 1ce0b0ca6e..5c98ceb139 100644
--- a/cmake/macros/SetupHifiClientServerPlugin.cmake
+++ b/cmake/macros/SetupHifiClientServerPlugin.cmake
@@ -11,7 +11,11 @@ macro(SETUP_HIFI_CLIENT_SERVER_PLUGIN)
setup_hifi_library()
if (BUILD_CLIENT)
- add_dependencies(interface ${TARGET_NAME})
+ if (APPLE)
+ add_dependencies(Vircadia ${TARGET_NAME})
+ else()
+ add_dependencies(interface ${TARGET_NAME})
+ endif()
endif()
if (BUILD_SERVER)
diff --git a/cmake/macros/SetupHifiPlugin.cmake b/cmake/macros/SetupHifiPlugin.cmake
index 023c7603dc..22fa02dd79 100644
--- a/cmake/macros/SetupHifiPlugin.cmake
+++ b/cmake/macros/SetupHifiPlugin.cmake
@@ -9,7 +9,11 @@ macro(SETUP_HIFI_PLUGIN)
set(${TARGET_NAME}_SHARED 1)
setup_hifi_library(${ARGV})
if (BUILD_CLIENT)
- add_dependencies(interface ${TARGET_NAME})
+ if (APPLE)
+ add_dependencies(Vircadia ${TARGET_NAME})
+ else()
+ add_dependencies(interface ${TARGET_NAME})
+ endif()
endif()
target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT})
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Plugins")
diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt
index 6e4837527e..c307c63142 100644
--- a/interface/CMakeLists.txt
+++ b/interface/CMakeLists.txt
@@ -1,4 +1,10 @@
-set(TARGET_NAME interface)
+if (APPLE)
+ # Make the OSX DMG app be Vircadia.app.
+ set(TARGET_NAME Vircadia)
+else()
+ set(TARGET_NAME interface)
+endif()
+
project(${TARGET_NAME})
file(GLOB_RECURSE QML_SRC resources/qml/*.qml resources/qml/*.js)
@@ -192,9 +198,12 @@ if (BUILD_TOOLS AND NPM_EXECUTABLE)
endif()
if (WIN32 OR APPLE)
- add_dependencies(${TARGET_NAME} resources screenshare)
+ add_dependencies(${TARGET_NAME} resources)
endif()
+if (SCREENSHARE)
+ add_dependencies(${TARGET_NAME} screenshare)
+endif()
if (WIN32)
# These are external plugins, but we need to do the 'add dependency' here so that their
@@ -219,7 +228,7 @@ endif()
# link required hifi libraries
link_hifi_libraries(
shared workload task octree ktx gpu gl procedural graphics graphics-scripting render
- pointers recording hfm fbx networking material-networking
+ pointers recording hfm model-serializers networking material-networking
model-networking model-baker entities avatars
audio audio-client animation script-engine physics
render-utils entities-renderer avatars-renderer ui qml auto-updater midi
@@ -334,10 +343,6 @@ if (APPLE)
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${CMAKE_SOURCE_DIR}/scripts"
"${RESOURCES_DEV_DIR}/scripts"
- # copy screenshare app to the resource folder
- COMMAND "${CMAKE_COMMAND}" -E copy_directory
- "${CMAKE_CURRENT_BINARY_DIR}/../screenshare/hifi-screenshare-darwin-x64/hifi-screenshare.app"
- "${RESOURCES_DEV_DIR}/hifi-screenshare.app"
# copy JSDoc files beside the executable
COMMAND "${CMAKE_COMMAND}" -E copy_directory
"${CMAKE_SOURCE_DIR}/tools/jsdoc/out"
@@ -364,6 +369,15 @@ if (APPLE)
"${RESOURCES_DEV_DIR}/serverless/redirect.json"
)
+ if (SCREENSHARE)
+ add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
+ # copy screenshare app to the resource folder
+ COMMAND "${CMAKE_COMMAND}" -E copy_directory
+ "${CMAKE_CURRENT_BINARY_DIR}/../screenshare/hifi-screenshare-darwin-x64/hifi-screenshare.app"
+ "${RESOURCES_DEV_DIR}/hifi-screenshare.app"
+ )
+ endif()
+
# call the fixup_interface macro to add required bundling commands for installation
fixup_interface()
diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index 057f32f370..dad22f6b1f 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -1011,7 +1011,7 @@ const bool DEFAULT_HMD_TABLET_BECOMES_TOOLBAR = false;
const bool DEFAULT_PREFER_STYLUS_OVER_LASER = false;
const bool DEFAULT_PREFER_AVATAR_FINGER_OVER_STYLUS = false;
const QString DEFAULT_CURSOR_NAME = "DEFAULT";
-const bool DEFAULT_MINI_TABLET_ENABLED = true;
+const bool DEFAULT_MINI_TABLET_ENABLED = false;
const bool DEFAULT_AWAY_STATE_WHEN_FOCUS_LOST_IN_VR_ENABLED = true;
QSharedPointer getOffscreenUI() {
diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp
index 4cd5025fc1..1c6ef387f3 100644
--- a/interface/src/LODManager.cpp
+++ b/interface/src/LODManager.cpp
@@ -4,6 +4,7 @@
//
// Created by Clement on 1/16/15.
// Copyright 2015 High Fidelity, Inc.
+// Copyright 2021 Vircadia contributors.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
@@ -19,8 +20,12 @@
#include "ui/DialogsManager.h"
#include "InterfaceLogging.h"
-Setting::Handle desktopWorldDetailQuality("desktopWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY);
-Setting::Handle hmdWorldDetailQuality("hmdWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY);
+const QString LOD_SETTINGS_PREFIX { "lodManager/" };
+
+Setting::Handle automaticLODAdjust(LOD_SETTINGS_PREFIX + "automaticLODAdjust", (bool)DEFAULT_LOD_AUTO_ADJUST);
+Setting::Handle lodHalfAngle(LOD_SETTINGS_PREFIX + "lodHalfAngle", (float)getHalfAngleFromVisibilityDistance(DEFAULT_VISIBILITY_DISTANCE_FOR_UNIT_ELEMENT));
+Setting::Handle desktopWorldDetailQuality(LOD_SETTINGS_PREFIX + "desktopWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY);
+Setting::Handle hmdWorldDetailQuality(LOD_SETTINGS_PREFIX + "hmdWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY);
LODManager::LODManager() {
}
@@ -188,12 +193,14 @@ void LODManager::setVisibilityDistance(float distance) {
// Maintain behavior with deprecated _boundaryLevelAdjust property
float userDistance = distance / powf(2.0f, _boundaryLevelAdjust);
_lodHalfAngle = getHalfAngleFromVisibilityDistance(userDistance);
+ saveSettings();
}
void LODManager::setLODAngleDeg(float lodAngle) {
auto newLODAngleDeg = std::max(0.001f, std::min(lodAngle, 90.f));
auto newLODHalfAngle = glm::radians(newLODAngleDeg * 0.5f);
_lodHalfAngle = newLODHalfAngle;
+ saveSettings();
}
void LODManager::setSmoothScale(float t) {
@@ -244,6 +251,7 @@ void LODManager::resetLODAdjust() {
void LODManager::setAutomaticLODAdjust(bool value) {
std::lock_guard { _automaticLODLock };
_automaticLODAdjust = value;
+ saveSettings();
emit autoLODChanged();
}
@@ -330,14 +338,19 @@ void LODManager::loadSettings() {
if (qApp->property(hifi::properties::OCULUS_STORE).toBool() && firstRun.get()) {
hmdQuality = WORLD_DETAIL_HIGH;
}
+
+ _automaticLODAdjust = automaticLODAdjust.get();
+ _lodHalfAngle = lodHalfAngle.get();
setWorldDetailQuality(desktopQuality, false);
setWorldDetailQuality(hmdQuality, true);
}
void LODManager::saveSettings() {
+ automaticLODAdjust.set((bool)_automaticLODAdjust);
desktopWorldDetailQuality.set((int)_desktopWorldDetailQuality);
hmdWorldDetailQuality.set((int)_hmdWorldDetailQuality);
+ lodHalfAngle.set((float)_lodHalfAngle);
}
const float MIN_DECREASE_FPS = 0.5f;
@@ -405,6 +418,7 @@ void LODManager::setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMod
void LODManager::setWorldDetailQuality(WorldDetailQuality quality) {
setWorldDetailQuality(quality, qApp->isHMDMode());
+ saveSettings();
emit worldDetailQualityChanged();
}
diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h
index 16b0529b05..35f80efcda 100644
--- a/interface/src/LODManager.h
+++ b/interface/src/LODManager.h
@@ -4,6 +4,7 @@
//
// Created by Clement on 1/16/15.
// Copyright 2015 High Fidelity, Inc.
+// Copyright 2021 Vircadia contributors.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
@@ -44,10 +45,12 @@ enum WorldDetailQuality {
};
Q_DECLARE_METATYPE(WorldDetailQuality);
+const bool DEFAULT_LOD_AUTO_ADJUST = false; // true for auto, false for manual.
+
#ifdef Q_OS_ANDROID
-const float LOD_DEFAULT_QUALITY_LEVEL = 0.2f; // default quality level setting is High (lower framerate)
+const float DEFAULT_LOD_QUALITY_LEVEL = 0.2f; // default quality level setting is High (lower framerate)
#else
-const float LOD_DEFAULT_QUALITY_LEVEL = 0.5f; // default quality level setting is Mid
+const float DEFAULT_LOD_QUALITY_LEVEL = 0.5f; // default quality level setting is Mid
#endif
#ifdef Q_OS_ANDROID
@@ -255,7 +258,6 @@ public:
*/
Q_INVOKABLE float getLODTargetFPS() const;
-
float getPresentTime() const { return _presentTime; }
float getEngineRunTime() const { return _engineRunTime; }
float getBatchTime() const { return _batchTime; }
@@ -351,7 +353,7 @@ private:
void setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMode);
std::mutex _automaticLODLock;
- bool _automaticLODAdjust = true;
+ bool _automaticLODAdjust = DEFAULT_LOD_AUTO_ADJUST;
float _presentTime{ 0.0f }; // msec
float _engineRunTime{ 0.0f }; // msec
@@ -362,7 +364,7 @@ private:
float _smoothScale{ 10.0f }; // smooth is evaluated over 10 times longer than now
float _smoothRenderTime{ 0.0f }; // msec
- float _lodQualityLevel{ LOD_DEFAULT_QUALITY_LEVEL };
+ float _lodQualityLevel{ DEFAULT_LOD_QUALITY_LEVEL };
WorldDetailQuality _desktopWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY };
WorldDetailQuality _hmdWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY };
diff --git a/libraries/animation/CMakeLists.txt b/libraries/animation/CMakeLists.txt
index 1ab54ed342..d962d9e222 100644
--- a/libraries/animation/CMakeLists.txt
+++ b/libraries/animation/CMakeLists.txt
@@ -1,6 +1,6 @@
set(TARGET_NAME animation)
setup_hifi_library(Network Script)
-link_hifi_libraries(shared graphics fbx)
+link_hifi_libraries(shared graphics model-serializers)
include_hifi_library_headers(networking)
include_hifi_library_headers(gpu)
include_hifi_library_headers(hfm)
diff --git a/libraries/avatars-renderer/CMakeLists.txt b/libraries/avatars-renderer/CMakeLists.txt
index deba2913c1..0175d1113a 100644
--- a/libraries/avatars-renderer/CMakeLists.txt
+++ b/libraries/avatars-renderer/CMakeLists.txt
@@ -4,7 +4,7 @@ link_hifi_libraries(shared shaders gpu graphics animation material-networking mo
include_hifi_library_headers(avatars)
include_hifi_library_headers(networking)
include_hifi_library_headers(hfm)
-include_hifi_library_headers(fbx)
+include_hifi_library_headers(model-serializers)
include_hifi_library_headers(recording)
include_hifi_library_headers(ktx)
include_hifi_library_headers(procedural)
diff --git a/libraries/baking/CMakeLists.txt b/libraries/baking/CMakeLists.txt
index 4350f386ab..12fb192877 100644
--- a/libraries/baking/CMakeLists.txt
+++ b/libraries/baking/CMakeLists.txt
@@ -1,7 +1,7 @@
set(TARGET_NAME baking)
setup_hifi_library(Concurrent)
-link_hifi_libraries(shared shaders graphics networking procedural graphics-scripting ktx image fbx model-baker task)
+link_hifi_libraries(shared shaders graphics networking procedural graphics-scripting ktx image model-serializers model-baker task)
include_hifi_library_headers(gpu)
include_hifi_library_headers(hfm)
-include_hifi_library_headers(material-networking)
\ No newline at end of file
+include_hifi_library_headers(material-networking)
diff --git a/libraries/display-plugins/CMakeLists.txt b/libraries/display-plugins/CMakeLists.txt
index cdc6263025..07b70c310f 100644
--- a/libraries/display-plugins/CMakeLists.txt
+++ b/libraries/display-plugins/CMakeLists.txt
@@ -7,7 +7,7 @@ include_hifi_library_headers(model-networking)
include_hifi_library_headers(networking)
include_hifi_library_headers(graphics)
include_hifi_library_headers(hfm)
-include_hifi_library_headers(fbx)
+include_hifi_library_headers(model-serializers)
include_hifi_library_headers(image)
include_hifi_library_headers(ktx)
include_hifi_library_headers(render)
diff --git a/libraries/entities-renderer/CMakeLists.txt b/libraries/entities-renderer/CMakeLists.txt
index e1896cf674..5f40c8d5fe 100644
--- a/libraries/entities-renderer/CMakeLists.txt
+++ b/libraries/entities-renderer/CMakeLists.txt
@@ -9,7 +9,7 @@ include_hifi_library_headers(audio)
include_hifi_library_headers(physics)
include_hifi_library_headers(animation)
include_hifi_library_headers(hfm)
-include_hifi_library_headers(fbx)
+include_hifi_library_headers(model-serializers)
include_hifi_library_headers(entities)
include_hifi_library_headers(avatars)
include_hifi_library_headers(controllers)
diff --git a/libraries/entities/CMakeLists.txt b/libraries/entities/CMakeLists.txt
index 3157a6552b..bddd4b5e67 100644
--- a/libraries/entities/CMakeLists.txt
+++ b/libraries/entities/CMakeLists.txt
@@ -1,8 +1,8 @@
set(TARGET_NAME entities)
setup_hifi_library(Network Script)
-target_include_directories(${TARGET_NAME} PRIVATE "${OPENSSL_INCLUDE_DIR}")
+target_include_directories(${TARGET_NAME} PRIVATE "${OPENSSL_INCLUDE_DIR}")
include_hifi_library_headers(hfm)
-include_hifi_library_headers(fbx)
+include_hifi_library_headers(model-serializers)
include_hifi_library_headers(gpu)
include_hifi_library_headers(image)
include_hifi_library_headers(ktx)
diff --git a/libraries/graphics-scripting/CMakeLists.txt b/libraries/graphics-scripting/CMakeLists.txt
index 9bb34adda1..3542704fc8 100644
--- a/libraries/graphics-scripting/CMakeLists.txt
+++ b/libraries/graphics-scripting/CMakeLists.txt
@@ -1,4 +1,4 @@
set(TARGET_NAME graphics-scripting)
setup_hifi_library()
-link_hifi_libraries(shared networking graphics fbx image material-networking model-networking script-engine)
+link_hifi_libraries(shared networking graphics model-serializers image material-networking model-networking script-engine)
include_hifi_library_headers(gpu)
diff --git a/libraries/model-networking/CMakeLists.txt b/libraries/model-networking/CMakeLists.txt
index b71d125586..9a7ce47b8e 100644
--- a/libraries/model-networking/CMakeLists.txt
+++ b/libraries/model-networking/CMakeLists.txt
@@ -1,9 +1,9 @@
set(TARGET_NAME model-networking)
setup_hifi_library()
-link_hifi_libraries(shared shaders networking graphics fbx procedural model-baker)
+link_hifi_libraries(shared shaders networking graphics model-serializers procedural model-baker)
include_hifi_library_headers(hfm)
include_hifi_library_headers(task)
include_hifi_library_headers(gpu)
include_hifi_library_headers(image)
include_hifi_library_headers(ktx)
-include_hifi_library_headers(material-networking)
\ No newline at end of file
+include_hifi_library_headers(material-networking)
diff --git a/libraries/fbx/CMakeLists.txt b/libraries/model-serializers/CMakeLists.txt
similarity index 79%
rename from libraries/fbx/CMakeLists.txt
rename to libraries/model-serializers/CMakeLists.txt
index 2006d23c60..76775896dc 100644
--- a/libraries/fbx/CMakeLists.txt
+++ b/libraries/model-serializers/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(TARGET_NAME fbx)
+set(TARGET_NAME model-serializers)
setup_hifi_library()
link_hifi_libraries(shared graphics networking image hfm)
diff --git a/libraries/fbx/src/FBX.h b/libraries/model-serializers/src/FBX.h
similarity index 97%
rename from libraries/fbx/src/FBX.h
rename to libraries/model-serializers/src/FBX.h
index 362ae93e99..3c4234e14b 100644
--- a/libraries/fbx/src/FBX.h
+++ b/libraries/model-serializers/src/FBX.h
@@ -1,6 +1,6 @@
//
// FBX.h
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Ryan Huffman on 9/5/17.
// Copyright 2017 High Fidelity, Inc.
diff --git a/libraries/fbx/src/FBXSerializer.cpp b/libraries/model-serializers/src/FBXSerializer.cpp
similarity index 99%
rename from libraries/fbx/src/FBXSerializer.cpp
rename to libraries/model-serializers/src/FBXSerializer.cpp
index 9c700be607..a18e305a80 100644
--- a/libraries/fbx/src/FBXSerializer.cpp
+++ b/libraries/model-serializers/src/FBXSerializer.cpp
@@ -1,6 +1,6 @@
//
// FBXSerializer.cpp
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Andrzej Kapolka on 9/18/13.
// Copyright 2013 High Fidelity, Inc.
@@ -404,7 +404,7 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const
QVector blendshapes;
QHash fbxModels;
- QHash clusters;
+ QHash clusters;
QHash animationCurves;
QHash typeFlags;
@@ -1236,7 +1236,7 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const
// models with clusters must be parented to the cluster top
// Unless the model is a root node.
bool isARootNode = !modelIDs.contains(_connectionParentMap.value(fbxModel.key()));
- if (!isARootNode) {
+ if (!isARootNode) {
foreach(const QString& deformerID, _connectionChildMap.values(fbxModel.key())) {
foreach(const QString& clusterID, _connectionChildMap.values(deformerID)) {
if (!clusters.contains(clusterID)) {
diff --git a/libraries/fbx/src/FBXSerializer.h b/libraries/model-serializers/src/FBXSerializer.h
similarity index 99%
rename from libraries/fbx/src/FBXSerializer.h
rename to libraries/model-serializers/src/FBXSerializer.h
index 7d41f98444..e528885754 100644
--- a/libraries/fbx/src/FBXSerializer.h
+++ b/libraries/model-serializers/src/FBXSerializer.h
@@ -1,6 +1,6 @@
//
// FBXSerializer.h
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Andrzej Kapolka on 9/18/13.
// Copyright 2013 High Fidelity, Inc.
@@ -69,7 +69,7 @@ public:
useMaterial(true),
isDefault(true)
{}
-
+
TextureParam(const TextureParam& src) :
cropping(src.cropping),
UVSet(src.UVSet),
@@ -81,7 +81,7 @@ public:
useMaterial(src.useMaterial),
isDefault(src.isDefault)
{}
-
+
};
class MaterialParam {
diff --git a/libraries/fbx/src/FBXSerializer_Material.cpp b/libraries/model-serializers/src/FBXSerializer_Material.cpp
similarity index 99%
rename from libraries/fbx/src/FBXSerializer_Material.cpp
rename to libraries/model-serializers/src/FBXSerializer_Material.cpp
index 8b170eba1b..81f9ca45e3 100644
--- a/libraries/fbx/src/FBXSerializer_Material.cpp
+++ b/libraries/model-serializers/src/FBXSerializer_Material.cpp
@@ -1,6 +1,6 @@
//
// FBXSerializer_Material.cpp
-// interface/src/fbx
+// libraries/model-serializers/src
//
// Created by Sam Gateau on 8/27/2015.
// Copyright 2015 High Fidelity, Inc.
diff --git a/libraries/fbx/src/FBXSerializer_Mesh.cpp b/libraries/model-serializers/src/FBXSerializer_Mesh.cpp
similarity index 99%
rename from libraries/fbx/src/FBXSerializer_Mesh.cpp
rename to libraries/model-serializers/src/FBXSerializer_Mesh.cpp
index f74a960dc8..8d270d8320 100644
--- a/libraries/fbx/src/FBXSerializer_Mesh.cpp
+++ b/libraries/model-serializers/src/FBXSerializer_Mesh.cpp
@@ -1,6 +1,6 @@
//
// FBXSerializer_Mesh.cpp
-// interface/src/fbx
+// libraries/model-serializers/src
//
// Created by Sam Gateau on 8/27/2015.
// Copyright 2015 High Fidelity, Inc.
@@ -106,7 +106,7 @@ void appendIndex(MeshData& data, QVector& indices, int index, bool deduplic
}
Vertex vertex;
vertex.originalIndex = vertexIndex;
-
+
glm::vec3 position;
if (vertexIndex < data.vertices.size()) {
position = data.vertices.at(vertexIndex);
@@ -114,7 +114,7 @@ void appendIndex(MeshData& data, QVector& indices, int index, bool deduplic
glm::vec3 normal;
int normalIndex = data.normalsByVertex ? vertexIndex : index;
- if (data.normalIndices.isEmpty()) {
+ if (data.normalIndices.isEmpty()) {
if (normalIndex < data.normals.size()) {
normal = data.normals.at(normalIndex);
}
@@ -130,7 +130,7 @@ void appendIndex(MeshData& data, QVector& indices, int index, bool deduplic
bool hasColors = (data.colors.size() > 0);
if (hasColors) {
int colorIndex = data.colorsByVertex ? vertexIndex : index;
- if (data.colorIndices.isEmpty()) {
+ if (data.colorIndices.isEmpty()) {
if (colorIndex < data.colors.size()) {
color = data.colors.at(colorIndex);
}
@@ -152,7 +152,7 @@ void appendIndex(MeshData& data, QVector& indices, int index, bool deduplic
vertex.texCoord = data.texCoords.at(texCoordIndex);
}
}
-
+
bool hasMoreTexcoords = (data.attributes.size() > 1);
if (hasMoreTexcoords) {
if (data.attributes[1].texCoordIndices.empty()) {
@@ -222,7 +222,7 @@ ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& me
} else if (subdata.name == "MappingInformationType" && subdata.properties.at(0) == BY_VERTICE) {
data.normalsByVertex = true;
-
+
} else if (subdata.name == "ReferenceInformationType" && subdata.properties.at(0) == INDEX_TO_DIRECT) {
indexToDirect = true;
}
@@ -242,7 +242,7 @@ ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& me
} else if (subdata.name == "MappingInformationType" && subdata.properties.at(0) == BY_VERTICE) {
data.colorsByVertex = true;
-
+
} else if (subdata.name == "ReferenceInformationType" && subdata.properties.at(0) == INDEX_TO_DIRECT) {
indexToDirect = true;
}
@@ -264,7 +264,7 @@ ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& me
qCDebug(modelformat) << "LayerElementColor has an average value of 0.0f... let's forget it.";
}
#endif
-
+
} else if (child.name == "LayerElementUV") {
if (child.properties.at(0).toInt() == 0) {
AttributeData attrib;
@@ -278,7 +278,7 @@ ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& me
attrib.texCoordIndices = getIntVector(subdata);
} else if (subdata.name == "Name") {
attrib.name = subdata.properties.at(0).toString();
- }
+ }
#if defined(DEBUG_FBXSERIALIZER)
else {
int unknown = 0;
@@ -579,6 +579,6 @@ ExtractedMesh FBXSerializer::extractMesh(const FBXNode& object, unsigned int& me
}
}
}
-
+
return data.extracted;
}
diff --git a/libraries/fbx/src/FBXSerializer_Node.cpp b/libraries/model-serializers/src/FBXSerializer_Node.cpp
similarity index 99%
rename from libraries/fbx/src/FBXSerializer_Node.cpp
rename to libraries/model-serializers/src/FBXSerializer_Node.cpp
index a2772d02d7..f662f10c1a 100644
--- a/libraries/fbx/src/FBXSerializer_Node.cpp
+++ b/libraries/model-serializers/src/FBXSerializer_Node.cpp
@@ -1,6 +1,6 @@
//
// FBXSerializer_Node.cpp
-// interface/src/fbx
+// libraries/model-serializers/src
//
// Created by Sam Gateau on 8/27/2015.
// Copyright 2015 High Fidelity, Inc.
@@ -183,7 +183,7 @@ FBXNode parseBinaryFBXNode(QDataStream& in, int& position, bool has64BitPosition
// FBX 2016 and beyond uses 64bit positions in the node headers, pre-2016 used 32bit values
// our code generally doesn't care about the size that much, so we will use 64bit values
- // from here on out, but if the file is an older format we read the stream into temp 32bit
+ // from here on out, but if the file is an older format we read the stream into temp 32bit
// values and then assign to our actual 64bit values.
if (has64BitPositions) {
in >> endOffset;
@@ -335,8 +335,8 @@ FBXNode parseTextFBXNode(Tokenizer& tokenizer) {
if ((token = tokenizer.nextToken()) == ':') {
tokenizer.ungetChar(':');
tokenizer.pushBackToken(Tokenizer::DATUM_TOKEN);
- return node;
-
+ return node;
+
} else {
tokenizer.pushBackToken(token);
node.properties.append(datum);
diff --git a/libraries/fbx/src/FBXToJSON.cpp b/libraries/model-serializers/src/FBXToJSON.cpp
similarity index 98%
rename from libraries/fbx/src/FBXToJSON.cpp
rename to libraries/model-serializers/src/FBXToJSON.cpp
index 195b7f5f90..f7431e1f61 100644
--- a/libraries/fbx/src/FBXToJSON.cpp
+++ b/libraries/model-serializers/src/FBXToJSON.cpp
@@ -1,6 +1,6 @@
//
// FBXToJSON.cpp
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Simon Walton on 5/4/2018.
// Copyright 2018 High Fidelity, Inc.
@@ -61,7 +61,7 @@ FBXToJSON& FBXToJSON::operator<<(const FBXNode& fbxNode) {
case QMetaType::QByteArray:
*this << '"' << stringEscape(prop.toByteArray().toStdString()) << '"';
break;
-
+
default:
if (prop.canConvert>()) {
*this << prop.value>();
@@ -95,7 +95,7 @@ FBXToJSON& FBXToJSON::operator<<(const FBXNode& fbxNode) {
string FBXToJSON::stringEscape(const string& in) {
string out;
out.reserve(in.length());
-
+
for (unsigned char inChar: in) {
if (inChar == '"') {
out.append(R"(\")");
diff --git a/libraries/fbx/src/FBXToJSON.h b/libraries/model-serializers/src/FBXToJSON.h
similarity index 95%
rename from libraries/fbx/src/FBXToJSON.h
rename to libraries/model-serializers/src/FBXToJSON.h
index e6b8efe51d..f36235abca 100644
--- a/libraries/fbx/src/FBXToJSON.h
+++ b/libraries/model-serializers/src/FBXToJSON.h
@@ -1,6 +1,6 @@
//
// FBXToJSON.h
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Simon Walton on 5/4/2018.
// Copyright 2018 High Fidelity, Inc.
diff --git a/libraries/fbx/src/FBXWriter.cpp b/libraries/model-serializers/src/FBXWriter.cpp
similarity index 99%
rename from libraries/fbx/src/FBXWriter.cpp
rename to libraries/model-serializers/src/FBXWriter.cpp
index 4504898e32..efc94461aa 100644
--- a/libraries/fbx/src/FBXWriter.cpp
+++ b/libraries/model-serializers/src/FBXWriter.cpp
@@ -1,6 +1,6 @@
//
// FBXWriter.cpp
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Ryan Huffman on 9/5/17.
// Copyright 2017 High Fidelity, Inc.
diff --git a/libraries/fbx/src/FBXWriter.h b/libraries/model-serializers/src/FBXWriter.h
similarity index 94%
rename from libraries/fbx/src/FBXWriter.h
rename to libraries/model-serializers/src/FBXWriter.h
index f20d208cb1..f7f4e647c6 100644
--- a/libraries/fbx/src/FBXWriter.h
+++ b/libraries/model-serializers/src/FBXWriter.h
@@ -1,6 +1,6 @@
//
// FBXWriter.h
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Ryan Huffman on 9/5/17.
// Copyright 2017 High Fidelity, Inc.
diff --git a/libraries/fbx/src/FST.cpp b/libraries/model-serializers/src/FST.cpp
similarity index 100%
rename from libraries/fbx/src/FST.cpp
rename to libraries/model-serializers/src/FST.cpp
diff --git a/libraries/fbx/src/FST.h b/libraries/model-serializers/src/FST.h
similarity index 100%
rename from libraries/fbx/src/FST.h
rename to libraries/model-serializers/src/FST.h
diff --git a/libraries/fbx/src/FSTReader.cpp b/libraries/model-serializers/src/FSTReader.cpp
similarity index 100%
rename from libraries/fbx/src/FSTReader.cpp
rename to libraries/model-serializers/src/FSTReader.cpp
diff --git a/libraries/fbx/src/FSTReader.h b/libraries/model-serializers/src/FSTReader.h
similarity index 100%
rename from libraries/fbx/src/FSTReader.h
rename to libraries/model-serializers/src/FSTReader.h
diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/model-serializers/src/GLTFSerializer.cpp
similarity index 98%
rename from libraries/fbx/src/GLTFSerializer.cpp
rename to libraries/model-serializers/src/GLTFSerializer.cpp
index ec4777933a..092fa3d694 100755
--- a/libraries/fbx/src/GLTFSerializer.cpp
+++ b/libraries/model-serializers/src/GLTFSerializer.cpp
@@ -1,6 +1,6 @@
//
// GLTFSerializer.cpp
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Luis Cuenca on 8/30/17.
// Copyright 2017 High Fidelity, Inc.
@@ -148,7 +148,7 @@ bool GLTFSerializer::getObjectArrayVal(const QJsonObject& object, const QString&
}
hifi::ByteArray GLTFSerializer::setGLBChunks(const hifi::ByteArray& data) {
- int byte = 4;
+ int byte = 4;
int jsonStart = data.indexOf("JSON", Qt::CaseSensitive);
int binStart = data.indexOf("BIN", Qt::CaseSensitive);
int jsonLength, binLength;
@@ -271,7 +271,7 @@ bool GLTFSerializer::setAsset(const QJsonObject& object) {
QJsonObject jsAsset;
bool isAssetDefined = getObjectVal(object, "asset", jsAsset, _file.defined);
if (isAssetDefined) {
- if (!getStringVal(jsAsset, "version", _file.asset.version,
+ if (!getStringVal(jsAsset, "version", _file.asset.version,
_file.asset.defined) || _file.asset.version != "2.0") {
return false;
}
@@ -318,7 +318,7 @@ GLTFAccessor::GLTFAccessorSparse GLTFSerializer::createAccessorSparse(const QJso
bool GLTFSerializer::addAccessor(const QJsonObject& object) {
GLTFAccessor accessor;
-
+
getIntVal(object, "bufferView", accessor.bufferView, accessor.defined);
getIntVal(object, "byteOffset", accessor.byteOffset, accessor.defined);
getIntVal(object, "componentType", accessor.componentType, accessor.defined);
@@ -344,7 +344,7 @@ bool GLTFSerializer::addAccessor(const QJsonObject& object) {
bool GLTFSerializer::addAnimation(const QJsonObject& object) {
GLTFAnimation animation;
-
+
QJsonArray channels;
if (getObjectArrayVal(object, "channels", channels, animation.defined)) {
foreach(const QJsonValue & v, channels) {
@@ -355,7 +355,7 @@ bool GLTFSerializer::addAnimation(const QJsonObject& object) {
if (getObjectVal(v.toObject(), "target", jsChannel, channel.defined)) {
getIntVal(jsChannel, "node", channel.target.node, channel.target.defined);
getIntVal(jsChannel, "path", channel.target.path, channel.target.defined);
- }
+ }
}
}
}
@@ -374,7 +374,7 @@ bool GLTFSerializer::addAnimation(const QJsonObject& object) {
}
}
}
-
+
_file.animations.push_back(animation);
return true;
@@ -382,20 +382,20 @@ bool GLTFSerializer::addAnimation(const QJsonObject& object) {
bool GLTFSerializer::addBufferView(const QJsonObject& object) {
GLTFBufferView bufferview;
-
+
getIntVal(object, "buffer", bufferview.buffer, bufferview.defined);
getIntVal(object, "byteLength", bufferview.byteLength, bufferview.defined);
getIntVal(object, "byteOffset", bufferview.byteOffset, bufferview.defined);
getIntVal(object, "target", bufferview.target, bufferview.defined);
-
+
_file.bufferviews.push_back(bufferview);
-
+
return true;
}
bool GLTFSerializer::addBuffer(const QJsonObject& object) {
GLTFBuffer buffer;
-
+
getIntVal(object, "byteLength", buffer.byteLength, buffer.defined);
if (_url.path().endsWith("glb")) {
@@ -411,13 +411,13 @@ bool GLTFSerializer::addBuffer(const QJsonObject& object) {
}
}
_file.buffers.push_back(buffer);
-
+
return true;
}
bool GLTFSerializer::addCamera(const QJsonObject& object) {
GLTFCamera camera;
-
+
QJsonObject jsPerspective;
QJsonObject jsOrthographic;
QString type;
@@ -437,15 +437,15 @@ bool GLTFSerializer::addCamera(const QJsonObject& object) {
} else if (getStringVal(object, "type", type, camera.defined)) {
camera.type = getCameraType(type);
}
-
+
_file.cameras.push_back(camera);
-
+
return true;
}
bool GLTFSerializer::addImage(const QJsonObject& object) {
GLTFImage image;
-
+
QString mime;
getStringVal(object, "uri", image.uri, image.defined);
if (image.uri.contains("data:image/png;base64,")) {
@@ -455,9 +455,9 @@ bool GLTFSerializer::addImage(const QJsonObject& object) {
}
if (getStringVal(object, "mimeType", mime, image.defined)) {
image.mimeType = getImageMimeType(mime);
- }
+ }
getIntVal(object, "bufferView", image.bufferView, image.defined);
-
+
_file.images.push_back(image);
return true;
@@ -489,20 +489,20 @@ bool GLTFSerializer::addMaterial(const QJsonObject& object) {
getDoubleVal(object, "alphaCutoff", material.alphaCutoff, material.defined);
QJsonObject jsMetallicRoughness;
if (getObjectVal(object, "pbrMetallicRoughness", jsMetallicRoughness, material.defined)) {
- getDoubleArrayVal(jsMetallicRoughness, "baseColorFactor",
- material.pbrMetallicRoughness.baseColorFactor,
+ getDoubleArrayVal(jsMetallicRoughness, "baseColorFactor",
+ material.pbrMetallicRoughness.baseColorFactor,
material.pbrMetallicRoughness.defined);
- getIndexFromObject(jsMetallicRoughness, "baseColorTexture",
- material.pbrMetallicRoughness.baseColorTexture,
+ getIndexFromObject(jsMetallicRoughness, "baseColorTexture",
+ material.pbrMetallicRoughness.baseColorTexture,
material.pbrMetallicRoughness.defined);
- getDoubleVal(jsMetallicRoughness, "metallicFactor",
- material.pbrMetallicRoughness.metallicFactor,
+ getDoubleVal(jsMetallicRoughness, "metallicFactor",
+ material.pbrMetallicRoughness.metallicFactor,
material.pbrMetallicRoughness.defined);
- getDoubleVal(jsMetallicRoughness, "roughnessFactor",
- material.pbrMetallicRoughness.roughnessFactor,
+ getDoubleVal(jsMetallicRoughness, "roughnessFactor",
+ material.pbrMetallicRoughness.roughnessFactor,
material.pbrMetallicRoughness.defined);
- getIndexFromObject(jsMetallicRoughness, "metallicRoughnessTexture",
- material.pbrMetallicRoughness.metallicRoughnessTexture,
+ getIndexFromObject(jsMetallicRoughness, "metallicRoughnessTexture",
+ material.pbrMetallicRoughness.metallicRoughnessTexture,
material.pbrMetallicRoughness.defined);
}
_file.materials.push_back(material);
@@ -524,7 +524,7 @@ bool GLTFSerializer::addMesh(const QJsonObject& object) {
getIntVal(jsPrimitive, "mode", primitive.mode, primitive.defined);
getIntVal(jsPrimitive, "indices", primitive.indices, primitive.defined);
getIntVal(jsPrimitive, "material", primitive.material, primitive.defined);
-
+
QJsonObject jsAttributes;
if (getObjectVal(jsPrimitive, "attributes", jsAttributes, primitive.defined)) {
QStringList attrKeys = jsAttributes.keys();
@@ -550,7 +550,7 @@ bool GLTFSerializer::addMesh(const QJsonObject& object) {
primitive.targets.push_back(target);
}
}
- }
+ }
mesh.primitives.push_back(primitive);
}
}
@@ -561,8 +561,8 @@ bool GLTFSerializer::addMesh(const QJsonObject& object) {
if (getObjectVal(object, "extras", jsExtras, mesh.defined)) {
QJsonArray jsTargetNames;
if (getObjectArrayVal(jsExtras, "targetNames", jsTargetNames, extras.defined)) {
- foreach (const QJsonValue& tarName, jsTargetNames) {
- extras.targetNames.push_back(tarName.toString());
+ foreach (const QJsonValue& tarName, jsTargetNames) {
+ extras.targetNames.push_back(tarName.toString());
}
}
mesh.extras = extras;
@@ -575,7 +575,7 @@ bool GLTFSerializer::addMesh(const QJsonObject& object) {
bool GLTFSerializer::addNode(const QJsonObject& object) {
GLTFNode node;
-
+
getStringVal(object, "name", node.name, node.defined);
getIntVal(object, "camera", node.camera, node.defined);
getIntVal(object, "mesh", node.mesh, node.defined);
@@ -630,10 +630,10 @@ bool GLTFSerializer::addSkin(const QJsonObject& object) {
}
bool GLTFSerializer::addTexture(const QJsonObject& object) {
- GLTFTexture texture;
+ GLTFTexture texture;
getIntVal(object, "sampler", texture.sampler, texture.defined);
getIntVal(object, "source", texture.source, texture.defined);
-
+
_file.textures.push_back(texture);
return true;
@@ -646,8 +646,8 @@ bool GLTFSerializer::parseGLTF(const hifi::ByteArray& data) {
if (_url.path().endsWith("glb") && data.indexOf("glTF") == 0 && data.contains("JSON")) {
jsonChunk = setGLBChunks(data);
- }
-
+ }
+
QJsonDocument d = QJsonDocument::fromJson(jsonChunk);
QJsonObject jsFile = d.object();
@@ -769,7 +769,7 @@ bool GLTFSerializer::parseGLTF(const hifi::ByteArray& data) {
}
}
}
- }
+ }
return success;
}
@@ -789,13 +789,13 @@ glm::mat4 GLTFSerializer::getModelTransform(const GLTFNode& node) {
s = glm::scale(s, scale);
tmat = s * tmat;
}
-
+
if (node.defined["rotation"] && node.rotation.size() == 4) {
//quat(x,y,z,w) to quat(w,x,y,z)
glm::quat rotquat = glm::quat(node.rotation[3], node.rotation[0], node.rotation[1], node.rotation[2]);
tmat = glm::mat4_cast(rotquat) * tmat;
}
-
+
if (node.defined["translation"] && node.translation.size() == 3) {
glm::vec3 trans = glm::vec3(node.translation[0], node.translation[1], node.translation[2]);
glm::mat4 t = glm::mat4(1.0);
@@ -842,7 +842,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash&
sortedNodes.push_back(nodecount);
++nodecount;
}
-
+
// Build transforms
nodecount = 0;
@@ -965,8 +965,8 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash&
std::vector& value = inverseBindValues[s];
int matrixCount = 16 * matrixIndex;
jointInverseBindTransforms[jointIndex] =
- glm::mat4(value[matrixCount], value[matrixCount + 1], value[matrixCount + 2], value[matrixCount + 3],
- value[matrixCount + 4], value[matrixCount + 5], value[matrixCount + 6], value[matrixCount + 7],
+ glm::mat4(value[matrixCount], value[matrixCount + 1], value[matrixCount + 2], value[matrixCount + 3],
+ value[matrixCount + 4], value[matrixCount + 5], value[matrixCount + 6], value[matrixCount + 7],
value[matrixCount + 8], value[matrixCount + 9], value[matrixCount + 10], value[matrixCount + 11],
value[matrixCount + 12], value[matrixCount + 13], value[matrixCount + 14], value[matrixCount + 15]);
} else {
@@ -1008,7 +1008,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash&
setHFMMaterial(hfmMaterial, _file.materials[i]);
}
-
+
// Build meshes
nodecount = 0;
hfmModel.meshExtents.reset();
@@ -1061,7 +1061,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash&
qWarning(modelformat) << "Indices accessor index is out of bounds for model " << _url;
continue;
}
-
+
GLTFAccessor& indicesAccessor = _file.accessors[indicesAccessorIdx];
// Buffers
@@ -1639,7 +1639,7 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash&
glm::vec3 transformedVertex = glm::vec3(globalTransforms[nodeIndex] * glm::vec4(vertex, 1.0f));
mesh.meshExtents.addPoint(transformedVertex);
hfmModel.meshExtents.addPoint(transformedVertex);
- }
+ }
}
// Mesh extents must be at least a minimum size, in particular for blendshapes to work on planar meshes.
@@ -1676,7 +1676,7 @@ std::unique_ptr GLTFSerializer::getFactory() const {
HFMModel::Pointer GLTFSerializer::read(const hifi::ByteArray& data, const hifi::VariantHash& mapping, const hifi::URL& url) {
_url = url;
-
+
// Normalize url for local files
hifi::URL normalizeUrl = DependencyManager::get()->normalizeURL(_url);
if (normalizeUrl.scheme().isEmpty() || (normalizeUrl.scheme() == "file")) {
@@ -1711,7 +1711,7 @@ bool GLTFSerializer::readBinary(const QString& url, hifi::ByteArray& outdata) {
hifi::URL binaryUrl = _url.resolved(url);
std::tie(success, outdata) = requestData(binaryUrl);
}
-
+
return success;
}
@@ -1744,7 +1744,7 @@ std::tuple GLTFSerializer::requestData(hifi::URL& url) {
}
hifi::ByteArray GLTFSerializer::requestEmbeddedData(const QString& url) {
- QString binaryUrl = url.split(",")[1];
+ QString binaryUrl = url.split(",")[1];
return binaryUrl.isEmpty() ? hifi::ByteArray() : QByteArray::fromBase64(binaryUrl.toUtf8());
}
@@ -1776,7 +1776,7 @@ QNetworkReply* GLTFSerializer::request(hifi::URL& url, bool isTest) {
HFMTexture GLTFSerializer::getHFMTexture(const GLTFTexture& texture) {
HFMTexture fbxtex = HFMTexture();
fbxtex.texcoordSet = 0;
-
+
if (texture.defined["source"]) {
QString url = _file.images[texture.source].uri;
@@ -1787,7 +1787,7 @@ HFMTexture GLTFSerializer::getHFMTexture(const GLTFTexture& texture) {
if (_url.path().endsWith("glb") && !_glbBinary.isEmpty()) {
int bufferView = _file.images[texture.source].bufferView;
-
+
GLTFBufferView& imagesBufferview = _file.bufferviews[bufferView];
int offset = imagesBufferview.byteOffset;
int length = imagesBufferview.byteLength;
@@ -1797,7 +1797,7 @@ HFMTexture GLTFSerializer::getHFMTexture(const GLTFTexture& texture) {
}
if (url.contains("data:image/jpeg;base64,") || url.contains("data:image/png;base64,")) {
- fbxtex.content = requestEmbeddedData(url);
+ fbxtex.content = requestEmbeddedData(url);
}
}
return fbxtex;
@@ -1827,12 +1827,12 @@ void GLTFSerializer::setHFMMaterial(HFMMaterial& hfmMat, const GLTFMaterial& mat
hfmMat.emissiveTexture = getHFMTexture(_file.textures[material.emissiveTexture]);
hfmMat.useEmissiveMap = true;
}
-
+
if (material.defined["normalTexture"]) {
hfmMat.normalTexture = getHFMTexture(_file.textures[material.normalTexture]);
hfmMat.useNormalMap = true;
}
-
+
if (material.defined["occlusionTexture"]) {
hfmMat.occlusionTexture = getHFMTexture(_file.textures[material.occlusionTexture]);
hfmMat.useOcclusionMap = true;
@@ -1860,7 +1860,7 @@ void GLTFSerializer::setHFMMaterial(HFMMaterial& hfmMat, const GLTFMaterial& mat
if (material.pbrMetallicRoughness.defined["roughnessFactor"]) {
hfmMat._material->setRoughness(material.pbrMetallicRoughness.roughnessFactor);
}
- if (material.pbrMetallicRoughness.defined["baseColorFactor"] &&
+ if (material.pbrMetallicRoughness.defined["baseColorFactor"] &&
material.pbrMetallicRoughness.baseColorFactor.size() == 4) {
glm::vec3 dcolor =
glm::vec3(material.pbrMetallicRoughness.baseColorFactor[0], material.pbrMetallicRoughness.baseColorFactor[1],
@@ -1876,7 +1876,7 @@ void GLTFSerializer::setHFMMaterial(HFMMaterial& hfmMat, const GLTFMaterial& mat
template
bool GLTFSerializer::readArray(const hifi::ByteArray& bin, int byteOffset, int count,
QVector& outarray, int accessorType, bool normalized) {
-
+
QDataStream blobstream(bin);
blobstream.setByteOrder(QDataStream::LittleEndian);
blobstream.setVersion(QDataStream::Qt_5_9);
@@ -1916,7 +1916,7 @@ bool GLTFSerializer::readArray(const hifi::ByteArray& bin, int byteOffset, int c
if (normalized) {
scale = (float)(std::numeric_limits::max)();
}
-
+
for (int i = 0; i < count; ++i) {
for (int j = 0; j < bufferCount; ++j) {
if (!blobstream.atEnd()) {
@@ -1940,7 +1940,7 @@ bool GLTFSerializer::readArray(const hifi::ByteArray& bin, int byteOffset, int c
template
bool GLTFSerializer::addArrayOfType(const hifi::ByteArray& bin, int byteOffset, int count,
QVector& outarray, int accessorType, int componentType, bool normalized) {
-
+
switch (componentType) {
case GLTFAccessorComponentType::BYTE: {}
case GLTFAccessorComponentType::UNSIGNED_BYTE: {
@@ -2008,7 +2008,7 @@ bool GLTFSerializer::addArrayFromAccessor(GLTFAccessor& accessor, QVector& ou
if (success) {
for (int i = 0; i < accessor.sparse.count; ++i) {
- if ((i * 3) + 2 < out_sparse_values_array.size()) {
+ if ((i * 3) + 2 < out_sparse_values_array.size()) {
if ((out_sparse_indices_array[i] * 3) + 2 < outarray.length()) {
for (int j = 0; j < 3; ++j) {
outarray[(out_sparse_indices_array[i] * 3) + j] = out_sparse_values_array[(i * 3) + j];
@@ -2030,8 +2030,8 @@ bool GLTFSerializer::addArrayFromAccessor(GLTFAccessor& accessor, QVector& ou
return success;
}
-void GLTFSerializer::retriangulate(const QVector& inIndices, const QVector& in_vertices,
- const QVector& in_normals, QVector& outIndices,
+void GLTFSerializer::retriangulate(const QVector& inIndices, const QVector& in_vertices,
+ const QVector& in_normals, QVector& outIndices,
QVector& out_vertices, QVector& out_normals) {
for (int i = 0; i < inIndices.size(); i = i + 3) {
diff --git a/libraries/fbx/src/GLTFSerializer.h b/libraries/model-serializers/src/GLTFSerializer.h
similarity index 98%
rename from libraries/fbx/src/GLTFSerializer.h
rename to libraries/model-serializers/src/GLTFSerializer.h
index 040ccb413b..3ce38ead5e 100755
--- a/libraries/fbx/src/GLTFSerializer.h
+++ b/libraries/model-serializers/src/GLTFSerializer.h
@@ -1,6 +1,6 @@
//
// GLTFSerializer.h
-// libraries/fbx/src
+// libraries/model-serializers/src
//
// Created by Luis Cuenca on 8/30/17.
// Copyright 2017 High Fidelity, Inc.
@@ -343,7 +343,7 @@ struct GLTFCamera {
QString name;
GLTFCameraPerspective perspective; //required (or)
GLTFCameraOrthographic orthographic; //required (or)
- int type;
+ int type;
QMap defined;
void dump() {
if (defined["name"]) {
@@ -519,7 +519,7 @@ struct GLTFAccessor {
QMap defined;
void dump() {
-
+
}
};
int bufferView;
@@ -778,26 +778,26 @@ private:
bool buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& mapping, const hifi::URL& url);
bool parseGLTF(const hifi::ByteArray& data);
-
- bool getStringVal(const QJsonObject& object, const QString& fieldname,
+
+ bool getStringVal(const QJsonObject& object, const QString& fieldname,
QString& value, QMap& defined);
- bool getBoolVal(const QJsonObject& object, const QString& fieldname,
+ bool getBoolVal(const QJsonObject& object, const QString& fieldname,
bool& value, QMap& defined);
- bool getIntVal(const QJsonObject& object, const QString& fieldname,
+ bool getIntVal(const QJsonObject& object, const QString& fieldname,
int& value, QMap& defined);
- bool getDoubleVal(const QJsonObject& object, const QString& fieldname,
+ bool getDoubleVal(const QJsonObject& object, const QString& fieldname,
double& value, QMap& defined);
- bool getObjectVal(const QJsonObject& object, const QString& fieldname,
+ bool getObjectVal(const QJsonObject& object, const QString& fieldname,
QJsonObject& value, QMap& defined);
- bool getIntArrayVal(const QJsonObject& object, const QString& fieldname,
+ bool getIntArrayVal(const QJsonObject& object, const QString& fieldname,
QVector& values, QMap& defined);
- bool getDoubleArrayVal(const QJsonObject& object, const QString& fieldname,
+ bool getDoubleArrayVal(const QJsonObject& object, const QString& fieldname,
QVector& values, QMap& defined);
- bool getObjectArrayVal(const QJsonObject& object, const QString& fieldname,
+ bool getObjectArrayVal(const QJsonObject& object, const QString& fieldname,
QJsonArray& objects, QMap& defined);
hifi::ByteArray setGLBChunks(const hifi::ByteArray& data);
-
+
graphics::MaterialKey::OpacityMapMode getMaterialAlphaMode(const QString& type);
int getAccessorType(const QString& type);
int getAnimationSamplerInterpolation(const QString& interpolation);
@@ -805,7 +805,7 @@ private:
int getImageMimeType(const QString& mime);
int getMeshPrimitiveRenderingMode(const QString& type);
- bool getIndexFromObject(const QJsonObject& object, const QString& field,
+ bool getIndexFromObject(const QJsonObject& object, const QString& field,
int& outidx, QMap& defined);
bool setAsset(const QJsonObject& object);
@@ -841,8 +841,8 @@ private:
template
bool addArrayFromAccessor(GLTFAccessor& accessor, QVector& outarray);
- void retriangulate(const QVector& in_indices, const QVector& in_vertices,
- const QVector& in_normals, QVector& out_indices,
+ void retriangulate(const QVector& in_indices, const QVector& in_vertices,
+ const QVector& in_normals, QVector& out_indices,
QVector& out_vertices, QVector& out_normals);
std::tuple requestData(hifi::URL& url);
@@ -857,4 +857,4 @@ private:
void glTFDebugDump();
};
-#endif // hifi_GLTFSerializer_h
\ No newline at end of file
+#endif // hifi_GLTFSerializer_h
diff --git a/libraries/fbx/src/OBJSerializer.cpp b/libraries/model-serializers/src/OBJSerializer.cpp
similarity index 99%
rename from libraries/fbx/src/OBJSerializer.cpp
rename to libraries/model-serializers/src/OBJSerializer.cpp
index 416f343a47..7acc663828 100644
--- a/libraries/fbx/src/OBJSerializer.cpp
+++ b/libraries/model-serializers/src/OBJSerializer.cpp
@@ -1,6 +1,6 @@
//
// OBJSerializer.cpp
-// libraries/fbx/src/
+// libraries/model-serializers/src
//
// Created by Seth Alves on 3/7/15.
// Copyright 2013 High Fidelity, Inc.
@@ -15,7 +15,7 @@
#include "OBJSerializer.h"
#include // .obj files are not locale-specific. The C/ASCII charset applies.
-#include
+#include
#include
#include
@@ -263,16 +263,16 @@ void OBJSerializer::parseMaterialLibrary(QIODevice* device) {
default:
materials[matName] = currentMaterial;
#ifdef WANT_DEBUG
- qCDebug(modelformat) <<
+ qCDebug(modelformat) <<
"OBJSerializer Last material illumination model:" << currentMaterial.illuminationModel <<
- " shininess:" << currentMaterial.shininess <<
+ " shininess:" << currentMaterial.shininess <<
" opacity:" << currentMaterial.opacity <<
- " diffuse color:" << currentMaterial.diffuseColor <<
- " specular color:" << currentMaterial.specularColor <<
- " emissive color:" << currentMaterial.emissiveColor <<
- " diffuse texture:" << currentMaterial.diffuseTextureFilename <<
- " specular texture:" << currentMaterial.specularTextureFilename <<
- " emissive texture:" << currentMaterial.emissiveTextureFilename <<
+ " diffuse color:" << currentMaterial.diffuseColor <<
+ " specular color:" << currentMaterial.specularColor <<
+ " emissive color:" << currentMaterial.emissiveColor <<
+ " diffuse texture:" << currentMaterial.diffuseTextureFilename <<
+ " specular texture:" << currentMaterial.specularTextureFilename <<
+ " emissive texture:" << currentMaterial.emissiveTextureFilename <<
" bump texture:" << currentMaterial.bumpTextureFilename <<
" opacity texture:" << currentMaterial.opacityTextureFilename;
#endif
@@ -352,7 +352,7 @@ void OBJSerializer::parseMaterialLibrary(QIODevice* device) {
}
}
}
-}
+}
void OBJSerializer::parseTextureLine(const hifi::ByteArray& textureLine, hifi::ByteArray& filename, OBJMaterialTextureOptions& textureOptions) {
// Texture options reference http://paulbourke.net/dataformats/mtl/
@@ -803,7 +803,7 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V
n0 = checked_at(normals, face.normalIndices[0]);
n1 = checked_at(normals, face.normalIndices[1]);
n2 = checked_at(normals, face.normalIndices[2]);
- } else {
+ } else {
// generate normals from triangle plane if not provided
n0 = n1 = n2 = glm::cross(v1 - v0, v2 - v0);
}
@@ -932,7 +932,7 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V
bool applyNonMetallic = false;
bool fresnelOn = false;
- // Illumination model reference http://paulbourke.net/dataformats/mtl/
+ // Illumination model reference http://paulbourke.net/dataformats/mtl/
switch (objMaterial.illuminationModel) {
case 0: // Color on and Ambient off
// We don't support ambient = do nothing?
@@ -976,7 +976,7 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V
case 10: // Casts shadows onto invisible surfaces
// Do nothing?
break;
- }
+ }
if (applyTransparency) {
hfmMaterial.opacity = std::max(hfmMaterial.opacity, ILLUMINATION_MODEL_MIN_OPACITY);
diff --git a/libraries/fbx/src/OBJSerializer.h b/libraries/model-serializers/src/OBJSerializer.h
similarity index 99%
rename from libraries/fbx/src/OBJSerializer.h
rename to libraries/model-serializers/src/OBJSerializer.h
index 6fdd95e2c3..20633e90e4 100644
--- a/libraries/fbx/src/OBJSerializer.h
+++ b/libraries/model-serializers/src/OBJSerializer.h
@@ -1,6 +1,6 @@
//
// OBJSerializer.h
-// libraries/fbx/src/
+// libraries/model-serializers/src
//
// Created by Seth Alves on 3/6/15.
// Copyright 2015 High Fidelity, Inc.
@@ -93,7 +93,7 @@ class OBJSerializer: public QObject, public HFMSerializer { // QObject so we can
public:
MediaType getMediaType() const override;
std::unique_ptr getFactory() const override;
-
+
typedef QVector FaceGroup;
QVector vertices;
QVector vertexColors;
@@ -102,7 +102,7 @@ public:
QVector faceGroups;
QString currentMaterialName;
QHash materials;
-
+
HFMModel::Pointer read(const hifi::ByteArray& data, const hifi::VariantHash& mapping, const hifi::URL& url = hifi::URL()) override;
private:
diff --git a/libraries/fbx/src/OBJWriter.cpp b/libraries/model-serializers/src/OBJWriter.cpp
similarity index 99%
rename from libraries/fbx/src/OBJWriter.cpp
rename to libraries/model-serializers/src/OBJWriter.cpp
index b2e191bcbf..dec35c7aac 100644
--- a/libraries/fbx/src/OBJWriter.cpp
+++ b/libraries/model-serializers/src/OBJWriter.cpp
@@ -1,6 +1,6 @@
//
// OBJWriter.cpp
-// libraries/fbx/src/
+// libraries/model-serializers/src
//
// Created by Seth Alves on 2017-1-27.
// Copyright 2017 High Fidelity, Inc.
diff --git a/libraries/fbx/src/OBJWriter.h b/libraries/model-serializers/src/OBJWriter.h
similarity index 94%
rename from libraries/fbx/src/OBJWriter.h
rename to libraries/model-serializers/src/OBJWriter.h
index 536e8cf837..34f6d93658 100644
--- a/libraries/fbx/src/OBJWriter.h
+++ b/libraries/model-serializers/src/OBJWriter.h
@@ -1,6 +1,6 @@
//
// OBJWriter.h
-// libraries/fbx/src/
+// libraries/model-serializers/src
//
// Created by Seth Alves on 2017-1-27.
// Copyright 2017 High Fidelity, Inc.
diff --git a/libraries/physics/CMakeLists.txt b/libraries/physics/CMakeLists.txt
index c1410a6bfc..ad4900e4ba 100644
--- a/libraries/physics/CMakeLists.txt
+++ b/libraries/physics/CMakeLists.txt
@@ -12,7 +12,7 @@ include_hifi_library_headers(image)
include_hifi_library_headers(ktx)
include_hifi_library_headers(gpu)
include_hifi_library_headers(hfm)
-include_hifi_library_headers(fbx)
+include_hifi_library_headers(model-serializers)
include_hifi_library_headers(graphics)
target_bullet()
diff --git a/libraries/render-utils/CMakeLists.txt b/libraries/render-utils/CMakeLists.txt
index 833d78bb74..4c444bcd15 100644
--- a/libraries/render-utils/CMakeLists.txt
+++ b/libraries/render-utils/CMakeLists.txt
@@ -3,7 +3,7 @@ set(TARGET_NAME render-utils)
# pull in the resources.qrc file
qt5_add_resources(QT_RESOURCES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/res/fonts/fonts.qrc")
setup_hifi_library(Gui Network Qml Quick Script)
-link_hifi_libraries(shared task ktx gpu shaders graphics graphics-scripting material-networking model-networking render animation fbx image procedural)
+link_hifi_libraries(shared task ktx gpu shaders graphics graphics-scripting material-networking model-networking render animation model-serializers image procedural)
include_hifi_library_headers(audio)
include_hifi_library_headers(networking)
include_hifi_library_headers(octree)
diff --git a/libraries/script-engine/CMakeLists.txt b/libraries/script-engine/CMakeLists.txt
index 9052cb89e9..6def6c185f 100644
--- a/libraries/script-engine/CMakeLists.txt
+++ b/libraries/script-engine/CMakeLists.txt
@@ -7,7 +7,7 @@ if (NOT ANDROID)
target_quazip()
endif ()
-link_hifi_libraries(shared networking shaders material-networking model-networking recording avatars fbx entities controllers animation audio midi)
+link_hifi_libraries(shared networking shaders material-networking model-networking recording avatars model-serializers entities controllers animation audio midi)
include_hifi_library_headers(gl)
include_hifi_library_headers(hfm)
include_hifi_library_headers(gpu)
diff --git a/plugins/openvr/CMakeLists.txt b/plugins/openvr/CMakeLists.txt
index 9690ee3fb5..0b9358242d 100644
--- a/plugins/openvr/CMakeLists.txt
+++ b/plugins/openvr/CMakeLists.txt
@@ -10,9 +10,9 @@
if ((WIN32 OR UNIX AND NOT APPLE) AND NOT USE_GLES)
set(TARGET_NAME openvr)
setup_hifi_plugin(Gui Qml Multimedia)
- link_hifi_libraries(shared task gl qml networking controllers ui
+ link_hifi_libraries(shared task gl qml networking controllers ui
plugins display-plugins ui-plugins input-plugins script-engine
- audio-client render-utils graphics shaders gpu render material-networking model-networking model-baker hfm fbx ktx image procedural ${PLATFORM_GL_BACKEND})
+ audio-client render-utils graphics shaders gpu render material-networking model-networking model-baker hfm model-serializers ktx image procedural ${PLATFORM_GL_BACKEND})
include_hifi_library_headers(octree)
target_openvr()
diff --git a/scripts/system/miniTablet.js b/scripts/system/miniTablet.js
index 1650cb60f4..c9942afd48 100644
--- a/scripts/system/miniTablet.js
+++ b/scripts/system/miniTablet.js
@@ -563,7 +563,7 @@
// Tablet targets.
isGoto = false,
- TABLET_ADDRESS_DIALOG = "hifi/tablet/TabletAddressDialog.qml",
+ TABLET_EXPLORE_APP_UI = Script.resolvePath("../communityScripts/explore/explore.html"),
// Trigger values.
leftTriggerOn = 0,
@@ -907,7 +907,7 @@
var miniTabletProperties;
if (isGoto) {
- tablet.loadQMLSource(TABLET_ADDRESS_DIALOG);
+ tablet.gotoWebScreen(TABLET_EXPLORE_APP_UI);
} else {
tablet.gotoHomeScreen();
}
diff --git a/server-console/CMakeLists.txt b/server-console/CMakeLists.txt
index 49742cacf0..03432ab08d 100644
--- a/server-console/CMakeLists.txt
+++ b/server-console/CMakeLists.txt
@@ -1,5 +1,10 @@
set(TARGET_NAME packaged-server-console)
+if (CLIENT_ONLY AND APPLE)
+ # Don't include Console.app in client-only OSX DMGs.
+ return()
+endif()
+
if (PRODUCTION_BUILD)
set(PRODUCTION_OPTION "--production")
endif()
@@ -24,7 +29,11 @@ set_target_properties(${TARGET_NAME}-npm-install PROPERTIES FOLDER "hidden/Serve
# add a dependency from the package target to the server components
if (BUILD_CLIENT)
- add_dependencies(${TARGET_NAME} interface)
+ if (APPLE)
+ add_dependencies(${TARGET_NAME} Vircadia)
+ else()
+ add_dependencies(${TARGET_NAME} interface)
+ endif()
endif()
if (BUILD_SERVER)
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 4942ecbd63..5de2f6fdf8 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -21,20 +21,27 @@ endfunction()
if (BUILD_TOOLS)
set(ALL_TOOLS
udt-test
- vhacd-util
gpu-frame-player
ice-client
ktx-tool
ac-client
skeleton-dump
atp-client
- oven
)
+ # Don't include oven or vhacd-til in OSX client-only DMGs.
+ if (NOT CLIENT_ONLY OR NOT APPLE)
+ list(APPEND ALL_TOOLS oven)
+ list(APPEND ALL_TOOLS vhacd-util)
+ endif()
+
# Allow different tools for stable builds
if (STABLE_BUILD)
else()
- list(APPEND ALL_TOOLS nitpick)
+ # Don't include nitpick in OSX client-only DMGs.
+ if (NOT APPLE OR NOT CLIENT_ONLY)
+ list(APPEND ALL_TOOLS nitpick)
+ endif()
endif()
foreach(TOOL ${ALL_TOOLS})
diff --git a/tools/jsdoc/plugins/hifi.js b/tools/jsdoc/plugins/hifi.js
index 3c1ec08bb0..d757a4d5cb 100644
--- a/tools/jsdoc/plugins/hifi.js
+++ b/tools/jsdoc/plugins/hifi.js
@@ -44,7 +44,7 @@ exports.handlers = {
'../../libraries/controllers/src/controllers/impl/',
'../../libraries/display-plugins/src/display-plugins/',
'../../libraries/entities/src',
- '../../libraries/fbx/src',
+ '../../libraries/model-serializers/src',
'../../libraries/graphics/src/graphics/',
'../../libraries/graphics-scripting/src/graphics-scripting/',
'../../libraries/image/src/image',
diff --git a/tools/nitpick/icon/nitpick-beta.icns b/tools/nitpick/icon/nitpick-beta.icns
new file mode 100644
index 0000000000..9044dbfbf7
Binary files /dev/null and b/tools/nitpick/icon/nitpick-beta.icns differ
diff --git a/tools/nitpick/icon/nitpick-beta.ico b/tools/nitpick/icon/nitpick-beta.ico
new file mode 100644
index 0000000000..5c279fd5c1
Binary files /dev/null and b/tools/nitpick/icon/nitpick-beta.ico differ
diff --git a/tools/nitpick/icon/nitpick.icns b/tools/nitpick/icon/nitpick.icns
index 332539af2a..4e4df39d69 100644
Binary files a/tools/nitpick/icon/nitpick.icns and b/tools/nitpick/icon/nitpick.icns differ
diff --git a/tools/nitpick/icon/nitpick.ico b/tools/nitpick/icon/nitpick.ico
index e3d852cb41..d0d5c4ac96 100644
Binary files a/tools/nitpick/icon/nitpick.ico and b/tools/nitpick/icon/nitpick.ico differ
diff --git a/tools/oven/CMakeLists.txt b/tools/oven/CMakeLists.txt
index 9a159d8cb1..4f48570428 100644
--- a/tools/oven/CMakeLists.txt
+++ b/tools/oven/CMakeLists.txt
@@ -2,7 +2,7 @@ set(TARGET_NAME oven)
setup_hifi_project(Widgets Gui Concurrent)
-link_hifi_libraries(shared shaders image gpu ktx fbx hfm baking graphics networking procedural material-networking model-baker task)
+link_hifi_libraries(shared shaders image gpu ktx model-serializers hfm baking graphics networking procedural material-networking model-baker task)
setup_memory_debugger()
setup_thread_debugger()
diff --git a/tools/skeleton-dump/CMakeLists.txt b/tools/skeleton-dump/CMakeLists.txt
index cf95c302e8..38aaa3832b 100644
--- a/tools/skeleton-dump/CMakeLists.txt
+++ b/tools/skeleton-dump/CMakeLists.txt
@@ -2,6 +2,6 @@ set(TARGET_NAME skeleton-dump)
setup_hifi_project(Core)
setup_memory_debugger()
setup_thread_debugger()
-link_hifi_libraries(shared fbx hfm graphics gpu gl animation)
+link_hifi_libraries(shared model-serializers hfm graphics gpu gl animation)
include_hifi_library_headers(image)
diff --git a/tools/vhacd-util/CMakeLists.txt b/tools/vhacd-util/CMakeLists.txt
index 3c4d17122e..5d7fba79e3 100644
--- a/tools/vhacd-util/CMakeLists.txt
+++ b/tools/vhacd-util/CMakeLists.txt
@@ -1,6 +1,6 @@
set(TARGET_NAME vhacd-util)
setup_hifi_project(Core)
-link_hifi_libraries(shared fbx hfm graphics gpu gl)
+link_hifi_libraries(shared model-serializers hfm graphics gpu gl)
include_hifi_library_headers(image)