| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrGLEffectMatrix.h" | 8 #include "GrGLEffectMatrix.h" |
| 9 #include "GrDrawEffect.h" | 9 #include "GrDrawEffect.h" |
| 10 #include "GrTexture.h" | 10 #include "GrTexture.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 key |= kIdentity_MatrixType; | 41 key |= kIdentity_MatrixType; |
| 42 } | 42 } |
| 43 return key; | 43 return key; |
| 44 } | 44 } |
| 45 | 45 |
| 46 GrSLType GrGLEffectMatrix::emitCode(GrGLShaderBuilder* builder, | 46 GrSLType GrGLEffectMatrix::emitCode(GrGLShaderBuilder* builder, |
| 47 EffectKey key, | 47 EffectKey key, |
| 48 SkString* fsCoordName, | 48 SkString* fsCoordName, |
| 49 SkString* vsCoordName, | 49 SkString* vsCoordName, |
| 50 const char* suffix) { | 50 const char* suffix) { |
| 51 GrGLShaderBuilder::VertexBuilder* vertexBuilder = builder->getVertexBuilder(
); |
| 52 SkASSERT(NULL != vertexBuilder); |
| 53 |
| 51 GrSLType varyingType = kVoid_GrSLType; | 54 GrSLType varyingType = kVoid_GrSLType; |
| 52 const char* uniName; | 55 const char* uniName; |
| 53 key &= kKeyMask; | 56 key &= kKeyMask; |
| 54 switch (key & kMatrixTypeKeyMask) { | 57 switch (key & kMatrixTypeKeyMask) { |
| 55 case kIdentity_MatrixType: | 58 case kIdentity_MatrixType: |
| 56 fUniType = kVoid_GrSLType; | 59 fUniType = kVoid_GrSLType; |
| 57 varyingType = kVec2f_GrSLType; | 60 varyingType = kVec2f_GrSLType; |
| 58 break; | 61 break; |
| 59 case kTrans_MatrixType: | 62 case kTrans_MatrixType: |
| 60 fUniType = kVec2f_GrSLType; | 63 fUniType = kVec2f_GrSLType; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 89 | 92 |
| 90 const char* varyingName = "MatrixCoord"; | 93 const char* varyingName = "MatrixCoord"; |
| 91 SkString suffixedVaryingName; | 94 SkString suffixedVaryingName; |
| 92 if (NULL != suffix) { | 95 if (NULL != suffix) { |
| 93 suffixedVaryingName.append(varyingName); | 96 suffixedVaryingName.append(varyingName); |
| 94 suffixedVaryingName.append(suffix); | 97 suffixedVaryingName.append(suffix); |
| 95 varyingName = suffixedVaryingName.c_str(); | 98 varyingName = suffixedVaryingName.c_str(); |
| 96 } | 99 } |
| 97 const char* vsVaryingName; | 100 const char* vsVaryingName; |
| 98 const char* fsVaryingName; | 101 const char* fsVaryingName; |
| 99 builder->addVarying(varyingType, varyingName, &vsVaryingName, &fsVaryingName
); | 102 vertexBuilder->addVarying(varyingType, varyingName, &vsVaryingName, &fsVaryi
ngName); |
| 100 | 103 |
| 101 const GrGLShaderVar* coords; | 104 const GrGLShaderVar* coords; |
| 102 switch (fCoordsType) { | 105 switch (fCoordsType) { |
| 103 case GrEffect::kLocal_CoordsType: | 106 case GrEffect::kLocal_CoordsType: |
| 104 SkASSERT(!(kPositionCoords_Flag & key)); | 107 SkASSERT(!(kPositionCoords_Flag & key)); |
| 105 coords = &builder->localCoordsAttribute(); | 108 coords = &vertexBuilder->localCoordsAttribute(); |
| 106 break; | 109 break; |
| 107 case GrEffect::kPosition_CoordsType: | 110 case GrEffect::kPosition_CoordsType: |
| 108 SkASSERT((kPositionCoords_Flag & key) || !builder->hasExplicitLocalC
oords()); | 111 SkASSERT((kPositionCoords_Flag & key) || !vertexBuilder->hasExplicit
LocalCoords()); |
| 109 coords = &builder->positionAttribute(); | 112 coords = &vertexBuilder->positionAttribute(); |
| 110 break; | 113 break; |
| 111 default: | 114 default: |
| 112 coords = NULL; // prevents warning | 115 coords = NULL; // prevents warning |
| 113 GrCrash("Unexpected coords type."); | 116 GrCrash("Unexpected coords type."); |
| 114 } | 117 } |
| 115 // varying = matrix * coords (logically) | 118 // varying = matrix * coords (logically) |
| 116 switch (fUniType) { | 119 switch (fUniType) { |
| 117 case kVoid_GrSLType: | 120 case kVoid_GrSLType: |
| 118 SkASSERT(kVec2f_GrSLType == varyingType); | 121 SkASSERT(kVec2f_GrSLType == varyingType); |
| 119 builder->vsCodeAppendf("\t%s = %s;\n", vsVaryingName, coords->c_str(
)); | 122 vertexBuilder->vsCodeAppendf("\t%s = %s;\n", vsVaryingName, coords->
c_str()); |
| 120 break; | 123 break; |
| 121 case kVec2f_GrSLType: | 124 case kVec2f_GrSLType: |
| 122 SkASSERT(kVec2f_GrSLType == varyingType); | 125 SkASSERT(kVec2f_GrSLType == varyingType); |
| 123 builder->vsCodeAppendf("\t%s = %s + %s;\n", | 126 vertexBuilder->vsCodeAppendf("\t%s = %s + %s;\n", |
| 124 vsVaryingName, uniName, coords->c_str()); | 127 vsVaryingName, uniName, coords->c_str()
); |
| 125 break; | 128 break; |
| 126 case kMat33f_GrSLType: { | 129 case kMat33f_GrSLType: { |
| 127 SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyin
gType); | 130 SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyin
gType); |
| 128 if (kVec2f_GrSLType == varyingType) { | 131 if (kVec2f_GrSLType == varyingType) { |
| 129 builder->vsCodeAppendf("\t%s = (%s * vec3(%s, 1)).xy;\n", | 132 vertexBuilder->vsCodeAppendf("\t%s = (%s * vec3(%s, 1)).xy;\n", |
| 130 vsVaryingName, uniName, coords->c_str()); | 133 vsVaryingName, uniName, coords->c_s
tr()); |
| 131 } else { | 134 } else { |
| 132 builder->vsCodeAppendf("\t%s = %s * vec3(%s, 1);\n", | 135 vertexBuilder->vsCodeAppendf("\t%s = %s * vec3(%s, 1);\n", |
| 133 vsVaryingName, uniName, coords->c_str()); | 136 vsVaryingName, uniName, coords->c_s
tr()); |
| 134 } | 137 } |
| 135 break; | 138 break; |
| 136 } | 139 } |
| 137 default: | 140 default: |
| 138 GrCrash("Unexpected uniform type."); | 141 GrCrash("Unexpected uniform type."); |
| 139 } | 142 } |
| 140 if (NULL != vsCoordName) { | 143 if (NULL != vsCoordName) { |
| 141 *vsCoordName = vsVaryingName; | 144 *vsCoordName = vsVaryingName; |
| 142 } | 145 } |
| 143 if (NULL != fsCoordName) { | 146 if (NULL != fsCoordName) { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 if (!fPrevMatrix.cheapEqualTo(combined)) { | 231 if (!fPrevMatrix.cheapEqualTo(combined)) { |
| 229 uniformManager.setSkMatrix(fUni, combined); | 232 uniformManager.setSkMatrix(fUni, combined); |
| 230 fPrevMatrix = combined; | 233 fPrevMatrix = combined; |
| 231 } | 234 } |
| 232 break; | 235 break; |
| 233 } | 236 } |
| 234 default: | 237 default: |
| 235 GrCrash("Unexpected uniform type."); | 238 GrCrash("Unexpected uniform type."); |
| 236 } | 239 } |
| 237 } | 240 } |
| OLD | NEW |