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);
}
void AnyImageImporter::doOpenData(Containers::ArrayView<const char> data) {
void AnyImageImporter::doOpenData(Containers::Array<char>&& data, DataFlags) {
using namespace Containers::Literals;
CORRADE_INTERNAL_ASSERT(manager());
/* 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;
/* 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";
/* https://github.com/file/file/blob/d04de269e0b06ccd0a7d1bf4974fed1d75be7d9e/magic/Magdir/images#L18-L22
TGAs are a complete guesswork, so try after everything else fails. */
else if([data]() {
else if([dataView]() {
/* 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 */
if(data[2] != 1 && data[2] != 2 && data[2] != 3 &&
data[2] != 9 && data[2] != 10 && data[2] != 11) return false;
if(dataView[2] != 1 && dataView[2] != 2 && dataView[2] != 3 &&
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((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 */
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 */
if(data[3] != 0 && data[4] != 0) return false;
if(dataView[3] != 0 && dataView[4] != 0) return false;
/* Probably TGA, heh. Or random memory. */
return true;
@ -279,4 +280,4 @@ Containers::Optional<ImageData3D> AnyImageImporter::doImage3D(const UnsignedInt
}}
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 void doClose() 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 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,
"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();
}
void ObjImporter::doOpenData(Containers::ArrayView<const char> data) {
void ObjImporter::doOpenData(Containers::Array<char>&& data, DataFlags) {
_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()}});
parseMeshNames();
@ -486,4 +487,4 @@ Containers::Optional<MeshData> ObjImporter::doMesh(UnsignedInt id, UnsignedInt)
}}
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 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 doClose() override;

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

@ -59,6 +59,7 @@ struct TgaImporterTest: TestSuite::Tester {
void rleTooLarge();
/* no openData() as all tests use openData() and openFile() is used below */
void openTwice();
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::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
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
@ -63,8 +63,13 @@ void TgaImporter::doOpenData(const Containers::ArrayView<const char> data) {
return;
}
_in = Containers::Array<char>{NoInit, data.size()};
Utility::copy(data, _in);
/* Ttake over the existing array or copy the data if we can't */
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; }
@ -204,4 +209,4 @@ Containers::Optional<ImageData2D> TgaImporter::doImage2D(UnsignedInt, UnsignedIn
}}
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:
ImporterFeatures MAGNUM_TGAIMPORTER_LOCAL doFeatures() 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;
UnsignedInt MAGNUM_TGAIMPORTER_LOCAL doImage2DCount() const override;
Containers::Optional<ImageData2D> MAGNUM_TGAIMPORTER_LOCAL doImage2D(UnsignedInt id, UnsignedInt level) override;

Loading…
Cancel
Save