Browse Source

AnyImageConverter: support KTX2 also in 3D and 2D/3D levels code paths.

And prefere to use it onver OpenEXR in most AnyImage{Converter,Importer}
tests, unless the test really needs something that only OpenEXR has
(such as the verbose output for threads or configuration that needs to
be set on both export and import to make the import succeed).
pull/542/merge
Vladimír Vondruš 4 years ago
parent
commit
1f33071b3c
  1. 6
      src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp
  2. 147
      src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp
  3. 6
      src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt
  4. 2
      src/MagnumPlugins/AnyImageConverter/Test/configure.h.cmake
  5. BIN
      src/MagnumPlugins/AnyImageImporter/Test/3d.ktx2
  6. 10
      src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp
  7. 10
      src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt
  8. 2
      src/MagnumPlugins/AnyImageImporter/Test/configure.h.cmake
  9. BIN
      src/MagnumPlugins/AnyImageImporter/Test/cube.exr

6
src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp

@ -144,6 +144,8 @@ bool AnyImageConverter::doConvertToFile(const ImageView3D& image, const Containe
Containers::StringView plugin;
if(normalized.hasSuffix(".exr"_s))
plugin = "OpenExrImageConverter"_s;
else if(normalized.hasSuffix(".ktx2"_s))
plugin = "KtxImageConverter"_s;
else {
Error{} << "Trade::AnyImageConverter::convertToFile(): cannot determine the format of" << filename << "for a 3D image";
return false;
@ -223,6 +225,8 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const ImageV
Containers::StringView plugin;
if(normalized.hasSuffix(".exr"_s))
plugin = "OpenExrImageConverter"_s;
else if(normalized.hasSuffix(".ktx2"_s))
plugin = "KtxImageConverter"_s;
else {
Error{} << "Trade::AnyImageConverter::convertToFile(): cannot determine the format of" << filename << "for a multi-level 2D image";
return false;
@ -266,6 +270,8 @@ bool AnyImageConverter::doConvertToFile(const Containers::ArrayView<const ImageV
Containers::StringView plugin;
if(normalized.hasSuffix(".exr"_s))
plugin = "OpenExrImageConverter"_s;
else if(normalized.hasSuffix(".ktx2"_s))
plugin = "KtxImageConverter"_s;
else {
Error{} << "Trade::AnyImageConverter::convertToFile(): cannot determine the format of" << filename << "for a multi-level 3D image";
return false;

147
src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp

@ -157,6 +157,7 @@ constexpr struct {
const char* plugin;
} Detect3DData[]{
{"EXR", "file.exr", "OpenExrImageConverter"},
{"KTX2", "file.ktx2", "KtxImageConverter"},
/* Have at least one test case with uppercase */
{"EXR uppercase", "FIL~1.EXR", "OpenExrImageConverter"}
};
@ -167,6 +168,7 @@ constexpr struct {
const char* plugin;
} DetectLevels2DData[]{
{"EXR", "file.exr", "OpenExrImageConverter"},
{"KTX2", "file.ktx2", "KtxImageConverter"},
/* Have at least one test case with uppercase */
{"EXR uppercase", "FIL~1.EXR", "OpenExrImageConverter"}
};
@ -177,6 +179,7 @@ constexpr struct {
const char* plugin;
} DetectLevels3DData[]{
{"EXR", "file.exr", "OpenExrImageConverter"},
{"KTX2", "file.ktx2", "KtxImageConverter"},
/* Have at least one test case with uppercase */
{"EXR uppercase", "FIL~1.EXR", "OpenExrImageConverter"}
};
@ -346,20 +349,20 @@ void AnyImageConverterTest::convert3D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "cube.exr");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "3d.ktx2");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
/* Well, this is in fact the same as propagateConfiguration3D() but we
can't really do much else. */
converter->configuration().setValue("envmap", "cube");
CORRADE_VERIFY(converter->convertToFile(ImageCube, filename));
CORRADE_VERIFY(Utility::Directory::exists(filename));
CORRADE_VERIFY(converter->convertToFile(Image3D, filename));
/* Compare to an expected output to ensure we actually saved the file
including the metadata. This also doubles as a generator for the
3d.exr file that AnyImageImporterTest uses. */
CORRADE_COMPARE_AS(filename, KTX_3D_FILE, TestSuite::Compare::File);
}
void AnyImageConverterTest::convertCompressed1D() {
@ -384,10 +387,10 @@ void AnyImageConverterTest::convertLevels2D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "output.exr");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "levels-2d.ktx2");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
@ -396,7 +399,7 @@ void AnyImageConverterTest::convertLevels2D() {
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
/* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({Image2DFloat}, filename));
CORRADE_VERIFY(converter->convertToFile({Image2D}, filename));
CORRADE_VERIFY(Utility::Directory::exists(filename));
}
@ -406,21 +409,19 @@ void AnyImageConverterTest::convertLevels3D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "cube.exr");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "levels-3d.ktx2");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
/* Just test that the exported file exists */
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
/* Well, this is in fact the same as propagateConfigurationLevels3D() but
we can't really do much else. */
converter->configuration().setValue("envmap", "cube");
/* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({ImageCube}, filename));
CORRADE_VERIFY(converter->convertToFile({Image3D}, filename));
CORRADE_VERIFY(Utility::Directory::exists(filename));
}
@ -582,8 +583,8 @@ void AnyImageConverterTest::unknown3D() {
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter->convertToFile(Image3D, "image.ktx2"));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): cannot determine the format of image.ktx2 for a 3D image\n");
CORRADE_VERIFY(!converter->convertToFile(Image3D, "image.dds"));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): cannot determine the format of image.dds for a 3D image\n");
}
void AnyImageConverterTest::unknownCompressed1D() {
@ -627,8 +628,8 @@ void AnyImageConverterTest::unknownLevels2D() {
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter->convertToFile({Image2D}, "image.ktx2"));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): cannot determine the format of image.ktx2 for a multi-level 2D image\n");
CORRADE_VERIFY(!converter->convertToFile({Image2D}, "image.dds"));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): cannot determine the format of image.dds for a multi-level 2D image\n");
}
void AnyImageConverterTest::unknownLevels3D() {
@ -636,8 +637,8 @@ void AnyImageConverterTest::unknownLevels3D() {
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!converter->convertToFile({Image3D}, "image.ktx2"));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): cannot determine the format of image.ktx2 for a multi-level 3D image\n");
CORRADE_VERIFY(!converter->convertToFile({Image3D}, "image.dds"));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): cannot determine the format of image.dds for a multi-level 3D image\n");
}
void AnyImageConverterTest::unknownCompressedLevels1D() {
@ -868,7 +869,8 @@ void AnyImageConverterTest::propagateConfiguration2D() {
converter->configuration().setValue("depth", "height");
CORRADE_VERIFY(converter->convertToFile(Image2DFloat, filename));
/* Compare to an expected output to ensure the custom channels names were
used */
used. This also doubles as a generator for the
depth32f-custom-channels.exr file that AnyImageImporterTest uses. */
CORRADE_COMPARE_AS(filename, EXR_FILE, TestSuite::Compare::File);
}
@ -878,23 +880,20 @@ void AnyImageConverterTest::propagateConfiguration3D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "cube.exr");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "custom-writer-3d.ktx2");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
/* This should be enough to test -- 3D images can be saved only if this
option is set */
converter->configuration().setValue("envmap", "cube");
CORRADE_VERIFY(converter->convertToFile(ImageCube, filename));
/* Compare to an expected output to ensure we actually saved the file
including the metadata. This also doubles as a generator for the
cube.exr file that AnyImageImporterTest uses. */
CORRADE_COMPARE_AS(filename, EXR_CUBE_FILE, TestSuite::Compare::File);
converter->configuration().setValue("writerName", "Yello this did Magnum!");
CORRADE_VERIFY(converter->convertToFile(Image3D, filename));
CORRADE_VERIFY(Utility::Directory::exists(filename));
/** @todo clean up once Directory::readString() returns our String */
CORRADE_VERIFY(Containers::StringView{Containers::ArrayView<const char>(Utility::Directory::read(filename))}.contains("KTXwriter\0Yello this did Magnum!"));
}
void AnyImageConverterTest::propagateConfigurationUnknown1D() {
@ -921,18 +920,17 @@ void AnyImageConverterTest::propagateConfigurationUnknown3D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
/* Just test that the exported file exists */
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("envmap", "cube");
converter->configuration().setValue("noSuchOption", "isHere");
std::ostringstream out;
Warning redirectWarning{&out};
CORRADE_VERIFY(converter->convertToFile(ImageCube, Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "output.exr")));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by OpenExrImageConverter\n");
CORRADE_VERIFY(converter->convertToFile(Image3D, Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "3d.ktx2")));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n");
}
void AnyImageConverterTest::propagateConfigurationCompressed1D() {
@ -969,25 +967,22 @@ void AnyImageConverterTest::propagateConfigurationLevels2D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "depth32f-custom-channels.exr");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "custom-writer-2d.ktx2");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("layer", "left");
converter->configuration().setValue("depth", "height");
converter->configuration().setValue("writerName", "Yello this did Magnum!");
/* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. For
OpenExrImageConverter both single and list are the same code path so we
can reuse the same expected file. */
CORRADE_VERIFY(converter->convertToFile({Image2DFloat}, filename));
/* Compare to an expected output to ensure the custom channels names were
used */
CORRADE_COMPARE_AS(filename, EXR_FILE, TestSuite::Compare::File);
still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({Image2D}, filename));
CORRADE_VERIFY(Utility::Directory::exists(filename));
/** @todo clean up once Directory::readString() returns our String */
CORRADE_VERIFY(Containers::StringView{Containers::ArrayView<const char>(Utility::Directory::read(filename))}.contains("KTXwriter\0Yello this did Magnum!"));
}
void AnyImageConverterTest::propagateConfigurationLevels3D() {
@ -996,25 +991,22 @@ void AnyImageConverterTest::propagateConfigurationLevels3D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "cube.exr");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "custom-writer-3d.ktx2");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
/* This should be enough to test -- 3D images can be saved only if this
option is set */
converter->configuration().setValue("envmap", "cube");
converter->configuration().setValue("writerName", "Yello this did Magnum!");
/* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. For
OpenExrImageConverter both single and list are the same code path so we
can reuse the same expected file. */
CORRADE_VERIFY(converter->convertToFile({ImageCube}, filename));
/* Compare to an expected output to ensure we actually saved the file */
CORRADE_COMPARE_AS(filename, EXR_CUBE_FILE, TestSuite::Compare::File);
still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({Image3D}, filename));
CORRADE_VERIFY(Utility::Directory::exists(filename));
/** @todo clean up once Directory::readString() returns our String */
CORRADE_VERIFY(Containers::StringView{Containers::ArrayView<const char>(Utility::Directory::read(filename))}.contains("KTXwriter\0Yello this did Magnum!"));
}
void AnyImageConverterTest::propagateConfigurationUnknownLevels1D() {
@ -1027,13 +1019,8 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels2D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
const std::string filename = Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "depth32f-custom-channels.exr");
if(Utility::Directory::exists(filename))
CORRADE_VERIFY(Utility::Directory::rm(filename));
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("noSuchOption", "isHere");
@ -1042,8 +1029,8 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels2D() {
Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({Image2DFloat}, Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "output.exr")));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by OpenExrImageConverter\n");
CORRADE_VERIFY(converter->convertToFile({Image2D}, Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "2d.ktx2")));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n");
}
void AnyImageConverterTest::propagateConfigurationUnknownLevels3D() {
@ -1052,20 +1039,18 @@ void AnyImageConverterTest::propagateConfigurationUnknownLevels3D() {
CORRADE_VERIFY(manager.load(ANYIMAGECONVERTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImageConverter plugin can't be loaded.");
if(manager.loadState("KtxImageConverter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImageConverter plugin can't be loaded.");
/* Just test that the exported file exists */
Containers::Pointer<AbstractImageConverter> converter = manager.instantiate("AnyImageConverter");
converter->configuration().setValue("envmap", "cube");
converter->configuration().setValue("noSuchOption", "isHere");
std::ostringstream out;
Warning redirectWarning{&out};
/* Using the list API even though there's just one image, which should
still trigger the correct code path for AnyImageConverter. */
CORRADE_VERIFY(converter->convertToFile({ImageCube}, Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "output.exr")));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by OpenExrImageConverter\n");
CORRADE_VERIFY(converter->convertToFile({Image3D}, Utility::Directory::join(ANYIMAGECONVERTER_TEST_OUTPUT_DIR, "3d.ktx2")));
CORRADE_COMPARE(out.str(), "Trade::AnyImageConverter::convertToFile(): option noSuchOption not recognized by KtxImageConverter\n");
}
void AnyImageConverterTest::propagateConfigurationCompressedLevels1D() {

6
src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt

@ -29,12 +29,12 @@ find_package(Threads REQUIRED)
if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID)
set(ANYIMAGECONVERTER_TEST_OUTPUT_DIR "write")
set(KTX_3D_FILE 3d.ktx2)
set(EXR_FILE depth32f-custom-channels.exr)
set(EXR_CUBE_FILE cube.exr)
else()
set(ANYIMAGECONVERTER_TEST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(KTX_3D_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnyImageImporter/Test/3d.ktx2)
set(EXR_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnyImageImporter/Test/depth32f-custom-channels.exr)
set(EXR_CUBE_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnyImageImporter/Test/cube.exr)
endif()
# CMake before 3.8 has broken $<TARGET_FILE*> expressions for iOS (see
@ -62,7 +62,7 @@ corrade_add_test(AnyImageConverterTest AnyImageConverterTest.cpp
# now
Threads::Threads
FILES
../../AnyImageImporter/Test/cube.exr
../../AnyImageImporter/Test/3d.ktx2
../../AnyImageImporter/Test/depth32f-custom-channels.exr)
target_include_directories(AnyImageConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(MAGNUM_ANYIMAGECONVERTER_BUILD_STATIC)

2
src/MagnumPlugins/AnyImageConverter/Test/configure.h.cmake

@ -26,8 +26,8 @@
#cmakedefine ANYIMAGECONVERTER_PLUGIN_FILENAME "${ANYIMAGECONVERTER_PLUGIN_FILENAME}"
#cmakedefine TGAIMAGECONVERTER_PLUGIN_FILENAME "${TGAIMAGECONVERTER_PLUGIN_FILENAME}"
#define ANYIMAGECONVERTER_TEST_OUTPUT_DIR "${ANYIMAGECONVERTER_TEST_OUTPUT_DIR}"
#define KTX_3D_FILE "${KTX_3D_FILE}"
#define EXR_FILE "${EXR_FILE}"
#define EXR_CUBE_FILE "${EXR_CUBE_FILE}"
#ifdef CORRADE_TARGET_WINDOWS
#ifdef CORRADE_IS_DEBUG_BUILD

BIN
src/MagnumPlugins/AnyImageImporter/Test/3d.ktx2

Binary file not shown.

10
src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp

@ -86,8 +86,8 @@ constexpr struct {
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&);
const char* messageFunctionName;
} Load3DData[]{
{"EXR", EXR_CUBE_FILE, nullptr, "OpenExrImporter"},
{"EXR data", EXR_CUBE_FILE, fileCallback, "OpenExrImporter"},
{"KTX2", KTX_3D_FILE, nullptr, "KtxImporter"},
{"KTX2 data", KTX_3D_FILE, fileCallback, "KtxImporter"},
};
constexpr struct {
@ -224,8 +224,8 @@ void AnyImageImporterTest::load3D() {
CORRADE_VERIFY(manager.load(ANYIMAGEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded);
#endif
if(manager.loadState("OpenExrImporter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("OpenExrImporter plugin can't be loaded.");
if(manager.loadState("KtxImporter") < PluginManager::LoadState::Loaded)
CORRADE_SKIP("KtxImporter plugin can't be loaded.");
Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnyImageImporter");
@ -238,7 +238,7 @@ void AnyImageImporterTest::load3D() {
/* Check only size, as it is good enough proof that it is working */
Containers::Optional<ImageData3D> image = importer->image3D(0);
CORRADE_VERIFY(image);
CORRADE_COMPARE(image->size(), (Vector3i{1, 1, 6}));
CORRADE_COMPARE(image->size(), (Vector3i{2, 3, 2}));
}
void AnyImageImporterTest::detect() {

10
src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt

@ -26,13 +26,13 @@
if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID)
set(TEST_FILE_DIR .)
set(TGA_FILE rgb.tga)
set(KTX_3D_FILE 3d.ktx2)
set(EXR_FILE depth32f-custom-channels.exr)
set(EXR_CUBE_FILE cube.exr)
else()
set(TEST_FILE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(TGA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/rgb.tga)
set(KTX_3D_FILE ${CMAKE_CURRENT_SOURCE_DIR}/3d.ktx2)
set(EXR_FILE ${CMAKE_CURRENT_SOURCE_DIR}/depth32f-custom-channels.exr)
set(EXR_CUBE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cube.exr)
endif()
# CMake before 3.8 has broken $<TARGET_FILE*> expressions for iOS (see
@ -55,10 +55,10 @@ file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/configure.h
corrade_add_test(AnyImageImporterTest AnyImageImporterTest.cpp
LIBRARIES MagnumTrade MagnumDebugTools
FILES
# Taken from OpenExrImporter tests
# Generated by AnyImageConverterTest::propagateConfiguration2D()
depth32f-custom-channels.exr
# Generated by AnyImageConverterTest::propagateConfiguration3D()
cube.exr
# Generated by AnyImageConverterTest::convert3D()
3d.ktx2
gray.jpg
image.exr
image.tiff

2
src/MagnumPlugins/AnyImageImporter/Test/configure.h.cmake

@ -27,8 +27,8 @@
#cmakedefine TGAIMPORTER_PLUGIN_FILENAME "${TGAIMPORTER_PLUGIN_FILENAME}"
#define TGA_FILE "${TGA_FILE}"
#define TEST_FILE_DIR "${TEST_FILE_DIR}"
#define KTX_3D_FILE "${KTX_3D_FILE}"
#define EXR_FILE "${EXR_FILE}"
#define EXR_CUBE_FILE "${EXR_CUBE_FILE}"
#ifdef CORRADE_TARGET_WINDOWS
#ifdef CORRADE_IS_DEBUG_BUILD

BIN
src/MagnumPlugins/AnyImageImporter/Test/cube.exr

Binary file not shown.
Loading…
Cancel
Save