From 0ad5a8968fce888bfe33cd5f43b42a5c3b551649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 14 Feb 2020 11:35:21 +0100 Subject: [PATCH] AnySceneConverter: new plugin. --- CMakeLists.txt | 1 + doc/building.dox | 2 + doc/changelog.dox | 3 +- doc/cmake.dox | 2 + doc/plugins.dox | 2 + modules/FindMagnum.cmake | 7 +- package/archlinux/PKGBUILD | 1 + package/archlinux/PKGBUILD-android-arm64 | 1 + package/archlinux/PKGBUILD-clang | 1 + .../archlinux/PKGBUILD-clang-addressanitizer | 1 + package/archlinux/PKGBUILD-clang-analyzer | 1 + package/archlinux/PKGBUILD-clang-libc++ | 1 + package/archlinux/PKGBUILD-coverage | 1 + package/archlinux/PKGBUILD-emscripten | 1 + package/archlinux/PKGBUILD-emscripten-wasm | 1 + .../archlinux/PKGBUILD-emscripten-wasm-webgl2 | 1 + package/archlinux/PKGBUILD-emscripten-webgl2 | 1 + package/archlinux/PKGBUILD-es2 | 1 + package/archlinux/PKGBUILD-es2desktop | 1 + package/archlinux/PKGBUILD-es3 | 1 + package/archlinux/PKGBUILD-es3desktop | 1 + package/archlinux/PKGBUILD-gcc48 | 1 + package/archlinux/PKGBUILD-mingw-w64 | 2 + package/archlinux/PKGBUILD-release | 2 + package/archlinux/magnum-git/PKGBUILD | 1 + package/archlinux/magnum/PKGBUILD | 1 + package/ci/appveyor-desktop-gles.bat | 1 + package/ci/appveyor-desktop-mingw.bat | 1 + package/ci/appveyor-desktop-vulkan.bat | 1 + package/ci/appveyor-desktop.bat | 1 + package/ci/appveyor-rt.bat | 1 + package/ci/travis-android-arm.sh | 1 + package/ci/travis-desktop-gles.sh | 1 + package/ci/travis-desktop-vulkan.sh | 1 + package/ci/travis-desktop.sh | 1 + package/ci/travis-emscripten.sh | 1 + package/ci/travis-ios-simulator.sh | 1 + package/debian/rules | 1 + .../gentoo/dev-libs/magnum/magnum-9999.ebuild | 1 + package/homebrew/magnum.rb | 2 +- package/msys/PKGBUILD | 1 + package/msys/magnum/PKGBUILD | 1 + .../AnySceneConverter/AnySceneConverter.conf | 0 .../AnySceneConverter/AnySceneConverter.cpp | 89 +++++++++++++ .../AnySceneConverter/AnySceneConverter.h | 111 ++++++++++++++++ .../AnySceneConverter/CMakeLists.txt | 68 ++++++++++ .../Test/AnySceneConverterTest.cpp | 122 ++++++++++++++++++ .../AnySceneConverter/Test/CMakeLists.txt | 71 ++++++++++ .../AnySceneConverter/Test/configure.h.cmake | 27 ++++ .../AnySceneConverter/configure.h.cmake | 26 ++++ .../AnySceneConverter/importStaticPlugin.cpp | 35 +++++ src/MagnumPlugins/CMakeLists.txt | 4 + 52 files changed, 604 insertions(+), 5 deletions(-) create mode 100644 src/MagnumPlugins/AnySceneConverter/AnySceneConverter.conf create mode 100644 src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp create mode 100644 src/MagnumPlugins/AnySceneConverter/AnySceneConverter.h create mode 100644 src/MagnumPlugins/AnySceneConverter/CMakeLists.txt create mode 100644 src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp create mode 100644 src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt create mode 100644 src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake create mode 100644 src/MagnumPlugins/AnySceneConverter/configure.h.cmake create mode 100644 src/MagnumPlugins/AnySceneConverter/importStaticPlugin.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b3b79815..0be71e5e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,7 @@ option(WITH_AL_INFO "Build magnum-al-info utility" OFF) option(WITH_ANYIMAGEIMPORTER "Build AnyImageImporter plugin" OFF) option(WITH_ANYAUDIOIMPORTER "Build AnyAudioImporter plugin" OFF) option(WITH_ANYIMAGECONVERTER "Build AnyImageConverter plugin" OFF) +option(WITH_ANYSCENECONVERTER "Build AnySceneConverter plugin" OFF) option(WITH_ANYSCENEIMPORTER "Build AnySceneImporter plugin" OFF) option(WITH_WAVAUDIOIMPORTER "Build WavAudioImporter plugin" OFF) option(WITH_MAGNUMFONT "Build MagnumFont plugin" OFF) diff --git a/doc/building.dox b/doc/building.dox index b3ad556c7..2b681ee18 100644 --- a/doc/building.dox +++ b/doc/building.dox @@ -577,6 +577,8 @@ default. building of the @ref Trade library. - `WITH_ANYIMAGEIMPORTER` --- Build the @ref Trade::AnyImageImporter "AnyImageImporter" plugin. Enables also building of the @ref Trade library. +- `WITH_ANYSCENECONVERTER` --- Build the @ref Trade::AnySceneConverter "AnySceneConverter" + plugin. Enables also building of the @ref Trade library. - `WITH_ANYSCENEIMPORTER` --- Build the @ref Trade::AnySceneImporter "AnySceneImporter" plugin. Enables also building of the @ref Trade library. - `WITH_MAGNUMFONT` --- Build the @ref Text::MagnumFont "MagnumFont" plugin. diff --git a/doc/changelog.dox b/doc/changelog.dox index 63c6ca710..91dffecad 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -271,7 +271,8 @@ See also: - New @ref magnum-sceneconverter "magnum-sceneconverter" tool, similar to @ref magnum-imageconverter "magnum-imageconverter" but suited for general scene formats -- New @ref Trade::AbstractSceneConverter plugin interface +- New @ref Trade::AbstractSceneConverter plugin interface and an + @ref Trade::AnySceneConverter "AnySceneConverter" plugin - Ability to import image mip levels via an additional parameter in @ref Trade::AbstractImporter::image2D(), @ref Trade::AbstractImporter::image2DLevelCount() and similar APIs for 1D diff --git a/doc/cmake.dox b/doc/cmake.dox index ad8d51df6..e334ae58a 100644 --- a/doc/cmake.dox +++ b/doc/cmake.dox @@ -246,6 +246,8 @@ dependencies, you need to find the dependency and then link to it. plugin - `AnyImageImporter` --- @ref Trade::AnyImageImporter "AnyImageImporter" plugin +- `AnySceneConverter` --- @ref Trade::AnySceneConverter "AnySceneConverter" + plugin - `AnySceneImporter` --- @ref Trade::AnySceneImporter "AnySceneImporter" plugin - `MagnumFont` --- @ref Text::MagnumFont "MagnumFont" plugin diff --git a/doc/plugins.dox b/doc/plugins.dox index a2d746e79..fd9d93075 100644 --- a/doc/plugins.dox +++ b/doc/plugins.dox @@ -195,6 +195,8 @@ So far, the following plugins have the "any format" ability: format - @ref Trade::AnySceneImporter "AnySceneImporter" --- imports any scene format +- @ref Trade::AnySceneConverter "AnySceneConverter" --- converts to any scene + format - @ref Audio::AnyImporter "AnyImporter" --- imports any audio format @section plugins-configuration Plugin-specific configuration diff --git a/modules/FindMagnum.cmake b/modules/FindMagnum.cmake index 79a029b00..898030fc8 100644 --- a/modules/FindMagnum.cmake +++ b/modules/FindMagnum.cmake @@ -55,6 +55,7 @@ # AnyAudioImporter - Any audio importer # AnyImageConverter - Any image converter # AnyImageImporter - Any image importer +# AnySceneConverter - Any scene converter # AnySceneImporter - Any scene importer # Audio - Audio library # DebugTools - DebugTools library @@ -363,9 +364,9 @@ set(_MAGNUM_LIBRARY_COMPONENT_LIST CglContext EglContext GlxContext WglContext OpenGLTester) set(_MAGNUM_PLUGIN_COMPONENT_LIST - AnyAudioImporter AnyImageConverter AnyImageImporter AnySceneImporter - MagnumFont MagnumFontConverter ObjImporter TgaImageConverter TgaImporter - WavAudioImporter) + AnyAudioImporter AnyImageConverter AnyImageImporter AnySceneConverter + AnySceneImporter MagnumFont MagnumFontConverter ObjImporter + TgaImageConverter TgaImporter WavAudioImporter) set(_MAGNUM_EXECUTABLE_COMPONENT_LIST distancefieldconverter fontconverter imageconverter sceneconverter gl-info al-info) diff --git a/package/archlinux/PKGBUILD b/package/archlinux/PKGBUILD index 0ab7c0642..3f418875f 100644 --- a/package/archlinux/PKGBUILD +++ b/package/archlinux/PKGBUILD @@ -38,6 +38,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-android-arm64 b/package/archlinux/PKGBUILD-android-arm64 index 8fa8a21c5..8572eee98 100644 --- a/package/archlinux/PKGBUILD-android-arm64 +++ b/package/archlinux/PKGBUILD-android-arm64 @@ -35,6 +35,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=OFF \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-clang b/package/archlinux/PKGBUILD-clang index 2cd296309..b55f51dee 100644 --- a/package/archlinux/PKGBUILD-clang +++ b/package/archlinux/PKGBUILD-clang @@ -41,6 +41,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-clang-addressanitizer b/package/archlinux/PKGBUILD-clang-addressanitizer index fe09aa288..851686bf0 100644 --- a/package/archlinux/PKGBUILD-clang-addressanitizer +++ b/package/archlinux/PKGBUILD-clang-addressanitizer @@ -42,6 +42,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-clang-analyzer b/package/archlinux/PKGBUILD-clang-analyzer index 61f69baeb..6697201e7 100644 --- a/package/archlinux/PKGBUILD-clang-analyzer +++ b/package/archlinux/PKGBUILD-clang-analyzer @@ -33,6 +33,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-clang-libc++ b/package/archlinux/PKGBUILD-clang-libc++ index a036b7f15..82183898a 100644 --- a/package/archlinux/PKGBUILD-clang-libc++ +++ b/package/archlinux/PKGBUILD-clang-libc++ @@ -44,6 +44,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-coverage b/package/archlinux/PKGBUILD-coverage index 18b02e4ea..cc4a32d33 100644 --- a/package/archlinux/PKGBUILD-coverage +++ b/package/archlinux/PKGBUILD-coverage @@ -39,6 +39,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-emscripten b/package/archlinux/PKGBUILD-emscripten index fbaec668b..a77a49d91 100644 --- a/package/archlinux/PKGBUILD-emscripten +++ b/package/archlinux/PKGBUILD-emscripten @@ -35,6 +35,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-emscripten-wasm b/package/archlinux/PKGBUILD-emscripten-wasm index c4998b934..067979a66 100644 --- a/package/archlinux/PKGBUILD-emscripten-wasm +++ b/package/archlinux/PKGBUILD-emscripten-wasm @@ -35,6 +35,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 b/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 index 00ad22b87..0fae3814c 100644 --- a/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 +++ b/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 @@ -36,6 +36,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-emscripten-webgl2 b/package/archlinux/PKGBUILD-emscripten-webgl2 index 98c16041b..b3adcbe51 100644 --- a/package/archlinux/PKGBUILD-emscripten-webgl2 +++ b/package/archlinux/PKGBUILD-emscripten-webgl2 @@ -36,6 +36,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-es2 b/package/archlinux/PKGBUILD-es2 index 4e883768b..ee6b9ba64 100644 --- a/package/archlinux/PKGBUILD-es2 +++ b/package/archlinux/PKGBUILD-es2 @@ -31,6 +31,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-es2desktop b/package/archlinux/PKGBUILD-es2desktop index 7067de768..40bb601cc 100644 --- a/package/archlinux/PKGBUILD-es2desktop +++ b/package/archlinux/PKGBUILD-es2desktop @@ -35,6 +35,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-es3 b/package/archlinux/PKGBUILD-es3 index 5bb5d87d2..f4078fb1d 100644 --- a/package/archlinux/PKGBUILD-es3 +++ b/package/archlinux/PKGBUILD-es3 @@ -31,6 +31,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-es3desktop b/package/archlinux/PKGBUILD-es3desktop index 01606f3c0..5dcbb9b38 100644 --- a/package/archlinux/PKGBUILD-es3desktop +++ b/package/archlinux/PKGBUILD-es3desktop @@ -35,6 +35,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_OBJIMPORTER=ON \ diff --git a/package/archlinux/PKGBUILD-gcc48 b/package/archlinux/PKGBUILD-gcc48 index 7ca76d511..b78153ee3 100644 --- a/package/archlinux/PKGBUILD-gcc48 +++ b/package/archlinux/PKGBUILD-gcc48 @@ -44,6 +44,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-mingw-w64 b/package/archlinux/PKGBUILD-mingw-w64 index 3570df1ba..db4471229 100644 --- a/package/archlinux/PKGBUILD-mingw-w64 +++ b/package/archlinux/PKGBUILD-mingw-w64 @@ -28,6 +28,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ @@ -61,6 +62,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/PKGBUILD-release b/package/archlinux/PKGBUILD-release index ffccc86fa..e86120aed 100644 --- a/package/archlinux/PKGBUILD-release +++ b/package/archlinux/PKGBUILD-release @@ -33,6 +33,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ @@ -70,6 +71,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/magnum-git/PKGBUILD b/package/archlinux/magnum-git/PKGBUILD index 1e636a8cc..8cc12a36b 100644 --- a/package/archlinux/magnum-git/PKGBUILD +++ b/package/archlinux/magnum-git/PKGBUILD @@ -36,6 +36,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/archlinux/magnum/PKGBUILD b/package/archlinux/magnum/PKGBUILD index e7d6ee39d..c2ad4771d 100644 --- a/package/archlinux/magnum/PKGBUILD +++ b/package/archlinux/magnum/PKGBUILD @@ -25,6 +25,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_AUDIO=ON \ -DWITH_DISTANCEFIELDCONVERTER=ON \ diff --git a/package/ci/appveyor-desktop-gles.bat b/package/ci/appveyor-desktop-gles.bat index cd93b02b9..4f44ef206 100644 --- a/package/ci/appveyor-desktop-gles.bat +++ b/package/ci/appveyor-desktop-gles.bat @@ -33,6 +33,7 @@ cmake .. ^ -DWITH_ANYAUDIOIMPORTER=ON ^ -DWITH_ANYIMAGECONVERTER=ON ^ -DWITH_ANYIMAGEIMPORTER=ON ^ + -DWITH_ANYSCENECONVERTER=ON ^ -DWITH_ANYSCENEIMPORTER=ON ^ -DWITH_MAGNUMFONT=ON ^ -DWITH_MAGNUMFONTCONVERTER=ON ^ diff --git a/package/ci/appveyor-desktop-mingw.bat b/package/ci/appveyor-desktop-mingw.bat index ce69848d1..7e9b75601 100644 --- a/package/ci/appveyor-desktop-mingw.bat +++ b/package/ci/appveyor-desktop-mingw.bat @@ -32,6 +32,7 @@ cmake .. ^ -DWITH_ANYAUDIOIMPORTER=ON ^ -DWITH_ANYIMAGECONVERTER=ON ^ -DWITH_ANYIMAGEIMPORTER=ON ^ + -DWITH_ANYSCENECONVERTER=ON ^ -DWITH_ANYSCENEIMPORTER=ON ^ -DWITH_MAGNUMFONT=ON ^ -DWITH_MAGNUMFONTCONVERTER=ON ^ diff --git a/package/ci/appveyor-desktop-vulkan.bat b/package/ci/appveyor-desktop-vulkan.bat index 4b9ad216c..6414b66aa 100644 --- a/package/ci/appveyor-desktop-vulkan.bat +++ b/package/ci/appveyor-desktop-vulkan.bat @@ -43,6 +43,7 @@ cmake .. ^ -DWITH_ANYAUDIOIMPORTER=OFF ^ -DWITH_ANYIMAGECONVERTER=OFF ^ -DWITH_ANYIMAGEIMPORTER=OFF ^ + -DWITH_ANYSCENECONVERTER=ON ^ -DWITH_ANYSCENEIMPORTER=OFF ^ -DWITH_MAGNUMFONT=OFF ^ -DWITH_MAGNUMFONTCONVERTER=OFF ^ diff --git a/package/ci/appveyor-desktop.bat b/package/ci/appveyor-desktop.bat index 409ec498f..fa5333655 100644 --- a/package/ci/appveyor-desktop.bat +++ b/package/ci/appveyor-desktop.bat @@ -45,6 +45,7 @@ cmake .. ^ -DWITH_ANYAUDIOIMPORTER=ON ^ -DWITH_ANYIMAGECONVERTER=ON ^ -DWITH_ANYIMAGEIMPORTER=ON ^ + -DWITH_ANYSCENECONVERTER=ON ^ -DWITH_ANYSCENEIMPORTER=ON ^ -DWITH_MAGNUMFONT=ON ^ -DWITH_MAGNUMFONTCONVERTER=ON ^ diff --git a/package/ci/appveyor-rt.bat b/package/ci/appveyor-rt.bat index 8f3d4c900..9a7f6b224 100644 --- a/package/ci/appveyor-rt.bat +++ b/package/ci/appveyor-rt.bat @@ -71,6 +71,7 @@ cmake .. ^ -DWITH_ANYAUDIOIMPORTER=OFF ^ -DWITH_ANYIMAGECONVERTER=ON ^ -DWITH_ANYIMAGEIMPORTER=ON ^ + -DWITH_ANYSCENECONVERTER=ON ^ -DWITH_ANYSCENEIMPORTER=ON ^ -DWITH_MAGNUMFONT=ON ^ -DWITH_MAGNUMFONTCONVERTER=ON ^ diff --git a/package/ci/travis-android-arm.sh b/package/ci/travis-android-arm.sh index 090882740..b1ba1d3c9 100755 --- a/package/ci/travis-android-arm.sh +++ b/package/ci/travis-android-arm.sh @@ -63,6 +63,7 @@ cmake .. \ -DWITH_ANYAUDIOIMPORTER=OFF \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/ci/travis-desktop-gles.sh b/package/ci/travis-desktop-gles.sh index 420eed647..17642843e 100755 --- a/package/ci/travis-desktop-gles.sh +++ b/package/ci/travis-desktop-gles.sh @@ -37,6 +37,7 @@ cmake .. \ -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/ci/travis-desktop-vulkan.sh b/package/ci/travis-desktop-vulkan.sh index a81b6ef83..fb0f7f076 100755 --- a/package/ci/travis-desktop-vulkan.sh +++ b/package/ci/travis-desktop-vulkan.sh @@ -47,6 +47,7 @@ cmake .. \ -DWITH_ANYAUDIOIMPORTER=OFF \ -DWITH_ANYIMAGECONVERTER=OFF \ -DWITH_ANYIMAGEIMPORTER=OFF \ + -DWITH_ANYSCENECONVERTER=OFF \ -DWITH_ANYSCENEIMPORTER=OFF \ -DWITH_MAGNUMFONT=OFF \ -DWITH_MAGNUMFONTCONVERTER=OFF \ diff --git a/package/ci/travis-desktop.sh b/package/ci/travis-desktop.sh index 553989a3c..878884ac1 100755 --- a/package/ci/travis-desktop.sh +++ b/package/ci/travis-desktop.sh @@ -33,6 +33,7 @@ cmake .. \ -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/ci/travis-emscripten.sh b/package/ci/travis-emscripten.sh index 8e886ecf4..a246c667d 100755 --- a/package/ci/travis-emscripten.sh +++ b/package/ci/travis-emscripten.sh @@ -56,6 +56,7 @@ cmake .. \ -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/ci/travis-ios-simulator.sh b/package/ci/travis-ios-simulator.sh index 48b87cc02..af66da840 100755 --- a/package/ci/travis-ios-simulator.sh +++ b/package/ci/travis-ios-simulator.sh @@ -53,6 +53,7 @@ cmake .. \ -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/debian/rules b/package/debian/rules index 482d8bdb5..e6f42e9e4 100755 --- a/package/debian/rules +++ b/package/debian/rules @@ -26,6 +26,7 @@ override_dh_auto_configure: -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/gentoo/dev-libs/magnum/magnum-9999.ebuild b/package/gentoo/dev-libs/magnum/magnum-9999.ebuild index a4eb16c4b..85f972db5 100644 --- a/package/gentoo/dev-libs/magnum/magnum-9999.ebuild +++ b/package/gentoo/dev-libs/magnum/magnum-9999.ebuild @@ -35,6 +35,7 @@ src_configure() { -DWITH_ANYAUDIOIMPORTER=ON -DWITH_ANYIMAGECONVERTER=ON -DWITH_ANYIMAGEIMPORTER=ON + -DWITH_ANYSCENECONVERTER=ON -DWITH_ANYSCENEIMPORTER=ON -DWITH_MAGNUMFONT=ON -DWITH_MAGNUMFONTCONVERTER=ON diff --git a/package/homebrew/magnum.rb b/package/homebrew/magnum.rb index e52627d3d..374891663 100644 --- a/package/homebrew/magnum.rb +++ b/package/homebrew/magnum.rb @@ -14,7 +14,7 @@ class Magnum < Formula def install system "mkdir build" cd "build" do - system "cmake", "-DCMAKE_BUILD_TYPE=Release", "-DCMAKE_INSTALL_PREFIX=#{prefix}", "-DMAGNUM_PLUGINS_DIR=#{HOMEBREW_PREFIX}/lib/magnum", "-DWITH_AUDIO=ON", "-DWITH_GLFWAPPLICATION=ON", "-DWITH_SDL2APPLICATION=ON", "-DWITH_WINDOWLESSCGLAPPLICATION=ON", "-DWITH_CGLCONTEXT=ON", "-DWITH_OPENGLTESTER=ON", "-DWITH_ANYAUDIOIMPORTER=ON", "-DWITH_ANYIMAGECONVERTER=ON", "-DWITH_ANYIMAGEIMPORTER=ON", "-DWITH_ANYSCENEIMPORTER=ON", "-DWITH_MAGNUMFONT=ON", "-DWITH_MAGNUMFONTCONVERTER=ON", "-DWITH_OBJIMPORTER=ON", "-DWITH_TGAIMAGECONVERTER=ON", "-DWITH_TGAIMPORTER=ON", "-DWITH_WAVAUDIOIMPORTER=ON", "-DWITH_DISTANCEFIELDCONVERTER=ON", "-DWITH_FONTCONVERTER=ON", "-DWITH_IMAGECONVERTER=ON", "-DWITH_SCENECONVERTER=ON", "-DWITH_GL_INFO=ON", "-DWITH_AL_INFO=ON", ".." + system "cmake", "-DCMAKE_BUILD_TYPE=Release", "-DCMAKE_INSTALL_PREFIX=#{prefix}", "-DMAGNUM_PLUGINS_DIR=#{HOMEBREW_PREFIX}/lib/magnum", "-DWITH_AUDIO=ON", "-DWITH_GLFWAPPLICATION=ON", "-DWITH_SDL2APPLICATION=ON", "-DWITH_WINDOWLESSCGLAPPLICATION=ON", "-DWITH_CGLCONTEXT=ON", "-DWITH_OPENGLTESTER=ON", "-DWITH_ANYAUDIOIMPORTER=ON", "-DWITH_ANYIMAGECONVERTER=ON", "-DWITH_ANYIMAGEIMPORTER=ON", "-DWITH_ANYSCENECONVERTER=ON", "-DWITH_ANYSCENEIMPORTER=ON", "-DWITH_MAGNUMFONT=ON", "-DWITH_MAGNUMFONTCONVERTER=ON", "-DWITH_OBJIMPORTER=ON", "-DWITH_TGAIMAGECONVERTER=ON", "-DWITH_TGAIMPORTER=ON", "-DWITH_WAVAUDIOIMPORTER=ON", "-DWITH_DISTANCEFIELDCONVERTER=ON", "-DWITH_FONTCONVERTER=ON", "-DWITH_IMAGECONVERTER=ON", "-DWITH_SCENECONVERTER=ON", "-DWITH_GL_INFO=ON", "-DWITH_AL_INFO=ON", ".." system "cmake", "--build", "." system "cmake", "--build", ".", "--target", "install" end diff --git a/package/msys/PKGBUILD b/package/msys/PKGBUILD index 0b81f66d0..6799f39de 100644 --- a/package/msys/PKGBUILD +++ b/package/msys/PKGBUILD @@ -40,6 +40,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_MAGNUMFONT=ON \ -DWITH_MAGNUMFONTCONVERTER=ON \ diff --git a/package/msys/magnum/PKGBUILD b/package/msys/magnum/PKGBUILD index 728bb2dbd..2cb5bb594 100644 --- a/package/msys/magnum/PKGBUILD +++ b/package/msys/magnum/PKGBUILD @@ -44,6 +44,7 @@ build() { -DWITH_ANYAUDIOIMPORTER=ON \ -DWITH_ANYIMAGECONVERTER=ON \ -DWITH_ANYIMAGEIMPORTER=ON \ + -DWITH_ANYSCENECONVERTER=ON \ -DWITH_ANYSCENEIMPORTER=ON \ -DWITH_AUDIO=ON \ -DWITH_DISTANCEFIELDCONVERTER=ON \ diff --git a/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.conf b/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.conf new file mode 100644 index 000000000..e69de29bb diff --git a/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp b/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp new file mode 100644 index 000000000..e512049a7 --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.cpp @@ -0,0 +1,89 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + 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. +*/ + +#include "AnySceneConverter.h" + +#include +#include +#include +#include +#include + +#include "Magnum/Trade/ImageData.h" + +namespace Magnum { namespace Trade { + +AnySceneConverter::AnySceneConverter(PluginManager::Manager& manager): AbstractSceneConverter{manager} {} + +AnySceneConverter::AnySceneConverter(PluginManager::AbstractManager& manager, const std::string& plugin): AbstractSceneConverter{manager, plugin} {} + +AnySceneConverter::~AnySceneConverter() = default; + +SceneConverterFeatures AnySceneConverter::doFeatures() const { + return SceneConverterFeature::ConvertMeshToFile; +} + +bool AnySceneConverter::doConvertToFile(const std::string& filename, const MeshData& mesh) { + CORRADE_INTERNAL_ASSERT(manager()); + + /** @todo lowercase only the extension, once Directory::split() is done */ + const std::string normalized = Utility::String::lowercase(filename); + + /* Detect the plugin from extension */ + std::string plugin; + if(Utility::String::endsWith(normalized, ".ply")) + plugin = "StanfordSceneConverter"; + else { + Error{} << "Trade::AnySceneConverter::convertToFile(): cannot determine the format of" << filename; + return false; + } + + /* Try to load the plugin */ + if(!(manager()->load(plugin) & PluginManager::LoadState::Loaded)) { + Error{} << "Trade::AnySceneConverter::convertToFile(): cannot load the" << plugin << "plugin"; + return false; + } + if(flags() & SceneConverterFlag::Verbose) { + Debug d; + d << "Trade::AnySceneConverter::convertToFile(): using" << plugin; + PluginManager::PluginMetadata* metadata = manager()->metadata(plugin); + CORRADE_INTERNAL_ASSERT(metadata); + if(plugin != metadata->name()) + d << "(provided by" << metadata->name() << Debug::nospace << ")"; + } + + /* Instantiate the plugin, propagate flags */ + Containers::Pointer converter = static_cast*>(manager())->instantiate(plugin); + converter->setFlags(flags()); + + /* Try to convert the file (error output should be printed by the plugin + itself) */ + return converter->convertToFile(filename, mesh); +} + +}} + +CORRADE_PLUGIN_REGISTER(AnySceneConverter, Magnum::Trade::AnySceneConverter, + "cz.mosra.magnum.Trade.AbstractSceneConverter/0.1") diff --git a/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.h b/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.h new file mode 100644 index 000000000..3751d4e0b --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/AnySceneConverter.h @@ -0,0 +1,111 @@ +#ifndef Magnum_Trade_AnySceneConverter_h +#define Magnum_Trade_AnySceneConverter_h +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + 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. +*/ + +/** @file + * @brief Class @ref Magnum::Trade::AnySceneConverter + */ + +#include "Magnum/Trade/AbstractSceneConverter.h" +#include "MagnumPlugins/AnySceneConverter/configure.h" + +#ifndef DOXYGEN_GENERATING_OUTPUT +#ifndef MAGNUM_ANYSCENECONVERTER_BUILD_STATIC + #ifdef AnySceneConverter_EXPORTS + #define MAGNUM_ANYSCENECONVERTER_EXPORT CORRADE_VISIBILITY_EXPORT + #else + #define MAGNUM_ANYSCENECONVERTER_EXPORT CORRADE_VISIBILITY_IMPORT + #endif +#else + #define MAGNUM_ANYSCENECONVERTER_EXPORT CORRADE_VISIBILITY_STATIC +#endif +#define MAGNUM_ANYSCENECONVERTER_LOCAL CORRADE_VISIBILITY_LOCAL +#else +#define MAGNUM_ANYSCENECONVERTER_EXPORT +#define MAGNUM_ANYSCENECONVERTER_LOCAL +#endif + +namespace Magnum { namespace Trade { + +/** +@brief Any scene converter plugin + +Detects file type based on file extension, loads corresponding plugin and then +tries to convert the file with it. Supported formats: + +- Stanford (`*.ply`), converted with @ref StanfordSceneConverter or any other + plugin that provides it + +Only converting to files is supported. + +@section Trade-AnySceneConverter-usage Usage + +This plugin depends on the @ref Trade library and is built if +`WITH_ANYSCENECONVERTER` is enabled when building Magnum. To use as a dynamic +plugin, load @cpp "AnySceneConverter" @ce via +@ref Corrade::PluginManager::Manager. + +Additionally, if you're using Magnum as a CMake subproject, do the following: + +@code{.cmake} +set(WITH_ANYSCENECONVERTER ON CACHE BOOL "" FORCE) +add_subdirectory(magnum EXCLUDE_FROM_ALL) + +# So the dynamically loaded plugin gets built implicitly +add_dependencies(your-app Magnum::AnySceneConverter) +@endcode + +To use as a static plugin or as a dependency of another plugin with CMake, you +need to request the `AnySceneConverter` component of the `Magnum` package and +link to the `Magnum::AnySceneConverter` target: + +@code{.cmake} +find_package(Magnum REQUIRED AnySceneConverter) + +# ... +target_link_libraries(your-app PRIVATE Magnum::AnySceneConverter) +@endcode + +See @ref building, @ref cmake and @ref plugins for more information. +*/ +class MAGNUM_ANYSCENECONVERTER_EXPORT AnySceneConverter: public AbstractSceneConverter { + public: + /** @brief Constructor with access to plugin manager */ + explicit AnySceneConverter(PluginManager::Manager& manager); + + /** @brief Plugin manager constructor */ + explicit AnySceneConverter(PluginManager::AbstractManager& manager, const std::string& plugin); + + ~AnySceneConverter(); + + private: + MAGNUM_ANYSCENECONVERTER_LOCAL SceneConverterFeatures doFeatures() const override; + MAGNUM_ANYSCENECONVERTER_LOCAL bool doConvertToFile(const std::string& filename, const MeshData& mesh) override; +}; + +}} + +#endif diff --git a/src/MagnumPlugins/AnySceneConverter/CMakeLists.txt b/src/MagnumPlugins/AnySceneConverter/CMakeLists.txt new file mode 100644 index 000000000..43cc63262 --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/CMakeLists.txt @@ -0,0 +1,68 @@ +# +# This file is part of Magnum. +# +# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 +# Vladimír Vondruš +# +# 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. +# + +find_package(Corrade REQUIRED PluginManager) + +if(BUILD_PLUGINS_STATIC) + set(MAGNUM_ANYSCENECONVERTER_BUILD_STATIC 1) +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/configure.h) + +# AnySceneConverter plugin +add_plugin(AnySceneConverter + "${MAGNUM_PLUGINS_SCENECONVERTER_DEBUG_BINARY_INSTALL_DIR};${MAGNUM_PLUGINS_SCENECONVERTER_DEBUG_LIBRARY_INSTALL_DIR}" + "${MAGNUM_PLUGINS_SCENECONVERTER_RELEASE_BINARY_INSTALL_DIR};${MAGNUM_PLUGINS_SCENECONVERTER_RELEASE_LIBRARY_INSTALL_DIR}" + AnySceneConverter.conf + AnySceneConverter.cpp + AnySceneConverter.h) +if(BUILD_PLUGINS_STATIC AND BUILD_STATIC_PIC) + set_target_properties(AnySceneConverter PROPERTIES POSITION_INDEPENDENT_CODE ON) +endif() +target_link_libraries(AnySceneConverter PUBLIC MagnumTrade) +# Modify output location only if all are set, otherwise it makes no sense +if(CMAKE_RUNTIME_OUTPUT_DIRECTORY AND CMAKE_LIBRARY_OUTPUT_DIRECTORY AND CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set_target_properties(AnySceneConverter PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/magnum$<$:-d>/imageconverters + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/magnum$<$:-d>/imageconverters + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/magnum$<$:-d>/imageconverters) +endif() + +install(FILES AnySceneConverter.h ${CMAKE_CURRENT_BINARY_DIR}/configure.h + DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnySceneConverter) + +# Automatic static plugin import +if(BUILD_PLUGINS_STATIC) + install(FILES importStaticPlugin.cpp DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnySceneConverter) + target_sources(AnySceneConverter INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/importStaticPlugin.cpp) +endif() + +if(BUILD_TESTS) + add_subdirectory(Test) +endif() + +# Magnum AnySceneConverter target alias for superprojects +add_library(Magnum::AnySceneConverter ALIAS AnySceneConverter) diff --git a/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp b/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp new file mode 100644 index 000000000..5c471b2ac --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp @@ -0,0 +1,122 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + 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. +*/ + +#include +#include +#include +#include +#include +#include + +#include "Magnum/Trade/AbstractSceneConverter.h" +#include "Magnum/Trade/MeshData.h" + +#include "configure.h" + +namespace Magnum { namespace Trade { namespace Test { namespace { + +struct AnySceneConverterTest: TestSuite::Tester { + explicit AnySceneConverterTest(); + + void load(); + void detect(); + + void unknown(); + + void verbose(); + + /* Explicitly forbid system-wide plugin dependencies */ + PluginManager::Manager _manager{"nonexistent"}; +}; + +constexpr struct { + const char* name; + const char* filename; + const char* plugin; +} DetectData[]{ + {"Stanford PLY", "bunny.ply", "StanfordSceneConverter"}, + {"Stanford PLY uppercase", "ARMADI~1.PLY", "StanfordSceneConverter"} +}; + +AnySceneConverterTest::AnySceneConverterTest() { + addTests({&AnySceneConverterTest::load}); + + addInstancedTests({&AnySceneConverterTest::detect}, + Containers::arraySize(DetectData)); + + addTests({&AnySceneConverterTest::unknown, + + &AnySceneConverterTest::verbose}); + + /* Load the plugin directly from the build tree. Otherwise it's static and + already loaded. */ + #ifdef ANYSCENECONVERTER_PLUGIN_FILENAME + CORRADE_INTERNAL_ASSERT_OUTPUT(_manager.load(ANYSCENECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + /* Create the output directory if it doesn't exist yet */ + CORRADE_INTERNAL_ASSERT_OUTPUT(Utility::Directory::mkpath(ANYSCENECONVERTER_TEST_DIR)); +} + +void AnySceneConverterTest::load() { + CORRADE_SKIP("No scene converter plugin available to test."); +} + +void AnySceneConverterTest::detect() { + auto&& data = DetectData[testCaseInstanceId()]; + setTestCaseDescription(data.name); + + Containers::Pointer converter = _manager.instantiate("AnySceneConverter"); + + std::ostringstream out; + Error redirectError{&out}; + CORRADE_VERIFY(!converter->convertToFile(data.filename, MeshData{MeshPrimitive::Triangles, 0})); + /* Can't use raw string literals in macros on GCC 4.8 */ + #ifndef CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT + CORRADE_COMPARE(out.str(), Utility::formatString( +"PluginManager::Manager::load(): plugin {0} is not static and was not found in nonexistent\nTrade::AnySceneConverter::convertToFile(): cannot load the {0} plugin\n", data.plugin)); + #else + CORRADE_COMPARE(out.str(), Utility::formatString( +"PluginManager::Manager::load(): plugin {0} was not found\nTrade::AnySceneConverter::convertToFile(): cannot load the {0} plugin\n", data.plugin)); + #endif +} + +void AnySceneConverterTest::unknown() { + std::ostringstream output; + Error redirectError{&output}; + + Containers::Pointer converter = _manager.instantiate("AnySceneConverter"); + CORRADE_VERIFY(!converter->convertToFile("mesh.obj", MeshData{MeshPrimitive::Triangles, 0})); + + CORRADE_COMPARE(output.str(), "Trade::AnySceneConverter::convertToFile(): cannot determine the format of mesh.obj\n"); +} + +void AnySceneConverterTest::verbose() { + CORRADE_SKIP("No plugin available to test."); +} + +}}}} + +CORRADE_TEST_MAIN(Magnum::Trade::Test::AnySceneConverterTest) diff --git a/src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt b/src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt new file mode 100644 index 000000000..6f2b60d8b --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt @@ -0,0 +1,71 @@ +# +# This file is part of Magnum. +# +# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 +# Vladimír Vondruš +# +# 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. +# + +if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID) + set(ANYSCENECONVERTER_TEST_DIR "write") +else() + set(ANYSCENECONVERTER_TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}) +endif() + +# CMake before 3.8 has broken $ expressions for iOS (see +# https://gitlab.kitware.com/cmake/cmake/merge_requests/404) and since Corrade +# doesn't support dynamic plugins on iOS, this sorta works around that. Should +# be revisited when updating Travis to newer Xcode (xcode7.3 has CMake 3.6). +if(NOT BUILD_PLUGINS_STATIC) + set(ANYSCENECONVERTER_PLUGIN_FILENAME $) + if(WITH_TGAIMAGECONVERTER) + set(TGAIMAGECONVERTER_PLUGIN_FILENAME $) + endif() +endif() + +# First replace ${} variables, then $<> generator expressions +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in) +file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$/configure.h + INPUT ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in) + +corrade_add_test(AnySceneConverterTest AnySceneConverterTest.cpp + LIBRARIES MagnumTrade) +target_include_directories(AnySceneConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) +if(BUILD_PLUGINS_STATIC) + target_link_libraries(AnySceneConverterTest PRIVATE AnySceneConverter) + if(WITH_TGAIMAGECONVERTER) + target_link_libraries(AnySceneConverterTest PRIVATE TgaImageConverter) + endif() +else() + # So the plugins get properly built when building the test + add_dependencies(AnySceneConverterTest AnySceneConverter) + if(WITH_TGAIMAGECONVERTER) + add_dependencies(AnySceneConverterTest TgaImageConverter) + endif() +endif() +set_target_properties(AnySceneConverterTest PROPERTIES FOLDER "MagnumPlugins/AnySceneConverter/Test") +if(CORRADE_BUILD_STATIC AND NOT BUILD_PLUGINS_STATIC) + # CMake < 3.4 does this implicitly, but 3.4+ not anymore (see CMP0065). + # That's generally okay, *except if* the build is static, the executable + # uses a plugin manager and needs to share globals with the plugins (such + # as output redirection and so on). + set_target_properties(AnySceneConverterTest PROPERTIES ENABLE_EXPORTS ON) +endif() diff --git a/src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake b/src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake new file mode 100644 index 000000000..6bf97d62a --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake @@ -0,0 +1,27 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + 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. +*/ + +#cmakedefine ANYSCENECONVERTER_PLUGIN_FILENAME "${ANYSCENECONVERTER_PLUGIN_FILENAME}" +#define ANYSCENECONVERTER_TEST_DIR "${ANYSCENECONVERTER_TEST_DIR}" diff --git a/src/MagnumPlugins/AnySceneConverter/configure.h.cmake b/src/MagnumPlugins/AnySceneConverter/configure.h.cmake new file mode 100644 index 000000000..ddc3b3738 --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/configure.h.cmake @@ -0,0 +1,26 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + 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. +*/ + +#cmakedefine MAGNUM_ANYSCENECONVERTER_BUILD_STATIC diff --git a/src/MagnumPlugins/AnySceneConverter/importStaticPlugin.cpp b/src/MagnumPlugins/AnySceneConverter/importStaticPlugin.cpp new file mode 100644 index 000000000..3ca3c865e --- /dev/null +++ b/src/MagnumPlugins/AnySceneConverter/importStaticPlugin.cpp @@ -0,0 +1,35 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 + Vladimír Vondruš + + 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. +*/ + +#include "MagnumPlugins/AnySceneConverter/configure.h" + +#ifdef MAGNUM_ANYSCENECONVERTER_BUILD_STATIC +#include + +static int magnumAnySceneConverterStaticImporter() { + CORRADE_PLUGIN_IMPORT(AnySceneConverter) + return 1; +} CORRADE_AUTOMATIC_INITIALIZER(magnumAnySceneConverterStaticImporter) +#endif diff --git a/src/MagnumPlugins/CMakeLists.txt b/src/MagnumPlugins/CMakeLists.txt index 55641e253..43d5aea35 100644 --- a/src/MagnumPlugins/CMakeLists.txt +++ b/src/MagnumPlugins/CMakeLists.txt @@ -46,6 +46,10 @@ if(WITH_ANYIMAGECONVERTER) add_subdirectory(AnyImageConverter) endif() +if(WITH_ANYSCENECONVERTER) + add_subdirectory(AnySceneConverter) +endif() + if(WITH_ANYSCENEIMPORTER) add_subdirectory(AnySceneImporter) endif()