VOXELFORMAT: removed Format::load

master
Martin Gerhardy 2022-05-19 19:47:36 +02:00
parent 7beda6d3fc
commit 8806f7bae4
6 changed files with 44 additions and 33 deletions

View File

@ -113,15 +113,6 @@ void Format::calcMinsMaxs(const voxel::Region& region, const glm::ivec3 &maxSize
Log::debug("maxs(%i:%i:%i)", maxs.x, maxs.y, maxs.z);
}
voxel::RawVolume* Format::load(const core::String &filename, io::SeekableReadStream& stream) {
SceneGraph sceneGraph;
if (!loadGroups(filename, stream, sceneGraph)) {
return nullptr;
}
const SceneGraph::MergedVolumePalette &merged = sceneGraph.merge();
return merged.first;
}
size_t Format::loadPalette(const core::String &filename, io::SeekableReadStream& stream, voxel::Palette &palette) {
return 0;
}

View File

@ -75,10 +75,6 @@ public:
* @brief If the format supports multiple layers or groups, this method will give them to you as single volumes
*/
virtual bool loadGroups(const core::String &filename, io::SeekableReadStream& stream, SceneGraph& sceneGraph) = 0;
/**
* @brief Merge the loaded volumes into one. The returned memory is yours.
*/
virtual voxel::RawVolume* load(const core::String &filename, io::SeekableReadStream& stream);
virtual bool saveGroups(const SceneGraph& sceneGraph, const core::String &filename, io::SeekableWriteStream& stream) = 0;
virtual bool save(const voxel::RawVolume* volume, const core::String &filename, io::SeekableWriteStream& stream);
};

View File

