diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-02-03 12:41:47 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-02-03 12:42:33 +0100 |
commit | e1b3347da56110563324b7b1afb0c38a9d172732 (patch) | |
tree | 38d079a599e2fb352ab0eda5fefe12585f015b60 /src/MinedMap.cpp | |
parent | b3c1a9be2f0c3011ae1249573d04a8bdc72f1e8f (diff) | |
download | MinedMap-e1b3347da56110563324b7b1afb0c38a9d172732.tar MinedMap-e1b3347da56110563324b7b1afb0c38a9d172732.zip |
Start mipmapping infrastructure
Diffstat (limited to 'src/MinedMap.cpp')
-rw-r--r-- | src/MinedMap.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/MinedMap.cpp b/src/MinedMap.cpp index 2cd90d4..bf6f4fb 100644 --- a/src/MinedMap.cpp +++ b/src/MinedMap.cpp @@ -35,6 +35,7 @@ #include <cstring> #include <cstdlib> #include <iostream> +#include <system_error> #include <sys/types.h> @@ -46,8 +47,7 @@ #include <unistd.h> -using namespace MinedMap; - +namespace MinedMap { static const size_t DIM = World::Region::SIZE*World::Chunk::SIZE; @@ -85,7 +85,7 @@ static void doRegion(const std::string &input, const std::string &output) { uint32_t image[DIM*DIM] = {}; World::Region::visitChunks(input.c_str(), [&image] (size_t X, size_t Z, const World::Chunk *chunk) { addChunk(image, X, Z, chunk); }); - writePNG(tmpfile.c_str(), image, DIM, DIM); + PNG::write(tmpfile.c_str(), reinterpret_cast<const uint8_t*>(image), DIM, DIM); struct timespec times[2] = {instat.st_mtim, instat.st_mtim}; if (utimensat(AT_FDCWD, tmpfile.c_str(), times, 0) < 0) @@ -116,7 +116,21 @@ static bool checkFilename(const char *name, int *x, int *z) { } +static void makeDir(const std::string &name) { + if (mkdir(name.c_str(), 0777) < 0 && errno != EEXIST) + throw std::system_error(errno, std::generic_category(), "unable to create directory " + name); +} + +static void makeMipmaps(const std::string &outputdir, const Info &info) { +} + +} + + int main(int argc, char *argv[]) { + using namespace MinedMap; + + if (argc < 3) { std::fprintf(stderr, "Usage: %s <data directory> <output directory>\n", argv[0]); return 1; @@ -126,6 +140,9 @@ int main(int argc, char *argv[]) { std::string regiondir = inputdir + "/region"; std::string outputdir(argv[2]); + std::string regionoutdir = outputdir + "/0"; + + makeDir(regionoutdir); DIR *dir = opendir(regiondir.c_str()); if (!dir) { @@ -144,7 +161,7 @@ int main(int argc, char *argv[]) { info.addRegion(x, z); std::string name(entry->d_name); - doRegion(regiondir + "/" + name, outputdir + "/" + name.substr(0, name.length()-3) + "png"); + doRegion(regiondir + "/" + name, regionoutdir + "/" + name.substr(0, name.length()-3) + "png"); } closedir(dir); @@ -152,6 +169,8 @@ int main(int argc, char *argv[]) { World::Level level((inputdir + "/level.dat").c_str()); info.setSpawn(level.getSpawn()); + makeMipmaps(outputdir, info); + info.writeJSON((outputdir + "/info.json").c_str()); return 0; |