From 6e2ff2b707555e408ba0d00528dde155b2d90d93 Mon Sep 17 00:00:00 2001 From: Pablo Escobar Date: Sat, 31 Jul 2021 01:39:40 +0200 Subject: [PATCH] AnyImageImporter: detect KTX2 --- src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp | 5 +++++ .../AnyImageImporter/Test/AnyImageImporterTest.cpp | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp index cf585340d..5ea0e53a0 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp @@ -84,6 +84,8 @@ void AnyImageImporter::doOpenFile(const std::string& filename) { plugin = "JpegImporter"; else if(Utility::String::endsWith(normalized, ".jp2")) plugin = "Jpeg2000Importer"; + else if(Utility::String::endsWith(normalized, ".ktx2")) + plugin = "KtxImporter"; else if(Utility::String::endsWith(normalized, ".mng")) plugin = "MngImporter"; else if(Utility::String::endsWith(normalized, ".pbm")) @@ -177,6 +179,9 @@ void AnyImageImporter::doOpenData(Containers::ArrayView data) { /* https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure */ else if(dataString.hasPrefix("\xff\xd8\xff"_s)) plugin = "JpegImporter"; + /* https://github.khronos.org/KTX-Specification/#_identifier */ + else if(dataString.hasPrefix("\xabKTX 20\xbb\r\n\x1a\n"_s)) + plugin = "KtxImporter"; /* https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header */ else if(dataString.hasPrefix("\x89PNG\x0d\x0a\x1a\x0a"_s)) plugin = "PngImporter"; diff --git a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp index 8e57cc9d2..db55ab2d9 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp +++ b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp @@ -91,6 +91,7 @@ constexpr struct { {"JPEG data", "gray.jpg", fileCallback, "JpegImporter"}, {"JPEG uppercase", "uppercase.JPG", nullptr, "JpegImporter"}, {"JPEG2000", "image.jp2", nullptr, "Jpeg2000Importer"}, + {"KTX", "image.ktx2", nullptr, "KtxImporter"}, {"EXR", "image.exr", nullptr, "OpenExrImporter"}, {"EXR data", "image.exr", fileCallback, "OpenExrImporter"}, {"HDR", "rgb.hdr", nullptr, "HdrImporter"}, @@ -123,7 +124,8 @@ const struct { {"just one zero byte", "\x00"_s, "00"}, {"DDS, but no space", "DDS!"_s, "44445321"}, {"TIFF, but too short", "II\x2a"_s, "49492a"}, - {"TIFF, but no zero byte", "MM\xff\x2a"_s, "4d4dff2a"} + {"TIFF, but no zero byte", "MM\xff\x2a"_s, "4d4dff2a"}, + {"KTX, but wrong version", "\xabKTX 30\xbb\r\n\x1a\n"_s, "ab4b5458"} }; constexpr struct {