| Index: src/gpu/GrAtlas.cpp
|
| ===================================================================
|
| --- src/gpu/GrAtlas.cpp (revision 14007)
|
| +++ src/gpu/GrAtlas.cpp (working copy)
|
| @@ -11,28 +11,6 @@
|
| #include "GrGpu.h"
|
| #include "GrRectanizer.h"
|
|
|
| -#if 0
|
| -#define GR_PLOT_WIDTH 8
|
| -#define GR_PLOT_HEIGHT 4
|
| -#define GR_ATLAS_WIDTH 256
|
| -#define GR_ATLAS_HEIGHT 256
|
| -
|
| -#define GR_ATLAS_TEXTURE_WIDTH (GR_PLOT_WIDTH * GR_ATLAS_WIDTH)
|
| -#define GR_ATLAS_TEXTURE_HEIGHT (GR_PLOT_HEIGHT * GR_ATLAS_HEIGHT)
|
| -
|
| -#else
|
| -
|
| -#define GR_ATLAS_TEXTURE_WIDTH 1024
|
| -#define GR_ATLAS_TEXTURE_HEIGHT 2048
|
| -
|
| -#define GR_ATLAS_WIDTH 256
|
| -#define GR_ATLAS_HEIGHT 256
|
| -
|
| -#define GR_PLOT_WIDTH (GR_ATLAS_TEXTURE_WIDTH / GR_ATLAS_WIDTH)
|
| -#define GR_PLOT_HEIGHT (GR_ATLAS_TEXTURE_HEIGHT / GR_ATLAS_HEIGHT)
|
| -
|
| -#endif
|
| -
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| // for testing
|
| @@ -43,11 +21,10 @@
|
|
|
| GrPlot::GrPlot() : fDrawToken(NULL, 0)
|
| , fTexture(NULL)
|
| + , fRects(NULL)
|
| , fAtlasMgr(NULL)
|
| , fBytesPerPixel(1)
|
| {
|
| - fRects = GrRectanizer::Factory(GR_ATLAS_WIDTH,
|
| - GR_ATLAS_HEIGHT);
|
| fOffset.set(0, 0);
|
| }
|
|
|
| @@ -55,9 +32,16 @@
|
| delete fRects;
|
| }
|
|
|
| +void GrPlot::init(GrAtlasMgr* mgr, int offX, int offY, int width, int height, size_t bpp) {
|
| + fRects = GrRectanizer::Factory(width, height);
|
| + fAtlasMgr = mgr;
|
| + fOffset.set(offX * width, offY * height);
|
| + fBytesPerPixel = bpp;
|
| +}
|
| +
|
| static inline void adjust_for_offset(GrIPoint16* loc, const GrIPoint16& offset) {
|
| - loc->fX += offset.fX * GR_ATLAS_WIDTH;
|
| - loc->fY += offset.fY * GR_ATLAS_HEIGHT;
|
| + loc->fX += offset.fX;
|
| + loc->fY += offset.fY;
|
| }
|
|
|
| bool GrPlot::addSubImage(int width, int height, const void* image,
|
| @@ -91,22 +75,30 @@
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -GrAtlasMgr::GrAtlasMgr(GrGpu* gpu, GrPixelConfig config) {
|
| - fGpu = gpu;
|
| +GrAtlasMgr::GrAtlasMgr(GrGpu* gpu, GrPixelConfig config,
|
| + const SkISize& backingTextureSize,
|
| + int numPlotsX, int numPlotsY) {
|
| + fGpu = SkRef(gpu);
|
| fPixelConfig = config;
|
| - gpu->ref();
|
| + fBackingTextureSize = backingTextureSize;
|
| + fNumPlotsX = numPlotsX;
|
| + fNumPlotsY = numPlotsY;
|
| fTexture = NULL;
|
|
|
| + int plotWidth = fBackingTextureSize.width() / fNumPlotsX;
|
| + int plotHeight = fBackingTextureSize.height() / fNumPlotsY;
|
| +
|
| + SkASSERT(plotWidth * fNumPlotsX == fBackingTextureSize.width());
|
| + SkASSERT(plotHeight * fNumPlotsY == fBackingTextureSize.height());
|
| +
|
| // set up allocated plots
|
| size_t bpp = GrBytesPerPixel(fPixelConfig);
|
| - fPlotArray = SkNEW_ARRAY(GrPlot, (GR_PLOT_WIDTH*GR_PLOT_HEIGHT));
|
| + fPlotArray = SkNEW_ARRAY(GrPlot, (fNumPlotsX*fNumPlotsY));
|
|
|
| GrPlot* currPlot = fPlotArray;
|
| - for (int y = GR_PLOT_HEIGHT-1; y >= 0; --y) {
|
| - for (int x = GR_PLOT_WIDTH-1; x >= 0; --x) {
|
| - currPlot->fAtlasMgr = this;
|
| - currPlot->fOffset.set(x, y);
|
| - currPlot->fBytesPerPixel = bpp;
|
| + for (int y = numPlotsY-1; y >= 0; --y) {
|
| + for (int x = numPlotsX-1; x >= 0; --x) {
|
| + currPlot->init(this, x, y, plotWidth, plotHeight, bpp);
|
|
|
| // build LRU list
|
| fPlotList.addToHead(currPlot);
|
| @@ -152,8 +144,8 @@
|
| // 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.fWidth = fBackingTextureSize.width();
|
| + desc.fHeight = fBackingTextureSize.height();
|
| desc.fConfig = fPixelConfig;
|
|
|
| fTexture = fGpu->createTexture(desc, NULL, 0);
|
|
|