| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 "GrDrawState.h" | 8 #include "GrDrawState.h" |
| 9 #include "GrPaint.h" | 9 #include "GrPaint.h" |
| 10 #include "GrDrawTargetCaps.h" | 10 #include "GrDrawTargetCaps.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 return kIncompatible_CombinedState; | 46 return kIncompatible_CombinedState; |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 for (int i = 0; i < a.numCoverageStages(); i++) { | 49 for (int i = 0; i < a.numCoverageStages(); i++) { |
| 50 if (!GrEffectStage::AreCompatible(a.getCoverageStage(i), b.getCoverageSt
age(i), | 50 if (!GrEffectStage::AreCompatible(a.getCoverageStage(i), b.getCoverageSt
age(i), |
| 51 explicitLocalCoords)) { | 51 explicitLocalCoords)) { |
| 52 return kIncompatible_CombinedState; | 52 return kIncompatible_CombinedState; |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 | 55 |
| 56 SkASSERT(a.fVertexSize == b.fVertexSize); |
| 56 SkASSERT(0 == memcmp(a.fFixedFunctionVertexAttribIndices, | 57 SkASSERT(0 == memcmp(a.fFixedFunctionVertexAttribIndices, |
| 57 b.fFixedFunctionVertexAttribIndices, | 58 b.fFixedFunctionVertexAttribIndices, |
| 58 sizeof(a.fFixedFunctionVertexAttribIndices))); | 59 sizeof(a.fFixedFunctionVertexAttribIndices))); |
| 59 | 60 |
| 60 if (usingVertexColors) { | 61 if (usingVertexColors) { |
| 61 // If one is opaque and the other is not then the combined state is not
opaque. Moreover, | 62 // If one is opaque and the other is not then the combined state is not
opaque. Moreover, |
| 62 // if the opaqueness affects the ability to get color/coverage blending
correct then we | 63 // if the opaqueness affects the ability to get color/coverage blending
correct then we |
| 63 // don't combine the draw states. | 64 // don't combine the draw states. |
| 64 bool aIsOpaque = (kVertexColorsAreOpaque_Hint & a.fHints); | 65 bool aIsOpaque = (kVertexColorsAreOpaque_Hint & a.fHints); |
| 65 bool bIsOpaque = (kVertexColorsAreOpaque_Hint & b.fHints); | 66 bool bIsOpaque = (kVertexColorsAreOpaque_Hint & b.fHints); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages()); | 106 SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages()); |
| 106 this->setRenderTarget(that.fRenderTarget.get()); | 107 this->setRenderTarget(that.fRenderTarget.get()); |
| 107 fColor = that.fColor; | 108 fColor = that.fColor; |
| 108 fViewMatrix = that.fViewMatrix; | 109 fViewMatrix = that.fViewMatrix; |
| 109 fSrcBlend = that.fSrcBlend; | 110 fSrcBlend = that.fSrcBlend; |
| 110 fDstBlend = that.fDstBlend; | 111 fDstBlend = that.fDstBlend; |
| 111 fBlendConstant = that.fBlendConstant; | 112 fBlendConstant = that.fBlendConstant; |
| 112 fFlagBits = that.fFlagBits; | 113 fFlagBits = that.fFlagBits; |
| 113 fVACount = that.fVACount; | 114 fVACount = that.fVACount; |
| 114 fVAPtr = that.fVAPtr; | 115 fVAPtr = that.fVAPtr; |
| 116 fVertexSize = that.fVertexSize; |
| 115 fStencilSettings = that.fStencilSettings; | 117 fStencilSettings = that.fStencilSettings; |
| 116 fCoverage = that.fCoverage; | 118 fCoverage = that.fCoverage; |
| 117 fDrawFace = that.fDrawFace; | 119 fDrawFace = that.fDrawFace; |
| 118 fColorStages = that.fColorStages; | 120 fColorStages = that.fColorStages; |
| 119 fCoverageStages = that.fCoverageStages; | 121 fCoverageStages = that.fCoverageStages; |
| 120 fOptSrcBlend = that.fOptSrcBlend; | 122 fOptSrcBlend = that.fOptSrcBlend; |
| 121 fOptDstBlend = that.fOptDstBlend; | 123 fOptDstBlend = that.fOptDstBlend; |
| 122 fBlendOptFlags = that.fBlendOptFlags; | 124 fBlendOptFlags = that.fBlendOptFlags; |
| 123 | 125 |
| 124 fHints = that.fHints; | 126 fHints = that.fHints; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 uint32_t mask = (1 << dwordCount)-1; | 231 uint32_t mask = (1 << dwordCount)-1; |
| 230 size_t offsetShift = attribs[index].fOffset >> 2; | 232 size_t offsetShift = attribs[index].fOffset >> 2; |
| 231 SkASSERT(!(overlapCheck & (mask << offsetShift))); | 233 SkASSERT(!(overlapCheck & (mask << offsetShift))); |
| 232 overlapCheck |= (mask << offsetShift); | 234 overlapCheck |= (mask << offsetShift); |
| 233 #endif | 235 #endif |
| 234 } | 236 } |
| 235 return size; | 237 return size; |
| 236 } | 238 } |
| 237 | 239 |
| 238 size_t GrDrawState::getVertexSize() const { | 240 size_t GrDrawState::getVertexSize() const { |
| 239 return vertex_size(fVAPtr, fVACount); | 241 return fVertexSize; |
| 240 } | 242 } |
| 241 | 243 |
| 242 //////////////////////////////////////////////////////////////////////////////// | 244 //////////////////////////////////////////////////////////////////////////////// |
| 243 | 245 |
| 244 void GrDrawState::setVertexAttribs(const GrVertexAttrib* attribs, int count) { | 246 void GrDrawState::setVertexAttribs(const GrVertexAttrib* attribs, int count) { |
| 245 SkASSERT(count <= kMaxVertexAttribCnt); | 247 SkASSERT(count <= kMaxVertexAttribCnt); |
| 246 | 248 |
| 247 fVAPtr = attribs; | 249 fVAPtr = attribs; |
| 248 fVACount = count; | 250 fVACount = count; |
| 251 fVertexSize = vertex_size(fVAPtr, fVACount); |
| 249 | 252 |
| 250 // Set all the indices to -1 | 253 // Set all the indices to -1 |
| 251 memset(fFixedFunctionVertexAttribIndices, | 254 memset(fFixedFunctionVertexAttribIndices, |
| 252 0xff, | 255 0xff, |
| 253 sizeof(fFixedFunctionVertexAttribIndices)); | 256 sizeof(fFixedFunctionVertexAttribIndices)); |
| 254 #ifdef SK_DEBUG | 257 #ifdef SK_DEBUG |
| 255 uint32_t overlapCheck = 0; | 258 uint32_t overlapCheck = 0; |
| 256 #endif | 259 #endif |
| 257 for (int i = 0; i < count; ++i) { | 260 for (int i = 0; i < count; ++i) { |
| 258 if (attribs[i].fBinding < kGrFixedFunctionVertexAttribBindingCnt) { | 261 if (attribs[i].fBinding < kGrFixedFunctionVertexAttribBindingCnt) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 276 } | 279 } |
| 277 | 280 |
| 278 //////////////////////////////////////////////////////////////////////////////// | 281 //////////////////////////////////////////////////////////////////////////////// |
| 279 | 282 |
| 280 void GrDrawState::setDefaultVertexAttribs() { | 283 void GrDrawState::setDefaultVertexAttribs() { |
| 281 static const GrVertexAttrib kPositionAttrib = | 284 static const GrVertexAttrib kPositionAttrib = |
| 282 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}; | 285 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}; |
| 283 | 286 |
| 284 fVAPtr = &kPositionAttrib; | 287 fVAPtr = &kPositionAttrib; |
| 285 fVACount = 1; | 288 fVACount = 1; |
| 289 fVertexSize = GrVertexAttribTypeSize(kVec2f_GrVertexAttribType); |
| 286 | 290 |
| 287 // set all the fixed function indices to -1 except position. | 291 // set all the fixed function indices to -1 except position. |
| 288 memset(fFixedFunctionVertexAttribIndices, | 292 memset(fFixedFunctionVertexAttribIndices, |
| 289 0xff, | 293 0xff, |
| 290 sizeof(fFixedFunctionVertexAttribIndices)); | 294 sizeof(fFixedFunctionVertexAttribIndices)); |
| 291 fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding] = 0; | 295 fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding] = 0; |
| 292 this->invalidateBlendOptFlags(); | 296 this->invalidateBlendOptFlags(); |
| 293 } | 297 } |
| 294 | 298 |
| 295 //////////////////////////////////////////////////////////////////////////////// | 299 //////////////////////////////////////////////////////////////////////////////// |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 fDrawState->getColorStage(s).saveCoordChange(&fSavedCoordChanges[i]); | 703 fDrawState->getColorStage(s).saveCoordChange(&fSavedCoordChanges[i]); |
| 700 fDrawState->fColorStages[s].localCoordChange(coordChangeMatrix); | 704 fDrawState->fColorStages[s].localCoordChange(coordChangeMatrix); |
| 701 } | 705 } |
| 702 | 706 |
| 703 int numCoverageStages = fDrawState->numCoverageStages(); | 707 int numCoverageStages = fDrawState->numCoverageStages(); |
| 704 for (int s = 0; s < numCoverageStages; ++s, ++i) { | 708 for (int s = 0; s < numCoverageStages; ++s, ++i) { |
| 705 fDrawState->getCoverageStage(s).saveCoordChange(&fSavedCoordChanges[i]); | 709 fDrawState->getCoverageStage(s).saveCoordChange(&fSavedCoordChanges[i]); |
| 706 fDrawState->fCoverageStages[s].localCoordChange(coordChangeMatrix); | 710 fDrawState->fCoverageStages[s].localCoordChange(coordChangeMatrix); |
| 707 } | 711 } |
| 708 } | 712 } |
| OLD | NEW |