From 8714a174353529061c8c8d088d7246c4bd81000d Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 27 Dec 2012 22:12:10 +0300 Subject: Change outline function to better quality but slower. Also add function to create 32 bit surfaces. --- src/resources/imagehelper.h | 3 +++ src/resources/openglimagehelper.cpp | 22 ++++++++++++++++++++++ src/resources/openglimagehelper.h | 2 ++ src/resources/sdlimagehelper.cpp | 18 ++++++++++++++++++ src/resources/sdlimagehelper.h | 2 ++ 5 files changed, 47 insertions(+) (limited to 'src/resources') diff --git a/src/resources/imagehelper.h b/src/resources/imagehelper.h index a11a55e2e..83fc3e03c 100644 --- a/src/resources/imagehelper.h +++ b/src/resources/imagehelper.h @@ -90,6 +90,9 @@ class ImageHelper void dumpSurfaceFormat(const SDL_Surface *const image) const; + virtual SDL_Surface *create32BitSurface(int width, int height) + A_WARN_UNUSED = 0; + static void setEnableAlpha(const bool n) { mEnableAlpha = n; } diff --git a/src/resources/openglimagehelper.cpp b/src/resources/openglimagehelper.cpp index 7e5c77c7f..badaf0223 100644 --- a/src/resources/openglimagehelper.cpp +++ b/src/resources/openglimagehelper.cpp @@ -318,4 +318,26 @@ void OpenGLImageHelper::initTextureSampler(GLint id) mglSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } } + +SDL_Surface *OpenGLImageHelper::create32BitSurface(int width, int height) +{ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + const int rmask = 0xff000000; + const int gmask = 0x00ff0000; + const int bmask = 0x0000ff00; + const int amask = 0x000000ff; +#else + const int rmask = 0x000000ff; + const int gmask = 0x0000ff00; + const int bmask = 0x00ff0000; + const int amask = 0xff000000; +#endif + + width = powerOfTwo(width); + height = powerOfTwo(height); + + return SDL_CreateRGBSurface(SDL_SWSURFACE, + width, height, 32, rmask, gmask, bmask, amask); +} + #endif diff --git a/src/resources/openglimagehelper.h b/src/resources/openglimagehelper.h index 01ae7f66c..0036bf007 100644 --- a/src/resources/openglimagehelper.h +++ b/src/resources/openglimagehelper.h @@ -126,6 +126,8 @@ class OpenGLImageHelper final : public ImageHelper static void setUseTextureSampler(bool b) { mUseTextureSampler = b; } + SDL_Surface *create32BitSurface(int width, int height); + protected: /** * Returns the first power of two equal or bigger than the input. diff --git a/src/resources/sdlimagehelper.cpp b/src/resources/sdlimagehelper.cpp index a5423bc62..82e476b8c 100644 --- a/src/resources/sdlimagehelper.cpp +++ b/src/resources/sdlimagehelper.cpp @@ -302,3 +302,21 @@ int SDLImageHelper::useOpenGL() { return 0; } + +SDL_Surface *SDLImageHelper::create32BitSurface(int width, int height) +{ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + const int rmask = 0xff000000; + const int gmask = 0x00ff0000; + const int bmask = 0x0000ff00; + const int amask = 0x000000ff; +#else + const int rmask = 0x000000ff; + const int gmask = 0x0000ff00; + const int bmask = 0x00ff0000; + const int amask = 0xff000000; +#endif + + return SDL_CreateRGBSurface(SDL_SWSURFACE, + width, height, 32, rmask, gmask, bmask, amask); +} diff --git a/src/resources/sdlimagehelper.h b/src/resources/sdlimagehelper.h index 7c6cabaef..a0e19ca39 100644 --- a/src/resources/sdlimagehelper.h +++ b/src/resources/sdlimagehelper.h @@ -82,6 +82,8 @@ class SDLImageHelper final : public ImageHelper static SDL_Surface* SDLDuplicateSurface(SDL_Surface *const tmpImage) A_WARN_UNUSED; + SDL_Surface *create32BitSurface(int width, int height); + protected: /** SDL_Surface to SDL_Surface Image loader */ Image *_SDLload(SDL_Surface *tmpImage) const A_WARN_UNUSED; -- cgit v1.2.3-60-g2f50