aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrDrawTarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrDrawTarget.cpp')
-rw-r--r--src/gpu/GrDrawTarget.cpp42
1 files changed, 23 insertions, 19 deletions
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 2c2d949224..dab2965c6b 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -530,11 +530,19 @@ void GrDrawTarget::drawRect(const GrRect& rect,
const GrRect* srcRect,
const SkMatrix* srcMatrix,
int stage) {
- GrVertexLayout layout = 0;
+ GrAttribBindings bindings = 0;
uint32_t explicitCoordMask = 0;
+ // position + (optional) texture coord
+ static const GrVertexAttrib kAttribs[] = {
+ GrVertexAttrib(kVec2f_GrVertexAttribType, 0),
+ GrVertexAttrib(kVec2f_GrVertexAttribType, sizeof(GrPoint))
+ };
+ int attribCount = 1;
if (NULL != srcRect) {
- layout |= GrDrawState::StageTexCoordVertexLayoutBit(stage);
+ bindings |= GrDrawState::ExplicitTexCoordAttribBindingsBit(stage);
+ attribCount = 2;
+ this->drawState()->setAttribIndex(GrDrawState::kTexCoord_AttribIndex, 1);
explicitCoordMask = (1 << stage);
}
@@ -543,30 +551,26 @@ void GrDrawTarget::drawRect(const GrRect& rect,
avmr.set(this->drawState(), *matrix, explicitCoordMask);
}
- this->drawState()->setVertexLayout(layout);
+ this->drawState()->setVertexAttribs(kAttribs, attribCount);
+ this->drawState()->setAttribIndex(GrDrawState::kPosition_AttribIndex, 0);
+ this->drawState()->setAttribBindings(bindings);
AutoReleaseGeometry geo(this, 4, 0);
if (!geo.succeeded()) {
GrPrintf("Failed to get space for vertices!\n");
return;
}
- int stageOffsets[GrDrawState::kNumStages];
- int vsize = GrDrawState::VertexSizeAndOffsetsByStage(layout, stageOffsets, NULL, NULL, NULL);
+ size_t vsize = this->drawState()->getVertexSize();
geo.positions()->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom, vsize);
-
- for (int i = 0; i < GrDrawState::kNumStages; ++i) {
- if (explicitCoordMask & (1 << i)) {
- GrAssert(0 != stageOffsets[i]);
- GrPoint* coords = GrTCast<GrPoint*>(GrTCast<intptr_t>(geo.vertices()) +
- stageOffsets[i]);
- coords->setRectFan(srcRect->fLeft, srcRect->fTop,
- srcRect->fRight, srcRect->fBottom,
- vsize);
- if (NULL != srcMatrix) {
- srcMatrix->mapPointsWithStride(coords, vsize, 4);
- }
- } else {
- GrAssert(0 == stageOffsets[i]);
+ if (NULL != srcRect) {
+ GrAssert(attribCount == 2);
+ GrPoint* coords = GrTCast<GrPoint*>(GrTCast<intptr_t>(geo.vertices()) +
+ kAttribs[1].fOffset);
+ coords->setRectFan(srcRect->fLeft, srcRect->fTop,
+ srcRect->fRight, srcRect->fBottom,
+ vsize);
+ if (NULL != srcMatrix) {
+ srcMatrix->mapPointsWithStride(coords, vsize, 4);
}
}