From f69f346518f473f4f8fb13966e5831d105d1239c Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 7 Jun 2016 15:41:00 +0300 Subject: Move image class into image directory. --- src/resources/ambientlayer.cpp | 3 +- src/resources/atlas/atlasitem.h | 3 +- src/resources/atlas/atlasmanager.h | 2 +- src/resources/image.cpp | 499 ---------------------- src/resources/image.h | 247 ----------- src/resources/image/image.cpp | 499 ++++++++++++++++++++++ src/resources/image/image.h | 247 +++++++++++ src/resources/imageset.cpp | 2 +- src/resources/loaders/imageloader.cpp | 3 +- src/resources/loaders/imagesetloader.cpp | 3 +- src/resources/loaders/rescaledloader.cpp | 2 +- src/resources/loaders/subimageloader.cpp | 2 +- src/resources/loaders/subimagesetloader.cpp | 5 +- src/resources/map/mapitem.cpp | 2 +- src/resources/map/maplayer.cpp | 2 +- src/resources/mapreader.cpp | 3 +- src/resources/openglimagehelper.cpp | 4 +- src/resources/resourcemanager/resourcemanager.cpp | 2 +- src/resources/safeopenglimagehelper.cpp | 4 +- src/resources/sdl2imagehelper.cpp | 4 +- src/resources/sdl2softwareimagehelper.cpp | 2 +- src/resources/sdlimagehelper.cpp | 4 +- src/resources/sprite/animatedsprite.cpp | 3 +- src/resources/sprite/imagesprite.h | 2 +- src/resources/subimage.h | 2 +- src/resources/surfaceimagehelper.cpp | 4 +- 26 files changed, 781 insertions(+), 774 deletions(-) delete mode 100644 src/resources/image.cpp delete mode 100644 src/resources/image.h create mode 100644 src/resources/image/image.cpp create mode 100644 src/resources/image/image.h (limited to 'src/resources') diff --git a/src/resources/ambientlayer.cpp b/src/resources/ambientlayer.cpp index f75300367..fe8101eb4 100644 --- a/src/resources/ambientlayer.cpp +++ b/src/resources/ambientlayer.cpp @@ -25,9 +25,10 @@ #include "render/graphics.h" -#include "resources/image.h" #include "resources/imagehelper.h" +#include "resources/image/image.h" + #include "resources/loaders/rescaledloader.h" #include "debug.h" diff --git a/src/resources/atlas/atlasitem.h b/src/resources/atlas/atlasitem.h index 039000393..ae0c0d206 100644 --- a/src/resources/atlas/atlasitem.h +++ b/src/resources/atlas/atlasitem.h @@ -23,9 +23,10 @@ #ifdef USE_OPENGL -#include "resources/image.h" #include "resources/memorycounter.h" +#include "resources/image/image.h" + #include struct AtlasItem final : public MemoryCounter diff --git a/src/resources/atlas/atlasmanager.h b/src/resources/atlas/atlasmanager.h index 176e2f090..76fca7223 100644 --- a/src/resources/atlas/atlasmanager.h +++ b/src/resources/atlas/atlasmanager.h @@ -23,7 +23,7 @@ #ifdef USE_OPENGL -#include "resources/image.h" +#include "resources/image/image.h" #include "utils/stringvector.h" diff --git a/src/resources/image.cpp b/src/resources/image.cpp deleted file mode 100644 index 26322aed9..000000000 --- a/src/resources/image.cpp +++ /dev/null @@ -1,499 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2004-2009 The Mana World Development Team - * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2016 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "resources/image.h" - -#include "logger.h" - -#ifdef USE_OPENGL -#include "resources/openglimagehelper.h" -#endif // USE_OPENGL - -#include "resources/memorymanager.h" -#include "resources/sdlimagehelper.h" -#include "resources/subimage.h" - -#include "resources/resourcemanager/resourcemanager.h" - -#include "utils/sdlcheckutils.h" - -#ifdef USE_SDL2 -#include -#else // USE_SDL2 -#include -#endif // USE_SDL2 - -#include "debug.h" - -#ifdef USE_SDL2 -Image::Image(SDL_Texture *restrict const image, - const int width, const int height) : - Resource(), -#ifdef USE_OPENGL - mGLImage(0), - mTexWidth(0), - mTexHeight(0), -#endif - mBounds(), - mAlpha(1.0F), - mSDLSurface(nullptr), - mTexture(image), - mAlphaChannel(nullptr), - mAlphaCache(), - mLoaded(false), - mHasAlphaChannel(false), - mUseAlphaCache(false), - mIsAlphaVisible(true), - mIsAlphaCalculated(false) -{ -#ifdef DEBUG_IMAGES - logger->log("created image: %p", this); -#endif - - mBounds.x = 0; - mBounds.y = 0; - - if (mTexture) - { - mBounds.w = CAST_U16(width); - mBounds.h = CAST_U16(height); - - mLoaded = true; - } - else - { - logger->log("Image::Image(SDL_Texture *const image):" - " Couldn't load invalid Surface!"); - mBounds.w = 0; - mBounds.h = 0; - } -} -#endif - -Image::Image(SDL_Surface *restrict const image, const bool hasAlphaChannel0, - uint8_t *restrict const alphaChannel) : - Resource(), -#ifdef USE_OPENGL - mGLImage(0), - mTexWidth(0), - mTexHeight(0), -#endif - mBounds(), - mAlpha(1.0F), - mSDLSurface(image), -#ifdef USE_SDL2 - mTexture(nullptr), -#endif - mAlphaChannel(alphaChannel), - mAlphaCache(), - mLoaded(false), - mHasAlphaChannel(hasAlphaChannel0), - mUseAlphaCache(SDLImageHelper::mEnableAlphaCache), - mIsAlphaVisible(hasAlphaChannel0), - mIsAlphaCalculated(false) -{ -#ifdef DEBUG_IMAGES - logger->log("created image: %p", static_cast(this)); -#endif - - mBounds.x = 0; - mBounds.y = 0; - - if (mSDLSurface) - { - mBounds.w = CAST_U16(mSDLSurface->w); - mBounds.h = CAST_U16(mSDLSurface->h); - - mLoaded = true; - } - else - { - logger->log( - "Image::Image(SDL_Surface*): Couldn't load invalid Surface!"); - mBounds.w = 0; - mBounds.h = 0; - } -} - -#ifdef USE_OPENGL -Image::Image(const GLuint glimage, const int width, const int height, - const int texWidth, const int texHeight) : - Resource(), - mGLImage(glimage), - mTexWidth(texWidth), - mTexHeight(texHeight), - mBounds(), - mAlpha(1.0F), - mSDLSurface(nullptr), -#ifdef USE_SDL2 - mTexture(nullptr), -#endif - mAlphaChannel(nullptr), - mAlphaCache(), - mLoaded(false), - mHasAlphaChannel(true), - mUseAlphaCache(false), - mIsAlphaVisible(true), - mIsAlphaCalculated(false) -{ -#ifdef DEBUG_IMAGES - logger->log("created image: %p", static_cast(this)); -#endif - - mBounds.x = 0; - mBounds.y = 0; - mBounds.w = CAST_U16(width); - mBounds.h = CAST_U16(height); - - if (mGLImage) - { - mLoaded = true; - } - else - { - logger->log("Image::Image(GLuint*, ...):" - " Couldn't load invalid Surface!"); - } -} -#endif - -Image::~Image() -{ -#ifdef DEBUG_IMAGES - logger->log("delete image: %p", static_cast(this)); - logger->log(" %s, %s", mIdPath.c_str(), mSource.c_str()); -#endif - unload(); -} - -void Image::SDLCleanCache() -{ - for (std::map::iterator - i = mAlphaCache.begin(), i_end = mAlphaCache.end(); - i != i_end; ++i) - { - if (mSDLSurface != i->second) - resourceManager->scheduleDelete(i->second); - i->second = nullptr; - } - mAlphaCache.clear(); -} - -void Image::unload() -{ - mLoaded = false; - - if (mSDLSurface) - { - SDLCleanCache(); - // Free the image surface. - MSDL_FreeSurface(mSDLSurface); - mSDLSurface = nullptr; - - delete [] mAlphaChannel; - mAlphaChannel = nullptr; - } -#ifdef USE_SDL2 - if (mTexture) - { - SDL_DestroyTexture(mTexture); - mTexture = nullptr; - } -#endif - -#ifdef USE_OPENGL - if (mGLImage) - { - glDeleteTextures(1, &mGLImage); - mGLImage = 0; -#ifdef DEBUG_OPENGL_LEAKS - if (textures_count > 0) - textures_count --; -#endif - } -#endif -} - -bool Image::hasAlphaChannel() const -{ - if (mLoaded) - return mHasAlphaChannel; - -#ifdef USE_OPENGL - if (OpenGLImageHelper::mUseOpenGL != RENDER_SOFTWARE) - return true; -#endif - - return false; -} - -SDL_Surface *Image::getByAlpha(const float alpha) -{ - const std::map::const_iterator - it = mAlphaCache.find(alpha); - if (it != mAlphaCache.end()) - return (*it).second; - return nullptr; -} - -void Image::setAlpha(const float alpha) -{ - if (mAlpha == alpha || !ImageHelper::mEnableAlpha) - return; - - if (alpha < 0.0F || alpha > 1.0F) - return; - - if (mSDLSurface) - { - if (mUseAlphaCache) - { - SDL_Surface *surface = getByAlpha(mAlpha); - if (!surface) - { - if (mAlphaCache.size() > 100) - { -#ifdef DEBUG_ALPHA_CACHE - logger->log("cleanCache"); - for (std::map::const_iterator - i = mAlphaCache.begin(), i_end = mAlphaCache.end(); - i != i_end; ++i) - { - logger->log("alpha: " + toString(i->first)); - } -#endif - SDLCleanCache(); - } - surface = mSDLSurface; - if (surface) - mAlphaCache[mAlpha] = surface; - } - else - { - logger->log("cache bug"); - } - - surface = getByAlpha(alpha); - if (surface) - { - if (mSDLSurface == surface) - logger->log("bug"); - mAlphaCache.erase(alpha); - mSDLSurface = surface; - mAlpha = alpha; - return; - } - else - { - mSDLSurface = SDLImageHelper::SDLDuplicateSurface(mSDLSurface); - if (!mSDLSurface) - return; - } - } - - mAlpha = alpha; - - if (!mHasAlphaChannel) - { -#ifdef USE_SDL2 - SDL_SetSurfaceAlphaMod(mSDLSurface, - CAST_U8(255 * mAlpha)); -#else - // Set the alpha value this image is drawn at - SDL_SetAlpha(mSDLSurface, SDL_SRCALPHA, - CAST_U8(255 * mAlpha)); -#endif - } - else - { - if (SDL_MUSTLOCK(mSDLSurface)) - SDL_LockSurface(mSDLSurface); - - const int bx = mBounds.x; - const int by = mBounds.y; - const int bw = mBounds.w; - const int bh = mBounds.h; - const int bxw = bx + bw; - const int sw = mSDLSurface->w; - const int maxHeight = std::min(by + bh, mSDLSurface->h); - const int maxWidth = std::min(bxw, sw); - const int i1 = by * sw + bx; - const SDL_PixelFormat * const fmt = mSDLSurface->format; - const uint32_t amask = fmt->Amask; - const uint32_t invMask = ~fmt->Amask; - const uint8_t aloss = fmt->Aloss; - const uint8_t ashift = fmt->Ashift; - - if (!bx && bxw == sw) - { - const int i2 = (maxHeight - 1) * sw + maxWidth - 1; - for (int i = i1; i <= i2; i++) - { - const uint8_t sourceAlpha = mAlphaChannel[i]; - if (sourceAlpha > 0) - { - const uint8_t a = CAST_U8( - static_cast(sourceAlpha) * mAlpha); - - uint32_t c = (static_cast( - mSDLSurface->pixels))[i]; - c &= invMask; - c |= ((a >> aloss) << ashift & amask); - (static_cast(mSDLSurface->pixels))[i] = c; - } - } - } - else - { - for (int y = by; y < maxHeight; y ++) - { - const int idx = y * sw; - const int x1 = idx + bx; - const int x2 = idx + maxWidth; - for (int i = x1; i < x2; i ++) - { - const uint8_t sourceAlpha = mAlphaChannel[i]; - if (sourceAlpha > 0) - { - const uint8_t a = CAST_U8( - static_cast(sourceAlpha) * mAlpha); - - uint32_t c = (static_cast( - mSDLSurface->pixels))[i]; - c &= invMask; - c |= ((a >> aloss) << ashift & amask); - (static_cast( - mSDLSurface->pixels))[i] = c; - } - } - } - } - - if (SDL_MUSTLOCK(mSDLSurface)) - SDL_UnlockSurface(mSDLSurface); - } - } -#ifdef USE_SDL2 - else if (mTexture) - { - mAlpha = alpha; - SDL_SetTextureAlphaMod(mTexture, - CAST_U8(255 * mAlpha)); - } -#endif - else - { - mAlpha = alpha; - } -} - -Image* Image::SDLgetScaledImage(const int width, const int height) const -{ - // No scaling on incorrect new values. - if (width == 0 || height == 0) - return nullptr; - - // No scaling when there is ... no different given size ... - if (width == mBounds.w && height == mBounds.h) - return nullptr; - - Image* scaledImage = nullptr; - - if (mSDLSurface) - { - SDL_Surface *const scaledSurface = zoomSurface(mSDLSurface, - static_cast(width) / mBounds.w, - static_cast(height) / mBounds.h, - 1); - - // The load function takes care of the SDL<->OpenGL implementation - // and about freeing the given SDL_surface*. - if (scaledSurface) - { - scaledImage = imageHelper->loadSurface(scaledSurface); - MSDL_FreeSurface(scaledSurface); - } - } - return scaledImage; -} - -Image *Image::getSubImage(const int x, const int y, - const int width, const int height) -{ - // Create a new clipped sub-image -#ifdef USE_OPENGL - const RenderType mode = OpenGLImageHelper::mUseOpenGL; - if (mode == RENDER_NORMAL_OPENGL || - mode == RENDER_SAFE_OPENGL || - mode == RENDER_GLES_OPENGL || - mode == RENDER_GLES2_OPENGL || - mode == RENDER_MODERN_OPENGL) - { - return new SubImage(this, - mGLImage, - x, y, - width, height, - mTexWidth, mTexHeight); - } -#endif - -#ifdef USE_SDL2 -#ifndef USE_OPENGL - const RenderType mode = ImageHelper::mUseOpenGL; -#endif - if (mode == RENDER_SOFTWARE) - return new SubImage(this, mSDLSurface, x, y, width, height); - else - return new SubImage(this, mTexture, x, y, width, height); -#else - return new SubImage(this, mSDLSurface, x, y, width, height); -#endif -} - -void Image::SDLTerminateAlphaCache() -{ - SDLCleanCache(); - mUseAlphaCache = false; -} - -int Image::calcMemoryLocal() const -{ - // +++ this calculation can be wrong for SDL2 - int sz = static_cast(sizeof(Image) + - sizeof(std::map)) + - Resource::calcMemoryLocal(); - if (mSDLSurface) - { - sz += CAST_S32(mAlphaCache.size()) * - memoryManager.getSurfaceSize(mSDLSurface); - } - return sz; -} - -#ifdef USE_OPENGL -void Image::decRef() -{ - if (mGLImage && getRefCount() <= 1) - OpenGLImageHelper::invalidate(mGLImage); - Resource::decRef(); -} -#endif diff --git a/src/resources/image.h b/src/resources/image.h deleted file mode 100644 index 39492c360..000000000 --- a/src/resources/image.h +++ /dev/null @@ -1,247 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2004-2009 The Mana World Development Team - * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2016 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef RESOURCES_IMAGE_H -#define RESOURCES_IMAGE_H - -#include "localconsts.h" - -#include "enums/resources/imagetype.h" - -#include "resources/resource.h" - -#include - -#ifdef USE_OPENGL - -#ifdef ANDROID -#include -#else -#ifndef USE_SDL2 -#define GL_GLEXT_PROTOTYPES 1 -#endif -#include -#endif -#endif - -#ifdef USE_SDL2 -#include -#endif - -#include - -/** - * Defines a class for loading and storing images. - */ -class Image notfinal : public Resource -{ - friend class CompoundSprite; - friend class Graphics; - friend class ImageHelper; - friend class SDLGraphics; - friend class SDLImageHelper; - friend class SurfaceGraphics; -#ifdef USE_SDL2 - friend class SDL2SoftwareGraphics; - friend class SDL2SoftwareImageHelper; - friend class SurfaceImageHelper; -#endif - friend class TestLauncher; -#ifdef USE_OPENGL - friend class AtlasManager; - friend class MobileOpenGL2Graphics; - friend class MobileOpenGLGraphics; - friend class ModernOpenGLGraphics; - friend class NormalOpenGLGraphics; - friend class NullOpenGLGraphics; - friend class SafeOpenGLGraphics; - friend class OpenGLImageHelper; -#ifndef ANDROID - friend class SafeOpenGLImageHelper; -#endif // ANDROID -#endif // USE_OPENGL - - public: - A_DELETE_COPY(Image) - - /** - * Destructor. - */ - virtual ~Image(); - - /** - * Frees the resources created by SDL. - */ - void unload(); - - /** - * Tells is the image is loaded - */ - bool isLoaded() const A_WARN_UNUSED - { return mLoaded; } - - /** - * Returns the width of the image. - */ - inline int getWidth() const A_WARN_UNUSED A_INLINE - { return mBounds.w; } - - /** - * Returns the height of the image. - */ - inline int getHeight() const A_WARN_UNUSED A_INLINE - { return mBounds.h; } - - /** - * Tells if the image has got an alpha channel - * @return true if it's true, false otherwise. - */ - bool hasAlphaChannel() const A_WARN_UNUSED; - - /** - * Sets the alpha value of this image. - */ - virtual void setAlpha(const float alpha); - - /** - * Creates a new image with the desired clipping rectangle. - * - * @return NULL if creation failed and a valid - * object otherwise. - */ - virtual Image *getSubImage(const int x, const int y, - const int width, - const int height) A_WARN_UNUSED; - - - // SDL only public functions - - /** - * Gets an scaled instance of an image. - * - * @param width The desired width of the scaled image. - * @param height The desired height of the scaled image. - * - * @return A new Image* object. - */ - Image* SDLgetScaledImage(const int width, - const int height) const A_WARN_UNUSED; - - /** - * Get the alpha Channel of a SDL surface. - */ - uint8_t *SDLgetAlphaChannel() const A_WARN_UNUSED - { return mAlphaChannel; } - - void SDLCleanCache(); - - void SDLTerminateAlphaCache(); - -#ifdef USE_OPENGL - int getTextureWidth() const A_WARN_UNUSED - { return mTexWidth; } - - int getTextureHeight() const A_WARN_UNUSED - { return mTexHeight; } - - GLuint getGLImage() const A_WARN_UNUSED - { return mGLImage; } - - void decRef() override; - - GLuint mGLImage; - int mTexWidth; - int mTexHeight; -#endif - - bool isHasAlphaChannel() const A_WARN_UNUSED - { return mHasAlphaChannel; } - - bool isAlphaVisible() const A_WARN_UNUSED - { return mIsAlphaVisible; } - - void setAlphaVisible(const bool b) - { mIsAlphaVisible = b; } - - bool isAlphaCalculated() const A_WARN_UNUSED - { return mIsAlphaCalculated; } - - void setAlphaCalculated(const bool b) - { mIsAlphaCalculated = b; } - - SDL_Surface* getSDLSurface() - { return mSDLSurface; } - - int calcMemoryLocal() const override; - - virtual ImageTypeT getType() const - { return ImageType::Image; } - - SDL_Rect mBounds; - - float mAlpha; - - protected: - // ----------------------- - // SDL protected members - // ----------------------- - - /** SDL Constructor */ - Image(SDL_Surface *restrict const image, const bool hasAlphaChannel, - uint8_t *restrict const alphaChannel = nullptr); - -#ifdef USE_SDL2 - Image(SDL_Texture *restrict const image, - const int width, const int height); -#endif - - SDL_Surface *getByAlpha(const float alpha) A_WARN_UNUSED; - - SDL_Surface *mSDLSurface; -#ifdef USE_SDL2 - SDL_Texture *mTexture; -#endif - - /** Alpha Channel pointer used for 32bit based SDL surfaces */ - uint8_t *mAlphaChannel; - - std::map mAlphaCache; - - bool mLoaded; - bool mHasAlphaChannel; - bool mUseAlphaCache; - bool mIsAlphaVisible; - bool mIsAlphaCalculated; - - // ----------------------- - // OpenGL protected members - // ----------------------- -#ifdef USE_OPENGL - /** - * OpenGL Constructor. - */ - Image(const GLuint glimage, const int width, const int height, - const int texWidth, const int texHeight); -#endif -}; - -#endif // RESOURCES_IMAGE_H diff --git a/src/resources/image/image.cpp b/src/resources/image/image.cpp new file mode 100644 index 000000000..683129e7a --- /dev/null +++ b/src/resources/image/image.cpp @@ -0,0 +1,499 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "resources/image/image.h" + +#include "logger.h" + +#ifdef USE_OPENGL +#include "resources/openglimagehelper.h" +#endif // USE_OPENGL + +#include "resources/memorymanager.h" +#include "resources/sdlimagehelper.h" +#include "resources/subimage.h" + +#include "resources/resourcemanager/resourcemanager.h" + +#include "utils/sdlcheckutils.h" + +#ifdef USE_SDL2 +#include +#else // USE_SDL2 +#include +#endif // USE_SDL2 + +#include "debug.h" + +#ifdef USE_SDL2 +Image::Image(SDL_Texture *restrict const image, + const int width, const int height) : + Resource(), +#ifdef USE_OPENGL + mGLImage(0), + mTexWidth(0), + mTexHeight(0), +#endif + mBounds(), + mAlpha(1.0F), + mSDLSurface(nullptr), + mTexture(image), + mAlphaChannel(nullptr), + mAlphaCache(), + mLoaded(false), + mHasAlphaChannel(false), + mUseAlphaCache(false), + mIsAlphaVisible(true), + mIsAlphaCalculated(false) +{ +#ifdef DEBUG_IMAGES + logger->log("created image: %p", this); +#endif + + mBounds.x = 0; + mBounds.y = 0; + + if (mTexture) + { + mBounds.w = CAST_U16(width); + mBounds.h = CAST_U16(height); + + mLoaded = true; + } + else + { + logger->log("Image::Image(SDL_Texture *const image):" + " Couldn't load invalid Surface!"); + mBounds.w = 0; + mBounds.h = 0; + } +} +#endif + +Image::Image(SDL_Surface *restrict const image, const bool hasAlphaChannel0, + uint8_t *restrict const alphaChannel) : + Resource(), +#ifdef USE_OPENGL + mGLImage(0), + mTexWidth(0), + mTexHeight(0), +#endif + mBounds(), + mAlpha(1.0F), + mSDLSurface(image), +#ifdef USE_SDL2 + mTexture(nullptr), +#endif + mAlphaChannel(alphaChannel), + mAlphaCache(), + mLoaded(false), + mHasAlphaChannel(hasAlphaChannel0), + mUseAlphaCache(SDLImageHelper::mEnableAlphaCache), + mIsAlphaVisible(hasAlphaChannel0), + mIsAlphaCalculated(false) +{ +#ifdef DEBUG_IMAGES + logger->log("created image: %p", static_cast(this)); +#endif + + mBounds.x = 0; + mBounds.y = 0; + + if (mSDLSurface) + { + mBounds.w = CAST_U16(mSDLSurface->w); + mBounds.h = CAST_U16(mSDLSurface->h); + + mLoaded = true; + } + else + { + logger->log( + "Image::Image(SDL_Surface*): Couldn't load invalid Surface!"); + mBounds.w = 0; + mBounds.h = 0; + } +} + +#ifdef USE_OPENGL +Image::Image(const GLuint glimage, const int width, const int height, + const int texWidth, const int texHeight) : + Resource(), + mGLImage(glimage), + mTexWidth(texWidth), + mTexHeight(texHeight), + mBounds(), + mAlpha(1.0F), + mSDLSurface(nullptr), +#ifdef USE_SDL2 + mTexture(nullptr), +#endif + mAlphaChannel(nullptr), + mAlphaCache(), + mLoaded(false), + mHasAlphaChannel(true), + mUseAlphaCache(false), + mIsAlphaVisible(true), + mIsAlphaCalculated(false) +{ +#ifdef DEBUG_IMAGES + logger->log("created image: %p", static_cast(this)); +#endif + + mBounds.x = 0; + mBounds.y = 0; + mBounds.w = CAST_U16(width); + mBounds.h = CAST_U16(height); + + if (mGLImage) + { + mLoaded = true; + } + else + { + logger->log("Image::Image(GLuint*, ...):" + " Couldn't load invalid Surface!"); + } +} +#endif + +Image::~Image() +{ +#ifdef DEBUG_IMAGES + logger->log("delete image: %p", static_cast(this)); + logger->log(" %s, %s", mIdPath.c_str(), mSource.c_str()); +#endif + unload(); +} + +void Image::SDLCleanCache() +{ + for (std::map::iterator + i = mAlphaCache.begin(), i_end = mAlphaCache.end(); + i != i_end; ++i) + { + if (mSDLSurface != i->second) + resourceManager->scheduleDelete(i->second); + i->second = nullptr; + } + mAlphaCache.clear(); +} + +void Image::unload() +{ + mLoaded = false; + + if (mSDLSurface) + { + SDLCleanCache(); + // Free the image surface. + MSDL_FreeSurface(mSDLSurface); + mSDLSurface = nullptr; + + delete [] mAlphaChannel; + mAlphaChannel = nullptr; + } +#ifdef USE_SDL2 + if (mTexture) + { + SDL_DestroyTexture(mTexture); + mTexture = nullptr; + } +#endif + +#ifdef USE_OPENGL + if (mGLImage) + { + glDeleteTextures(1, &mGLImage); + mGLImage = 0; +#ifdef DEBUG_OPENGL_LEAKS + if (textures_count > 0) + textures_count --; +#endif + } +#endif +} + +bool Image::hasAlphaChannel() const +{ + if (mLoaded) + return mHasAlphaChannel; + +#ifdef USE_OPENGL + if (OpenGLImageHelper::mUseOpenGL != RENDER_SOFTWARE) + return true; +#endif + + return false; +} + +SDL_Surface *Image::getByAlpha(const float alpha) +{ + const std::map::const_iterator + it = mAlphaCache.find(alpha); + if (it != mAlphaCache.end()) + return (*it).second; + return nullptr; +} + +void Image::setAlpha(const float alpha) +{ + if (mAlpha == alpha || !ImageHelper::mEnableAlpha) + return; + + if (alpha < 0.0F || alpha > 1.0F) + return; + + if (mSDLSurface) + { + if (mUseAlphaCache) + { + SDL_Surface *surface = getByAlpha(mAlpha); + if (!surface) + { + if (mAlphaCache.size() > 100) + { +#ifdef DEBUG_ALPHA_CACHE + logger->log("cleanCache"); + for (std::map::const_iterator + i = mAlphaCache.begin(), i_end = mAlphaCache.end(); + i != i_end; ++i) + { + logger->log("alpha: " + toString(i->first)); + } +#endif + SDLCleanCache(); + } + surface = mSDLSurface; + if (surface) + mAlphaCache[mAlpha] = surface; + } + else + { + logger->log("cache bug"); + } + + surface = getByAlpha(alpha); + if (surface) + { + if (mSDLSurface == surface) + logger->log("bug"); + mAlphaCache.erase(alpha); + mSDLSurface = surface; + mAlpha = alpha; + return; + } + else + { + mSDLSurface = SDLImageHelper::SDLDuplicateSurface(mSDLSurface); + if (!mSDLSurface) + return; + } + } + + mAlpha = alpha; + + if (!mHasAlphaChannel) + { +#ifdef USE_SDL2 + SDL_SetSurfaceAlphaMod(mSDLSurface, + CAST_U8(255 * mAlpha)); +#else + // Set the alpha value this image is drawn at + SDL_SetAlpha(mSDLSurface, SDL_SRCALPHA, + CAST_U8(255 * mAlpha)); +#endif + } + else + { + if (SDL_MUSTLOCK(mSDLSurface)) + SDL_LockSurface(mSDLSurface); + + const int bx = mBounds.x; + const int by = mBounds.y; + const int bw = mBounds.w; + const int bh = mBounds.h; + const int bxw = bx + bw; + const int sw = mSDLSurface->w; + const int maxHeight = std::min(by + bh, mSDLSurface->h); + const int maxWidth = std::min(bxw, sw); + const int i1 = by * sw + bx; + const SDL_PixelFormat * const fmt = mSDLSurface->format; + const uint32_t amask = fmt->Amask; + const uint32_t invMask = ~fmt->Amask; + const uint8_t aloss = fmt->Aloss; + const uint8_t ashift = fmt->Ashift; + + if (!bx && bxw == sw) + { + const int i2 = (maxHeight - 1) * sw + maxWidth - 1; + for (int i = i1; i <= i2; i++) + { + const uint8_t sourceAlpha = mAlphaChannel[i]; + if (sourceAlpha > 0) + { + const uint8_t a = CAST_U8( + static_cast(sourceAlpha) * mAlpha); + + uint32_t c = (static_cast( + mSDLSurface->pixels))[i]; + c &= invMask; + c |= ((a >> aloss) << ashift & amask); + (static_cast(mSDLSurface->pixels))[i] = c; + } + } + } + else + { + for (int y = by; y < maxHeight; y ++) + { + const int idx = y * sw; + const int x1 = idx + bx; + const int x2 = idx + maxWidth; + for (int i = x1; i < x2; i ++) + { + const uint8_t sourceAlpha = mAlphaChannel[i]; + if (sourceAlpha > 0) + { + const uint8_t a = CAST_U8( + static_cast(sourceAlpha) * mAlpha); + + uint32_t c = (static_cast( + mSDLSurface->pixels))[i]; + c &= invMask; + c |= ((a >> aloss) << ashift & amask); + (static_cast( + mSDLSurface->pixels))[i] = c; + } + } + } + } + + if (SDL_MUSTLOCK(mSDLSurface)) + SDL_UnlockSurface(mSDLSurface); + } + } +#ifdef USE_SDL2 + else if (mTexture) + { + mAlpha = alpha; + SDL_SetTextureAlphaMod(mTexture, + CAST_U8(255 * mAlpha)); + } +#endif + else + { + mAlpha = alpha; + } +} + +Image* Image::SDLgetScaledImage(const int width, const int height) const +{ + // No scaling on incorrect new values. + if (width == 0 || height == 0) + return nullptr; + + // No scaling when there is ... no different given size ... + if (width == mBounds.w && height == mBounds.h) + return nullptr; + + Image* scaledImage = nullptr; + + if (mSDLSurface) + { + SDL_Surface *const scaledSurface = zoomSurface(mSDLSurface, + static_cast(width) / mBounds.w, + static_cast(height) / mBounds.h, + 1); + + // The load function takes care of the SDL<->OpenGL implementation + // and about freeing the given SDL_surface*. + if (scaledSurface) + { + scaledImage = imageHelper->loadSurface(scaledSurface); + MSDL_FreeSurface(scaledSurface); + } + } + return scaledImage; +} + +Image *Image::getSubImage(const int x, const int y, + const int width, const int height) +{ + // Create a new clipped sub-image +#ifdef USE_OPENGL + const RenderType mode = OpenGLImageHelper::mUseOpenGL; + if (mode == RENDER_NORMAL_OPENGL || + mode == RENDER_SAFE_OPENGL || + mode == RENDER_GLES_OPENGL || + mode == RENDER_GLES2_OPENGL || + mode == RENDER_MODERN_OPENGL) + { + return new SubImage(this, + mGLImage, + x, y, + width, height, + mTexWidth, mTexHeight); + } +#endif + +#ifdef USE_SDL2 +#ifndef USE_OPENGL + const RenderType mode = ImageHelper::mUseOpenGL; +#endif + if (mode == RENDER_SOFTWARE) + return new SubImage(this, mSDLSurface, x, y, width, height); + else + return new SubImage(this, mTexture, x, y, width, height); +#else + return new SubImage(this, mSDLSurface, x, y, width, height); +#endif +} + +void Image::SDLTerminateAlphaCache() +{ + SDLCleanCache(); + mUseAlphaCache = false; +} + +int Image::calcMemoryLocal() const +{ + // +++ this calculation can be wrong for SDL2 + int sz = static_cast(sizeof(Image) + + sizeof(std::map)) + + Resource::calcMemoryLocal(); + if (mSDLSurface) + { + sz += CAST_S32(mAlphaCache.size()) * + memoryManager.getSurfaceSize(mSDLSurface); + } + return sz; +} + +#ifdef USE_OPENGL +void Image::decRef() +{ + if (mGLImage && getRefCount() <= 1) + OpenGLImageHelper::invalidate(mGLImage); + Resource::decRef(); +} +#endif diff --git a/src/resources/image/image.h b/src/resources/image/image.h new file mode 100644 index 000000000..39492c360 --- /dev/null +++ b/src/resources/image/image.h @@ -0,0 +1,247 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef RESOURCES_IMAGE_H +#define RESOURCES_IMAGE_H + +#include "localconsts.h" + +#include "enums/resources/imagetype.h" + +#include "resources/resource.h" + +#include + +#ifdef USE_OPENGL + +#ifdef ANDROID +#include +#else +#ifndef USE_SDL2 +#define GL_GLEXT_PROTOTYPES 1 +#endif +#include +#endif +#endif + +#ifdef USE_SDL2 +#include +#endif + +#include + +/** + * Defines a class for loading and storing images. + */ +class Image notfinal : public Resource +{ + friend class CompoundSprite; + friend class Graphics; + friend class ImageHelper; + friend class SDLGraphics; + friend class SDLImageHelper; + friend class SurfaceGraphics; +#ifdef USE_SDL2 + friend class SDL2SoftwareGraphics; + friend class SDL2SoftwareImageHelper; + friend class SurfaceImageHelper; +#endif + friend class TestLauncher; +#ifdef USE_OPENGL + friend class AtlasManager; + friend class MobileOpenGL2Graphics; + friend class MobileOpenGLGraphics; + friend class ModernOpenGLGraphics; + friend class NormalOpenGLGraphics; + friend class NullOpenGLGraphics; + friend class SafeOpenGLGraphics; + friend class OpenGLImageHelper; +#ifndef ANDROID + friend class SafeOpenGLImageHelper; +#endif // ANDROID +#endif // USE_OPENGL + + public: + A_DELETE_COPY(Image) + + /** + * Destructor. + */ + virtual ~Image(); + + /** + * Frees the resources created by SDL. + */ + void unload(); + + /** + * Tells is the image is loaded + */ + bool isLoaded() const A_WARN_UNUSED + { return mLoaded; } + + /** + * Returns the width of the image. + */ + inline int getWidth() const A_WARN_UNUSED A_INLINE + { return mBounds.w; } + + /** + * Returns the height of the image. + */ + inline int getHeight() const A_WARN_UNUSED A_INLINE + { return mBounds.h; } + + /** + * Tells if the image has got an alpha channel + * @return true if it's true, false otherwise. + */ + bool hasAlphaChannel() const A_WARN_UNUSED; + + /** + * Sets the alpha value of this image. + */ + virtual void setAlpha(const float alpha); + + /** + * Creates a new image with the desired clipping rectangle. + * + * @return NULL if creation failed and a valid + * object otherwise. + */ + virtual Image *getSubImage(const int x, const int y, + const int width, + const int height) A_WARN_UNUSED; + + + // SDL only public functions + + /** + * Gets an scaled instance of an image. + * + * @param width The desired width of the scaled image. + * @param height The desired height of the scaled image. + * + * @return A new Image* object. + */ + Image* SDLgetScaledImage(const int width, + const int height) const A_WARN_UNUSED; + + /** + * Get the alpha Channel of a SDL surface. + */ + uint8_t *SDLgetAlphaChannel() const A_WARN_UNUSED + { return mAlphaChannel; } + + void SDLCleanCache(); + + void SDLTerminateAlphaCache(); + +#ifdef USE_OPENGL + int getTextureWidth() const A_WARN_UNUSED + { return mTexWidth; } + + int getTextureHeight() const A_WARN_UNUSED + { return mTexHeight; } + + GLuint getGLImage() const A_WARN_UNUSED + { return mGLImage; } + + void decRef() override; + + GLuint mGLImage; + int mTexWidth; + int mTexHeight; +#endif + + bool isHasAlphaChannel() const A_WARN_UNUSED + { return mHasAlphaChannel; } + + bool isAlphaVisible() const A_WARN_UNUSED + { return mIsAlphaVisible; } + + void setAlphaVisible(const bool b) + { mIsAlphaVisible = b; } + + bool isAlphaCalculated() const A_WARN_UNUSED + { return mIsAlphaCalculated; } + + void setAlphaCalculated(const bool b) + { mIsAlphaCalculated = b; } + + SDL_Surface* getSDLSurface() + { return mSDLSurface; } + + int calcMemoryLocal() const override; + + virtual ImageTypeT getType() const + { return ImageType::Image; } + + SDL_Rect mBounds; + + float mAlpha; + + protected: + // ----------------------- + // SDL protected members + // ----------------------- + + /** SDL Constructor */ + Image(SDL_Surface *restrict const image, const bool hasAlphaChannel, + uint8_t *restrict const alphaChannel = nullptr); + +#ifdef USE_SDL2 + Image(SDL_Texture *restrict const image, + const int width, const int height); +#endif + + SDL_Surface *getByAlpha(const float alpha) A_WARN_UNUSED; + + SDL_Surface *mSDLSurface; +#ifdef USE_SDL2 + SDL_Texture *mTexture; +#endif + + /** Alpha Channel pointer used for 32bit based SDL surfaces */ + uint8_t *mAlphaChannel; + + std::map mAlphaCache; + + bool mLoaded; + bool mHasAlphaChannel; + bool mUseAlphaCache; + bool mIsAlphaVisible; + bool mIsAlphaCalculated; + + // ----------------------- + // OpenGL protected members + // ----------------------- +#ifdef USE_OPENGL + /** + * OpenGL Constructor. + */ + Image(const GLuint glimage, const int width, const int height, + const int texWidth, const int texHeight); +#endif +}; + +#endif // RESOURCES_IMAGE_H diff --git a/src/resources/imageset.cpp b/src/resources/imageset.cpp index e74ca3c07..913a861e5 100644 --- a/src/resources/imageset.cpp +++ b/src/resources/imageset.cpp @@ -24,7 +24,7 @@ #include "logger.h" -#include "resources/image.h" +#include "resources/image/image.h" #include "utils/dtor.h" diff --git a/src/resources/loaders/imageloader.cpp b/src/resources/loaders/imageloader.cpp index d3ab9facc..f2d0d045d 100644 --- a/src/resources/loaders/imageloader.cpp +++ b/src/resources/loaders/imageloader.cpp @@ -22,9 +22,10 @@ #include "logger.h" -#include "resources/image.h" #include "resources/imagehelper.h" +#include "resources/image/image.h" + #include "resources/loaders/imageloader.h" #include "resources/resourcemanager/resourcemanager.h" diff --git a/src/resources/loaders/imagesetloader.cpp b/src/resources/loaders/imagesetloader.cpp index ad3868cc3..86b0263cb 100644 --- a/src/resources/loaders/imagesetloader.cpp +++ b/src/resources/loaders/imagesetloader.cpp @@ -22,9 +22,10 @@ #include "logger.h" -#include "resources/image.h" #include "resources/imageset.h" +#include "resources/image/image.h" + #include "resources/loaders/imageloader.h" #include "resources/loaders/imagesetloader.h" diff --git a/src/resources/loaders/rescaledloader.cpp b/src/resources/loaders/rescaledloader.cpp index 95ef6dff7..8909209a4 100644 --- a/src/resources/loaders/rescaledloader.cpp +++ b/src/resources/loaders/rescaledloader.cpp @@ -22,7 +22,7 @@ #include "logger.h" -#include "resources/image.h" +#include "resources/image/image.h" #include "resources/loaders/rescaledloader.h" diff --git a/src/resources/loaders/subimageloader.cpp b/src/resources/loaders/subimageloader.cpp index 1331da245..9b0459e88 100644 --- a/src/resources/loaders/subimageloader.cpp +++ b/src/resources/loaders/subimageloader.cpp @@ -22,7 +22,7 @@ #include "logger.h" -#include "resources/image.h" +#include "resources/image/image.h" #include "resources/loaders/subimageloader.h" diff --git a/src/resources/loaders/subimagesetloader.cpp b/src/resources/loaders/subimagesetloader.cpp index a8db6771a..1b271b33f 100644 --- a/src/resources/loaders/subimagesetloader.cpp +++ b/src/resources/loaders/subimagesetloader.cpp @@ -20,13 +20,14 @@ * along with this program. If not, see . */ -#include "resources/image.h" #include "resources/imageset.h" -#include "resources/resourcemanager/resourcemanager.h" +#include "resources/image/image.h" #include "resources/loaders/subimagesetloader.h" +#include "resources/resourcemanager/resourcemanager.h" + #include "utils/stringutils.h" #include "debug.h" diff --git a/src/resources/map/mapitem.cpp b/src/resources/map/mapitem.cpp index eb7676342..8bc3ce8f4 100644 --- a/src/resources/map/mapitem.cpp +++ b/src/resources/map/mapitem.cpp @@ -27,7 +27,7 @@ #include "gui/fonts/font.h" -#include "resources/image.h" +#include "resources/image/image.h" #include "resources/loaders/imageloader.h" diff --git a/src/resources/map/maplayer.cpp b/src/resources/map/maplayer.cpp index 7ccf26396..ba8f49455 100644 --- a/src/resources/map/maplayer.cpp +++ b/src/resources/map/maplayer.cpp @@ -37,7 +37,7 @@ #include "render/graphics.h" -#include "resources/image.h" +#include "resources/image/image.h" #include "resources/map/mapitem.h" #include "resources/map/maprowvertexes.h" diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index d8e695b7a..05fee875a 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -37,9 +37,10 @@ #include "resources/map/tileset.h" #include "resources/beingcommon.h" -#include "resources/image.h" #include "resources/animation/animation.h" +#include "resources/image/image.h" + #ifdef USE_OPENGL #include "resources/db/mapdb.h" #include "resources/loaders/atlasloader.h" diff --git a/src/resources/openglimagehelper.cpp b/src/resources/openglimagehelper.cpp index 7ce48556d..b29e3b3b9 100644 --- a/src/resources/openglimagehelper.cpp +++ b/src/resources/openglimagehelper.cpp @@ -39,11 +39,11 @@ #include "render/opengl/mgl.h" #include "render/opengl/mglcheck.h" -#include "resources/image.h" - #include "resources/dye/dye.h" #include "resources/dye/dyepalette.h" +#include "resources/image/image.h" + #include "utils/sdlcheckutils.h" #include diff --git a/src/resources/resourcemanager/resourcemanager.cpp b/src/resources/resourcemanager/resourcemanager.cpp index 993d011b7..5fcc35477 100644 --- a/src/resources/resourcemanager/resourcemanager.cpp +++ b/src/resources/resourcemanager/resourcemanager.cpp @@ -26,7 +26,7 @@ #include "logger.h" #ifdef USE_OPENGL -#include "resources/image.h" +#include "resources/image/image.h" #endif // USE_OPENGL #include "resources/imageset.h" diff --git a/src/resources/safeopenglimagehelper.cpp b/src/resources/safeopenglimagehelper.cpp index 8a929f214..60c71d12e 100644 --- a/src/resources/safeopenglimagehelper.cpp +++ b/src/resources/safeopenglimagehelper.cpp @@ -36,11 +36,11 @@ #include "render/opengl/mgl.h" #include "render/opengl/mglcheck.h" -#include "resources/image.h" - #include "resources/dye/dye.h" #include "resources/dye/dyepalette.h" +#include "resources/image/image.h" + #include "utils/sdlcheckutils.h" #include diff --git a/src/resources/sdl2imagehelper.cpp b/src/resources/sdl2imagehelper.cpp index 9bd66c3e4..5f8f95e6b 100644 --- a/src/resources/sdl2imagehelper.cpp +++ b/src/resources/sdl2imagehelper.cpp @@ -27,11 +27,11 @@ #include "logger.h" #include "main.h" -#include "resources/image.h" - #include "resources/dye/dye.h" #include "resources/dye/dyepalette.h" +#include "resources/image/image.h" + #include "resources/resourcemanager/resourcemanager.h" #include "utils/sdlcheckutils.h" diff --git a/src/resources/sdl2softwareimagehelper.cpp b/src/resources/sdl2softwareimagehelper.cpp index 375f08cc5..3c50531d0 100644 --- a/src/resources/sdl2softwareimagehelper.cpp +++ b/src/resources/sdl2softwareimagehelper.cpp @@ -29,7 +29,7 @@ #include "resources/dye/dye.h" -#include "resources/image.h" +#include "resources/image/image.h" #include "resources/resourcemanager/resourcemanager.h" diff --git a/src/resources/sdlimagehelper.cpp b/src/resources/sdlimagehelper.cpp index d97a51fc6..f8b8fb96d 100644 --- a/src/resources/sdlimagehelper.cpp +++ b/src/resources/sdlimagehelper.cpp @@ -27,11 +27,11 @@ #include "logger.h" #include "main.h" -#include "resources/image.h" - #include "resources/dye/dye.h" #include "resources/dye/dyepalette.h" +#include "resources/image/image.h" + #include "utils/sdlcheckutils.h" #include diff --git a/src/resources/sprite/animatedsprite.cpp b/src/resources/sprite/animatedsprite.cpp index 8a60de0f3..738f8c31b 100644 --- a/src/resources/sprite/animatedsprite.cpp +++ b/src/resources/sprite/animatedsprite.cpp @@ -28,10 +28,11 @@ #include "resources/action.h" #include "resources/delayedmanager.h" -#include "resources/image.h" #include "resources/animation/animation.h" +#include "resources/image/image.h" + #include "resources/loaders/spritedefloader.h" #include "resources/resourcemanager/resourcemanager.h" diff --git a/src/resources/sprite/imagesprite.h b/src/resources/sprite/imagesprite.h index c3fa39fae..21c873f40 100644 --- a/src/resources/sprite/imagesprite.h +++ b/src/resources/sprite/imagesprite.h @@ -24,7 +24,7 @@ #include "resources/sprite/sprite.h" -#include "resources/image.h" +#include "resources/image/image.h" class Graphics; diff --git a/src/resources/subimage.h b/src/resources/subimage.h index 1fa0eb3ed..29f7fed1e 100644 --- a/src/resources/subimage.h +++ b/src/resources/subimage.h @@ -38,7 +38,7 @@ #endif -#include "resources/image.h" +#include "resources/image/image.h" /** * A clipped version of a larger image. diff --git a/src/resources/surfaceimagehelper.cpp b/src/resources/surfaceimagehelper.cpp index effba4abd..b8c3bf6ac 100644 --- a/src/resources/surfaceimagehelper.cpp +++ b/src/resources/surfaceimagehelper.cpp @@ -27,10 +27,10 @@ #include "logger.h" #include "main.h" -#include "resources/image.h" - #include "resources/dye/dye.h" +#include "resources/image/image.h" + #include "resources/resourcemanager/resourcemanager.h" #include "utils/sdlcheckutils.h" -- cgit v1.2.3-70-g09d2