Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: src/gpu/gl/GrGLEffectMatrix.cpp

Issue 23754003: Isolate VertexBuilder from GrGLShaderBuilder (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/gpu/effects/GrSimpleTextureEffect.cpp ('k') | src/gpu/gl/GrGLProgram.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrSimpleTextureEffect.cpp ('k') | src/gpu/gl/GrGLProgram.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698