| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2013 Google Inc. | 2  * Copyright 2013 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 "GrGLProgramEffects.h" | 8 #include "GrGLProgramEffects.h" | 
| 9 #include "GrDrawEffect.h" | 9 #include "GrDrawEffect.h" | 
| 10 #include "gl/GrGLEffect.h" | 10 #include "gl/GrGLEffect.h" | 
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 211     for (int t = 0; t < numTextures; ++t) { | 211     for (int t = 0; t < numTextures; ++t) { | 
| 212         name.printf("Sampler%d", t); | 212         name.printf("Sampler%d", t); | 
| 213         samplers[t].fUniform = builder->addUniform(GrGLShaderBuilder::kFragment_
     Visibility, | 213         samplers[t].fUniform = builder->addUniform(GrGLShaderBuilder::kFragment_
     Visibility, | 
| 214                                                    kSampler2D_GrSLType, | 214                                                    kSampler2D_GrSLType, | 
| 215                                                    name.c_str()); | 215                                                    name.c_str()); | 
| 216         SkNEW_APPEND_TO_TARRAY(outSamplers, TextureSampler, | 216         SkNEW_APPEND_TO_TARRAY(outSamplers, TextureSampler, | 
| 217                                (samplers[t].fUniform, effect->textureAccess(t)))
     ; | 217                                (samplers[t].fUniform, effect->textureAccess(t)))
     ; | 
| 218     } | 218     } | 
| 219 } | 219 } | 
| 220 | 220 | 
| 221 void GrGLProgramEffects::initSamplers(const GrGLUniformManager& uniformManager, 
     int* texUnitIdx) { | 221 void GrGLProgramEffects::initSamplers(const GrGLProgramDataManager& programResou
     rceManager, int* texUnitIdx) { | 
| 222     int numEffects = fGLEffects.count(); | 222     int numEffects = fGLEffects.count(); | 
| 223     SkASSERT(numEffects == fSamplers.count()); | 223     SkASSERT(numEffects == fSamplers.count()); | 
| 224     for (int e = 0; e < numEffects; ++e) { | 224     for (int e = 0; e < numEffects; ++e) { | 
| 225         SkTArray<Sampler, true>& samplers = fSamplers[e]; | 225         SkTArray<Sampler, true>& samplers = fSamplers[e]; | 
| 226         int numSamplers = samplers.count(); | 226         int numSamplers = samplers.count(); | 
| 227         for (int s = 0; s < numSamplers; ++s) { | 227         for (int s = 0; s < numSamplers; ++s) { | 
| 228             SkASSERT(samplers[s].fUniform.isValid()); | 228             SkASSERT(samplers[s].fUniform.isValid()); | 
| 229             uniformManager.setSampler(samplers[s].fUniform, *texUnitIdx); | 229             programResourceManager.setSampler(samplers[s].fUniform, *texUnitIdx)
     ; | 
| 230             samplers[s].fTextureUnit = (*texUnitIdx)++; | 230             samplers[s].fTextureUnit = (*texUnitIdx)++; | 
| 231         } | 231         } | 
| 232     } | 232     } | 
| 233 } | 233 } | 
| 234 | 234 | 
| 235 void GrGLProgramEffects::bindTextures(GrGpuGL* gpu, const GrEffect* effect, int 
     effectIdx) { | 235 void GrGLProgramEffects::bindTextures(GrGpuGL* gpu, const GrEffect* effect, int 
     effectIdx) { | 
| 236     const SkTArray<Sampler, true>& samplers = fSamplers[effectIdx]; | 236     const SkTArray<Sampler, true>& samplers = fSamplers[effectIdx]; | 
| 237     int numSamplers = samplers.count(); | 237     int numSamplers = samplers.count(); | 
| 238     SkASSERT(numSamplers == effect->numTextures()); | 238     SkASSERT(numSamplers == effect->numTextures()); | 
| 239     for (int s = 0; s < numSamplers; ++s) { | 239     for (int s = 0; s < numSamplers; ++s) { | 
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 351         } else { | 351         } else { | 
| 352             builder->vsCodeAppendf("\t%s = %s * vec3(%s, 1);\n", | 352             builder->vsCodeAppendf("\t%s = %s * vec3(%s, 1);\n", | 
| 353                                    vsVaryingName, uniName, coords.c_str()); | 353                                    vsVaryingName, uniName, coords.c_str()); | 
| 354         } | 354         } | 
| 355         SkNEW_APPEND_TO_TARRAY(outCoords, TransformedCoords, | 355         SkNEW_APPEND_TO_TARRAY(outCoords, TransformedCoords, | 
| 356                                (SkString(fsVaryingName), varyingType)); | 356                                (SkString(fsVaryingName), varyingType)); | 
| 357     } | 357     } | 
| 358 } | 358 } | 
| 359 | 359 | 
| 360 void GrGLVertexProgramEffects::setData(GrGpuGL* gpu, | 360 void GrGLVertexProgramEffects::setData(GrGpuGL* gpu, | 
| 361                                        const GrGLUniformManager& uniformManager, | 361                                        const GrGLProgramDataManager& programReso
     urceManager, | 
| 362                                        const GrEffectStage* effectStages[]) { | 362                                        const GrEffectStage* effectStages[]) { | 
| 363     int numEffects = fGLEffects.count(); | 363     int numEffects = fGLEffects.count(); | 
| 364     SkASSERT(numEffects == fTransforms.count()); | 364     SkASSERT(numEffects == fTransforms.count()); | 
| 365     SkASSERT(numEffects == fSamplers.count()); | 365     SkASSERT(numEffects == fSamplers.count()); | 
| 366     for (int e = 0; e < numEffects; ++e) { | 366     for (int e = 0; e < numEffects; ++e) { | 
| 367         GrDrawEffect drawEffect(*effectStages[e], fHasExplicitLocalCoords); | 367         GrDrawEffect drawEffect(*effectStages[e], fHasExplicitLocalCoords); | 
| 368         fGLEffects[e]->setData(uniformManager, drawEffect); | 368         fGLEffects[e]->setData(programResourceManager, drawEffect); | 
| 369         this->setTransformData(uniformManager, drawEffect, e); | 369         this->setTransformData(programResourceManager, drawEffect, e); | 
| 370         this->bindTextures(gpu, drawEffect.effect(), e); | 370         this->bindTextures(gpu, drawEffect.effect(), e); | 
| 371     } | 371     } | 
| 372 } | 372 } | 
| 373 | 373 | 
| 374 void GrGLVertexProgramEffects::setTransformData(const GrGLUniformManager& unifor
     mManager, | 374 void GrGLVertexProgramEffects::setTransformData(const GrGLProgramDataManager& pr
     ogramResourceManager, | 
| 375                                                 const GrDrawEffect& drawEffect, | 375                                                 const GrDrawEffect& drawEffect, | 
| 376                                                 int effectIdx) { | 376                                                 int effectIdx) { | 
| 377     SkTArray<Transform, true>& transforms = fTransforms[effectIdx]; | 377     SkTArray<Transform, true>& transforms = fTransforms[effectIdx]; | 
| 378     int numTransforms = transforms.count(); | 378     int numTransforms = transforms.count(); | 
| 379     SkASSERT(numTransforms == drawEffect.effect()->numTransforms()); | 379     SkASSERT(numTransforms == drawEffect.effect()->numTransforms()); | 
| 380     for (int t = 0; t < numTransforms; ++t) { | 380     for (int t = 0; t < numTransforms; ++t) { | 
| 381         SkASSERT(transforms[t].fHandle.isValid()); | 381         SkASSERT(transforms[t].fHandle.isValid()); | 
| 382         const SkMatrix& matrix = get_transform_matrix(drawEffect, t); | 382         const SkMatrix& matrix = get_transform_matrix(drawEffect, t); | 
| 383         if (!transforms[t].fCurrentValue.cheapEqualTo(matrix)) { | 383         if (!transforms[t].fCurrentValue.cheapEqualTo(matrix)) { | 
| 384             uniformManager.setSkMatrix(transforms[t].fHandle, matrix); | 384             programResourceManager.setSkMatrix(transforms[t].fHandle, matrix); | 
| 385             transforms[t].fCurrentValue = matrix; | 385             transforms[t].fCurrentValue = matrix; | 
| 386         } | 386         } | 
| 387     } | 387     } | 
| 388 } | 388 } | 
| 389 | 389 | 
| 390 GrGLVertexProgramEffectsBuilder::GrGLVertexProgramEffectsBuilder(GrGLFullShaderB
     uilder* builder, | 390 GrGLVertexProgramEffectsBuilder::GrGLVertexProgramEffectsBuilder(GrGLFullShaderB
     uilder* builder, | 
| 391                                                                  int reserveCoun
     t) | 391                                                                  int reserveCoun
     t) | 
