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(NULL != texture); 46 SkASSERT(strlen(swizzle) >= 1 && strlen(swizzle) <= 4); 47 48 fParams = params; 49 fTexture.reset(SkRef(texture)); 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(NULL != texture); 58 SkASSERT(strlen(swizzle) >= 1 && strlen(swizzle) <= 4); 59 60 fParams.reset(tileXAndY, filterMode); 61 fTexture.reset(SkRef(texture)); 62 this->setSwizzle(swizzle); 63 } 64 65 void GrTextureAccess::reset(GrTexture* texture, 66 const GrTextureParams& params) { 67 SkASSERT(NULL != texture); 68 fTexture.reset(SkRef(texture)); 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(NULL != texture); 78 fTexture.reset(SkRef(texture)); 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 GrCrash("Unexpected swizzle string character."); 104 break; 105 } 106 } 107 } 108