diff --git a/src/display/bitmap.cpp b/src/display/bitmap.cpp index 3459e5b..31ab3a6 100644 --- a/src/display/bitmap.cpp +++ b/src/display/bitmap.cpp @@ -621,7 +621,7 @@ Bitmap::Bitmap(const char *filename) SDL_Surface *imgSurf = handler.surface; - initFromSurface(imgSurf, hiresBitmap, true); + initFromSurface(imgSurf, hiresBitmap, false); } Bitmap::Bitmap(int width, int height, bool isHires) @@ -789,7 +789,7 @@ Bitmap::Bitmap(TEXFBO &other) p->addTaintedArea(rect()); } -Bitmap::Bitmap(SDL_Surface *imgSurf, SDL_Surface *imgSurfHires) +Bitmap::Bitmap(SDL_Surface *imgSurf, SDL_Surface *imgSurfHires, bool forceMega) { Bitmap *hiresBitmap = nullptr; @@ -799,7 +799,7 @@ Bitmap::Bitmap(SDL_Surface *imgSurf, SDL_Surface *imgSurfHires) hiresBitmap->setLores(this); } - initFromSurface(imgSurf, hiresBitmap, false); + initFromSurface(imgSurf, hiresBitmap, forceMega); } Bitmap::~Bitmap() @@ -807,18 +807,14 @@ Bitmap::~Bitmap() dispose(); } -void Bitmap::initFromSurface(SDL_Surface *imgSurf, Bitmap *hiresBitmap, bool freeSurface) +void Bitmap::initFromSurface(SDL_Surface *imgSurf, Bitmap *hiresBitmap, bool forceMega) { p->ensureFormat(imgSurf, SDL_PIXELFORMAT_ABGR8888); - if (imgSurf->w > glState.caps.maxTexSize || imgSurf->h > glState.caps.maxTexSize) + if (imgSurf->w > glState.caps.maxTexSize || imgSurf->h > glState.caps.maxTexSize || forceMega) { /* Mega surface */ - if(!freeSurface) { - throw Exception(Exception::RGSSError, "Cloning Mega Bitmap from Surface not supported"); - } - p = new BitmapPrivate(this); p->selfHires = hiresBitmap; p->megaSurface = imgSurf; @@ -848,10 +844,6 @@ void Bitmap::initFromSurface(SDL_Surface *imgSurf, Bitmap *hiresBitmap, bool fre TEX::bind(p->gl.tex); TEX::uploadImage(p->gl.width, p->gl.height, imgSurf->pixels, GL_RGBA); - - if (freeSurface) { - SDL_FreeSurface(imgSurf); - } } p->addTaintedArea(rect()); diff --git a/src/display/bitmap.h b/src/display/bitmap.h index 9a1bbdd..dbf9a82 100644 --- a/src/display/bitmap.h +++ b/src/display/bitmap.h @@ -42,7 +42,7 @@ public: Bitmap(int width, int height, bool isHires = false); Bitmap(void *pixeldata, int width, int height); Bitmap(TEXFBO &other); - Bitmap(SDL_Surface *imgSurf, SDL_Surface *imgSurfHires); + Bitmap(SDL_Surface *imgSurf, SDL_Surface *imgSurfHires, bool forceMega = false); /* Clone constructor */ @@ -50,7 +50,7 @@ public: Bitmap(const Bitmap &other, int frame = -2); ~Bitmap(); - void initFromSurface(SDL_Surface *imgSurf, Bitmap *hiresBitmap, bool freeSurface); + void initFromSurface(SDL_Surface *imgSurf, Bitmap *hiresBitmap, bool forceMega = false); int width() const; int height() const;