Browse Source

AnyShaderConverter: new plugin.

pull/481/head
Vladimír Vondruš 6 years ago
parent
commit
f1ba6c692b
  1. 1
      CMakeLists.txt
  2. 2
      doc/building.dox
  3. 3
      doc/changelog.dox
  4. 2
      doc/cmake.dox
  5. 3
      doc/namespaces.dox
  6. 2
      doc/plugins.dox
  7. 1
      package/archlinux/PKGBUILD
  8. 1
      package/archlinux/PKGBUILD-android-arm64
  9. 1
      package/archlinux/PKGBUILD-clang
  10. 1
      package/archlinux/PKGBUILD-clang-addressanitizer
  11. 1
      package/archlinux/PKGBUILD-clang-analyzer
  12. 1
      package/archlinux/PKGBUILD-clang-libc++
  13. 1
      package/archlinux/PKGBUILD-coverage
  14. 1
      package/archlinux/PKGBUILD-emscripten
  15. 1
      package/archlinux/PKGBUILD-emscripten-wasm
  16. 1
      package/archlinux/PKGBUILD-emscripten-wasm-webgl2
  17. 1
      package/archlinux/PKGBUILD-emscripten-webgl2
  18. 1
      package/archlinux/PKGBUILD-es2
  19. 1
      package/archlinux/PKGBUILD-es2desktop
  20. 1
      package/archlinux/PKGBUILD-es3
  21. 1
      package/archlinux/PKGBUILD-es3desktop
  22. 1
      package/archlinux/PKGBUILD-gcc48
  23. 2
      package/archlinux/PKGBUILD-mingw-w64
  24. 2
      package/archlinux/PKGBUILD-release
  25. 1
      package/ci/appveyor-desktop-gles.bat
  26. 1
      package/ci/appveyor-desktop-mingw.bat
  27. 1
      package/ci/appveyor-desktop.bat
  28. 1
      package/ci/appveyor-rt.bat
  29. 1
      package/ci/travis-android-arm.sh
  30. 1
      package/ci/travis-desktop-gles.sh
  31. 1
      package/ci/travis-desktop-vulkan.sh
  32. 1
      package/ci/travis-desktop.sh
  33. 1
      package/ci/travis-emscripten.sh
  34. 1
      package/ci/travis-ios-simulator.sh
  35. 1
      package/debian/rules
  36. 1
      package/gentoo/dev-libs/magnum/magnum-9999.ebuild
  37. 1
      package/homebrew/magnum.rb
  38. 1
      package/msys/PKGBUILD
  39. 1
      package/msys/magnum/PKGBUILD
  40. 208
      src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp
  41. 144
      src/MagnumPlugins/AnyShaderConverter/AnyConverter.h
  42. 0
      src/MagnumPlugins/AnyShaderConverter/AnyShaderConverter.conf
  43. 68
      src/MagnumPlugins/AnyShaderConverter/CMakeLists.txt
  44. 377
      src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp
  45. 65
      src/MagnumPlugins/AnyShaderConverter/Test/CMakeLists.txt
  46. 42
      src/MagnumPlugins/AnyShaderConverter/Test/configure.h.cmake
  47. 6
      src/MagnumPlugins/AnyShaderConverter/Test/file.glsl
  48. 26
      src/MagnumPlugins/AnyShaderConverter/configure.h.cmake
  49. 35
      src/MagnumPlugins/AnyShaderConverter/importStaticPlugin.cpp
  50. 4
      src/MagnumPlugins/CMakeLists.txt

1
CMakeLists.txt

@ -82,6 +82,7 @@ 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_ANYSHADERCONVERTER "Build AnyShaderConverter plugin" OFF)
option(WITH_WAVAUDIOIMPORTER "Build WavAudioImporter plugin" OFF)
option(WITH_MAGNUMFONT "Build MagnumFont plugin" OFF)
option(WITH_MAGNUMFONTCONVERTER "Build MagnumFontConverter plugin" OFF)

2
doc/building.dox

