Bitmap: Use PixelStore to avoid aux clip surface
This commit is contained in:
parent
397856089d
commit
9e3d7f579c
|
@ -857,32 +857,22 @@ void Bitmap::drawText(const IntRect &rect, const char *str, int align)
|
||||||
if (inters.w != txtRect.w || inters.h != txtRect.h)
|
if (inters.w != txtRect.w || inters.h != txtRect.h)
|
||||||
{
|
{
|
||||||
/* Clip the text surface */
|
/* Clip the text surface */
|
||||||
SDL_PixelFormat *form = txtSurf->format;
|
|
||||||
SDL_Surface *clip =
|
|
||||||
SDL_CreateRGBSurface(0, inters.w, inters.h,
|
|
||||||
form->BitsPerPixel,
|
|
||||||
form->Rmask,
|
|
||||||
form->Gmask,
|
|
||||||
form->Bmask,
|
|
||||||
form->Amask);
|
|
||||||
|
|
||||||
SDL_Rect clipSrc = inters;
|
SDL_Rect clipSrc = inters;
|
||||||
clipSrc.x -= txtRect.x;
|
clipSrc.x -= txtRect.x;
|
||||||
clipSrc.y -= txtRect.y;
|
clipSrc.y -= txtRect.y;
|
||||||
|
|
||||||
SDL_BlitSurface(txtSurf, &clipSrc, clip, 0);
|
|
||||||
|
|
||||||
posRect.x = inters.x;
|
posRect.x = inters.x;
|
||||||
posRect.y = inters.y;
|
posRect.y = inters.y;
|
||||||
posRect.w = inters.w;
|
posRect.w = inters.w;
|
||||||
posRect.h = inters.h;
|
posRect.h = inters.h;
|
||||||
|
|
||||||
SDL_FreeSurface(txtSurf);
|
PixelStore::setupSubImage(txtSurf->w, clipSrc.x, clipSrc.y);
|
||||||
txtSurf = clip;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEX::bind(p->gl.tex);
|
TEX::bind(p->gl.tex);
|
||||||
TEX::uploadSubImage(posRect.x, posRect.y, posRect.w, posRect.h, txtSurf->pixels, GL_BGRA_EXT);
|
TEX::uploadSubImage(posRect.x, posRect.y, posRect.w, posRect.h, txtSurf->pixels, GL_BGRA_EXT);
|
||||||
|
|
||||||
|
PixelStore::reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue