diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-07-01 22:00:53 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-07-01 22:00:53 +0300 |
commit | dbf1544dc6dd7e31ad884afaffb192944f8bb22f (patch) | |
tree | 9e6d4e4e857577ffc562152bdb70bcd224f7a3a5 | |
parent | 62e2ccbb158f146e2c3ceab14ff5581d3f3975ef (diff) | |
download | mv-dbf1544dc6dd7e31ad884afaffb192944f8bb22f.tar.gz mv-dbf1544dc6dd7e31ad884afaffb192944f8bb22f.tar.bz2 mv-dbf1544dc6dd7e31ad884afaffb192944f8bb22f.tar.xz mv-dbf1544dc6dd7e31ad884afaffb192944f8bb22f.zip |
In atlasmanager use copy surface to image function.
This allow in OpenGL modes copy surface into video memory
without software blitting.
-rw-r--r-- | src/resources/atlasmanager.cpp | 39 | ||||
-rw-r--r-- | src/resources/textureatlas.h | 2 |
2 files changed, 16 insertions, 25 deletions
diff --git a/src/resources/atlasmanager.cpp b/src/resources/atlasmanager.cpp index cadf917f9..cdbd26a65 100644 --- a/src/resources/atlasmanager.cpp +++ b/src/resources/atlasmanager.cpp @@ -26,7 +26,9 @@ #include "configuration.h" -#include "render/surfacegraphics.h" +#ifdef DEBUG_IMAGES +#include "logger.h" +#endif #include "utils/mathutils.h" #include "utils/physfscheckutils.h" @@ -39,6 +41,7 @@ #include "resources/imagehelper.h" #include "resources/openglimagehelper.h" #include "resources/resourcemanager.h" +#include "resources/sdlimagehelper.h" #include "resources/textureatlas.h" #include "debug.h" @@ -255,36 +258,19 @@ SDL_Surface *AtlasManager::createSDLAtlas(TextureAtlas *const atlas) } BLOCK_END("AtlasManager::createSDLAtlas create surface") - SurfaceGraphics *const graphics = new SurfaceGraphics(); - graphics->setTarget(surface); - graphics->beginDraw(); + Image *image = imageHelper->load(surface); // drawing SDL images to surface FOR_EACH (std::vector<AtlasItem*>::iterator, it, atlas->items) { AtlasItem *const item = *it; - Image *const image = item->image; - if (image) { - if (image->mSDLSurface) - { - BLOCK_START("AtlasManager::createSDLAtlas set surface attr") -#ifdef USE_SDL2 - SDL_SetSurfaceAlphaMod(image->mSDLSurface, SDL_ALPHA_OPAQUE); - SDL_SetSurfaceBlendMode(image->mSDLSurface, - SDL_BLENDMODE_NONE); -#else - SDL_SetAlpha(image->mSDLSurface, 0, SDL_ALPHA_OPAQUE); -#endif - BLOCK_END("AtlasManager::createSDLAtlas set surface attr") - graphics->drawImage(image, item->x, item->y); - } + imageHelper->copySurfaceToImage(image, item->x, item->y, + item->image->mSDLSurface); } } - - delete graphics; - atlas->surface = surface; + atlas->atlasImage = image; BLOCK_END("AtlasManager::createSDLAtlas") return surface; } @@ -293,7 +279,14 @@ void AtlasManager::convertAtlas(TextureAtlas *const atlas) { // no check for null pointer in atlas because it was in caller // convert surface to OpemGL image - atlas->atlasImage = imageHelper->load(atlas->surface); + Image *const oldImage = atlas->atlasImage; + + if (oldImage->mSDLSurface) + { + atlas->atlasImage = imageHelper->load(atlas->atlasImage->mSDLSurface); + oldImage->decRef(); + } + Image *const image = atlas->atlasImage; if (!image) return; diff --git a/src/resources/textureatlas.h b/src/resources/textureatlas.h index 11a45a5d3..be3d8abd8 100644 --- a/src/resources/textureatlas.h +++ b/src/resources/textureatlas.h @@ -42,7 +42,6 @@ struct TextureAtlas final TextureAtlas() : name(), atlasImage(nullptr), - surface(nullptr), width(0), height(0), items() @@ -53,7 +52,6 @@ struct TextureAtlas final std::string name; Image *atlasImage; - SDL_Surface *surface; int width; int height; std::vector <AtlasItem*> items; |