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 | 10 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 | 60 |
61 this->setBlendFunc(paint.getSrcBlendCoeff(), paint.getDstBlendCoeff()); | 61 this->setBlendFunc(paint.getSrcBlendCoeff(), paint.getDstBlendCoeff()); |
62 this->setColorFilter(paint.getColorFilterColor(), paint.getColorFilterMode()
); | 62 this->setColorFilter(paint.getColorFilterColor(), paint.getColorFilterMode()
); |
63 this->setCoverage(paint.getCoverage()); | 63 this->setCoverage(paint.getCoverage()); |
64 } | 64 } |
65 | 65 |
66 //////////////////////////////////////////////////////////////////////////////// | 66 //////////////////////////////////////////////////////////////////////////////// |
67 | 67 |
68 static size_t vertex_size(const GrVertexAttrib* attribs, int count) { | 68 static size_t vertex_size(const GrVertexAttrib* attribs, int count) { |
69 // this works as long as we're 4 byte-aligned | 69 // this works as long as we're 4 byte-aligned |
70 #if GR_DEBUG | 70 #if SK_DEBUG |
71 uint32_t overlapCheck = 0; | 71 uint32_t overlapCheck = 0; |
72 #endif | 72 #endif |
73 SkASSERT(count <= GrDrawState::kMaxVertexAttribCnt); | 73 SkASSERT(count <= GrDrawState::kMaxVertexAttribCnt); |
74 size_t size = 0; | 74 size_t size = 0; |
75 for (int index = 0; index < count; ++index) { | 75 for (int index = 0; index < count; ++index) { |
76 size_t attribSize = GrVertexAttribTypeSize(attribs[index].fType); | 76 size_t attribSize = GrVertexAttribTypeSize(attribs[index].fType); |
77 size += attribSize; | 77 size += attribSize; |
78 #if GR_DEBUG | 78 #if SK_DEBUG |
79 size_t dwordCount = attribSize >> 2; | 79 size_t dwordCount = attribSize >> 2; |
80 uint32_t mask = (1 << dwordCount)-1; | 80 uint32_t mask = (1 << dwordCount)-1; |
81 size_t offsetShift = attribs[index].fOffset >> 2; | 81 size_t offsetShift = attribs[index].fOffset >> 2; |
82 SkASSERT(!(overlapCheck & (mask << offsetShift))); | 82 SkASSERT(!(overlapCheck & (mask << offsetShift))); |
83 overlapCheck |= (mask << offsetShift); | 83 overlapCheck |= (mask << offsetShift); |
84 #endif | 84 #endif |
85 } | 85 } |
86 return size; | 86 return size; |
87 } | 87 } |
88 | 88 |
89 size_t GrDrawState::getVertexSize() const { | 89 size_t GrDrawState::getVertexSize() const { |
90 return vertex_size(fCommon.fVAPtr, fCommon.fVACount); | 90 return vertex_size(fCommon.fVAPtr, fCommon.fVACount); |
91 } | 91 } |
92 | 92 |
93 //////////////////////////////////////////////////////////////////////////////// | 93 //////////////////////////////////////////////////////////////////////////////// |
94 | 94 |
95 void GrDrawState::setVertexAttribs(const GrVertexAttrib* attribs, int count) { | 95 void GrDrawState::setVertexAttribs(const GrVertexAttrib* attribs, int count) { |
96 SkASSERT(count <= kMaxVertexAttribCnt); | 96 SkASSERT(count <= kMaxVertexAttribCnt); |
97 | 97 |
98 fCommon.fVAPtr = attribs; | 98 fCommon.fVAPtr = attribs; |
99 fCommon.fVACount = count; | 99 fCommon.fVACount = count; |
100 | 100 |
101 // Set all the indices to -1 | 101 // Set all the indices to -1 |
102 memset(fCommon.fFixedFunctionVertexAttribIndices, | 102 memset(fCommon.fFixedFunctionVertexAttribIndices, |
103 0xff, | 103 0xff, |
104 sizeof(fCommon.fFixedFunctionVertexAttribIndices)); | 104 sizeof(fCommon.fFixedFunctionVertexAttribIndices)); |
105 #if GR_DEBUG | 105 #if SK_DEBUG |
106 uint32_t overlapCheck = 0; | 106 uint32_t overlapCheck = 0; |
107 #endif | 107 #endif |
108 for (int i = 0; i < count; ++i) { | 108 for (int i = 0; i < count; ++i) { |
109 if (attribs[i].fBinding < kGrFixedFunctionVertexAttribBindingCnt) { | 109 if (attribs[i].fBinding < kGrFixedFunctionVertexAttribBindingCnt) { |
110 // The fixed function attribs can only be specified once | 110 // The fixed function attribs can only be specified once |
111 SkASSERT(-1 == fCommon.fFixedFunctionVertexAttribIndices[attribs[i].
fBinding]); | 111 SkASSERT(-1 == fCommon.fFixedFunctionVertexAttribIndices[attribs[i].
fBinding]); |
112 SkASSERT(GrFixedFunctionVertexAttribVectorCount(attribs[i].fBinding)
== | 112 SkASSERT(GrFixedFunctionVertexAttribVectorCount(attribs[i].fBinding)
== |
113 GrVertexAttribTypeVectorCount(attribs[i].fType)); | 113 GrVertexAttribTypeVectorCount(attribs[i].fType)); |
114 fCommon.fFixedFunctionVertexAttribIndices[attribs[i].fBinding] = i; | 114 fCommon.fFixedFunctionVertexAttribIndices[attribs[i].fBinding] = i; |
115 } | 115 } |
116 #if GR_DEBUG | 116 #if SK_DEBUG |
117 size_t dwordCount = GrVertexAttribTypeSize(attribs[i].fType) >> 2; | 117 size_t dwordCount = GrVertexAttribTypeSize(attribs[i].fType) >> 2; |
118 uint32_t mask = (1 << dwordCount)-1; | 118 uint32_t mask = (1 << dwordCount)-1; |
119 size_t offsetShift = attribs[i].fOffset >> 2; | 119 size_t offsetShift = attribs[i].fOffset >> 2; |
120 SkASSERT(!(overlapCheck & (mask << offsetShift))); | 120 SkASSERT(!(overlapCheck & (mask << offsetShift))); |
121 overlapCheck |= (mask << offsetShift); | 121 overlapCheck |= (mask << offsetShift); |
122 #endif | 122 #endif |
123 } | 123 } |
124 // Positions must be specified. | 124 // Positions must be specified. |
125 SkASSERT(-1 != fCommon.fFixedFunctionVertexAttribIndices[kPosition_GrVertexA
ttribBinding]); | 125 SkASSERT(-1 != fCommon.fFixedFunctionVertexAttribIndices[kPosition_GrVertexA
ttribBinding]); |
126 } | 126 } |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 fDrawState->fColorStages[s].saveCoordChange(&fSavedCoordChanges[i]); | 475 fDrawState->fColorStages[s].saveCoordChange(&fSavedCoordChanges[i]); |
476 fDrawState->fColorStages[s].localCoordChange(coordChangeMatrix); | 476 fDrawState->fColorStages[s].localCoordChange(coordChangeMatrix); |
477 } | 477 } |
478 | 478 |
479 int numCoverageStages = fDrawState->numCoverageStages(); | 479 int numCoverageStages = fDrawState->numCoverageStages(); |
480 for (int s = 0; s < numCoverageStages; ++s, ++i) { | 480 for (int s = 0; s < numCoverageStages; ++s, ++i) { |
481 fDrawState->fCoverageStages[s].saveCoordChange(&fSavedCoordChanges[i]); | 481 fDrawState->fCoverageStages[s].saveCoordChange(&fSavedCoordChanges[i]); |
482 fDrawState->fCoverageStages[s].localCoordChange(coordChangeMatrix); | 482 fDrawState->fCoverageStages[s].localCoordChange(coordChangeMatrix); |
483 } | 483 } |
484 } | 484 } |
OLD | NEW |