Browse Source

Adapt plugins to the AbstractImporter interface change.

pull/240/head
Vladimír Vondruš 5 years ago
parent
commit
e871cabfa6
  1. 21
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp
  2. 2
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h
  3. 2
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  4. 5
      src/MagnumPlugins/ObjImporter/ObjImporter.cpp
  5. 2
      src/MagnumPlugins/ObjImporter/ObjImporter.h
  6. 1
      src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp
  7. 13
      src/MagnumPlugins/TgaImporter/TgaImporter.cpp
  8. 2
      src/MagnumPlugins/TgaImporter/TgaImporter.h

21
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp

@ -153,13 +153,14 @@ void AnyImageImporter::doOpenFile(const std::string& filename) {
_in = std::move(importer); _in = std::move(importer);
} }
void AnyImageImporter::doOpenData(Containers::ArrayView<const char> data) { void AnyImageImporter::doOpenData(Containers::Array<char>&& data, DataFlags) {
using namespace Containers::Literals; using namespace Containers::Literals;
CORRADE_INTERNAL_ASSERT(manager()); CORRADE_INTERNAL_ASSERT(manager());
/* So we can use the convenient hasSuffix() API */ /* So we can use the convenient hasSuffix() API */
const Containers::StringView dataString = data; const Containers::ArrayView<const char> dataView = data;
const Containers::StringView dataString = dataView;
std::string plugin; std::string plugin;
/* https://github.com/BinomialLLC/basis_universal/blob/7d784c728844c007d8c95d63231f7adcc0f65364/transcoder/basisu_file_headers.h#L78 */ /* https://github.com/BinomialLLC/basis_universal/blob/7d784c728844c007d8c95d63231f7adcc0f65364/transcoder/basisu_file_headers.h#L78 */
@ -193,22 +194,22 @@ void AnyImageImporter::doOpenData(Containers::ArrayView<const char> data) {
plugin = "TiffImporter"; plugin = "TiffImporter";
/* https://github.com/file/file/blob/d04de269e0b06ccd0a7d1bf4974fed1d75be7d9e/magic/Magdir/images#L18-L22 /* https://github.com/file/file/blob/d04de269e0b06ccd0a7d1bf4974fed1d75be7d9e/magic/Magdir/images#L18-L22
TGAs are a complete guesswork, so try after everything else fails. */ TGAs are a complete guesswork, so try after everything else fails. */
else if([data]() { else if([dataView]() {
/* TGA header is 18 bytes */ /* TGA header is 18 bytes */
if(data.size() < 18) return false; if(dataView.size() < 18) return false;
/* Third byte (image type) must be one of these */ /* Third byte (image type) must be one of these */
if(data[2] != 1 && data[2] != 2 && data[2] != 3 && if(dataView[2] != 1 && dataView[2] != 2 && dataView[2] != 3 &&
data[2] != 9 && data[2] != 10 && data[2] != 11) return false; dataView[2] != 9 && dataView[2] != 10 && dataView[2] != 11) return false;
/* If image type is 1 or 9, second byte (colormap type) must be 1 */ /* If image type is 1 or 9, second byte (colormap type) must be 1 */
if((data[2] == 1 || data[2] == 9) && data[1] != 1) return false; if((dataView[2] == 1 || dataView[2] == 9) && dataView[1] != 1) return false;
/* ... and 0 otherwise */ /* ... and 0 otherwise */
if(data[2] != 1 && data[2] != 9 && data[1] != 0) return false; if(dataView[2] != 1 && dataView[2] != 9 && dataView[1] != 0) return false;
/* Colormap index (unsigned short, byte 3+4) should be 0 */ /* Colormap index (unsigned short, byte 3+4) should be 0 */
if(data[3] != 0 && data[4] != 0) return false; if(dataView[3] != 0 && dataView[4] != 0) return false;
/* Probably TGA, heh. Or random memory. */ /* Probably TGA, heh. Or random memory. */
return true; return true;
@ -279,4 +280,4 @@ Containers::Optional<ImageData3D> AnyImageImporter::doImage3D(const UnsignedInt
}} }}
CORRADE_PLUGIN_REGISTER(AnyImageImporter, Magnum::Trade::AnyImageImporter, CORRADE_PLUGIN_REGISTER(AnyImageImporter, Magnum::Trade::AnyImageImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.3.3") "cz.mosra.magnum.Trade.AbstractImporter/0.3.4")

2
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h

@ -178,7 +178,7 @@ class MAGNUM_ANYIMAGEIMPORTER_EXPORT AnyImageImporter: public AbstractImporter {
MAGNUM_ANYIMAGEIMPORTER_LOCAL bool doIsOpened() const override; MAGNUM_ANYIMAGEIMPORTER_LOCAL bool doIsOpened() const override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL void doClose() override; MAGNUM_ANYIMAGEIMPORTER_LOCAL void doClose() override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenFile(const std::string& filename) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenFile(const std::string& filename) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::ArrayView<const char> data) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::Array<char>&& data, DataFlags dataFlags) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override; MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DLevelCount(UnsignedInt id) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DLevelCount(UnsignedInt id) override;

2
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -261,4 +261,4 @@ Containers::Optional<ImageData3D> AnySceneImporter::doImage3D(const UnsignedInt
}} }}
CORRADE_PLUGIN_REGISTER(AnySceneImporter, Magnum::Trade::AnySceneImporter, CORRADE_PLUGIN_REGISTER(AnySceneImporter, Magnum::Trade::AnySceneImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.3.3") "cz.mosra.magnum.Trade.AbstractImporter/0.3.4")

5
src/MagnumPlugins/ObjImporter/ObjImporter.cpp

@ -106,8 +106,9 @@ void ObjImporter::doOpenFile(const std::string& filename) {
parseMeshNames(); parseMeshNames();
} }
void ObjImporter::doOpenData(Containers::ArrayView<const char> data) { void ObjImporter::doOpenData(Containers::Array<char>&& data, DataFlags) {
_file.reset(new File); _file.reset(new File);
/** @todo ARGH MY EYES what is this cursed thing, burn it to the ground */
_file->in.reset(new std::istringstream{{data.begin(), data.size()}}); _file->in.reset(new std::istringstream{{data.begin(), data.size()}});
parseMeshNames(); parseMeshNames();
@ -486,4 +487,4 @@ Containers::Optional<MeshData> ObjImporter::doMesh(UnsignedInt id, UnsignedInt)
}} }}
CORRADE_PLUGIN_REGISTER(ObjImporter, Magnum::Trade::ObjImporter, CORRADE_PLUGIN_REGISTER(ObjImporter, Magnum::Trade::ObjImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.3.3") "cz.mosra.magnum.Trade.AbstractImporter/0.3.4")

2
src/MagnumPlugins/ObjImporter/ObjImporter.h

@ -115,7 +115,7 @@ class MAGNUM_OBJIMPORTER_EXPORT ObjImporter: public AbstractImporter {
MAGNUM_OBJIMPORTER_LOCAL ImporterFeatures doFeatures() const override; MAGNUM_OBJIMPORTER_LOCAL ImporterFeatures doFeatures() const override;
MAGNUM_OBJIMPORTER_LOCAL bool doIsOpened() const override; MAGNUM_OBJIMPORTER_LOCAL bool doIsOpened() const override;
MAGNUM_OBJIMPORTER_LOCAL void doOpenData(Containers::ArrayView<const char> data) override; MAGNUM_OBJIMPORTER_LOCAL void doOpenData(Containers::Array<char>&& data, DataFlags dataFlags) override;
MAGNUM_OBJIMPORTER_LOCAL void doOpenFile(const std::string& filename) override; MAGNUM_OBJIMPORTER_LOCAL void doOpenFile(const std::string& filename) override;
MAGNUM_OBJIMPORTER_LOCAL void doClose() override; MAGNUM_OBJIMPORTER_LOCAL void doClose() override;

1
src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp

@ -59,6 +59,7 @@ struct TgaImporterTest: TestSuite::Tester {
void rleTooLarge(); void rleTooLarge();
/* no openData() as all tests use openData() and openFile() is used below */
void openTwice(); void openTwice();
void importTwice(); void importTwice();

13
src/MagnumPlugins/TgaImporter/TgaImporter.cpp

@ -50,7 +50,7 @@ bool TgaImporter::doIsOpened() const { return _in; }
void TgaImporter::doClose() { _in = nullptr; } void TgaImporter::doClose() { _in = nullptr; }
void TgaImporter::doOpenData(const Containers::ArrayView<const char> data) { void TgaImporter::doOpenData(Containers::Array<char>&& data, const DataFlags dataFlags) {
/* Because here we're copying the data and using the _in to check if file /* Because here we're copying the data and using the _in to check if file
is opened, having them nullptr would mean openData() would fail without is opened, having them nullptr would mean openData() would fail without
any error message. It's not possible to do this check on the importer any error message. It's not possible to do this check on the importer
@ -63,8 +63,13 @@ void TgaImporter::doOpenData(const Containers::ArrayView<const char> data) {
return; return;
} }
_in = Containers::Array<char>{NoInit, data.size()}; /* Ttake over the existing array or copy the data if we can't */
Utility::copy(data, _in); if(dataFlags & DataFlag::Owned) {
_in = std::move(data);
} else {
_in = Containers::Array<char>{NoInit, data.size()};
Utility::copy(data, _in);
}
} }
UnsignedInt TgaImporter::doImage2DCount() const { return 1; } UnsignedInt TgaImporter::doImage2DCount() const { return 1; }
@ -204,4 +209,4 @@ Containers::Optional<ImageData2D> TgaImporter::doImage2D(UnsignedInt, UnsignedIn
}} }}
CORRADE_PLUGIN_REGISTER(TgaImporter, Magnum::Trade::TgaImporter, CORRADE_PLUGIN_REGISTER(TgaImporter, Magnum::Trade::TgaImporter,
"cz.mosra.magnum.Trade.AbstractImporter/0.3.3") "cz.mosra.magnum.Trade.AbstractImporter/0.3.4")

2
src/MagnumPlugins/TgaImporter/TgaImporter.h

@ -112,7 +112,7 @@ class MAGNUM_TGAIMPORTER_EXPORT TgaImporter: public AbstractImporter {
private: private:
ImporterFeatures MAGNUM_TGAIMPORTER_LOCAL doFeatures() const override; ImporterFeatures MAGNUM_TGAIMPORTER_LOCAL doFeatures() const override;
bool MAGNUM_TGAIMPORTER_LOCAL doIsOpened() const override; bool MAGNUM_TGAIMPORTER_LOCAL doIsOpened() const override;
void MAGNUM_TGAIMPORTER_LOCAL doOpenData(Containers::ArrayView<const char> data) override; void MAGNUM_TGAIMPORTER_LOCAL doOpenData(Containers::Array<char>&& data, DataFlags dataFlags) override;
void MAGNUM_TGAIMPORTER_LOCAL doClose() override; void MAGNUM_TGAIMPORTER_LOCAL doClose() override;
UnsignedInt MAGNUM_TGAIMPORTER_LOCAL doImage2DCount() const override; UnsignedInt MAGNUM_TGAIMPORTER_LOCAL doImage2DCount() const override;
Containers::Optional<ImageData2D> MAGNUM_TGAIMPORTER_LOCAL doImage2D(UnsignedInt id, UnsignedInt level) override; Containers::Optional<ImageData2D> MAGNUM_TGAIMPORTER_LOCAL doImage2D(UnsignedInt id, UnsignedInt level) override;

Loading…
Cancel
Save