Home | History | Annotate | Download | only in gpu
      1 /*
      2  * Copyright 2010 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef GrRectanizer_DEFINED
      9 #define GrRectanizer_DEFINED
     10 
     11 #include "GrPoint.h"
     12 
     13 class GrRectanizerPurgeListener {
     14 public:
     15     virtual ~GrRectanizerPurgeListener() {}
     16 
     17     virtual void notifyPurgeStrip(void*, int yCoord) = 0;
     18 };
     19 
     20 class GrRectanizer {
     21 public:
     22     GrRectanizer(int width, int height) : fWidth(width), fHeight(height) {
     23         SkASSERT(width >= 0);
     24         SkASSERT(height >= 0);
     25     }
     26 
     27     virtual ~GrRectanizer() {}
     28 
     29     virtual void reset() = 0;
     30 
     31     int width() const { return fWidth; }
     32     int height() const { return fHeight; }
     33 
     34     virtual bool addRect(int width, int height, GrIPoint16* loc) = 0;
     35     virtual float percentFull() const = 0;
     36 
     37     // return the Y-coordinate of a strip that should be purged, given height
     38     // i.e. return the oldest such strip, or some other criteria. Return -1
     39     // if there is no candidate
     40     virtual int stripToPurge(int height) const = 0;
     41     virtual void purgeStripAtY(int yCoord) = 0;
     42 
     43     /**
     44      *  Our factory, which returns the subclass du jour
     45      */
     46     static GrRectanizer* Factory(int width, int height);
     47 
     48 private:
     49     int fWidth;
     50     int fHeight;
     51 };
     52 
     53 #endif
     54