13390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org/* 23390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org * Copyright 2013 Google Inc. 33390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org * 43390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 53390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org * found in the LICENSE file. 63390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org */ 73390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org 83390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org#include "GrGLProgramEffects.h" 9b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt#include "gl/GrGLProcessor.h" 10ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen#include "gl/GrGLPathRendering.h" 11408d6125b32c86e1f81ce60465e3bf4491e755fcjoshualitt#include "gl/builders/GrGLFullProgramBuilder.h" 12408d6125b32c86e1f81ce60465e3bf4491e755fcjoshualitt#include "gl/builders/GrGLFragmentOnlyProgramBuilder.h" 13249af15fb82833d2274850c589812b6e69df0033joshualitt#include "gl/GrGLGeometryProcessor.h" 143390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org#include "gl/GrGpuGL.h" 153390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org 16b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TransformedCoords TransformedCoords; 17b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TransformedCoordsArray TransformedCoordsArray; 18b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TextureSampler TextureSampler; 19b0a8a377f832c59cee939ad721e1f87d378b7142joshualitttypedef GrGLProcessor::TextureSamplerArray TextureSamplerArray; 203390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org 213390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.orgnamespace { 226b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org/** 236b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org * Retrieves the final matrix that a transform needs to apply to its source coords. 246b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org */ 25b0a8a377f832c59cee939ad721e1f87d378b7142joshualittSkMatrix get_transform_matrix(const GrProcessorStage& effectStage, 2649586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt bool useExplicitLocalCoords, 2749586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt int transformIdx) { 28b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrCoordTransform& coordTransform = effectStage.getProcessor()->coordTransform(transformIdx); 296b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org SkMatrix combined; 300673676854da8051eb97515b601eb425b079e103bsalomon 310673676854da8051eb97515b601eb425b079e103bsalomon if (kLocal_GrCoordSet == coordTransform.sourceCoords()) { 320673676854da8051eb97515b601eb425b079e103bsalomon // If we have explicit local coords then we shouldn't need a coord change. 3349586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt const SkMatrix& ccm = 3449586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt useExplicitLocalCoords ? SkMatrix::I() : effectStage.getCoordChangeMatrix(); 3549586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt combined.setConcat(coordTransform.getMatrix(), ccm); 366b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } else { 376b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org combined = coordTransform.getMatrix(); 386b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } 396b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org if (coordTransform.reverseY()) { 406b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org // combined.postScale(1,-1); 416b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org // combined.postTranslate(0,1); 426b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org combined.set(SkMatrix::kMSkewY, 436b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org combined[SkMatrix::kMPersp0] - combined[SkMatrix::kMSkewY]); 446b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org combined.set(SkMatrix::kMScaleY, 456b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org combined[SkMatrix::kMPersp1] - combined[SkMatrix::kMScaleY]); 466b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org combined.set(SkMatrix::kMTransY, 476b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org combined[SkMatrix::kMPersp2] - combined[SkMatrix::kMTransY]); 486b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } 496b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org return combined; 506b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org} 516b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org} 526b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 536b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org//////////////////////////////////////////////////////////////////////////////// 546b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 553390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.orgGrGLProgramEffects::~GrGLProgramEffects() { 56b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int numEffects = fGLProcessors.count(); 573390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org for (int e = 0; e < numEffects; ++e) { 58b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkDELETE(fGLProcessors[e]); 593390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org } 603390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org} 613390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org 627510b224e52b9518a8ddf7418db0e9c258f79539kkinnunenvoid GrGLProgramEffects::initSamplers(const GrGLProgramDataManager& programResourceManager, int* texUnitIdx) { 63b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int numEffects = fGLProcessors.count(); 643390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org SkASSERT(numEffects == fSamplers.count()); 653390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org for (int e = 0; e < numEffects; ++e) { 663390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org SkTArray<Sampler, true>& samplers = fSamplers[e]; 673390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org int numSamplers = samplers.count(); 683390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org for (int s = 0; s < numSamplers; ++s) { 693390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org SkASSERT(samplers[s].fUniform.isValid()); 707510b224e52b9518a8ddf7418db0e9c258f79539kkinnunen programResourceManager.setSampler(samplers[s].fUniform, *texUnitIdx); 713390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org samplers[s].fTextureUnit = (*texUnitIdx)++; 723390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org } 733390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org } 743390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org} 753390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org 76b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrGLProgramEffects::bindTextures(GrGpuGL* gpu, const GrProcessor& effect, int effectIdx) { 773390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org const SkTArray<Sampler, true>& samplers = fSamplers[effectIdx]; 783390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org int numSamplers = samplers.count(); 7949586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt SkASSERT(numSamplers == effect.numTextures()); 803390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org for (int s = 0; s < numSamplers; ++s) { 813390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org SkASSERT(samplers[s].fTextureUnit >= 0); 8249586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt const GrTextureAccess& textureAccess = effect.textureAccess(s); 833390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org gpu->bindTexture(samplers[s].fTextureUnit, 843390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org textureAccess.getParams(), 853390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org static_cast<GrGLTexture*>(textureAccess.getTexture())); 863390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org } 873390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org} 883390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org 893390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org//////////////////////////////////////////////////////////////////////////////// 903390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org 916b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.orgvoid GrGLVertexProgramEffects::setData(GrGpuGL* gpu, 92ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen GrGpu::DrawType drawType, 93ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen const GrGLProgramDataManager& programDataManager, 94b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrGeometryStage* effectStages) { 95b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkASSERT(1 == fGLProcessors.count()); 96b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkASSERT(1 == fTransforms.count()); 97b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkASSERT(1 == fSamplers.count()); 98b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->setDataInternal(gpu, drawType, programDataManager, *effectStages, 0); 99b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt} 100b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt 101b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrGLVertexProgramEffects::setData(GrGpuGL* gpu, 102b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrGpu::DrawType drawType, 103b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrGLProgramDataManager& programDataManager, 104b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrFragmentStage* effectStages[]) { 105b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int numEffects = fGLProcessors.count(); 1066b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org SkASSERT(numEffects == fTransforms.count()); 1076b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org SkASSERT(numEffects == fSamplers.count()); 1086b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org for (int e = 0; e < numEffects; ++e) { 109b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->setDataInternal(gpu, drawType, programDataManager, *effectStages[e], e); 110b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt } 111b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt} 112ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen 113b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrGLVertexProgramEffects::setDataInternal(GrGpuGL* gpu, 114b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrGpu::DrawType drawType, 115b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrGLProgramDataManager& programDataManager, 116b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrProcessorStage& effectStage, 117b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int index) { 118b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrProcessor& effect = *effectStage.getProcessor(); 119b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt fGLProcessors[index]->setData(programDataManager, effect); 120b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt if (GrGpu::IsPathRenderingDrawType(drawType)) { 121b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->setPathTransformData(gpu, programDataManager, effectStage, index); 122b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt } else { 123b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->setTransformData(gpu, programDataManager, effectStage, index); 1246b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } 125b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->bindTextures(gpu, effect, index); 1266b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org} 1276b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 128ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunenvoid GrGLVertexProgramEffects::setTransformData(GrGpuGL* gpu, 129ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen const GrGLProgramDataManager& pdman, 130b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrProcessorStage& effectStage, 1316b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org int effectIdx) { 1326b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org SkTArray<Transform, true>& transforms = fTransforms[effectIdx]; 1336b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org int numTransforms = transforms.count(); 134b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkASSERT(numTransforms == effectStage.getProcessor()->numTransforms()); 1356b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org for (int t = 0; t < numTransforms; ++t) { 1364c6443e86927c8cbf794d7c154470b9675aa7778egdaniel SkASSERT(transforms[t].fHandle.isValid()); 13749586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt const SkMatrix& matrix = get_transform_matrix(effectStage, fHasExplicitLocalCoords, t); 1384c6443e86927c8cbf794d7c154470b9675aa7778egdaniel if (!transforms[t].fCurrentValue.cheapEqualTo(matrix)) { 139ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen pdman.setSkMatrix(transforms[t].fHandle, matrix); 1404c6443e86927c8cbf794d7c154470b9675aa7778egdaniel transforms[t].fCurrentValue = matrix; 1416b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } 1426b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } 1436b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org} 1446b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 145ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunenvoid GrGLVertexProgramEffects::setPathTransformData(GrGpuGL* gpu, 146ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen const GrGLProgramDataManager& pdman, 147b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrProcessorStage& effectStage, 148ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen int effectIdx) { 149ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen SkTArray<PathTransform, true>& transforms = fPathTransforms[effectIdx]; 150ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen int numTransforms = transforms.count(); 151b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkASSERT(numTransforms == effectStage.getProcessor()->numTransforms()); 152ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen for (int t = 0; t < numTransforms; ++t) { 153ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen SkASSERT(transforms[t].fHandle.isValid()); 15449586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt const SkMatrix& transform = get_transform_matrix(effectStage, fHasExplicitLocalCoords, t); 155ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen if (transforms[t].fCurrentValue.cheapEqualTo(transform)) { 156ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen continue; 157ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen } 158ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen transforms[t].fCurrentValue = transform; 159ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen switch (transforms[t].fType) { 160ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen case kVec2f_GrSLType: 161ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen pdman.setProgramPathFragmentInputTransform(transforms[t].fHandle, 2, transform); 162ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen break; 163ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen case kVec3f_GrSLType: 164ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen pdman.setProgramPathFragmentInputTransform(transforms[t].fHandle, 3, transform); 165ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen break; 166ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen default: 167ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen SkFAIL("Unexpected matrix type."); 168ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen } 169ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen } 170ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen} 171ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen 1726b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org//////////////////////////////////////////////////////////////////////////////// 1736b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 1740a6fe71f1bc0e601b41b7ae6d28b8c96a2c41116commit-bot@chromium.orgvoid GrGLPathTexGenProgramEffects::setData(GrGpuGL* gpu, 175ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen GrGpu::DrawType, 176ec56e4545477e30d4f165ca55ed99f90525c6c38kkinnunen const GrGLProgramDataManager& pdman, 177b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrFragmentStage* effectStages[]) { 178b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int numEffects = fGLProcessors.count(); 1796b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org SkASSERT(numEffects == fTransforms.count()); 1806b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org SkASSERT(numEffects == fSamplers.count()); 1816b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org for (int e = 0; e < numEffects; ++e) { 182b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrProcessorStage& effectStage = *effectStages[e]; 183b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrProcessor& effect = *effectStage.getProcessor(); 184b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt fGLProcessors[e]->setData(pdman, effect); 18549586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt this->setPathTexGenState(gpu, effectStage, e); 18649586bec7383d4ccb81f85f8e2dc4162e2d4f6a8joshualitt this->bindTextures(gpu, effect, e); 1873390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org } 1883390b9ac9ad69a6e772c2b957d75d19611239025commit-bot@chromium.org} 1896b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org 1900a6fe71f1bc0e601b41b7ae6d28b8c96a2c41116commit-bot@chromium.orgvoid GrGLPathTexGenProgramEffects::setPathTexGenState(GrGpuGL* gpu, 191b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt const GrProcessorStage& effectStage, 1926b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org int effectIdx) { 1936b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org int texCoordIndex = fTransforms[effectIdx].fTexCoordIndex; 194b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt int numTransforms = effectStage.getProcessor()->numTransforms(); 1956b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org for (int t = 0; t < numTransforms; ++t) { 19623e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt const SkMatrix& transform = get_transform_matrix(effectStage, false, t); 19723e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt GrGLPathRendering::PathTexGenComponents components = 19823e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt GrGLPathRendering::kST_PathTexGenComponents; 19923e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt if (effectStage.isPerspectiveCoordTransform(t, false)) { 20023e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt components = GrGLPathRendering::kSTR_PathTexGenComponents; 2016b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } 20223e280d1f227d94f6b3dfd0b47359cca1569e1b4joshualitt gpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, transform); 2036b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org } 2046b30e457409f37c91c301cd82040e733e2930286commit-bot@chromium.org} 205