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 #include "GrRectanizer_pow2.h"
     10 
     11 bool GrRectanizerPow2::addRect(int width, int height, SkIPoint16* loc) {
     12     if ((unsigned)width > (unsigned)this->width() ||
     13         (unsigned)height > (unsigned)this->height()) {
     14         return false;
     15     }
     16 
     17     int32_t area = width * height; // computed here since height will be modified
     18 
     19     height = GrNextPow2(height);
     20     if (height < kMIN_HEIGHT_POW2) {
     21         height = kMIN_HEIGHT_POW2;
     22     }
     23 
     24     Row* row = &fRows[HeightToRowIndex(height)];
     25     SkASSERT(row->fRowHeight == 0 || row->fRowHeight == height);
     26 
     27     if (0 == row->fRowHeight) {
     28         if (!this->canAddStrip(height)) {
     29             return false;
     30         }
     31         this->initRow(row, height);
     32     } else {
     33         if (!row->canAddWidth(width, this->width())) {
     34             if (!this->canAddStrip(height)) {
     35                 return false;
     36             }
     37             // that row is now "full", so retarget our Row record for
     38             // another one
     39             this->initRow(row, height);
     40         }
     41     }
     42 
     43     SkASSERT(row->fRowHeight == height);
     44     SkASSERT(row->canAddWidth(width, this->width()));
     45     *loc = row->fLoc;
     46     row->fLoc.fX += width;
     47 
     48     SkASSERT(row->fLoc.fX <= this->width());
     49     SkASSERT(row->fLoc.fY <= this->height());
     50     SkASSERT(fNextStripY <= this->height());
     51     fAreaSoFar += area;
     52     return true;
     53 }
     54 
     55 ///////////////////////////////////////////////////////////////////////////////
     56 
     57 // factory is now in GrRectanizer_skyline.cpp
     58 //GrRectanizer* GrRectanizer::Factory(int width, int height) {
     59 //    return SkNEW_ARGS(GrRectanizerPow2, (width, height));
     60 //}
     61