revert 8265-8264 (broke build)
git-svn-id: http://skia.googlecode.com/svn/trunk@8268 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 4798297..4c18574 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -360,12 +360,12 @@
{kVec2f_GrVertexAttribType, 0},
{kVec2f_GrVertexAttribType, sizeof(GrPoint)}
};
-
- static const GrAttribBindings kAttribBindings = GrDrawState::kLocalCoords_AttribBindingsBit;
+ static const GrAttribBindings kAttribBindings =
+ GrDrawState::ExplicitTexCoordAttribBindingsBit(0);
drawState->setAttribBindings(kAttribBindings);
drawState->setVertexAttribs(kVertexAttribs, SK_ARRAY_COUNT(kVertexAttribs));
drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, 0);
- drawState->setAttribIndex(GrDrawState::kLocalCoords_AttribIndex, 1);
+ drawState->setAttribIndex(GrDrawState::kTexCoord_AttribIndex, 1);
GrDrawTarget::AutoReleaseGeometry arg(fGpu, 4, 0);
if (arg.succeeded()) {
@@ -852,15 +852,21 @@
void GrContext::drawRectToRect(const GrPaint& paint,
const GrRect& dstRect,
- const GrRect& localRect,
+ const GrRect& srcRect,
const SkMatrix* dstMatrix,
- const SkMatrix* localMatrix) {
+ const SkMatrix* srcMatrix) {
SK_TRACE_EVENT0("GrContext::drawRectToRect");
+ // srcRect refers to paint's first color stage
+ if (!paint.isColorStageEnabled(0)) {
+ drawRect(paint, dstRect, -1, dstMatrix);
+ return;
+ }
+
GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW);
- GrDrawState::AutoStageDisable atr(fDrawState);
#if GR_STATIC_RECT_VB
+ GrDrawState::AutoStageDisable atr(fDrawState);
GrDrawState* drawState = target->drawState();
SkMatrix m;
@@ -872,21 +878,19 @@
m.postConcat(*dstMatrix);
}
- // This code path plays a little fast and loose with the notion of local coords and coord
- // change matrices in order to account for localRect and localMatrix. The unit square VB only
- // has one set of coords. Rather than using AutoViewMatrixRestore we instead directly set concat
- // with m and then call GrDrawState::localCoordChange() with a matrix that accounts for
- // localRect and localMatrix. This code path is preventing some encapsulation in GrDrawState.
- SkMatrix savedViewMatrix = drawState->getViewMatrix();
- drawState->preConcatViewMatrix(m);
+ // The first color stage's coords come from srcRect rather than applying a matrix to dstRect.
+ // We explicitly compute a matrix for that stage below, no need to adjust here.
+ static const uint32_t kExplicitCoordMask = 1 << GrPaint::kFirstColorStage;
+ GrDrawState::AutoViewMatrixRestore avmr(drawState, m, kExplicitCoordMask);
- m.setAll(localRect.width(), 0, localRect.fLeft,
- 0, localRect.height(), localRect.fTop,
- 0, 0, SkMatrix::I()[8]);
- if (NULL != localMatrix) {
- m.postConcat(*localMatrix);
+ m.setAll(srcRect.width(), 0, srcRect.fLeft,
+ 0, srcRect.height(), srcRect.fTop,
+ 0, 0, SkMatrix::I()[8]);
+ if (NULL != srcMatrix) {
+ m.postConcat(*srcMatrix);
}
- drawState->localCoordChange(m);
+
+ drawState->preConcatStageMatrices(kExplicitCoordMask, m);
const GrVertexBuffer* sqVB = fGpu->getUnitSquareVertexBuffer();
if (NULL == sqVB) {
@@ -896,9 +900,10 @@
drawState->setDefaultVertexAttribs();
target->setVertexSourceToBuffer(sqVB);
target->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4);
- drawState->setViewMatrix(savedViewMatrix);
#else
- target->drawRect(dstRect, dstMatrix, &localRect, localMatrix);
+ GrDrawState::AutoStageDisable atr(fDrawState);
+
+ target->drawRect(dstRect, dstMatrix, &srcRect, srcMatrix, 0);
#endif
}
@@ -932,8 +937,8 @@
// set up optional texture coordinate attributes
if (NULL != texCoords) {
- bindings |= GrDrawState::kLocalCoords_AttribBindingsBit;
- drawState->setAttribIndex(GrDrawState::kLocalCoords_AttribIndex, attribs.count());
+ bindings |= GrDrawState::ExplicitTexCoordAttribBindingsBit(0);
+ drawState->setAttribIndex(GrDrawState::kTexCoord_AttribIndex, attribs.count());
currAttrib.set(kVec2f_GrVertexAttribType, currentOffset);
attribs.push_back(currAttrib);
texOffset = currentOffset;