// // Lol Engine // // Copyright © 2009—2014 Benjamin “Touky” Huet // © 2010—2018 Sam Hocevar // // Lol Engine is free software. It comes without any warranty, to // the extent permitted by applicable law. You can redistribute it // and/or modify it under the terms of the Do What the Fuck You Want // to Public License, Version 2, as published by the WTFPL Task Force. // See http://www.wtfpl.net/ for more details. // #include #include #include "../../image/resource-private.h" namespace lol { /* * Image implementation class */ class ZedPaletteImageCodec : public ResourceCodec { public: virtual std::string GetName() { return ""; } virtual ResourceCodecData* Load(std::string const &path); virtual bool Save(std::string const &path, ResourceCodecData* data); }; DECLARE_IMAGE_CODEC(ZedPaletteImageCodec, 10) /* * Public Image class */ ResourceCodecData* ZedPaletteImageCodec::Load(std::string const &path) { if (!ends_with(path, ".pal")) return nullptr; File file; file.Open(path, FileAccess::Read, true); // Put file in memory long file_size = file.size(); array file_buffer; file_buffer.resize(file_size); file.Read((uint8_t*)&file_buffer[0], file_size); file.Close(); #if 0 //2D PALETTE int32_t tex_sqrt = (int32_t)lol::sqrt((float)file_size / 3); int32_t tex_size = 2; while (tex_size < tex_sqrt) tex_size <<= 1; auto data = new ResourceImageData(new image(ivec2(tex_size))); auto image = data->m_image; #else int32_t tex_sqrt = file_size / 3; int32_t tex_size = 2; while (tex_size < tex_sqrt) tex_size <<= 1; auto data = new ResourceImageData(new image(ivec2(tex_size, 1))); auto image = data->m_image; #endif u8vec4 *pixels = image->lock(); for (int i = 0; i < file_buffer.count();) { pixels->r = file_buffer[i++]; pixels->g = file_buffer[i++]; pixels->b = file_buffer[i++]; pixels->a = (i == 0) ? 0 : 255; ++pixels; } image->unlock(pixels); return data; } bool ZedPaletteImageCodec::Save(std::string const &path, ResourceCodecData* data) { UNUSED(path, data); /* FIXME: do we need to implement this? */ return true; } } /* namespace lol */