@ -51,7 +51,7 @@ void AbstractVoxFormatTest::testFirstAndLastPaletteIndex(const core::String &fil
io::BufferedReadWriteStream stream(10 * 1024 * 1024);
ASSERT_TRUE(format->save(&volume, filename, stream));
stream.seek(0);
std::unique_ptr<voxel::RawVolume> loaded(format->load(filename, stream));
std::unique_ptr<voxel::RawVolume> loaded(load(filename, stream, *format));
ASSERT_NE(nullptr, loaded);
EXPECT_TRUE(volumeComparator(volume, *loaded, false, includingRegion)) << "Volumes differ: " << volume << *loaded;
}
@ -64,7 +64,7 @@ void AbstractVoxFormatTest::testFirstAndLastPaletteIndexConversion(Format &srcFo
io::BufferedReadWriteStream srcFormatStream(10 * 1024 * 1024);
EXPECT_TRUE(srcFormat.save(&original, destFilename, srcFormatStream)) << "Could not save " << destFilename;
srcFormatStream.seek(0);
std::unique_ptr<voxel::RawVolume> origReloaded(srcFormat.load(destFilename, srcFormatStream));
std::unique_ptr<voxel::RawVolume> origReloaded(load(destFilename, srcFormatStream, srcFormat));
if (includingRegion) {
ASSERT_EQ(original.region(), origReloaded->region());
}
@ -73,7 +73,7 @@ void AbstractVoxFormatTest::testFirstAndLastPaletteIndexConversion(Format &srcFo
io::BufferedReadWriteStream stream(10 * 1024 * 1024);
EXPECT_TRUE(destFormat.save(origReloaded.get(), destFilename, stream)) << "Could not save " << destFilename;
stream.seek(0);
std::unique_ptr<voxel::RawVolume> loaded(destFormat.load(destFilename, stream));
std::unique_ptr<voxel::RawVolume> loaded(load(destFilename, stream, destFormat));
ASSERT_NE(nullptr, loaded) << "Could not load " << destFilename;
if (includingRegion) {
ASSERT_EQ(original.region(), loaded->region());
@ -96,10 +96,10 @@ void AbstractVoxFormatTest::testRGB(voxel::RawVolume* volume) {
EXPECT_EQ(voxel::VoxelType::Generic, volume->voxel( 9, 0, 12).getMaterial());
EXPECT_EQ(voxel::VoxelType::Generic, volume->voxel( 9, 0, 19).getMaterial());
EXPECT_EQ(245, volume->voxel( 0, 0, 0).getColor()) << "Expected to get the palette index 0";
EXPECT_EQ(245, volume->voxel(31, 0, 0).getColor()) << "Expected to get the palette index 0";
EXPECT_EQ(245, volume->voxel(31, 0, 31).getColor()) << "Expected to get the palette index 0";
EXPECT_EQ(245, volume->voxel( 0, 0, 31).getColor()) << "Expected to get the palette index 0";
EXPECT_EQ(245, volume->voxel( 0, 0, 0).getColor()) << "Expected to get the palette index 245";
EXPECT_EQ(245, volume->voxel(31, 0, 0).getColor()) << "Expected to get the palette index 245";
EXPECT_EQ(245, volume->voxel(31, 0, 31).getColor()) << "Expected to get the palette index 245";
EXPECT_EQ(245, volume->voxel( 0, 0, 31).getColor()) << "Expected to get the palette index 245";
EXPECT_EQ( 1, volume->voxel( 0, 31, 0).getColor()) << "Expected to get the palette index 1";
EXPECT_EQ( 1, volume->voxel(31, 31, 0).getColor()) << "Expected to get the palette index 1";
@ -112,17 +112,19 @@ void AbstractVoxFormatTest::testRGB(voxel::RawVolume* volume) {
}
void AbstractVoxFormatTest::testLoadSaveAndLoad(const core::String& srcFilename, Format &srcFormat, const core::String& destFilename, Format &destFormat, bool includingColor, bool includingRegion) {
std::unique_ptr<voxel::RawVolume> src(load(srcFilename, srcFormat));
ASSERT_TRUE(src.get() != nullptr);
voxelformat::SceneGraph sceneGraph;
EXPECT_TRUE(loadGroups(srcFilename, srcFormat, sceneGraph));
io::BufferedReadWriteStream stream(10 * 1024 * 1024);
EXPECT_TRUE(destFormat.save(src.get(), destFilename, stream)) << "Could not save " << destFilename;
EXPECT_TRUE(destFormat.saveGroups(sceneGraph, destFilename, stream)) << "Could not save " << destFilename;
stream.seek(0);
std::unique_ptr<voxel::RawVolume> loaded(destFormat.load(destFilename, stream));
std::unique_ptr<voxel::RawVolume> loaded(load(destFilename, stream, destFormat));
ASSERT_NE(nullptr, loaded) << "Could not load " << destFilename;
SceneGraph::MergedVolumePalette merged = sceneGraph.merge();
std::unique_ptr<voxel::RawVolume> src(merged.first);
if (includingRegion) {
ASSERT_EQ(src->region(), loaded->region());
}
EXPECT_TRUE(volumeComparator(*src.get(), *loaded, includingColor, includingRegion)) << "Volumes differ: " << *src.get() << *loaded;
EXPECT_TRUE(volumeComparator(*src, *loaded, includingColor, includingRegion)) << "Volumes differ: " << *src << *loaded;
}
void AbstractVoxFormatTest::testSaveMultipleLayers(const core::String &filename, Format *format) {
@ -235,7 +237,7 @@ void AbstractVoxFormatTest::testSaveLoadVoxel(const core::String &filename, Form
#endif
readStream->seek(0);
std::unique_ptr<voxel::RawVolume> loaded(format->load(filename, *readStream));
std::unique_ptr<voxel::RawVolume> loaded(load(filename, *readStream, *format));
ASSERT_NE(nullptr, loaded);
EXPECT_EQ(original, *loaded);
}

View File

@ -12,6 +12,7 @@
#include "io/Filesystem.h"
#include "core/Var.h"
#include "core/GameConfig.h"
#include "voxelformat/SceneGraph.h"
namespace voxelformat {
@ -44,14 +45,31 @@ protected:
return file;
}
voxel::RawVolume* load(const core::String& filename, Format& format) {
const io::FilePtr& file = open(filename);
if (!file->validHandle()) {
voxel::RawVolume* load(const core::String& filename, io::SeekableReadStream& stream, Format& format) {
SceneGraph sceneGraph;
if (!format.loadGroups(filename, stream, sceneGraph)) {
return nullptr;
}
const SceneGraph::MergedVolumePalette &merged = sceneGraph.merge();
return merged.first;
}
voxel::RawVolume* load(const core::String& filename, Format& format) {
SceneGraph sceneGraph;
if (!loadGroups(filename, format, sceneGraph)) {
return nullptr;
}
const SceneGraph::MergedVolumePalette &merged = sceneGraph.merge();
return merged.first;
}
bool loadGroups(const core::String& filename, Format& format, voxelformat::SceneGraph &sceneGraph) {
const io::FilePtr& file = open(filename);
if (!file->validHandle()) {
return false;
}
io::FileStream stream(file);
voxel::RawVolume* v = format.load(filename, stream);
return v;
return format.loadGroups(filename, stream, sceneGraph);
}
int loadPalette(const core::String& filename, Format& format, voxel::Palette &palette) {

View File

@ -154,7 +154,7 @@ TEST_F(VoxFormatTest, testSave) {
EXPECT_TRUE(f.save(loadedVolume, fileSave->name(), sstream));
const io::FilePtr &fileLoadAfterSave = open("magicavoxel-save.vox");
io::FileStream stream2(fileLoadAfterSave);
voxel::RawVolume *savedVolume = f.load(fileLoadAfterSave->name(), stream2);
voxel::RawVolume *savedVolume = load(fileLoadAfterSave->name(), stream2, f);
EXPECT_NE(nullptr, savedVolume) << "Could not load saved vox file";
if (savedVolume) {
EXPECT_EQ(*savedVolume, *loadedVolume);

View File

@ -12,6 +12,7 @@
#include "voxel/Voxel.h"
#include "voxel/tests/TestHelper.h"
#include "voxelformat/QBFormat.h"
#include "voxelformat/SceneGraph.h"
#include "voxelgenerator/ShapeGenerator.h"
#include "voxelutil/VolumeVisitor.h"
@ -34,7 +35,10 @@ protected:
const io::FilePtr& file = io::filesystem()->open(filename);
ASSERT_TRUE(file) << "Can't open " << filename;
io::FileStream stream(file);
voxel::RawVolume* v = format.load(file->fileName(), stream);
voxelformat::SceneGraph sceneGraph;
ASSERT_TRUE(format.loadGroups(file->fileName(), stream, sceneGraph));
voxelformat::SceneGraph::MergedVolumePalette merged = sceneGraph.merge();
voxel::RawVolume* v = merged.first;
ASSERT_NE(nullptr, v) << "Can't load " << filename;
EXPECT_EQ(*v, *_volume);
delete v;