OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "GrGLGeometryProcessor.h" | 8 #include "GrGLGeometryProcessor.h" |
9 | 9 |
10 #include "builders/GrGLProgramBuilder.h" | 10 #include "builders/GrGLProgramBuilder.h" |
11 | 11 |
12 void GrGLGeometryProcessor::emitCode(EmitArgs& args) { | 12 void GrGLGeometryProcessor::emitCode(EmitArgs& args) { |
13 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); | 13 GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
14 GrGPArgs gpArgs; | 14 GrGPArgs gpArgs; |
15 this->onEmitCode(args, &gpArgs); | 15 this->onEmitCode(args, &gpArgs); |
16 vsBuilder->transformToNormalizedDeviceSpace(gpArgs.fPositionVar); | 16 vsBuilder->transformToNormalizedDeviceSpace(gpArgs.fPositionVar); |
17 } | 17 } |
18 | 18 |
19 void GrGLGeometryProcessor::emitTransforms(GrGLGPBuilder* pb, | 19 void GrGLGeometryProcessor::emitTransforms(GrGLGPBuilder* pb, |
20 const GrShaderVar& posVar, | 20 const GrShaderVar& posVar, |
21 const char* localCoords, | 21 const char* localCoords, |
22 const SkMatrix& localMatrix, | 22 const SkMatrix& localMatrix, |
23 const TransformsIn& tin, | 23 const TransformsIn& tin, |
24 TransformsOut* tout) { | 24 TransformsOut* tout) { |
| 25 fTransformedLocalCoords = false; |
25 GrGLVertexBuilder* vb = pb->getVertexShaderBuilder(); | 26 GrGLVertexBuilder* vb = pb->getVertexShaderBuilder(); |
26 tout->push_back_n(tin.count()); | 27 tout->push_back_n(tin.count()); |
27 fInstalledTransforms.push_back_n(tin.count()); | 28 fInstalledTransforms.push_back_n(tin.count()); |
28 for (int i = 0; i < tin.count(); i++) { | 29 for (int i = 0; i < tin.count(); i++) { |
29 const ProcCoords& coordTransforms = tin[i]; | 30 const ProcCoords& coordTransforms = tin[i]; |
30 fInstalledTransforms[i].push_back_n(coordTransforms.count()); | 31 fInstalledTransforms[i].push_back_n(coordTransforms.count()); |
31 for (int t = 0; t < coordTransforms.count(); t++) { | 32 for (int t = 0; t < coordTransforms.count(); t++) { |
32 SkString strUniName("StageMatrix"); | 33 SkString strUniName("StageMatrix"); |
33 strUniName.appendf("_%i_%i", i, t); | 34 strUniName.appendf("_%i_%i", i, t); |
34 GrSLType varyingType; | 35 GrSLType varyingType; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 } | 87 } |
87 } | 88 } |
88 } | 89 } |
89 } | 90 } |
90 } | 91 } |
91 | 92 |
92 void GrGLGeometryProcessor::emitTransforms(GrGLGPBuilder* pb, | 93 void GrGLGeometryProcessor::emitTransforms(GrGLGPBuilder* pb, |
93 const char* localCoords, | 94 const char* localCoords, |
94 const TransformsIn& tin, | 95 const TransformsIn& tin, |
95 TransformsOut* tout) { | 96 TransformsOut* tout) { |
| 97 fTransformedLocalCoords = true; |
96 GrGLVertexBuilder* vb = pb->getVertexShaderBuilder(); | 98 GrGLVertexBuilder* vb = pb->getVertexShaderBuilder(); |
97 tout->push_back_n(tin.count()); | 99 tout->push_back_n(tin.count()); |
98 for (int i = 0; i < tin.count(); i++) { | 100 for (int i = 0; i < tin.count(); i++) { |
99 const ProcCoords& coordTransforms = tin[i]; | 101 const ProcCoords& coordTransforms = tin[i]; |
100 for (int t = 0; t < coordTransforms.count(); t++) { | 102 for (int t = 0; t < coordTransforms.count(); t++) { |
101 GrSLType varyingType = kVec2f_GrSLType; | 103 GrSLType varyingType = kVec2f_GrSLType; |
102 | 104 |
103 // Device coords aren't supported | 105 // Device coords aren't supported |
104 GrCoordSet coordType = coordTransforms[t]->sourceCoords(); | 106 GrCoordSet coordType = coordTransforms[t]->sourceCoords(); |
105 SkASSERT(kDevice_GrCoordSet != coordType); | 107 SkASSERT(kDevice_GrCoordSet != coordType); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 gpArgs->fPositionVar.set(kVec2f_GrSLType, "pos2"); | 148 gpArgs->fPositionVar.set(kVec2f_GrSLType, "pos2"); |
147 vsBuilder->codeAppendf("vec2 %s = vec2(%s * vec3(%s, 1));", | 149 vsBuilder->codeAppendf("vec2 %s = vec2(%s * vec3(%s, 1));", |
148 gpArgs->fPositionVar.c_str(), viewMatrixName,
posName); | 150 gpArgs->fPositionVar.c_str(), viewMatrixName,
posName); |
149 } else { | 151 } else { |
150 gpArgs->fPositionVar.set(kVec3f_GrSLType, "pos3"); | 152 gpArgs->fPositionVar.set(kVec3f_GrSLType, "pos3"); |
151 vsBuilder->codeAppendf("vec3 %s = %s * vec3(%s, 1);", | 153 vsBuilder->codeAppendf("vec3 %s = %s * vec3(%s, 1);", |
152 gpArgs->fPositionVar.c_str(), viewMatrixName,
posName); | 154 gpArgs->fPositionVar.c_str(), viewMatrixName,
posName); |
153 } | 155 } |
154 } | 156 } |
155 } | 157 } |
OLD | NEW |