blob: 5c3a36dce3f5a21ff144250b0929d23663847fa7 [file] [log] [blame]
bsalomon@google.com047696c2012-09-11 13:29:29 +00001/*
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"
bsalomon@google.com047696c2012-09-11 13:29:29 +00009
bsalomon@google.com6d003d12012-09-11 15:45:20 +000010#include "GrTexture.h"
11
12GrTextureAccess::GrTextureAccess() {
13#if GR_DEBUG
14 memcpy(fSwizzle, "void", 5);
15 fSwizzleMask = 0xbeeffeed;
16#endif
bsalomon@google.com047696c2012-09-11 13:29:29 +000017}
18
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000019GrTextureAccess::GrTextureAccess(GrTexture* texture, const GrTextureParams& params) {
20 this->reset(texture, params);
bsalomon@google.com6d003d12012-09-11 15:45:20 +000021}
22
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000023GrTextureAccess::GrTextureAccess(GrTexture* texture,
24 bool bilerp,
25 SkShader::TileMode tileXAndY) {
26 this->reset(texture, bilerp, tileXAndY);
bsalomon@google.com6d003d12012-09-11 15:45:20 +000027}
28
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000029GrTextureAccess::GrTextureAccess(GrTexture* texture,
30 const char* swizzle,
31 const GrTextureParams& params) {
32 this->reset(texture, swizzle, params);
33}
34
35GrTextureAccess::GrTextureAccess(GrTexture* texture,
36 const char* swizzle,
37 bool bilerp,
38 SkShader::TileMode tileXAndY) {
39 this->reset(texture, swizzle, bilerp, tileXAndY);
40}
41
42void GrTextureAccess::reset(GrTexture* texture,
43 const char* swizzle,
44 const GrTextureParams& params) {
bsalomon@google.com6d003d12012-09-11 15:45:20 +000045 GrAssert(NULL != texture);
46 GrAssert(strlen(swizzle) >= 1 && strlen(swizzle) <= 4);
47
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000048 fParams = params;
49 fTexture.reset(SkRef(texture));
50 this->setSwizzle(swizzle);
51}
bsalomon@google.com6d003d12012-09-11 15:45:20 +000052
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000053void GrTextureAccess::reset(GrTexture* texture,
54 const char* swizzle,
55 bool bilerp,
56 SkShader::TileMode tileXAndY) {
57 GrAssert(NULL != texture);
58 GrAssert(strlen(swizzle) >= 1 && strlen(swizzle) <= 4);
59
60 fParams.reset(tileXAndY, bilerp);
61 fTexture.reset(SkRef(texture));
62 this->setSwizzle(swizzle);
63}
64
65void GrTextureAccess::reset(GrTexture* texture,
66 const GrTextureParams& params) {
67 GrAssert(NULL != texture);
68 fTexture.reset(SkRef(texture));
69 fParams = params;
70 memcpy(fSwizzle, "rgba", 5);
71 fSwizzleMask = (kRGB_SwizzleMask | kA_SwizzleFlag);
72}
73
74void GrTextureAccess::reset(GrTexture* texture,
75 bool bilerp,
76 SkShader::TileMode tileXAndY) {
77 GrAssert(NULL != texture);
78 fTexture.reset(SkRef(texture));
79 fParams.reset(tileXAndY, bilerp);
80 memcpy(fSwizzle, "rgba", 5);
81 fSwizzleMask = (kRGB_SwizzleMask | kA_SwizzleFlag);
82}
83
84void GrTextureAccess::setSwizzle(const char* swizzle) {
bsalomon@google.com6d003d12012-09-11 15:45:20 +000085 fSwizzleMask = 0;
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000086 memset(fSwizzle, '\0', 5);
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000087 for (int i = 0; i < 4 && '\0' != swizzle[i]; ++i) {
bsalomon@google.com6d003d12012-09-11 15:45:20 +000088 fSwizzle[i] = swizzle[i];
89 switch (swizzle[i]) {
90 case 'r':
91 fSwizzleMask |= kR_SwizzleFlag;
92 break;
93 case 'g':
94 fSwizzleMask |= kG_SwizzleFlag;
95 break;
96 case 'b':
97 fSwizzleMask |= kB_SwizzleFlag;
98 break;
99 case 'a':
100 fSwizzleMask |= kA_SwizzleFlag;
101 break;
bsalomon@google.com6d003d12012-09-11 15:45:20 +0000102 default:
103 GrCrash("Unexpected swizzle string character.");
104 break;
105 }
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +0000106 }
bsalomon@google.com6d003d12012-09-11 15:45:20 +0000107}