Home | History | Annotate | Download | only in gpu
      1 /*
      2  * Copyright 2012 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 #include "GrTextureAccess.h"
      9 #include "GrColor.h"
     10 #include "GrTexture.h"
     11 
     12 GrTextureAccess::GrTextureAccess() {
     13 #ifdef SK_DEBUG
     14     memcpy(fSwizzle, "void", 5);
     15     fSwizzleMask = 0xbeeffeed;
     16 #endif
     17 }
     18 
     19 GrTextureAccess::GrTextureAccess(GrTexture* texture, const GrTextureParams& params) {
     20     this->reset(texture, params);
     21 }
     22 
     23 GrTextureAccess::GrTextureAccess(GrTexture* texture,
     24                                  GrTextureParams::FilterMode filterMode,
     25                                  SkShader::TileMode tileXAndY) {
     26     this->reset(texture, filterMode, tileXAndY);
     27 }
     28 
     29 GrTextureAccess::GrTextureAccess(GrTexture* texture,
     30                                  const char* swizzle,
     31                                  const GrTextureParams& params) {
     32     this->reset(texture, swizzle, params);
     33 }
     34 
     35 GrTextureAccess::GrTextureAccess(GrTexture* texture,
     36                                  const char* swizzle,
     37                                  GrTextureParams::FilterMode filterMode,
     38                                  SkShader::TileMode tileXAndY) {
     39     this->reset(texture, swizzle, filterMode, tileXAndY);
     40 }
     41 
     42 void GrTextureAccess::reset(GrTexture* texture,
     43                             const char* swizzle,
     44                             const GrTextureParams& params) {
     45     SkASSERT(texture);
     46     SkASSERT(strlen(swizzle) >= 1 && strlen(swizzle) <= 4);
     47 
     48     fParams = params;
     49     fTexture.set(SkRef(texture), GrIORef::kRead_IOType);
     50     this->setSwizzle(swizzle);
     51 }
     52 
     53 void GrTextureAccess::reset(GrTexture* texture,
     54                             const char* swizzle,
     55                             GrTextureParams::FilterMode filterMode,
     56                             SkShader::TileMode tileXAndY) {
     57     SkASSERT(texture);
     58     SkASSERT(strlen(swizzle) >= 1 && strlen(swizzle) <= 4);
     59 
     60     fParams.reset(tileXAndY, filterMode);
     61     fTexture.set(SkRef(texture), GrIORef::kRead_IOType);
     62     this->setSwizzle(swizzle);
     63 }
     64 
     65 void GrTextureAccess::reset(GrTexture* texture,
     66                             const GrTextureParams& params) {
     67     SkASSERT(texture);
     68     fTexture.set(SkRef(texture), GrIORef::kRead_IOType);
     69     fParams = params;
     70     memcpy(fSwizzle, "rgba", 5);
     71     fSwizzleMask = kRGBA_GrColorComponentFlags;
     72 }
     73 
     74 void GrTextureAccess::reset(GrTexture* texture,
     75                             GrTextureParams::FilterMode filterMode,
     76                             SkShader::TileMode tileXAndY) {
     77     SkASSERT(texture);
     78     fTexture.set(SkRef(texture), GrIORef::kRead_IOType);
     79     fParams.reset(tileXAndY, filterMode);
     80     memcpy(fSwizzle, "rgba", 5);
     81     fSwizzleMask = kRGBA_GrColorComponentFlags;
     82 }
     83 
     84 void GrTextureAccess::setSwizzle(const char* swizzle) {
     85     fSwizzleMask = 0;
     86     memset(fSwizzle, '\0', 5);
     87     for (int i = 0; i < 4 && '\0' != swizzle[i]; ++i) {
     88         fSwizzle[i] = swizzle[i];
     89         switch (swizzle[i]) {
     90             case 'r':
     91                 fSwizzleMask |= kR_GrColorComponentFlag;
     92                 break;
     93             case 'g':
     94                 fSwizzleMask |= kG_GrColorComponentFlag;
     95                 break;
     96             case 'b':
     97                 fSwizzleMask |= kB_GrColorComponentFlag;
     98                 break;
     99             case 'a':
    100                 fSwizzleMask |= kA_GrColorComponentFlag;
    101                 break;
    102             default:
    103                 SkFAIL("Unexpected swizzle string character.");
    104                 break;
    105         }
    106     }
    107 }
    108