|
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 } |