| 392     : fBuilder(builder) | 392     : fBuilder(builder) | 
| 393     , fProgramEffects(SkNEW_ARGS(GrGLVertexProgramEffects, | 393     , fProgramEffects(SkNEW_ARGS(GrGLVertexProgramEffects, | 
| 394                                  (reserveCount, fBuilder->hasExplicitLocalCoords
     ()))) { | 394                                  (reserveCount, fBuilder->hasExplicitLocalCoords
     ()))) { | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 445     for (int t = 0; t < numTransforms; ++t) { | 445     for (int t = 0; t < numTransforms; ++t) { | 
| 446         GrSLType type = kGeneral_MatrixType == get_matrix_type(totalKey, t) ? | 446         GrSLType type = kGeneral_MatrixType == get_matrix_type(totalKey, t) ? | 
| 447                             kVec3f_GrSLType : | 447                             kVec3f_GrSLType : | 
| 448                             kVec2f_GrSLType; | 448                             kVec2f_GrSLType; | 
| 449         name.printf("%s(gl_TexCoord[%i])", GrGLSLTypeString(type), texCoordIndex
     ++); | 449         name.printf("%s(gl_TexCoord[%i])", GrGLSLTypeString(type), texCoordIndex
     ++); | 
| 450         SkNEW_APPEND_TO_TARRAY(outCoords, TransformedCoords, (name, type)); | 450         SkNEW_APPEND_TO_TARRAY(outCoords, TransformedCoords, (name, type)); | 
| 451     } | 451     } | 
| 452 } | 452 } | 
| 453 | 453 | 
| 454 void GrGLPathTexGenProgramEffects::setData(GrGpuGL* gpu, | 454 void GrGLPathTexGenProgramEffects::setData(GrGpuGL* gpu, | 
| 455                                        const GrGLUniformManager& uniformManager, | 455                                        const GrGLProgramDataManager& programReso
     urceManager, | 
| 456                                        const GrEffectStage* effectStages[]) { | 456                                        const GrEffectStage* effectStages[]) { | 
| 457     int numEffects = fGLEffects.count(); | 457     int numEffects = fGLEffects.count(); | 
| 458     SkASSERT(numEffects == fTransforms.count()); | 458     SkASSERT(numEffects == fTransforms.count()); | 
| 459     SkASSERT(numEffects == fSamplers.count()); | 459     SkASSERT(numEffects == fSamplers.count()); | 
| 460     for (int e = 0; e < numEffects; ++e) { | 460     for (int e = 0; e < numEffects; ++e) { | 
| 461         GrDrawEffect drawEffect(*effectStages[e], false); | 461         GrDrawEffect drawEffect(*effectStages[e], false); | 
| 462         fGLEffects[e]->setData(uniformManager, drawEffect); | 462         fGLEffects[e]->setData(programResourceManager, drawEffect); | 
| 463         this->setPathTexGenState(gpu, drawEffect, e); | 463         this->setPathTexGenState(gpu, drawEffect, e); | 
| 464         this->bindTextures(gpu, drawEffect.effect(), e); | 464         this->bindTextures(gpu, drawEffect.effect(), e); | 
| 465     } | 465     } | 
| 466 } | 466 } | 
| 467 | 467 | 
| 468 void GrGLPathTexGenProgramEffects::setPathTexGenState(GrGpuGL* gpu, | 468 void GrGLPathTexGenProgramEffects::setPathTexGenState(GrGpuGL* gpu, | 
| 469                                               const GrDrawEffect& drawEffect, | 469                                               const GrDrawEffect& drawEffect, | 
| 470                                               int effectIdx) { | 470                                               int effectIdx) { | 
| 471     uint32_t totalKey = fTransforms[effectIdx].fTransformKey; | 471     uint32_t totalKey = fTransforms[effectIdx].fTransformKey; | 
| 472     int texCoordIndex = fTransforms[effectIdx].fTexCoordIndex; | 472     int texCoordIndex = fTransforms[effectIdx].fTexCoordIndex; | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 501 } | 501 } | 
| 502 | 502 | 
| 503 void GrGLPathTexGenProgramEffectsBuilder::emitEffect(const GrEffectStage& stage, | 503 void GrGLPathTexGenProgramEffectsBuilder::emitEffect(const GrEffectStage& stage, | 
| 504                                                      const GrEffectKey& key, | 504                                                      const GrEffectKey& key, | 
| 505                                                      const char* outColor, | 505                                                      const char* outColor, | 
| 506                                                      const char* inColor, | 506                                                      const char* inColor, | 
| 507                                                      int stageIndex) { | 507                                                      int stageIndex) { | 
| 508     SkASSERT(NULL != fProgramEffects.get()); | 508     SkASSERT(NULL != fProgramEffects.get()); | 
| 509     fProgramEffects->emitEffect(fBuilder, stage, key, outColor, inColor, stageIn
     dex); | 509     fProgramEffects->emitEffect(fBuilder, stage, key, outColor, inColor, stageIn
     dex); | 
| 510 } | 510 } | 
| OLD | NEW | 
|---|