Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(235)

Unified Diff: src/gpu/GrAtlas.cpp

Issue 24608002: First pass at font cache refactor: Create an atlas manager per texture (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Make sure to set the MaskFormat Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrAtlas.cpp
diff --git a/src/gpu/GrAtlas.cpp b/src/gpu/GrAtlas.cpp
index 9cdde220d44bb0fac3ece2683b5bf775915372ed..b3f2e34c40e5ab1b79bcb4659761a1268af85165 100644
--- a/src/gpu/GrAtlas.cpp
+++ b/src/gpu/GrAtlas.cpp
@@ -55,7 +55,7 @@ GrAtlas::GrAtlas(GrAtlasMgr* mgr, int plotX, int plotY, GrMaskFormat format) :
fAtlasMgr = mgr; // just a pointer, not an owner
fNext = NULL;
- fTexture = mgr->getTexture(format); // we're not an owner, just a pointer
+ fTexture = mgr->getTexture(); // we're not an owner, just a pointer
fPlot.set(plotX, plotY);
fRects = GrRectanizer::Factory(GR_ATLAS_WIDTH - BORDER,
@@ -70,7 +70,7 @@ GrAtlas::GrAtlas(GrAtlasMgr* mgr, int plotX, int plotY, GrMaskFormat format) :
}
GrAtlas::~GrAtlas() {
- fAtlasMgr->freePlot(fMaskFormat, fPlot.fX, fPlot.fY);
+ fAtlasMgr->freePlot(fPlot.fX, fPlot.fY);
delete fRects;
@@ -161,22 +161,17 @@ bool GrAtlas::addSubImage(int width, int height, const void* image,
///////////////////////////////////////////////////////////////////////////////
-GrAtlasMgr::GrAtlasMgr(GrGpu* gpu) {
+GrAtlasMgr::GrAtlasMgr(GrGpu* gpu, GrMaskFormat format) {
fGpu = gpu;
+ fMaskFormat = format;
gpu->ref();
- Gr_bzero(fTexture, sizeof(fTexture));
- for (int i = 0; i < kCount_GrMaskFormats; ++i) {
- fPlotMgr[i] = SkNEW_ARGS(GrPlotMgr, (GR_PLOT_WIDTH, GR_PLOT_HEIGHT));
- }
+ fTexture = NULL;
+ fPlotMgr = SkNEW_ARGS(GrPlotMgr, (GR_PLOT_WIDTH, GR_PLOT_HEIGHT));
}
GrAtlasMgr::~GrAtlasMgr() {
- for (size_t i = 0; i < GR_ARRAY_COUNT(fTexture); i++) {
- SkSafeUnref(fTexture[i]);
- }
- for (int i = 0; i < kCount_GrMaskFormats; ++i) {
- delete fPlotMgr[i];
- }
+ SkSafeUnref(fTexture);
+ delete fPlotMgr;
fGpu->unref();
#if FONT_CACHE_STATS
@@ -200,10 +195,7 @@ static GrPixelConfig maskformat2pixelconfig(GrMaskFormat format) {
GrAtlas* GrAtlasMgr::addToAtlas(GrAtlas** atlas,
int width, int height, const void* image,
- GrMaskFormat format,
GrIPoint16* loc) {
- SkASSERT(NULL == *atlas || (*atlas)->getMaskFormat() == format);
-
// iterate through entire atlas list, see if we can find a hole
GrAtlas* atlasIter = *atlas;
while (atlasIter) {
@@ -217,27 +209,25 @@ GrAtlas* GrAtlasMgr::addToAtlas(GrAtlas** atlas,
// atlas list is full. Either way we need to allocate a new atlas
GrIPoint16 plot;
- if (!fPlotMgr[format]->newPlot(&plot)) {
+ if (!fPlotMgr->newPlot(&plot)) {
return NULL;
}
- SkASSERT(0 == kA8_GrMaskFormat);
- SkASSERT(1 == kA565_GrMaskFormat);
- if (NULL == fTexture[format]) {
+ if (NULL == fTexture) {
// TODO: Update this to use the cache rather than directly creating a texture.
GrTextureDesc desc;
desc.fFlags = kDynamicUpdate_GrTextureFlagBit;
desc.fWidth = GR_ATLAS_TEXTURE_WIDTH;
desc.fHeight = GR_ATLAS_TEXTURE_HEIGHT;
- desc.fConfig = maskformat2pixelconfig(format);
+ desc.fConfig = maskformat2pixelconfig(fMaskFormat);
- fTexture[format] = fGpu->createTexture(desc, NULL, 0);
- if (NULL == fTexture[format]) {
+ fTexture = fGpu->createTexture(desc, NULL, 0);
+ if (NULL == fTexture) {
return NULL;
}
}
- GrAtlas* newAtlas = SkNEW_ARGS(GrAtlas, (this, plot.fX, plot.fY, format));
+ GrAtlas* newAtlas = SkNEW_ARGS(GrAtlas, (this, plot.fX, plot.fY, fMaskFormat));
if (!newAtlas->addSubImage(width, height, image, loc)) {
delete newAtlas;
return NULL;
@@ -250,7 +240,7 @@ GrAtlas* GrAtlasMgr::addToAtlas(GrAtlas** atlas,
return newAtlas;
}
-void GrAtlasMgr::freePlot(GrMaskFormat format, int x, int y) {
- SkASSERT(fPlotMgr[format]->isBusy(x, y));
- fPlotMgr[format]->freePlot(x, y);
+void GrAtlasMgr::freePlot(int x, int y) {
+ SkASSERT(fPlotMgr->isBusy(x, y));
+ fPlotMgr->freePlot(x, y);
}
« include/gpu/GrTypes.h ('K') | « src/gpu/GrAtlas.h ('k') | src/gpu/GrTextStrike.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698