| 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 "GrFontAtlasSizes.h" | 9 #include "GrFontAtlasSizes.h" |
| 10 #include "GrInvariantOutput.h" | 10 #include "GrInvariantOutput.h" |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 GrColor fColor; | 111 GrColor fColor; |
| 112 UniformHandle fColorUniform; | 112 UniformHandle fColorUniform; |
| 113 | 113 |
| 114 typedef GrGLGeometryProcessor INHERITED; | 114 typedef GrGLGeometryProcessor INHERITED; |
| 115 }; | 115 }; |
| 116 | 116 |
| 117 /////////////////////////////////////////////////////////////////////////////// | 117 /////////////////////////////////////////////////////////////////////////////// |
| 118 | 118 |
| 119 GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture, | 119 GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture, |
| 120 const GrTextureParams& params, GrMaskFo
rmat format, | 120 const GrTextureParams& params, GrMaskFo
rmat format, |
| 121 bool opaqueVertexColors, const SkMatrix
& localMatrix) | 121 const SkMatrix& localMatrix) |
| 122 : INHERITED(color, SkMatrix::I(), localMatrix, opaqueVertexColors) | 122 : INHERITED(color, SkMatrix::I(), localMatrix) |
| 123 , fTextureAccess(texture, params) | 123 , fTextureAccess(texture, params) |
| 124 , fInColor(NULL) | 124 , fInColor(NULL) |
| 125 , fMaskFormat(format) { | 125 , fMaskFormat(format) { |
| 126 this->initClassID<GrBitmapTextGeoProc>(); | 126 this->initClassID<GrBitmapTextGeoProc>(); |
| 127 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); | 127 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex
AttribType)); |
| 128 | 128 |
| 129 bool hasVertexColor = kA8_GrMaskFormat == fMaskFormat; | 129 bool hasVertexColor = kA8_GrMaskFormat == fMaskFormat; |
| 130 if (hasVertexColor) { | 130 if (hasVertexColor) { |
| 131 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA
ttribType)); | 131 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA
ttribType)); |
| 132 this->setHasVertexColor(); | |
| 133 } | 132 } |
| 134 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", | 133 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", |
| 135 kVec2s_GrVertexAttribTyp
e)); | 134 kVec2s_GrVertexAttribTyp
e)); |
| 136 this->addTextureAccess(&fTextureAccess); | 135 this->addTextureAccess(&fTextureAccess); |
| 137 } | 136 } |
| 138 | 137 |
| 139 bool GrBitmapTextGeoProc::onIsEqual(const GrGeometryProcessor& other) const { | |
| 140 const GrBitmapTextGeoProc& gp = other.cast<GrBitmapTextGeoProc>(); | |
| 141 return SkToBool(this->inColor()) == SkToBool(gp.inColor()); | |
| 142 } | |
| 143 | |
| 144 void GrBitmapTextGeoProc::onGetInvariantOutputColor(GrInitInvariantOutput* out)
const { | |
| 145 if (kARGB_GrMaskFormat == fMaskFormat) { | |
| 146 out->setUnknownFourComponents(); | |
| 147 } | |
| 148 } | |
| 149 | |
| 150 void GrBitmapTextGeoProc::onGetInvariantOutputCoverage(GrInitInvariantOutput* ou
t) const { | |
| 151 if (kARGB_GrMaskFormat != fMaskFormat) { | |
| 152 if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { | |
| 153 out->setUnknownSingleComponent(); | |
| 154 } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) { | |
| 155 out->setUnknownOpaqueFourComponents(); | |
| 156 out->setUsingLCDCoverage(); | |
| 157 } else { | |
| 158 out->setUnknownFourComponents(); | |
| 159 out->setUsingLCDCoverage(); | |
| 160 } | |
| 161 } else { | |
| 162 out->setKnownSingleComponent(0xff); | |
| 163 } | |
| 164 } | |
| 165 | |
| 166 void GrBitmapTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt, | 138 void GrBitmapTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt, |
| 167 const GrGLSLCaps& caps, | 139 const GrGLSLCaps& caps, |
| 168 GrProcessorKeyBuilder* b) const { | 140 GrProcessorKeyBuilder* b) const { |
| 169 GrGLBitmapTextGeoProc::GenKey(*this, bt, caps, b); | 141 GrGLBitmapTextGeoProc::GenKey(*this, bt, caps, b); |
| 170 } | 142 } |
| 171 | 143 |
| 172 GrGLPrimitiveProcessor* | 144 GrGLPrimitiveProcessor* |
| 173 GrBitmapTextGeoProc::createGLInstance(const GrBatchTracker& bt, | 145 GrBitmapTextGeoProc::createGLInstance(const GrBatchTracker& bt, |
| 174 const GrGLSLCaps& caps) const { | 146 const GrGLSLCaps& caps) const { |
| 175 return SkNEW_ARGS(GrGLBitmapTextGeoProc, (*this, bt)); | 147 return SkNEW_ARGS(GrGLBitmapTextGeoProc, (*this, bt)); |
| 176 } | 148 } |
| 177 | 149 |
| 178 void GrBitmapTextGeoProc::initBatchTracker(GrBatchTracker* bt, const GrPipelineI
nfo& init) const { | 150 void GrBitmapTextGeoProc::initBatchTracker(GrBatchTracker* bt, const GrPipelineI
nfo& init) const { |
| 179 BitmapTextBatchTracker* local = bt->cast<BitmapTextBatchTracker>(); | 151 BitmapTextBatchTracker* local = bt->cast<BitmapTextBatchTracker>(); |
| 180 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, | 152 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in
it, |
| 181 SkToBool(fInColor)); | 153 SkToBool(fInColor)); |
| 182 local->fUsesLocalCoords = init.fUsesLocalCoords; | 154 local->fUsesLocalCoords = init.fUsesLocalCoords; |
| 183 } | 155 } |
| 184 | 156 |
| 185 bool GrBitmapTextGeoProc::onCanMakeEqual(const GrBatchTracker& m, | |
| 186 const GrGeometryProcessor& that, | |
| 187 const GrBatchTracker& t) const { | |
| 188 const BitmapTextBatchTracker& mine = m.cast<BitmapTextBatchTracker>(); | |
| 189 const BitmapTextBatchTracker& theirs = t.cast<BitmapTextBatchTracker>(); | |
| 190 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, | |
| 191 that, theirs.fUsesLocalCoords) && | |
| 192 CanCombineOutput(mine.fInputColorType, mine.fColor, | |
| 193 theirs.fInputColorType, theirs.fColor); | |
| 194 } | |
| 195 | |
| 196 /////////////////////////////////////////////////////////////////////////////// | 157 /////////////////////////////////////////////////////////////////////////////// |
| 197 | 158 |
| 198 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc); | 159 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrBitmapTextGeoProc); |
| 199 | 160 |
| 200 GrGeometryProcessor* GrBitmapTextGeoProc::TestCreate(SkRandom* random, | 161 GrGeometryProcessor* GrBitmapTextGeoProc::TestCreate(SkRandom* random, |
| 201 GrContext*, | 162 GrContext*, |
| 202 const GrDrawTargetCaps&, | 163 const GrDrawTargetCaps&, |
| 203 GrTexture* textures[]) { | 164 GrTexture* textures[]) { |
| 204 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : | 165 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : |
| 205 GrProcessorUnitTest::kAlphaTextureIdx; | 166 GrProcessorUnitTest::kAlphaTextureIdx; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 224 break; | 185 break; |
| 225 case 1: | 186 case 1: |
| 226 format = kA565_GrMaskFormat; | 187 format = kA565_GrMaskFormat; |
| 227 break; | 188 break; |
| 228 case 2: | 189 case 2: |
| 229 format = kARGB_GrMaskFormat; | 190 format = kARGB_GrMaskFormat; |
| 230 break; | 191 break; |
| 231 } | 192 } |
| 232 | 193 |
| 233 return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx],
params, | 194 return GrBitmapTextGeoProc::Create(GrRandomColor(random), textures[texIdx],
params, |
| 234 format, random->nextBool(), | 195 format, GrTest::TestMatrix(random)); |
| 235 GrTest::TestMatrix(random)); | |
| 236 } | 196 } |
| OLD | NEW |