| 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 "GrBitmapTextGeoProc.h" | 8 #include "GrBitmapTextGeoProc.h" |
| 9 #include "GrInvariantOutput.h" | 9 #include "GrInvariantOutput.h" |
| 10 #include "GrTexture.h" | 10 #include "GrTexture.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 | 24 |
| 25 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; | 25 GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; |
| 26 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; | 26 GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; |
| 27 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; | 27 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
| 28 | 28 |
| 29 // emit attributes | 29 // emit attributes |
| 30 varyingHandler->emitAttributes(cte); | 30 varyingHandler->emitAttributes(cte); |
| 31 | 31 |
| 32 // compute numbers to be hardcoded to convert texture coordinates from i
nt to float | 32 // compute numbers to be hardcoded to convert texture coordinates from i
nt to float |
| 33 SkASSERT(cte.numTextures() == 1); | 33 SkASSERT(cte.numTextures() == 1); |
| 34 SkDEBUGCODE(GrTexture* atlas = cte.textureAccess(0).getTexture()); | 34 GrTexture* atlas = cte.textureAccess(0).getTexture(); |
| 35 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()))
; | 35 SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()))
; |
| 36 SkScalar recipWidth = 1.0f / atlas->width(); |
| 37 SkScalar recipHeight = 1.0f / atlas->height(); |
| 36 | 38 |
| 37 GrGLSLVertToFrag v(kVec2f_GrSLType); | 39 GrGLSLVertToFrag v(kVec2f_GrSLType); |
| 38 varyingHandler->addVarying("TextureCoords", &v); | 40 varyingHandler->addVarying("TextureCoords", &v); |
| 39 vertBuilder->codeAppendf("%s = %s;", v.vsOut(), | 41 vertBuilder->codeAppendf("%s = vec2(%.*f, %.*f) * %s;", v.vsOut(), |
| 42 GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipWidth, |
| 43 GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipHeight, |
| 40 cte.inTextureCoords()->fName); | 44 cte.inTextureCoords()->fName); |
| 41 | 45 |
| 42 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; | 46 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; |
| 43 // Setup pass through color | 47 // Setup pass through color |
| 44 if (!cte.colorIgnored()) { | 48 if (!cte.colorIgnored()) { |
| 45 if (cte.hasVertexColor()) { | 49 if (cte.hasVertexColor()) { |
| 46 varyingHandler->addPassThroughAttribute(cte.inColor(), args.fOut
putColor); | 50 varyingHandler->addPassThroughAttribute(cte.inColor(), args.fOut
putColor); |
| 47 } else { | 51 } else { |
| 48 this->setupUniformColor(fragBuilder, uniformHandler, args.fOutpu
tColor, | 52 this->setupUniformColor(fragBuilder, uniformHandler, args.fOutpu
tColor, |
| 49 &fColorUniform); | 53 &fColorUniform); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 , fMaskFormat(format) { | 143 , fMaskFormat(format) { |
| 140 this->initClassID<GrBitmapTextGeoProc>(); | 144 this->initClassID<GrBitmapTextGeoProc>(); |
| 141 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 145 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
| 142 | 146 |
| 143 bool hasVertexColor = kA8_GrMaskFormat == fMaskFormat || | 147 bool hasVertexColor = kA8_GrMaskFormat == fMaskFormat || |
| 144 kA565_GrMaskFormat == fMaskFormat; | 148 kA565_GrMaskFormat == fMaskFormat; |
| 145 if (hasVertexColor) { | 149 if (hasVertexColor) { |
| 146 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA
ttribType)); | 150 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA
ttribType)); |
| 147 } | 151 } |
| 148 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", | 152 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", |
| 149 kVec2us_GrVertexAttribTy
pe)); | 153 kVec2s_GrVertexAttribTyp
e)); |
| 150 this->addTextureAccess(&fTextureAccess); | 154 this->addTextureAccess(&fTextureAccess); |
| 151 } | 155 } |
| 152 | 156 |
| 153 void GrBitmapTextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, | 157 void GrBitmapTextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, |
| 154 GrProcessorKeyBuilder* b) const { | 158 GrProcessorKeyBuilder* b) const { |
| 155 GrGLBitmapTextGeoProc::GenKey(*this, caps, b); | 159 GrGLBitmapTextGeoProc::GenKey(*this, caps, b); |
| 156 } | 160 } |
| 157 | 161 |
| 158 GrGLSLPrimitiveProcessor* GrBitmapTextGeoProc::createGLSLInstance(const GrGLSLCa
ps& caps) const { | 162 GrGLSLPrimitiveProcessor* GrBitmapTextGeoProc::createGLSLInstance(const GrGLSLCa
ps& caps) const { |
| 159 return new GrGLBitmapTextGeoProc(); | 163 return new GrGLBitmapTextGeoProc(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 188 break; | 192 break; |
| 189 case 2: | 193 case 2: |
| 190 format = kARGB_GrMaskFormat; | 194 format = kARGB_GrMaskFormat; |
| 191 break; | 195 break; |
| 192 } | 196 } |
| 193 | 197 |
| 194 return GrBitmapTextGeoProc::Create(GrRandomColor(d->fRandom), d->fTextures[t
exIdx], params, | 198 return GrBitmapTextGeoProc::Create(GrRandomColor(d->fRandom), d->fTextures[t
exIdx], params, |
| 195 format, GrTest::TestMatrix(d->fRandom), | 199 format, GrTest::TestMatrix(d->fRandom), |
| 196 d->fRandom->nextBool()); | 200 d->fRandom->nextBool()); |
| 197 } | 201 } |
| OLD | NEW |