GRAPHICS: Add basic caching to 9patch colors

This commit is contained in:
Borja Lorente 2016-07-31 18:25:02 +02:00
parent 03f2d9b01e
commit 02a18134c3
2 changed files with 20 additions and 10 deletions

View file

@ -235,6 +235,11 @@ void NinePatchBitmap::blit(Graphics::Surface &target, int dx, int dy, int dw, in
drawRegions(srf, dx, dy, dw, dh);
//TODO: This can be further optimized by keeping the data between draws,
// and using a unique identifier for each palette, so that it only gets
// recalculated when the palette changes.
_cached_colors.clear();
for (uint i = 0; i < srf.w; ++i) {
for (uint j = 0; j < srf.h; ++j) {
uint32 color = *(uint32*)srf.getBasePtr(i, j);
@ -334,6 +339,7 @@ static inline uint32 dist(uint32 a, uint32 b) {
}
byte NinePatchBitmap::closestGrayscale(uint32 color, byte* palette, byte paletteLength) {
if (!_cached_colors.contains(color)) {
byte target = grayscale(color);
byte bestNdx = 0;
byte bestColor = grayscale(palette[0], palette[1], palette[2]);
@ -344,8 +350,10 @@ byte NinePatchBitmap::closestGrayscale(uint32 color, byte* palette, byte palette
bestNdx = i;
}
}
_cached_colors[color] = bestNdx;
}
return bestNdx;
return _cached_colors[color];
}
} // end of namespace Graphics

View file

@ -48,6 +48,7 @@
#include "common/array.h"
#include "common/rect.h"
#include "common/hashmap.h"
namespace Graphics {
@ -81,6 +82,7 @@ class NinePatchBitmap {
bool _destroy_bmp;
int _width, _height;
int _cached_dw, _cached_dh;
Common::HashMap<uint32, int> _cached_colors;
public:
NinePatchBitmap(Graphics::TransparentSurface *bmp, bool owns_bitmap);