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();
+            }
         }
     }