@ -582,6 +582,8 @@ default.
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_ANYSHADERCONVERTER` --- Build the @ref ShaderTools::AnyConverter "AnyShaderConverter"
plugin. Enables also building of the @ref ShaderTools library.
- `WITH_MAGNUMFONT` --- Build the @ref Text::MagnumFont "MagnumFont" plugin.
Enables also building of the @ref Text library and the
@ref Trade::TgaImporter "TgaImporter" plugin. Requires `TARGET_GL` to be

3
doc/changelog.dox

@ -91,7 +91,8 @@ See also:
- New @ref ShaderTools library that provides a
@ref ShaderTools::AbstractConverter plugin interface for shader validation,
conversion, compilation and optimization
conversion, compilation and optimization; together with a
@ref ShaderTools::AnyConverter "AnyShaderConverter" plugin
@subsubsection changelog-latest-new-scenegraph SceneGraph library

2
doc/cmake.dox

@ -251,6 +251,8 @@ dependencies, you need to find the dependency and then link to it.
plugin
- `AnySceneImporter` --- @ref Trade::AnySceneImporter "AnySceneImporter"
plugin
- `AnyShaderConverter` --- @ref ShaderTools::AnyConverter "AnyShaderConverter"
plugin
- `MagnumFont` --- @ref Text::MagnumFont "MagnumFont" plugin
- `MagnumFontConverter` --- @ref Text::MagnumFontConverter "MagnumFontConverter"
plugin

3
doc/namespaces.dox

@ -663,6 +663,9 @@ See @ref building, @ref cmake and @ref vulkan for more information.
/** @dir MagnumPlugins/AnySceneImporter
* @brief Plugin @ref Magnum::Trade::AnySceneImporter
*/
/** @dir MagnumPlugins/AnyShaderConverter
* @brief Plugin @ref Magnum::ShaderTools::AnyConverter
*/
/** @dir MagnumPlugins/MagnumFont
* @brief Plugin @ref Magnum::Text::MagnumFont
*/

2
doc/plugins.dox

@ -200,6 +200,8 @@ So far, the following plugins have the "any format" ability:
format
- @ref Trade::AnySceneConverter "AnySceneConverter" --- converts to any scene
format
- @ref ShaderTools::AnyConverter "AnyShaderConverter" --- converts shaders of
any formats
- @ref Audio::AnyImporter "AnyImporter" --- imports any audio format
@section plugins-configuration Plugin-specific configuration

1
package/archlinux/PKGBUILD

@ -40,6 +40,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/archlinux/PKGBUILD-android-arm64

@ -38,6 +38,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-clang

@ -43,6 +43,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/archlinux/PKGBUILD-clang-addressanitizer

@ -44,6 +44,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/archlinux/PKGBUILD-clang-analyzer

@ -35,6 +35,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/archlinux/PKGBUILD-clang-libc++

@ -46,6 +46,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/archlinux/PKGBUILD-coverage

@ -41,6 +41,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/archlinux/PKGBUILD-emscripten

@ -37,6 +37,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-emscripten-wasm

@ -37,6 +37,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-emscripten-wasm-webgl2

@ -38,6 +38,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-emscripten-webgl2

@ -38,6 +38,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-es2

@ -33,6 +33,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-es2desktop

@ -37,6 +37,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-es3

@ -33,6 +33,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-es3desktop

@ -37,6 +37,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_OBJIMPORTER=ON \
-DWITH_TGAIMAGECONVERTER=ON \

1
package/archlinux/PKGBUILD-gcc48

@ -46,6 +46,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

2
package/archlinux/PKGBUILD-mingw-w64

@ -30,6 +30,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \
@ -64,6 +65,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

2
package/archlinux/PKGBUILD-release

@ -35,6 +35,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \
@ -73,6 +74,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/ci/appveyor-desktop-gles.bat

@ -37,6 +37,7 @@ cmake .. ^
-DWITH_ANYIMAGEIMPORTER=OFF ^
-DWITH_ANYSCENECONVERTER=OFF ^
-DWITH_ANYSCENEIMPORTER=OFF ^
-DWITH_ANYSHADERCONVERTER=OFF ^
-DWITH_MAGNUMFONT=ON ^
-DWITH_MAGNUMFONTCONVERTER=ON ^
-DWITH_OBJIMPORTER=OFF ^

1
package/ci/appveyor-desktop-mingw.bat

@ -36,6 +36,7 @@ cmake .. ^
-DWITH_ANYIMAGEIMPORTER=ON ^
-DWITH_ANYSCENECONVERTER=ON ^
-DWITH_ANYSCENEIMPORTER=ON ^
-DWITH_ANYSHADERCONVERTER=ON ^
-DWITH_MAGNUMFONT=ON ^
-DWITH_MAGNUMFONTCONVERTER=ON ^
-DWITH_OBJIMPORTER=ON ^

1
package/ci/appveyor-desktop.bat

@ -43,6 +43,7 @@ cmake .. ^
-DWITH_ANYIMAGEIMPORTER=ON ^
-DWITH_ANYSCENECONVERTER=ON ^
-DWITH_ANYSCENEIMPORTER=ON ^
-DWITH_ANYSHADERCONVERTER=ON ^
-DWITH_MAGNUMFONT=ON ^
-DWITH_MAGNUMFONTCONVERTER=ON ^
-DWITH_OBJIMPORTER=ON ^

1
package/ci/appveyor-rt.bat

@ -57,6 +57,7 @@ cmake .. ^
-DWITH_ANYIMAGEIMPORTER=ON ^
-DWITH_ANYSCENECONVERTER=ON ^
-DWITH_ANYSCENEIMPORTER=ON ^
-DWITH_ANYSHADERCONVERTER=ON ^
-DWITH_MAGNUMFONT=ON ^
-DWITH_MAGNUMFONTCONVERTER=ON ^
-DWITH_OBJIMPORTER=ON ^

1
package/ci/travis-android-arm.sh

@ -65,6 +65,7 @@ cmake .. \
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/ci/travis-desktop-gles.sh

@ -38,6 +38,7 @@ cmake .. \
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=OFF \
-DWITH_ANYSCENEIMPORTER=OFF \
-DWITH_ANYSHADERCONVERTER=OFF \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=OFF \

1
package/ci/travis-desktop-vulkan.sh

@ -49,6 +49,7 @@ cmake .. \
-DWITH_ANYIMAGEIMPORTER=OFF \
-DWITH_ANYSCENECONVERTER=OFF \
-DWITH_ANYSCENEIMPORTER=OFF \
-DWITH_ANYSHADERCONVERTER=OFF \
-DWITH_MAGNUMFONT=OFF \
-DWITH_MAGNUMFONTCONVERTER=OFF \
-DWITH_OBJIMPORTER=OFF \

1
package/ci/travis-desktop.sh

@ -35,6 +35,7 @@ cmake .. \
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/ci/travis-emscripten.sh

@ -58,6 +58,7 @@ cmake .. \
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/ci/travis-ios-simulator.sh

@ -55,6 +55,7 @@ cmake .. \
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/debian/rules vendored

@ -28,6 +28,7 @@ override_dh_auto_configure:
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/gentoo/dev-libs/magnum/magnum-9999.ebuild

@ -37,6 +37,7 @@ src_configure() {
-DWITH_ANYIMAGEIMPORTER=ON
-DWITH_ANYSCENECONVERTER=ON
-DWITH_ANYSCENEIMPORTER=ON
-DWITH_ANYSHADERCONVERTER=ON
-DWITH_MAGNUMFONT=ON
-DWITH_MAGNUMFONTCONVERTER=ON
-DWITH_OBJIMPORTER=ON

1
package/homebrew/magnum.rb

@ -29,6 +29,7 @@ class Magnum < Formula
"-DWITH_ANYIMAGEIMPORTER=ON",
"-DWITH_ANYSCENECONVERTER=ON",
"-DWITH_ANYSCENEIMPORTER=ON",
"-DWITH_ANYSHADERCONVERTER=ON",
"-DWITH_MAGNUMFONT=ON",
"-DWITH_MAGNUMFONTCONVERTER=ON",
"-DWITH_OBJIMPORTER=ON",

1
package/msys/PKGBUILD

@ -42,6 +42,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_MAGNUMFONT=ON \
-DWITH_MAGNUMFONTCONVERTER=ON \
-DWITH_OBJIMPORTER=ON \

1
package/msys/magnum/PKGBUILD

@ -46,6 +46,7 @@ build() {
-DWITH_ANYIMAGEIMPORTER=ON \
-DWITH_ANYSCENECONVERTER=ON \
-DWITH_ANYSCENEIMPORTER=ON \
-DWITH_ANYSHADERCONVERTER=ON \
-DWITH_AUDIO=ON \
-DWITH_DISTANCEFIELDCONVERTER=ON \
-DWITH_WGLCONTEXT=ON \

208
src/MagnumPlugins/AnyShaderConverter/AnyConverter.cpp

@ -0,0 +1,208 @@
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020 Vladimír Vondruš <mosra@centrum.cz>
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 "AnyConverter.h"
#include <Corrade/PluginManager/Manager.h>
#include <Corrade/PluginManager/PluginMetadata.h>
#include <Corrade/Containers/String.h>
#include <Corrade/Containers/StringStl.h>
#include <Corrade/Utility/Assert.h>
#include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/FormatStl.h>
#include <Corrade/Utility/String.h>
namespace Magnum { namespace ShaderTools {
struct AnyConverter::State {
Format inputFormat, outputFormat;
Containers::String inputVersion, outputVersion;
};
AnyConverter::AnyConverter(PluginManager::Manager<AbstractConverter>& manager): AbstractConverter{manager} {}
AnyConverter::AnyConverter(PluginManager::AbstractManager& manager, const std::string& plugin): AbstractConverter{manager, plugin}, _state{Containers::InPlaceInit} {}
AnyConverter::~AnyConverter() = default;
ConverterFeatures AnyConverter::doFeatures() const {
/** @todo Preprocess, Optimize, DebugInfo, those also need checks that the
plugin actually supports them */
return ConverterFeature::ValidateFile|ConverterFeature::ConvertFile;
}
void AnyConverter::doSetInputFormat(const Format format, const Containers::StringView version) {
_state->inputFormat = format;
_state->inputVersion = Containers::String::nullTerminatedGlobalView(version);
}
void AnyConverter::doSetOutputFormat(Format format, Containers::StringView version) {
_state->outputFormat = format;
_state->outputVersion = Containers::String::nullTerminatedGlobalView(version);
}
namespace {
using namespace Containers::Literals;
Containers::StringView formatForExtension(const char* prefix, const Containers::StringView filename) {
/** @todo lowercase only the extension, once Directory::split() is done */
const std::string normalized = Utility::String::lowercase(filename);
/* https://github.com/KhronosGroup/SPIRV-Tools/blob/a715b1b4053519ad0f2bdb2d22ace35d35867cff/README.md#command-line-tools
"It's a convention to name SPIR-V assembly and binary files with suffix
.spvasm and .spv, respectively." IT'S GREAT THAT I HAD TO SEARCH HALF
THE INTERNET TO FIND THIS CONVENTION. Especially when tests in the
SPIRV-Cross repo use `.asm.bla` instead, FFS. */
if(Utility::String::endsWith(normalized, ".spvasm") ||
/* Not official, used by https://github.com/KhronosGroup/SPIRV-Cross */
Utility::String::endsWith(normalized, ".asm.vert") ||
Utility::String::endsWith(normalized, ".asm.frag") ||
Utility::String::endsWith(normalized, ".asm.geom") ||
Utility::String::endsWith(normalized, ".asm.comp") ||
Utility::String::endsWith(normalized, ".asm.tesc") ||
Utility::String::endsWith(normalized, ".asm.tese") ||
Utility::String::endsWith(normalized, ".asm.rgen") ||
Utility::String::endsWith(normalized, ".asm.rint") ||
Utility::String::endsWith(normalized, ".asm.rahit") ||
Utility::String::endsWith(normalized, ".asm.rchit") ||
Utility::String::endsWith(normalized, ".asm.rmiss") ||
Utility::String::endsWith(normalized, ".asm.rcall") ||
Utility::String::endsWith(normalized, ".asm.mesh") ||
Utility::String::endsWith(normalized, ".asm.task"))
return "SpirvAssembly"_s;
/* https://github.com/KhronosGroup/glslang/blob/3ce148638bdc3807316e358dee4a5c9583189ae7/StandAlone/StandAlone.cpp#L260-L274 */
else if(Utility::String::endsWith(normalized, ".glsl") ||
Utility::String::endsWith(normalized, ".vert") ||
Utility::String::endsWith(normalized, ".frag") ||
Utility::String::endsWith(normalized, ".geom") ||
Utility::String::endsWith(normalized, ".comp") ||
Utility::String::endsWith(normalized, ".tesc") ||
Utility::String::endsWith(normalized, ".tese") ||
Utility::String::endsWith(normalized, ".rgen") ||
Utility::String::endsWith(normalized, ".rint") ||
Utility::String::endsWith(normalized, ".rahit") ||
Utility::String::endsWith(normalized, ".rchit") ||
Utility::String::endsWith(normalized, ".rmiss") ||
Utility::String::endsWith(normalized, ".rcall") ||
Utility::String::endsWith(normalized, ".mesh") ||
Utility::String::endsWith(normalized, ".task"))
return "Glsl"_s;
else if(Utility::String::endsWith(normalized, ".spv"))
return "Spirv"_s;
Error{} << prefix << "cannot determine the format of" << filename;
return {};
}
}
std::pair<bool, Containers::String> AnyConverter::doValidateFile(const Stage stage, const Containers::StringView filename) {
CORRADE_INTERNAL_ASSERT(manager());
/* Decide on a plugin name based on the extension */
const Containers::StringView format = formatForExtension("ShaderTools::AnyConverter::validateFile():", filename);
if(format.isEmpty()) return {};
const std::string plugin = Utility::formatString("{}ShaderConverter", format);
/* Try to load the plugin */
if(!(manager()->load(plugin) & PluginManager::LoadState::Loaded)) {
Error{} << "ShaderTools::AnyConverter::validateFile(): cannot load the" << plugin << "plugin";
return {};
}
PluginManager::PluginMetadata* metadata = manager()->metadata(plugin);
if(flags() & ConverterFlag::Verbose) {
Debug d;
d << "ShaderTools::AnyConverter::validateFile(): using" << plugin;
CORRADE_INTERNAL_ASSERT(metadata);
if(plugin != metadata->name())
d << "(provided by" << metadata->name() << Debug::nospace << ")";
}
/* Instantiate the plugin, check that it can actually validate */
Containers::Pointer<AbstractConverter> converter = static_cast<PluginManager::Manager<AbstractConverter>*>(manager())->instantiate(plugin);
if(!(converter->features() & ConverterFeature::ValidateFile)) {
Error{} << "ShaderTools::AnyConverter::validateFile():" << metadata->name() << "does not support validation";
return {};
}
/* Propagate input/output version and flags */
converter->setFlags(flags());
converter->setInputFormat(_state->inputFormat, _state->inputVersion);
converter->setOutputFormat(_state->outputFormat, _state->outputVersion);
/* Try to validate the file (error output should be printed by the plugin
itself) */
return converter->validateFile(stage, filename);
}
bool AnyConverter::doConvertFileToFile(const Stage stage, const Containers::StringView from, const Containers::StringView to) {
CORRADE_INTERNAL_ASSERT(manager());
/* Decide on a plugin name based on the input and output extension. This
might result in invalid combinations such as SpirvToGlslShaderConverter
which can't be really handled yet but I think that's okay for now */
const Containers::StringView formatFrom = formatForExtension("ShaderTools::AnyConverter::convertFileToFile():", from);
const Containers::StringView formatTo = formatForExtension("ShaderTools::AnyConverter::convertFileToFile():", to);
if(formatFrom.isEmpty() || formatTo.isEmpty()) return {};
const std::string plugin = Utility::formatString(
formatFrom == formatTo ? "{}ShaderConverter" : "{}To{}ShaderConverter",
formatFrom, formatTo);
/* Try to load the plugin */
if(!(manager()->load(plugin) & PluginManager::LoadState::Loaded)) {
Error{} << "ShaderTools::AnyConverter::convertFileToFile(): cannot load the" << plugin << "plugin";
return {};
}
PluginManager::PluginMetadata* metadata = manager()->metadata(plugin);
if(flags() & ConverterFlag::Verbose) {
Debug d;
d << "ShaderTools::AnyConverter::convertFileToFile(): using" << plugin;
CORRADE_INTERNAL_ASSERT(metadata);
if(plugin != metadata->name())
d << "(provided by" << metadata->name() << Debug::nospace << ")";
}
/* Instantiate the plugin, check that it can actually validate */
Containers::Pointer<AbstractConverter> converter = static_cast<PluginManager::Manager<AbstractConverter>*>(manager())->instantiate(plugin);
if(!(converter->features() & ConverterFeature::ConvertFile)) {
Error{} << "ShaderTools::AnyConverter::convertFileToFile():" << metadata->name() << "does not support conversion";
return {};
}
/* Propagate input/output version and flags */
converter->setFlags(flags());
converter->setInputFormat(_state->inputFormat, _state->inputVersion);
converter->setOutputFormat(_state->outputFormat, _state->outputVersion);
/* Try to convert the file (error output should be printed by the plugin
itself) */
return converter->convertFileToFile(stage, from, to);
}
}}
CORRADE_PLUGIN_REGISTER(AnyShaderConverter, Magnum::ShaderTools::AnyConverter,
"cz.mosra.magnum.ShaderTools.AbstractConverter/0.1")

144
src/MagnumPlugins/AnyShaderConverter/AnyConverter.h

@ -0,0 +1,144 @@
#ifndef Magnum_ShaderTools_AnyConverter_h
#define Magnum_ShaderTools_AnyConverter_h
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020 Vladimír Vondruš <mosra@centrum.cz>
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::ShaderTools::AnyConverter
* @m_since_latest
*/
#include "Magnum/ShaderTools/AbstractConverter.h"
#include "MagnumPlugins/AnyShaderConverter/configure.h"
#ifndef DOXYGEN_GENERATING_OUTPUT
#ifndef MAGNUM_ANYSHADERCONVERTER_BUILD_STATIC
#ifdef AnyShaderConverter_EXPORTS
#define MAGNUM_ANYSHADERCONVERTER_EXPORT CORRADE_VISIBILITY_EXPORT
#else
#define MAGNUM_ANYSHADERCONVERTER_EXPORT CORRADE_VISIBILITY_IMPORT
#endif
#else
#define MAGNUM_ANYSHADERCONVERTER_EXPORT CORRADE_VISIBILITY_STATIC
#endif
#define MAGNUM_ANYSHADERCONVERTER_LOCAL CORRADE_VISIBILITY_LOCAL
#else
#define MAGNUM_ANYSHADERCONVERTER_EXPORT
#define MAGNUM_ANYSHADERCONVERTER_LOCAL
#endif
namespace Magnum { namespace ShaderTools {
/**
@brief Any shader converter plugin
@m_since_latest
@m_keywords{AnyShaderConverter}
Detects file type based on file extension, loads corresponding plugin and then
tries to either validate or convert the file with it. Detected file formats:
- GLSL (`*.glsl`, `*.vert`, `*.frag`, `*.geom`, `*.comp`, `*.tesc`, `*.tese`,
`*.rgen`, `*.rint`, `*.rahit`, `*.rchit`, `*.rmiss`, `*.rcall`, `*.mesh`,
`*.task`)
- SPIR-V (`*.spv`)
- SPIR-V Assembly (`*.spvasm`, `*.asm.vert`, ..., `*.asm.task`)
Supported validation scenarios:
- GLSL, validated with any plugin that provides `GlslShaderConverter`
- SPIR-V, validated with any plugin that provides `SpirvShaderConverter`
- SPIR-V Assembly, validated with any plugin that provides
`SpirvAssemblyShaderConverter`
Supported conversion paths:
- GLSL to SPIR-V, converted with any plugin that provides
`GlslToSpirvShaderConverter`
- SPIR-V to SPIR-V, converted with any plugin that provides
`SpirvShaderConverter`
- SPIR-V to SPIR-V Assembly, converted with any plugin that provides
`SpirvToSpirvAssemblyShaderConverter`
- SPIR-V Assembly to SPIR-V, converted with any plugin that provides
`SpirvAssemblyToSpirvShaderConverter`
- SPIR-V Assembly to SPIR-V Assembly, converted with any plugin that provides
`SpirvAssemblyShaderConverter`
Only validating and converting files is supported.
@section ShaderTools-AnyConverter-usage Usage
This plugin depends on the @ref ShaderTools library and is built if
`WITH_ANYSHADERCONVERTER` is enabled when building Magnum. To use as a dynamic
plugin, load @cpp "AnyShaderConverter" @ce via
@ref Corrade::PluginManager::Manager.
Additionally, if you're using Magnum as a CMake subproject, do the following:
@code{.cmake}
set(WITH_ANYSHADERCONVERTER ON CACHE BOOL "" FORCE)
add_subdirectory(magnum EXCLUDE_FROM_ALL)
# So the dynamically loaded plugin gets built implicitly
add_dependencies(your-app Magnum::AnyShaderConverter)
@endcode
To use as a static plugin or as a dependency of another plugin with CMake, you
need to request the `AnyShaderConverter` component of the `Magnum` package and
link to the `Magnum::AnyShaderConverter` target:
@code{.cmake}
find_package(Magnum REQUIRED AnyShaderConverter)
# ...
target_link_libraries(your-app PRIVATE Magnum::AnyShaderConverter)
@endcode
See @ref building, @ref cmake and @ref plugins for more information.
*/
class MAGNUM_ANYSHADERCONVERTER_EXPORT AnyConverter: public AbstractConverter {
public:
/** @brief Constructor with access to plugin manager */
explicit AnyConverter(PluginManager::Manager<AbstractConverter>& manager);
/** @brief Plugin manager constructor */
explicit AnyConverter(PluginManager::AbstractManager& manager, const std::string& plugin);
~AnyConverter();
private:
MAGNUM_ANYSHADERCONVERTER_LOCAL ConverterFeatures doFeatures() const override;
MAGNUM_ANYSHADERCONVERTER_LOCAL void doSetInputFormat(Format, Containers::StringView version) override;
MAGNUM_ANYSHADERCONVERTER_LOCAL void doSetOutputFormat(Format, Containers::StringView version) override;
MAGNUM_ANYSHADERCONVERTER_LOCAL std::pair<bool, Containers::String> doValidateFile(Stage stage, Containers::StringView filename) override;
MAGNUM_ANYSHADERCONVERTER_LOCAL bool doConvertFileToFile(Stage stage, Containers::StringView from, Containers::StringView to) override;
struct State;
Containers::Pointer<State> _state;
};
}}
#endif

0
src/MagnumPlugins/AnyShaderConverter/AnyShaderConverter.conf

68
src/MagnumPlugins/AnyShaderConverter/CMakeLists.txt

@ -0,0 +1,68 @@
#
# This file is part of Magnum.
#
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
# 2020 Vladimír Vondruš <mosra@centrum.cz>
#
# 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_ANYSHADERCONVERTER_BUILD_STATIC 1)
endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/configure.h)
# AnyShaderConverter plugin
add_plugin(AnyShaderConverter
"${MAGNUM_PLUGINS_SHADERCONVERTER_DEBUG_BINARY_INSTALL_DIR};${MAGNUM_PLUGINS_SHADERCONVERTER_DEBUG_LIBRARY_INSTALL_DIR}"
"${MAGNUM_PLUGINS_SHADERCONVERTER_RELEASE_BINARY_INSTALL_DIR};${MAGNUM_PLUGINS_SHADERCONVERTER_RELEASE_LIBRARY_INSTALL_DIR}"
AnyShaderConverter.conf
AnyConverter.cpp
AnyConverter.h)
if(BUILD_PLUGINS_STATIC AND BUILD_STATIC_PIC)
set_target_properties(AnyShaderConverter PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
target_link_libraries(AnyShaderConverter PUBLIC MagnumShaderTools)
# 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(AnyShaderConverter PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/magnum$<$<CONFIG:Debug>:-d>/imageconverters
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/magnum$<$<CONFIG:Debug>:-d>/imageconverters
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/magnum$<$<CONFIG:Debug>:-d>/imageconverters)
endif()
install(FILES AnyConverter.h ${CMAKE_CURRENT_BINARY_DIR}/configure.h
DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyShaderConverter)
# Automatic static plugin import
if(BUILD_PLUGINS_STATIC)
install(FILES importStaticPlugin.cpp DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyShaderConverter)
target_sources(AnyShaderConverter INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/importStaticPlugin.cpp)
endif()
if(BUILD_TESTS)
add_subdirectory(Test)
endif()
# Magnum AnyShaderConverter target alias for superprojects
add_library(Magnum::AnyShaderConverter ALIAS AnyShaderConverter)

377
src/MagnumPlugins/AnyShaderConverter/Test/AnyConverterTest.cpp

@ -0,0 +1,377 @@
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020 Vladimír Vondruš <mosra@centrum.cz>
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 <sstream>
#include <Corrade/Containers/ArrayView.h>
#include <Corrade/Containers/String.h>
#include <Corrade/Containers/StringStl.h>
#include <Corrade/PluginManager/Manager.h>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/Utility/DebugStl.h>
#include <Corrade/Utility/Directory.h>
#include <Corrade/Utility/FormatStl.h>
#include "Magnum/ShaderTools/AbstractConverter.h"
#include "configure.h"
namespace Magnum { namespace ShaderTools { namespace Test { namespace {
struct AnyConverterTest: TestSuite::Tester {
explicit AnyConverterTest();
void validate();
void validateNotSupported();
void validatePropagateFlags();
void validatePropagateInputVersion();
void validatePropagateOutputVersion();
void convert();
void convertNotSupported();
void convertPropagateFlags();
void convertPropagateInputVersion();
void convertPropagateOutputVersion();
void detectValidate();
void detectConvert();
void unknown();
/* Explicitly forbid system-wide plugin dependencies. Tests that need those
have their own manager. */
PluginManager::Manager<AbstractConverter> _manager{"nonexistent"};
};
constexpr struct {
const char* name;
const char* filename;
const char* plugin;
} DetectValidateData[]{
{"SPIR-V", "flat.spv", "SpirvShaderConverter"},
{"SPIR-V assembly uppercase", "DOOM.SPVASM", "SpirvAssemblyShaderConverter"},
{"SPIR-V assembly weird", "test.asm.rahit", "SpirvAssemblyShaderConverter"},
{"GLSL explicit", "phong.glsl", "GlslShaderConverter"},
{"GLSL implicit", "phong.frag", "GlslShaderConverter"},
};
constexpr struct {
const char* name;
const char* from;
const char* to;
const char* plugin;
} DetectConvertData[]{
{"SPIR-V to SPIR-V", "flat.spv", "optimized.spv", "SpirvShaderConverter"},
{"SPIR-V assembly to SPIR-V", "a.spvasm", "b.spv", "SpirvAssemblyToSpirvShaderConverter"},
{"SPIR-V to GLSL", "phong.frag.spv", "phong.glsl", "SpirvToGlslShaderConverter"}
};
AnyConverterTest::AnyConverterTest() {
addTests({&AnyConverterTest::validate,
&AnyConverterTest::validateNotSupported,
&AnyConverterTest::validatePropagateFlags,
&AnyConverterTest::validatePropagateInputVersion,
&AnyConverterTest::validatePropagateOutputVersion,
&AnyConverterTest::convert,
&AnyConverterTest::convertNotSupported,
&AnyConverterTest::convertPropagateFlags,
&AnyConverterTest::convertPropagateInputVersion,
&AnyConverterTest::convertPropagateOutputVersion});
addInstancedTests({&AnyConverterTest::detectValidate},
Containers::arraySize(DetectValidateData));
addInstancedTests({&AnyConverterTest::detectConvert},
Containers::arraySize(DetectConvertData));
addTests({&AnyConverterTest::unknown});
/* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_INTERNAL_ASSERT_OUTPUT(_manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
/* Create the output directory if it doesn't exist yet */
CORRADE_INTERNAL_ASSERT_OUTPUT(Utility::Directory::mkpath(ANYSHADERCONVERTER_TEST_OUTPUT_DIR));
}
void AnyConverterTest::validate() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
const std::string filename = Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl");
/* Make it print a warning so we know it's doing something */
CORRADE_COMPARE(converter->validateFile(Stage::Fragment, filename),
std::make_pair(true, Utility::formatString("WARNING: {}:4: 'reserved__identifier' : identifiers containing consecutive underscores (\"__\") are reserved", filename)));
}
void AnyConverterTest::validateNotSupported() {
CORRADE_SKIP("No plugin that would support just validation exists.");
}
void AnyConverterTest::validatePropagateFlags() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
const std::string filename = Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl");
/* With this, the warning should turn into an error. The converter should
also print the verbose info. */
converter->setFlags(ConverterFlag::Verbose|ConverterFlag::WarningAsError);
std::ostringstream out;
Debug redirectDebug{&out};
CORRADE_COMPARE(converter->validateFile(Stage::Fragment, filename),
std::make_pair(false, Utility::formatString("WARNING: {}:4: 'reserved__identifier' : identifiers containing consecutive underscores (\"__\") are reserved", filename)));
CORRADE_COMPARE(out.str(),
"ShaderTools::AnyConverter::validateFile(): using GlslShaderConverter (provided by GlslangShaderConverter)\n");
}
void AnyConverterTest::validatePropagateInputVersion() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
/* This is an invalid version. We have to supply a valid file path because
the version gets checked in doValidateData(), called from
AbstractConverter::doValidateFile() with the file contents. */
converter->setInputFormat(Format::Glsl, "100");
std::ostringstream out;
Error redirectError{&out};
CORRADE_COMPARE(converter->validateFile(Stage::Fragment, Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")),
std::make_pair(false, ""));
CORRADE_COMPARE(out.str(),
"ShaderTools::GlslangConverter::validateData(): input format version should be one of supported GLSL #version strings but got 100\n");
}
void AnyConverterTest::validatePropagateOutputVersion() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
/* This is an invalid version. We have to supply a valid file path because
the version gets checked in doValidateData(), called from
AbstractConverter::doValidateFile() with the file contents. */
converter->setOutputFormat(Format::Spirv, "opengl4.0");
std::ostringstream out;
Error redirectError{&out};
CORRADE_COMPARE(converter->validateFile(Stage::Fragment, Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl")),
std::make_pair(false, ""));
CORRADE_COMPARE(out.str(),
"ShaderTools::GlslangConverter::validateData(): output format should be Unspecified but got ShaderTools::Format::Spirv\n");
}
void AnyConverterTest::convert() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
const std::string inputFilename = Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl");
const std::string outputFilename = Utility::Directory::join(ANYSHADERCONVERTER_TEST_OUTPUT_DIR, "file.spv");
Utility::Directory::rm(outputFilename);
CORRADE_VERIFY(!Utility::Directory::exists(outputFilename));
/* Make it print a warning so we know it's doing something */
std::ostringstream out;
Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertFileToFile(Stage::Fragment, inputFilename, outputFilename));
CORRADE_VERIFY(Utility::Directory::exists(outputFilename));
CORRADE_COMPARE(out.str(), Utility::formatString(
"ShaderTools::GlslangConverter::convertDataToData(): compilation succeeded with the following message:\n"
"WARNING: {}:4: 'reserved__identifier' : identifiers containing consecutive underscores (\"__\") are reserved\n", inputFilename));
}
void AnyConverterTest::convertNotSupported() {
CORRADE_SKIP("No plugin that would support just validation exists.");
}
void AnyConverterTest::convertPropagateFlags() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
const std::string filename = Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl");
/* With this, the warning should turn into an error. The converter should
also print the verbose info. */
converter->setFlags(ConverterFlag::Verbose|ConverterFlag::WarningAsError);
/* We have to supply a valid file path because the version gets checked in
doConvertDataToData(), called from AbstractConverter::doConvertFileToFile()
with the file contents. */
std::ostringstream out;
Debug redirectDebug{&out};
Error redirectError{&out};
CORRADE_VERIFY(!converter->convertFileToFile(Stage::Fragment, Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"), Utility::Directory::join(ANYSHADERCONVERTER_TEST_OUTPUT_DIR, "file.spv")));
CORRADE_COMPARE(out.str(), Utility::formatString(
"ShaderTools::AnyConverter::convertFileToFile(): using GlslToSpirvShaderConverter (provided by GlslangShaderConverter)\n"
"ShaderTools::GlslangConverter::convertDataToData(): compilation failed:\n"
"WARNING: {}:4: 'reserved__identifier' : identifiers containing consecutive underscores (\"__\") are reserved\n", filename));
}
void AnyConverterTest::convertPropagateInputVersion() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
/* This is an invalid version */
converter->setInputFormat(Format::Glsl, "100");
/* We have to supply a valid file path because the version gets checked in
doConvertDataToData(), called from AbstractConverter::doConvertFileToFile()
with the file contents. */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter->convertFileToFile(Stage::Fragment, Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"), Utility::Directory::join(ANYSHADERCONVERTER_TEST_OUTPUT_DIR, "file.spv")));
CORRADE_COMPARE(out.str(),
"ShaderTools::GlslangConverter::convertDataToData(): input format version should be one of supported GLSL #version strings but got 100\n");
}
void AnyConverterTest::convertPropagateOutputVersion() {
PluginManager::Manager<AbstractConverter> manager{MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR};
#ifdef ANYSHADERCONVERTER_PLUGIN_FILENAME
CORRADE_VERIFY(manager.load(ANYSHADERCONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.load("GlslangShaderConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("GlslangShaderConverter plugin can't be loaded.");
Containers::Pointer<AbstractConverter> converter = manager.instantiate("AnyShaderConverter");
/* This is an invalid version */
converter->setOutputFormat(Format::Spirv, "opengl4.0");
/* We have to supply a valid file path because the version gets checked in
doConvertDataToData(), called from AbstractConverter::doConvertFileToFile()
with the file contents. */
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter->convertFileToFile(Stage::Fragment, Utility::Directory::join(ANYSHADERCONVERTER_TEST_DIR, "file.glsl"), Utility::Directory::join(ANYSHADERCONVERTER_TEST_OUTPUT_DIR, "file.spv")));
CORRADE_COMPARE(out.str(),
"ShaderTools::GlslangConverter::convertDataToData(): output format version target should be opengl4.5 or vulkanX.Y but got opengl4.0\n");
}
void AnyConverterTest::detectValidate() {
auto&& data = DetectValidateData[testCaseInstanceId()];
setTestCaseDescription(data.name);
Containers::Pointer<AbstractConverter> converter = _manager.instantiate("AnyShaderConverter");
std::ostringstream out;
Error redirectError{&out};
CORRADE_COMPARE(converter->validateFile({}, data.filename),
std::make_pair(false, ""));
#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\n"
"ShaderTools::AnyConverter::validateFile(): cannot load the {0} plugin\n", data.plugin));
#else
CORRADE_COMPARE(out.str(), Utility::formatString(
"PluginManager::Manager::load(): plugin {0} was not found\n"
"ShaderTools::AnyConverter::validateFile(): cannot load the {0} plugin\n", data.plugin));
#endif
}
void AnyConverterTest::detectConvert() {
auto&& data = DetectConvertData[testCaseInstanceId()];
setTestCaseDescription(data.name);
Containers::Pointer<AbstractConverter> converter = _manager.instantiate("AnyShaderConverter");
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter->convertFileToFile({}, data.from, Utility::Directory::join(ANYSHADERCONVERTER_TEST_OUTPUT_DIR, data.to)));
#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\n"
"ShaderTools::AnyConverter::convertFileToFile(): cannot load the {0} plugin\n", data.plugin));
#else
CORRADE_COMPARE(out.str(), Utility::formatString(
"PluginManager::Manager::load(): plugin {0} was not found\n"
"ShaderTools::AnyConverter::convertFileToFile(): cannot load the {0} plugin\n", data.plugin));
#endif
}
void AnyConverterTest::unknown() {
std::ostringstream output;
Error redirectError{&output};
Containers::Pointer<AbstractConverter> converter = _manager.instantiate("AnyShaderConverter");
CORRADE_COMPARE(converter->validateFile({}, "dead.cg"),
std::make_pair(false, ""));
CORRADE_COMPARE(output.str(), "ShaderTools::AnyConverter::validateFile(): cannot determine the format of dead.cg\n");
}
}}}}
CORRADE_TEST_MAIN(Magnum::ShaderTools::Test::AnyConverterTest)

65
src/MagnumPlugins/AnyShaderConverter/Test/CMakeLists.txt

@ -0,0 +1,65 @@
#
# This file is part of Magnum.
#
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
# 2020 Vladimír Vondruš <mosra@centrum.cz>
#
# 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(ANYSHADERCONVERTER_TEST_DIR ".")
set(ANYSHADERCONVERTER_TEST_OUTPUT_DIR "write")
else()
set(ANYSHADERCONVERTER_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(ANYSHADERCONVERTER_TEST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
# CMake before 3.8 has broken $<TARGET_FILE*> 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(ANYSHADERCONVERTER_PLUGIN_FILENAME $<TARGET_FILE:AnyShaderConverter>)
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}/$<CONFIG>/configure.h
INPUT ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in)
corrade_add_test(AnyShaderConverterTest AnyConverterTest.cpp
LIBRARIES MagnumShaderTools
FILES file.glsl)
target_include_directories(AnyShaderConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(BUILD_PLUGINS_STATIC)
target_link_libraries(AnyShaderConverterTest PRIVATE AnyShaderConverter)
else()
# So the plugins get properly built when building the test
add_dependencies(AnyShaderConverterTest AnyShaderConverter)
endif()
set_target_properties(AnyShaderConverterTest PROPERTIES FOLDER "MagnumPlugins/AnyShaderConverter/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(AnyShaderConverterTest PROPERTIES ENABLE_EXPORTS ON)
endif()

42
src/MagnumPlugins/AnyShaderConverter/Test/configure.h.cmake

@ -0,0 +1,42 @@
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020 Vladimír Vondruš <mosra@centrum.cz>
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 ANYSHADERCONVERTER_PLUGIN_FILENAME "${ANYSHADERCONVERTER_PLUGIN_FILENAME}"
#define ANYSHADERCONVERTER_TEST_DIR "${ANYSHADERCONVERTER_TEST_DIR}"
#define ANYSHADERCONVERTER_TEST_OUTPUT_DIR "${ANYSHADERCONVERTER_TEST_OUTPUT_DIR}"
#ifdef CORRADE_TARGET_WINDOWS
#ifdef CORRADE_IS_DEBUG_BUILD
#define MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SHADERCONVERTER_DEBUG_BINARY_INSTALL_DIR}"
#else
#define MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SHADERCONVERTER_RELEASE_BINARY_INSTALL_DIR}"
#endif
#else
#ifdef CORRADE_IS_DEBUG_BUILD
#define MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SHADERCONVERTER_DEBUG_LIBRARY_INSTALL_DIR}"
#else
#define MAGNUM_PLUGINS_SHADERCONVERTER_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${MAGNUM_PLUGINS_SHADERCONVERTER_RELEASE_LIBRARY_INSTALL_DIR}"
#endif
#endif

6
src/MagnumPlugins/AnyShaderConverter/Test/file.glsl

@ -0,0 +1,6 @@
#version 140
void main() {
float reserved__identifier = 3.0;
gl_FragColor = vec4(reserved__identifier);
}

26
src/MagnumPlugins/AnyShaderConverter/configure.h.cmake

@ -0,0 +1,26 @@
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020 Vladimír Vondruš <mosra@centrum.cz>
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_ANYSHADERCONVERTER_BUILD_STATIC

35
src/MagnumPlugins/AnyShaderConverter/importStaticPlugin.cpp

@ -0,0 +1,35 @@
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020 Vladimír Vondruš <mosra@centrum.cz>
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/AnyShaderConverter/configure.h"
#ifdef MAGNUM_ANYSHADERCONVERTER_BUILD_STATIC
#include <Corrade/PluginManager/AbstractManager.h>
static int magnumAnyShaderConverterStaticImporter() {
CORRADE_PLUGIN_IMPORT(AnyShaderConverter)
return 1;
} CORRADE_AUTOMATIC_INITIALIZER(magnumAnyShaderConverterStaticImporter)
#endif

4
src/MagnumPlugins/CMakeLists.txt

@ -54,6 +54,10 @@ if(WITH_ANYSCENEIMPORTER)
add_subdirectory(AnySceneImporter)
endif()
if(WITH_ANYSHADERCONVERTER)
add_subdirectory(AnyShaderConverter)
endif()
if(WITH_MAGNUMFONT)
add_subdirectory(MagnumFont)
endif()

Loading…
Cancel
Save