From 5d5f0a0aa22c99134c61da1ccbc4e10cb16f95fb Mon Sep 17 00:00:00 2001 From: Squareys Date: Fri, 23 Aug 2019 09:38:27 +0200 Subject: [PATCH] WIP Signed-off-by: Squareys --- .../BasisUniversal/CMakeLists.txt | 7 +++ .../BasisImporter/BasisImporter.h | 43 ++++++++++++++++++- .../BasisImporter/Test/BasisImporterTest.cpp | 3 ++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/MagnumExternal/BasisUniversal/CMakeLists.txt b/src/MagnumExternal/BasisUniversal/CMakeLists.txt index 8f161d6fd..c0d68cea1 100644 --- a/src/MagnumExternal/BasisUniversal/CMakeLists.txt +++ b/src/MagnumExternal/BasisUniversal/CMakeLists.txt @@ -35,3 +35,10 @@ target_link_libraries(basisu_encoder PRIVATE basisu::transcoder) add_library(basisu::encoder ALIAS basisu_encoder) target_compile_definitions(basisu_encoder PUBLIC BASISU_NO_ITERATOR_DEBUG_LEVEL) +if(BUILD_STATIC_PIC) + set_target_properties(basisu_transcoder + PROPERTIES POSITION_INDEPENDENT_CODE ON) + set_target_properties(basisu_encoder + PROPERTIES POSITION_INDEPENDENT_CODE ON) +endif() + diff --git a/src/MagnumPlugins/BasisImporter/BasisImporter.h b/src/MagnumPlugins/BasisImporter/BasisImporter.h index 5930ed6c7..377e2cfc9 100644 --- a/src/MagnumPlugins/BasisImporter/BasisImporter.h +++ b/src/MagnumPlugins/BasisImporter/BasisImporter.h @@ -80,6 +80,33 @@ component of the `MagnumPlugins` package and link to the `MagnumPlugins::BasisIm target. See @ref building-plugins, @ref plugins for more information. TODO: Anything else needed here? Example of how to config? See Assimp maybe + +# Target format + +Basis is a compressed format that is *transcoded* into a compressed GPU format. With +BasisImporter, this format can be chosen in different ways: + +@cpp + /\* Choose Ect1 target format *\/ + Containers::Pointer importer = + manager.instantiate("BasisImporterEct1"); + + /\* Choose Bc5 target format *\/ + Containers::Pointer importer = + manager.instantiate("BasisImporterBc5"); +@ce + +If you want to be able to change the target format dynamically, you may want to +set the "format" configuration of the plugin: + +@cpp + Containers::Pointer importer = + manager.instantiate("BasisImporter"); + importer->configuration().set("format", "Ect1"); +@ce + +If you link to the plugin you may also use @ref BasisImporter::setTargetFormat(). + */ class MAGNUM_BASISIMPORTER_EXPORT BasisImporter: public AbstractImporter { public: @@ -89,6 +116,20 @@ class MAGNUM_BASISIMPORTER_EXPORT BasisImporter: public AbstractImporter { /** @brief Plugin manager constructor */ explicit BasisImporter(PluginManager::AbstractManager& manager, const std::string& plugin); + /** + * @brief Set the importers target format + * @param format The format to transcode Basis files to + */ + void setTargetFormat(BasisTranscodingType format); + + /** + * @brief The importers target format + * @param format The format to transcode Basis files to + * + * See @ref basisimporter-target-format. + */ + BasisTranscodingType targetFormat(); + ~BasisImporter(); private: @@ -118,7 +159,7 @@ template<> struct ConfigurationValue { const Magnum::Trade::BasisTranscodingType& value, ConfigurationValueFlags) { - #define _c(value) case Magnum::Trade::BasisTranscodingType::##value: return #value; + #define _c(value) case Magnum::Trade::BasisTranscodingType::value: return #value; switch(value) { _c(Ect1) _c(Ect2) diff --git a/src/MagnumPlugins/BasisImporter/Test/BasisImporterTest.cpp b/src/MagnumPlugins/BasisImporter/Test/BasisImporterTest.cpp index 77617350b..9e282bb71 100644 --- a/src/MagnumPlugins/BasisImporter/Test/BasisImporterTest.cpp +++ b/src/MagnumPlugins/BasisImporter/Test/BasisImporterTest.cpp @@ -137,8 +137,11 @@ void BasisImporterTest::rgb() { Containers::Pointer importer = _manager.instantiate(pluginName); CORRADE_VERIFY(importer); + CORRADE_COMPARE(importer->configuration().value("format"), + instanceId == 0 ? "Ect1" : suffix); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(BASISIMPORTER_TEST_DIR, "rgb.basis"))); + /* Verify that everything is working the same way on second use */ Containers::Optional image = importer->image2D(0); CORRADE_VERIFY(image);