Optimized non-static usage of static buffers.
Validate buffer pointers.
TRAC #14889
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@528 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/geometry/VertexDataManager.cpp b/src/libGLESv2/geometry/VertexDataManager.cpp
index 3a813fb..3ad9854 100644
--- a/src/libGLESv2/geometry/VertexDataManager.cpp
+++ b/src/libGLESv2/geometry/VertexDataManager.cpp
@@ -59,7 +59,12 @@
const FormatConverter &converter = formatConverter(attribute);
UINT streamOffset = 0;
- void *output = vertexBuffer->map(attribute, spaceRequired(attribute, count), &streamOffset);
+ void *output = NULL;
+
+ if (vertexBuffer)
+ {
+ output = vertexBuffer->map(attribute, spaceRequired(attribute, count), &streamOffset);
+ }
if (output == NULL)
{
@@ -123,7 +128,10 @@
}
else if (!staticBuffer || staticBuffer->lookupAttribute(attribs[i]) == -1)
{
- mStreamingBuffer->addRequiredSpace(spaceRequired(attribs[i], count));
+ if (mStreamingBuffer)
+ {
+ mStreamingBuffer->addRequiredSpace(spaceRequired(attribs[i], count));
+ }
}
}
}
@@ -153,7 +161,7 @@
}
}
- if (!matchingAttributes)
+ if (!matchingAttributes && mStreamingBuffer)
{
mStreamingBuffer->addRequiredSpaceFor(staticBuffer);
buffer->invalidateStaticData();
@@ -172,7 +180,10 @@
ArrayVertexBuffer *staticBuffer = buffer ? buffer->getVertexBuffer() : NULL;
ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : mStreamingBuffer;
- vertexBuffer->reserveRequiredSpace();
+ if (vertexBuffer)
+ {
+ vertexBuffer->reserveRequiredSpace();
+ }
}
}