michael@0: /* michael@0: * Copyright 2012 Google Inc. michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: #include "GrTextureAccess.h" michael@0: #include "GrColor.h" michael@0: #include "GrTexture.h" michael@0: michael@0: GrTextureAccess::GrTextureAccess() { michael@0: #ifdef SK_DEBUG michael@0: memcpy(fSwizzle, "void", 5); michael@0: fSwizzleMask = 0xbeeffeed; michael@0: #endif michael@0: } michael@0: michael@0: GrTextureAccess::GrTextureAccess(GrTexture* texture, const GrTextureParams& params) { michael@0: this->reset(texture, params); michael@0: } michael@0: michael@0: GrTextureAccess::GrTextureAccess(GrTexture* texture, michael@0: GrTextureParams::FilterMode filterMode, michael@0: SkShader::TileMode tileXAndY) { michael@0: this->reset(texture, filterMode, tileXAndY); michael@0: } michael@0: michael@0: GrTextureAccess::GrTextureAccess(GrTexture* texture, michael@0: const char* swizzle, michael@0: const GrTextureParams& params) { michael@0: this->reset(texture, swizzle, params); michael@0: } michael@0: michael@0: GrTextureAccess::GrTextureAccess(GrTexture* texture, michael@0: const char* swizzle, michael@0: GrTextureParams::FilterMode filterMode, michael@0: SkShader::TileMode tileXAndY) { michael@0: this->reset(texture, swizzle, filterMode, tileXAndY); michael@0: } michael@0: michael@0: void GrTextureAccess::reset(GrTexture* texture, michael@0: const char* swizzle, michael@0: const GrTextureParams& params) { michael@0: SkASSERT(NULL != texture); michael@0: SkASSERT(strlen(swizzle) >= 1 && strlen(swizzle) <= 4); michael@0: michael@0: fParams = params; michael@0: fTexture.reset(SkRef(texture)); michael@0: this->setSwizzle(swizzle); michael@0: } michael@0: michael@0: void GrTextureAccess::reset(GrTexture* texture, michael@0: const char* swizzle, michael@0: GrTextureParams::FilterMode filterMode, michael@0: SkShader::TileMode tileXAndY) { michael@0: SkASSERT(NULL != texture); michael@0: SkASSERT(strlen(swizzle) >= 1 && strlen(swizzle) <= 4); michael@0: michael@0: fParams.reset(tileXAndY, filterMode); michael@0: fTexture.reset(SkRef(texture)); michael@0: this->setSwizzle(swizzle); michael@0: } michael@0: michael@0: void GrTextureAccess::reset(GrTexture* texture, michael@0: const GrTextureParams& params) { michael@0: SkASSERT(NULL != texture); michael@0: fTexture.reset(SkRef(texture)); michael@0: fParams = params; michael@0: memcpy(fSwizzle, "rgba", 5); michael@0: fSwizzleMask = kRGBA_GrColorComponentFlags; michael@0: } michael@0: michael@0: void GrTextureAccess::reset(GrTexture* texture, michael@0: GrTextureParams::FilterMode filterMode, michael@0: SkShader::TileMode tileXAndY) { michael@0: SkASSERT(NULL != texture); michael@0: fTexture.reset(SkRef(texture)); michael@0: fParams.reset(tileXAndY, filterMode); michael@0: memcpy(fSwizzle, "rgba", 5); michael@0: fSwizzleMask = kRGBA_GrColorComponentFlags; michael@0: } michael@0: michael@0: void GrTextureAccess::setSwizzle(const char* swizzle) { michael@0: fSwizzleMask = 0; michael@0: memset(fSwizzle, '\0', 5); michael@0: for (int i = 0; i < 4 && '\0' != swizzle[i]; ++i) { michael@0: fSwizzle[i] = swizzle[i]; michael@0: switch (swizzle[i]) { michael@0: case 'r': michael@0: fSwizzleMask |= kR_GrColorComponentFlag; michael@0: break; michael@0: case 'g': michael@0: fSwizzleMask |= kG_GrColorComponentFlag; michael@0: break; michael@0: case 'b': michael@0: fSwizzleMask |= kB_GrColorComponentFlag; michael@0: break; michael@0: case 'a': michael@0: fSwizzleMask |= kA_GrColorComponentFlag; michael@0: break; michael@0: default: michael@0: GrCrash("Unexpected swizzle string character."); michael@0: break; michael@0: } michael@0: } michael@0: }