return an already created object if necessary.legacy
| @@ -53,15 +53,32 @@ static bool RegisterAllLoaders() | |||||
| } | } | ||||
| /* | /* | ||||
| * Public Image class | |||||
| * Static image loader | |||||
| */ | */ | ||||
| Image::Image(char const *path) | |||||
| Image *Image::Create(char const *path) | |||||
| { | { | ||||
| /* Initialise loaders (see above) */ | |||||
| static bool init = RegisterAllLoaders(); | static bool init = RegisterAllLoaders(); | ||||
| UNUSED(init); | UNUSED(init); | ||||
| m_data = ImageLoader::Load(path); | |||||
| Image *ret = new Image(); | |||||
| ret->m_data = ImageLoader::Load(path); | |||||
| return ret; | |||||
| } | |||||
| void Image::Destroy(Image *img) | |||||
| { | |||||
| delete img; | |||||
| } | |||||
| /* | |||||
| * Public Image class | |||||
| */ | |||||
| Image::Image() | |||||
| : m_data(nullptr) | |||||
| { | |||||
| } | } | ||||
| ivec2 Image::GetSize() const | ivec2 Image::GetSize() const | ||||
| @@ -74,7 +91,7 @@ PixelFormat Image::GetFormat() const | |||||
| return m_data->m_format; | return m_data->m_format; | ||||
| } | } | ||||
| uint8_t * Image::GetData() const | |||||
| uint8_t *Image::GetData() const | |||||
| { | { | ||||
| return m_data->GetData(); | return m_data->GetData(); | ||||
| } | } | ||||
| @@ -24,14 +24,17 @@ namespace lol | |||||
| class Image | class Image | ||||
| { | { | ||||
| public: | public: | ||||
| Image(char const *path); | |||||
| ~Image(); | |||||
| static Image *Create(char const *path); | |||||
| static void Destroy(Image *img); | |||||
| ivec2 GetSize() const; | ivec2 GetSize() const; | ||||
| PixelFormat GetFormat() const; | PixelFormat GetFormat() const; | ||||
| uint8_t *GetData() const; | uint8_t *GetData() const; | ||||
| private: | private: | ||||
| Image(); | |||||
| ~Image(); | |||||
| class ImageData *m_data; | class ImageData *m_data; | ||||
| }; | }; | ||||
| @@ -70,7 +70,7 @@ TileSet::TileSet(char const *path, ivec2 size, ivec2 count) | |||||
| data->tiles = nullptr; | data->tiles = nullptr; | ||||
| data->m_texture = 0; | data->m_texture = 0; | ||||
| data->img = new Image(path); | |||||
| data->img = Image::Create(path); | |||||
| data->isize = data->img->GetSize(); | data->isize = data->img->GetSize(); | ||||
| if (count.x > 0 && count.y > 0) | if (count.x > 0 && count.y > 0) | ||||
| @@ -108,9 +108,15 @@ void TileSet::TickDraw(float seconds) | |||||
| if (IsDestroying()) | if (IsDestroying()) | ||||
| { | { | ||||
| if (data->img) | if (data->img) | ||||
| delete data->img; | |||||
| { | |||||
| Image::Destroy(data->img); | |||||
| data->img = nullptr; | |||||
| } | |||||
| else | else | ||||
| { | |||||
| delete data->m_texture; | delete data->m_texture; | ||||
| data->m_texture = nullptr; | |||||
| } | |||||
| } | } | ||||
| else if (data->img) | else if (data->img) | ||||
| { | { | ||||
| @@ -149,7 +155,7 @@ void TileSet::TickDraw(float seconds) | |||||
| if (pixels != data->img->GetData()) | if (pixels != data->img->GetData()) | ||||
| delete[] pixels; | delete[] pixels; | ||||
| delete data->img; | |||||
| Image::Destroy(data->img); | |||||
| data->img = nullptr; | data->img = nullptr; | ||||
| } | } | ||||
| } | } | ||||
| @@ -24,13 +24,13 @@ LOLUNIT_FIXTURE(ImageTest) | |||||
| { | { | ||||
| LOLUNIT_TEST(OpenImage) | LOLUNIT_TEST(OpenImage) | ||||
| { | { | ||||
| Image image("data/gradient.png"); | |||||
| Image *image = Image::Create("data/gradient.png"); | |||||
| ivec2 size = image.GetSize(); | |||||
| ivec2 size = image->GetSize(); | |||||
| LOLUNIT_ASSERT_EQUAL(size.x, 256); | LOLUNIT_ASSERT_EQUAL(size.x, 256); | ||||
| LOLUNIT_ASSERT_EQUAL(size.y, 16); | LOLUNIT_ASSERT_EQUAL(size.y, 16); | ||||
| uint8_t *data = image.GetData(); | |||||
| uint8_t *data = image->GetData(); | |||||
| LOLUNIT_ASSERT(data); | LOLUNIT_ASSERT(data); | ||||
| LOLUNIT_ASSERT_EQUAL((int)data[0], 0x00); | LOLUNIT_ASSERT_EQUAL((int)data[0], 0x00); | ||||
| @@ -40,6 +40,8 @@ LOLUNIT_FIXTURE(ImageTest) | |||||
| LOLUNIT_ASSERT_EQUAL((int)data[255 * 4 + 0], 0xff); | LOLUNIT_ASSERT_EQUAL((int)data[255 * 4 + 0], 0xff); | ||||
| LOLUNIT_ASSERT_EQUAL((int)data[255 * 4 + 1], 0xff); | LOLUNIT_ASSERT_EQUAL((int)data[255 * 4 + 1], 0xff); | ||||
| LOLUNIT_ASSERT_EQUAL((int)data[255 * 4 + 2], 0xff); | LOLUNIT_ASSERT_EQUAL((int)data[255 * 4 + 2], 0xff); | ||||
| Image::Destroy(image); | |||||
| } | } | ||||
| }; | }; | ||||