consolidate debug draw param checking code
git-svn-id: http://skia.googlecode.com/svn/trunk@2613 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index f604845..8f4f3eb 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -759,16 +759,16 @@
////////////////////////////////////////////////////////////////////////////////
-void GrDrawTarget::drawIndexed(GrPrimitiveType type, int startVertex,
- int startIndex, int vertexCount,
- int indexCount) {
+bool GrDrawTarget::checkDraw(GrPrimitiveType type, int startVertex,
+ int startIndex, int vertexCount,
+ int indexCount) const {
#if GR_DEBUG
- GeometrySrcState& geoSrc = fGeoSrcStateStack.back();
+ const GeometrySrcState& geoSrc = fGeoSrcStateStack.back();
int maxVertex = startVertex + vertexCount;
int maxValidVertex;
switch (geoSrc.fVertexSrc) {
case kNone_GeometrySrcType:
- GrCrash("Attempting to draw indexed geom without vertex src.");
+ GrCrash("Attempting to draw without vertex src.");
case kReserved_GeometrySrcType: // fallthrough
case kArray_GeometrySrcType:
maxValidVertex = geoSrc.fVertexCount;
@@ -779,26 +779,36 @@
break;
}
if (maxVertex > maxValidVertex) {
- GrCrash("Indexed drawing outside valid vertex range.");
+ GrCrash("Drawing outside valid vertex range.");
}
- int maxIndex = startIndex + indexCount;
- int maxValidIndex;
- switch (geoSrc.fIndexSrc) {
- case kNone_GeometrySrcType:
- GrCrash("Attempting to draw indexed geom without index src.");
- case kReserved_GeometrySrcType: // fallthrough
- case kArray_GeometrySrcType:
- maxValidIndex = geoSrc.fIndexCount;
- break;
- case kBuffer_GeometrySrcType:
- maxValidIndex = geoSrc.fIndexBuffer->sizeInBytes() / sizeof(uint16_t);
- break;
- }
- if (maxIndex > maxValidIndex) {
- GrCrash("Indexed drawing outside valid index range.");
+ if (indexCount > 0) {
+ int maxIndex = startIndex + indexCount;
+ int maxValidIndex;
+ switch (geoSrc.fIndexSrc) {
+ case kNone_GeometrySrcType:
+ GrCrash("Attempting to draw indexed geom without index src.");
+ case kReserved_GeometrySrcType: // fallthrough
+ case kArray_GeometrySrcType:
+ maxValidIndex = geoSrc.fIndexCount;
+ break;
+ case kBuffer_GeometrySrcType:
+ maxValidIndex = geoSrc.fIndexBuffer->sizeInBytes() / sizeof(uint16_t);
+ break;
+ }
+ if (maxIndex > maxValidIndex) {
+ GrCrash("Index reads outside valid index range.");
+ }
}
#endif
- if (indexCount > 0) {
+ return true;
+}
+
+void GrDrawTarget::drawIndexed(GrPrimitiveType type, int startVertex,
+ int startIndex, int vertexCount,
+ int indexCount) {
+ if (indexCount > 0 &&
+ this->checkDraw(type, startVertex, startIndex,
+ vertexCount, indexCount)) {
this->onDrawIndexed(type, startVertex, startIndex,
vertexCount, indexCount);
}
@@ -808,27 +818,8 @@
void GrDrawTarget::drawNonIndexed(GrPrimitiveType type,
int startVertex,
int vertexCount) {
-#if GR_DEBUG
- GeometrySrcState& geoSrc = fGeoSrcStateStack.back();
- int maxVertex = startVertex + vertexCount;
- int maxValidVertex;
- switch (geoSrc.fVertexSrc) {
- case kNone_GeometrySrcType:
- GrCrash("Attempting to draw non-indexed geom without vertex src.");
- case kReserved_GeometrySrcType: // fallthrough
- case kArray_GeometrySrcType:
- maxValidVertex = geoSrc.fVertexCount;
- break;
- case kBuffer_GeometrySrcType:
- maxValidVertex = geoSrc.fVertexBuffer->sizeInBytes() /
- VertexSize(geoSrc.fVertexLayout);
- break;
- }
- if (maxVertex > maxValidVertex) {
- GrCrash("Non-indexed drawing outside valid vertex range.");
- }
-#endif
- if (vertexCount > 0) {
+ if (vertexCount > 0 &&
+ this->checkDraw(type, startVertex, -1, vertexCount, -1)) {
this->onDrawNonIndexed(type, startVertex, vertexCount);
}
}