Wrap all GrCustomStage textures in GrTextureAccess, remove StageDesc::fInConfigFlags
Review URL: https://codereview.appspot.com/6494114
git-svn-id: http://skia.googlecode.com/svn/trunk@5485 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrTextureAccess.cpp b/src/gpu/GrTextureAccess.cpp
index 155f682..c3c8038 100644
--- a/src/gpu/GrTextureAccess.cpp
+++ b/src/gpu/GrTextureAccess.cpp
@@ -6,16 +6,62 @@
*/
#include "GrTextureAccess.h"
-#include "SkString.h"
-GrTextureAccess::GrTextureAccess(const GrTexture* texture, const SkString& swizzle)
- : fTexture(texture) {
- GrAssert(swizzle.size() <= 4);
- for (unsigned int offset = 0; offset < swizzle.size(); ++offset) {
- fSwizzle[offset] = swizzle[offset];
- }
- if (swizzle.size() < 4) {
- fSwizzle[swizzle.size()] = 0;
- }
+#include "GrTexture.h"
+
+GrTextureAccess::GrTextureAccess() {
+#if GR_DEBUG
+ memcpy(fSwizzle, "void", 5);
+ fSwizzleMask = 0xbeeffeed;
+#endif
}
+GrTextureAccess::GrTextureAccess(GrTexture* texture, const char* swizzle) {
+ this->reset(texture, swizzle);
+}
+
+GrTextureAccess::GrTextureAccess(GrTexture* texture) {
+ this->reset(texture);
+}
+
+void GrTextureAccess::reset(GrTexture* texture, const char* swizzle) {
+ GrAssert(NULL != texture);
+ GrAssert(strlen(swizzle) >= 1 && strlen(swizzle) <= 4);
+
+ texture->ref();
+ fTexture.reset(texture);
+
+ fSwizzleMask = 0;
+ fSwizzle[4] = '\0';
+ int i = 0;
+ do {
+ fSwizzle[i] = swizzle[i];
+ switch (swizzle[i]) {
+ case 'r':
+ fSwizzleMask |= kR_SwizzleFlag;
+ break;
+ case 'g':
+ fSwizzleMask |= kG_SwizzleFlag;
+ break;
+ case 'b':
+ fSwizzleMask |= kB_SwizzleFlag;
+ break;
+ case 'a':
+ fSwizzleMask |= kA_SwizzleFlag;
+ break;
+ case '\0':
+ break;
+ default:
+ GrCrash("Unexpected swizzle string character.");
+ break;
+ }
+ } while ('\0' != swizzle[i] && ++i < 4);
+}
+
+void GrTextureAccess::reset(GrTexture* texture) {
+ GrAssert(NULL != texture);
+ texture->ref();
+ fTexture.reset(texture);
+ memcpy(fSwizzle, "rgba", 5);
+ fSwizzleMask = (kRGB_SwizzleMask | kA_SwizzleFlag);
+}