Skip to content

Commit

Permalink
AnyImageConverter: support KTX2 also in 3D and 2D/3D levels code paths.
Browse files Browse the repository at this point in the history
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).
  • Loading branch information
mosra committed Dec 12, 2021
1 parent d2e3d6d commit 1f33071
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 96 deletions.
6 changes: 6 additions & 0 deletions src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
147 changes: 66 additions & 81 deletions src/MagnumPlugins/AnyImageConverter/Test/AnyImageConverterTest.cpp

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion src/MagnumPlugins/AnyImageConverter/Test/configure.h.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Binary file added src/MagnumPlugins/AnyImageImporter/Test/3d.ktx2
Binary file not shown.
10 changes: 5 additions & 5 deletions src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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");

Expand All @@ -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() {
Expand Down
10 changes: 5 additions & 5 deletions src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/MagnumPlugins/AnyImageImporter/Test/configure.h.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Binary file removed src/MagnumPlugins/AnyImageImporter/Test/cube.exr
Binary file not shown.

0 comments on commit 1f33071

Please sign in to comment.