Home | History | Annotate | Download | only in gpu
      1 
      2 /*
      3  * Copyright 2010 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 
     11 #ifndef GrAtlas_DEFINED
     12 #define GrAtlas_DEFINED
     13 
     14 #include "GrPoint.h"
     15 #include "GrTexture.h"
     16 #include "GrTDArray.h"
     17 
     18 class GrGpu;
     19 class GrRectanizer;
     20 class GrAtlasMgr;
     21 
     22 class GrAtlas {
     23 public:
     24     GrAtlas(GrAtlasMgr*, int plotX, int plotY, GrMaskFormat);
     25 
     26     int getPlotX() const { return fPlot.fX; }
     27     int getPlotY() const { return fPlot.fY; }
     28     GrMaskFormat getMaskFormat() const { return fMaskFormat; }
     29 
     30     GrTexture* texture() const { return fTexture; }
     31 
     32     bool addSubImage(int width, int height, const void*, GrIPoint16*);
     33 
     34     static void FreeLList(GrAtlas* atlas) {
     35         while (atlas) {
     36             GrAtlas* next = atlas->fNext;
     37             delete atlas;
     38             atlas = next;
     39         }
     40     }
     41 
     42     // testing
     43     GrAtlas* nextAtlas() const { return fNext; }
     44 
     45 private:
     46     ~GrAtlas(); // does not try to delete the fNext field
     47 
     48     GrAtlas*        fNext;
     49     GrTexture*      fTexture;
     50     GrRectanizer*   fRects;
     51     GrAtlasMgr*     fAtlasMgr;
     52     GrIPoint16      fPlot;
     53     GrMaskFormat    fMaskFormat;
     54 
     55     friend class GrAtlasMgr;
     56 };
     57 
     58 class GrPlotMgr;
     59 
     60 class GrAtlasMgr {
     61 public:
     62     GrAtlasMgr(GrGpu*);
     63     ~GrAtlasMgr();
     64 
     65     GrAtlas* addToAtlas(GrAtlas*, int width, int height, const void*,
     66                         GrMaskFormat, GrIPoint16*);
     67 
     68     GrTexture* getTexture(GrMaskFormat format) const {
     69         GrAssert((unsigned)format < kCount_GrMaskFormats);
     70         return fTexture[format];
     71     }
     72 
     73     // to be called by ~GrAtlas()
     74     void freePlot(int x, int y);
     75 
     76 private:
     77     GrGpu*      fGpu;
     78     GrTexture*  fTexture[kCount_GrMaskFormats];
     79     GrPlotMgr*  fPlotMgr;
     80 };
     81 
     82 #endif
     83 
     84 
     85