| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "GrInOrderDrawBuffer.h" | 8 #include "GrInOrderDrawBuffer.h" |
| 9 | 9 |
| 10 #include "GrBufferAllocPool.h" | 10 #include "GrBufferAllocPool.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 | 130 |
| 131 static uint8_t strip_trace_bit(uint8_t cmd) { | 131 static uint8_t strip_trace_bit(uint8_t cmd) { |
| 132 return cmd & kCmdMask; | 132 return cmd & kCmdMask; |
| 133 } | 133 } |
| 134 | 134 |
| 135 static bool cmd_has_trace_marker(uint8_t cmd) { | 135 static bool cmd_has_trace_marker(uint8_t cmd) { |
| 136 return SkToBool(cmd & kTraceCmdBit); | 136 return SkToBool(cmd & kTraceCmdBit); |
| 137 } | 137 } |
| 138 | 138 |
| 139 void GrInOrderDrawBuffer::onDrawRect(const SkRect& rect, | 139 void GrInOrderDrawBuffer::onDrawRect(const SkRect& rect, |
| 140 const SkMatrix* matrix, | |
| 141 const SkRect* localRect, | 140 const SkRect* localRect, |
| 142 const SkMatrix* localMatrix) { | 141 const SkMatrix* localMatrix) { |
| 143 GrDrawState::AutoColorRestore acr; | 142 GrDrawState::AutoColorRestore acr; |
| 144 | 143 |
| 145 GrDrawState* drawState = this->drawState(); | 144 GrDrawState* drawState = this->drawState(); |
| 146 | 145 |
| 147 GrColor color = drawState->getColor(); | 146 GrColor color = drawState->getColor(); |
| 148 | 147 |
| 149 int colorOffset, localOffset; | 148 int colorOffset, localOffset; |
| 150 set_vertex_attributes(drawState, | 149 set_vertex_attributes(drawState, |
| 151 this->caps()->dualSourceBlendingSupport() || drawState->hasSo
lidCoverage(), | 150 this->caps()->dualSourceBlendingSupport() || drawState->hasSo
lidCoverage(), |
| 152 NULL != localRect, | 151 NULL != localRect, |
| 153 &colorOffset, &localOffset); | 152 &colorOffset, &localOffset); |
| 154 if (colorOffset >= 0) { | 153 if (colorOffset >= 0) { |
| 155 // We set the draw state's color to white here. This is done so that any
batching performed | 154 // We set the draw state's color to white here. This is done so that any
batching performed |
| 156 // in our subclass's onDraw() won't get a false from GrDrawState::op== d
ue to a color | 155 // in our subclass's onDraw() won't get a false from GrDrawState::op== d
ue to a color |
| 157 // mismatch. TODO: Once vertex layout is owned by GrDrawState it should
skip comparing the | 156 // mismatch. TODO: Once vertex layout is owned by GrDrawState it should
skip comparing the |
| 158 // constant color in its op== when the kColor layout bit is set and then
we can remove | 157 // constant color in its op== when the kColor layout bit is set and then
we can remove |
| 159 // this. | 158 // this. |
| 160 acr.set(drawState, 0xFFFFFFFF); | 159 acr.set(drawState, 0xFFFFFFFF); |
| 161 } | 160 } |
| 162 | 161 |
| 163 AutoReleaseGeometry geo(this, 4, 0); | 162 AutoReleaseGeometry geo(this, 4, 0); |
| 164 if (!geo.succeeded()) { | 163 if (!geo.succeeded()) { |
| 165 GrPrintf("Failed to get space for vertices!\n"); | 164 GrPrintf("Failed to get space for vertices!\n"); |
| 166 return; | 165 return; |
| 167 } | 166 } |
| 168 | 167 |
| 169 // Go to device coords to allow batching across matrix changes | 168 // Go to device coords to allow batching across matrix changes |
| 170 SkMatrix combinedMatrix; | 169 SkMatrix matrix = drawState->getViewMatrix(); |
| 171 if (NULL != matrix) { | 170 |
| 172 combinedMatrix = *matrix; | |
| 173 } else { | |
| 174 combinedMatrix.reset(); | |
| 175 } | |
| 176 combinedMatrix.postConcat(drawState->getViewMatrix()); | |
| 177 // When the caller has provided an explicit source rect for a stage then we
don't want to | 171 // When the caller has provided an explicit source rect for a stage then we
don't want to |
| 178 // modify that stage's matrix. Otherwise if the effect is generating its sou
rce rect from | 172 // modify that stage's matrix. Otherwise if the effect is generating its sou
rce rect from |
| 179 // the vertex positions then we have to account for the view matrix change. | 173 // the vertex positions then we have to account for the view matrix change. |
| 180 GrDrawState::AutoViewMatrixRestore avmr; | 174 GrDrawState::AutoViewMatrixRestore avmr; |
| 181 if (!avmr.setIdentity(drawState)) { | 175 if (!avmr.setIdentity(drawState)) { |
| 182 return; | 176 return; |
| 183 } | 177 } |
| 184 | 178 |
| 185 size_t vsize = drawState->getVertexSize(); | 179 size_t vsize = drawState->getVertexSize(); |
| 186 | 180 |
| 187 geo.positions()->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom
, vsize); | 181 geo.positions()->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom
, vsize); |
| 188 combinedMatrix.mapPointsWithStride(geo.positions(), vsize, 4); | 182 matrix.mapPointsWithStride(geo.positions(), vsize, 4); |
| 189 | 183 |
| 190 SkRect devBounds; | 184 SkRect devBounds; |
| 191 // since we already computed the dev verts, set the bounds hint. This will h
elp us avoid | 185 // since we already computed the dev verts, set the bounds hint. This will h
elp us avoid |
| 192 // unnecessary clipping in our onDraw(). | 186 // unnecessary clipping in our onDraw(). |
| 193 get_vertex_bounds(geo.vertices(), vsize, 4, &devBounds); | 187 get_vertex_bounds(geo.vertices(), vsize, 4, &devBounds); |
| 194 | 188 |
| 195 if (localOffset >= 0) { | 189 if (localOffset >= 0) { |
| 196 SkPoint* coords = GrTCast<SkPoint*>(GrTCast<intptr_t>(geo.vertices()) +
localOffset); | 190 SkPoint* coords = GrTCast<SkPoint*>(GrTCast<intptr_t>(geo.vertices()) +
localOffset); |
| 197 coords->setRectFan(localRect->fLeft, localRect->fTop, | 191 coords->setRectFan(localRect->fLeft, localRect->fTop, |
| 198 localRect->fRight, localRect->fBottom, | 192 localRect->fRight, localRect->fBottom, |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 GrInOrderDrawBuffer::CopySurface* GrInOrderDrawBuffer::recordCopySurface() { | 986 GrInOrderDrawBuffer::CopySurface* GrInOrderDrawBuffer::recordCopySurface() { |
| 993 this->addToCmdBuffer(kCopySurface_Cmd); | 987 this->addToCmdBuffer(kCopySurface_Cmd); |
| 994 return &fCopySurfaces.push_back(); | 988 return &fCopySurfaces.push_back(); |
| 995 } | 989 } |
| 996 | 990 |
| 997 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { | 991 void GrInOrderDrawBuffer::clipWillBeSet(const GrClipData* newClipData) { |
| 998 INHERITED::clipWillBeSet(newClipData); | 992 INHERITED::clipWillBeSet(newClipData); |
| 999 fClipSet = true; | 993 fClipSet = true; |
| 1000 fClipProxyState = kUnknown_ClipProxyState; | 994 fClipProxyState = kUnknown_ClipProxyState; |
| 1001 } | 995 } |
| OLD | NEW |