blob: 1156ec21585be17dc77e5eb618b01a84d092bbd2 [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.com6d003d12012-09-11 15:45:20 +000087 int i = 0;
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +000088 for (int i = 0; i < 4 && '\0' != swizzle[i]; ++i) {
bsalomon@google.com6d003d12012-09-11 15:45:20 +000089 fSwizzle[i] = swizzle[i];
90 switch (swizzle[i]) {
91 case 'r':
92 fSwizzleMask |= kR_SwizzleFlag;
93 break;
94 case 'g':
95 fSwizzleMask |= kG_SwizzleFlag;
96 break;
97 case 'b':
98 fSwizzleMask |= kB_SwizzleFlag;
99 break;
100 case 'a':
101 fSwizzleMask |= kA_SwizzleFlag;
102 break;
bsalomon@google.com6d003d12012-09-11 15:45:20 +0000103 default:
104 GrCrash("Unexpected swizzle string character.");
105 break;
106 }
bsalomon@google.com1ce49fc2012-09-18 14:14:49 +0000107 }
bsalomon@google.com6d003d12012-09-11 15:45:20 +0000108}