Index: src/gpu/GrInOrderDrawBuffer.cpp |
=================================================================== |
--- src/gpu/GrInOrderDrawBuffer.cpp (revision 8462) |
+++ src/gpu/GrInOrderDrawBuffer.cpp (working copy) |
@@ -77,36 +77,33 @@ |
const SkMatrix* matrix, |
const GrRect* localRect, |
const SkMatrix* localMatrix) { |
- |
- GrAttribBindings bindings = GrDrawState::kDefault_AttribBindings; |
GrDrawState::AutoColorRestore acr; |
GrDrawState* drawState = this->drawState(); |
GrColor color = drawState->getColor(); |
GrVertexAttribArray<3> attribs; |
- size_t currentOffset = 0; |
- int colorOffset = -1, localOffset = -1; |
// set position attrib |
- drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, attribs.count()); |
- GrVertexAttrib currAttrib = {kVec2f_GrVertexAttribType, currentOffset}; |
- attribs.push_back(currAttrib); |
- currentOffset += sizeof(GrPoint); |
+ static const GrVertexAttrib kPosAttrib = |
+ {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}; |
+ attribs.push_back(kPosAttrib); |
+ size_t currentOffset = sizeof(GrPoint); |
+ int colorOffset = -1; |
+ int localOffset = -1; |
+ |
// Using per-vertex colors allows batching across colors. (A lot of rects in a row differing |
// only in color is a common occurrence in tables). However, having per-vertex colors disables |
// blending optimizations because we don't know if the color will be solid or not. These |
// optimizations help determine whether coverage and color can be blended correctly when |
// dual-source blending isn't available. This comes into play when there is coverage. If colors |
// were a stage it could take a hint that every vertex's color will be opaque. |
- if (this->caps()->dualSourceBlendingSupport() || |
- drawState->hasSolidCoverage(drawState->getAttribBindings())) { |
- bindings |= GrDrawState::kColor_AttribBindingsBit; |
- drawState->setAttribIndex(GrDrawState::kColor_AttribIndex, attribs.count()); |
- currAttrib.set(kVec4ub_GrVertexAttribType, currentOffset); |
- attribs.push_back(currAttrib); |
+ if (this->caps()->dualSourceBlendingSupport() || drawState->hasSolidCoverage()) { |
colorOffset = currentOffset; |
+ GrVertexAttrib colorAttrib = |
+ {kVec4ub_GrVertexAttribType, colorOffset, kColor_GrVertexAttribBinding}; |
+ attribs.push_back(colorAttrib); |
currentOffset += sizeof(GrColor); |
// We set the draw state's color to white here. This is done so that any batching performed |
// in our subclass's onDraw() won't get a false from GrDrawState::op== due to a color |
@@ -116,16 +113,14 @@ |
} |
if (NULL != localRect) { |
- bindings |= GrDrawState::kLocalCoords_AttribBindingsBit; |
- drawState->setAttribIndex(GrDrawState::kLocalCoords_AttribIndex, attribs.count()); |
- currAttrib.set(kVec2f_GrVertexAttribType, currentOffset); |
- attribs.push_back(currAttrib); |
localOffset = currentOffset; |
+ GrVertexAttrib localCoordAttrib = |
+ {kVec2f_GrVertexAttribType, localOffset, kLocalCoord_GrVertexAttribBinding}; |
+ attribs.push_back(localCoordAttrib); |
currentOffset += sizeof(GrPoint); |
} |
drawState->setVertexAttribs(attribs.begin(), attribs.count()); |
- drawState->setAttribBindings(bindings); |
AutoReleaseGeometry geo(this, 4, 0); |
if (!geo.succeeded()) { |
GrPrintf("Failed to get space for vertices!\n"); |