Move the vertex data manager and vertex declaration cache from Context to Renderer9.
TRAC #22016
Signed-off-by: Daniel Koch
Signed-off-by: Shannon Woods
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1474 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/VertexDataManager.cpp b/src/libGLESv2/VertexDataManager.cpp
index 44bd247..bb0888b 100644
--- a/src/libGLESv2/VertexDataManager.cpp
+++ b/src/libGLESv2/VertexDataManager.cpp
@@ -20,6 +20,8 @@
#include "libGLESv2/vertexconversion.h"
#include "libGLESv2/IndexDataManager.h"
+#include <limits>
+
namespace
{
enum { INITIAL_STREAM_BUFFER_SIZE = 1024*1024 };
@@ -41,7 +43,10 @@
{
for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
{
- mDirtyCurrentValue[i] = true;
+ mCurrentValue[i][0] = std::numeric_limits<float>::quiet_NaN();
+ mCurrentValue[i][1] = std::numeric_limits<float>::quiet_NaN();
+ mCurrentValue[i][2] = std::numeric_limits<float>::quiet_NaN();
+ mCurrentValue[i][3] = std::numeric_limits<float>::quiet_NaN();
mCurrentValueBuffer[i] = NULL;
mCurrentValueOffsets[i] = 0;
}
@@ -121,7 +126,7 @@
return streamOffset;
}
-GLenum VertexDataManager::prepareVertexData(const VertexAttributeArray &attribs, ProgramBinary *programBinary, GLint start, GLsizei count, TranslatedAttribute *translated, GLsizei instances)
+GLenum VertexDataManager::prepareVertexData(const VertexAttribute attribs[], ProgramBinary *programBinary, GLint start, GLsizei count, TranslatedAttribute *translated, GLsizei instances)
{
if (!mStreamingBuffer)
{
@@ -267,7 +272,10 @@
StreamingVertexBuffer *buffer = mCurrentValueBuffer[i];
- if (mDirtyCurrentValue[i])
+ if (mCurrentValue[i][0] != attribs[i].mCurrentValue[0] ||
+ mCurrentValue[i][1] != attribs[i].mCurrentValue[1] ||
+ mCurrentValue[i][2] != attribs[i].mCurrentValue[2] ||
+ mCurrentValue[i][3] != attribs[i].mCurrentValue[3])
{
const int requiredSpace = 4 * sizeof(float);
buffer->addRequiredSpace(requiredSpace);
@@ -280,7 +288,11 @@
data[2] = attribs[i].mCurrentValue[2];
data[3] = attribs[i].mCurrentValue[3];
buffer->unmap();
- mDirtyCurrentValue[i] = false;
+
+ mCurrentValue[i][0] = attribs[i].mCurrentValue[0];
+ mCurrentValue[i][1] = attribs[i].mCurrentValue[1];
+ mCurrentValue[i][2] = attribs[i].mCurrentValue[2];
+ mCurrentValue[i][3] = attribs[i].mCurrentValue[3];
}
}