/* Copyright 2010 Google Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ #ifndef GrAtlas_DEFINED #define GrAtlas_DEFINED #include "GrPoint.h" #include "GrTexture.h" #include "GrTDArray.h" class GrGpu; class GrRectanizer; class GrAtlasMgr; class GrAtlas { public: GrAtlas(GrAtlasMgr*, int plotX, int plotY); int getPlotX() const { return fPlot.fX; } int getPlotY() const { return fPlot.fY; } GrTexture* texture() const { return fTexture; } bool addSubImage(int width, int height, const void*, GrIPoint16*); static void FreeLList(GrAtlas* atlas) { while (atlas) { GrAtlas* next = atlas->fNext; delete atlas; atlas = next; } } // testing GrAtlas* nextAtlas() const { return fNext; } private: ~GrAtlas(); // does not try to delete the fNext field GrAtlas* fNext; GrTexture* fTexture; GrRectanizer* fRects; GrAtlasMgr* fAtlasMgr; GrIPoint16 fPlot; friend class GrAtlasMgr; }; class GrPlotMgr; class GrAtlasMgr { public: GrAtlasMgr(GrGpu*); ~GrAtlasMgr(); GrAtlas* addToAtlas(GrAtlas*, int width, int height, const void*, GrIPoint16*); GrTexture* getTexture() const { return fTexture; } // to be called by ~GrAtlas() void freePlot(int x, int y); void abandonAll(); private: GrGpu* fGpu; GrTexture* fTexture; GrPlotMgr* fPlotMgr; }; #endif