Implement GL_OES_element_index_uint
TRAC #11951
Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch
Author: Andrew Lewycky
git-svn-id: https://angleproject.googlecode.com/svn/trunk@240 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/geometry/VertexDataManager.cpp b/src/libGLESv2/geometry/VertexDataManager.cpp
index 11ccba4..42a051e 100644
--- a/src/libGLESv2/geometry/VertexDataManager.cpp
+++ b/src/libGLESv2/geometry/VertexDataManager.cpp
@@ -46,27 +46,7 @@
delete mCurrentValueBuffer;
}
-VertexDataManager::ArrayTranslationHelper::ArrayTranslationHelper(GLint first, GLsizei count)
- : mFirst(first), mCount(count)
-{
-}
-
-void VertexDataManager::ArrayTranslationHelper::translate(const FormatConverter &converter, GLsizei stride, const void *source, void *dest)
-{
- converter.convertArray(source, stride, mCount, dest);
-}
-
-VertexDataManager::IndexedTranslationHelper::IndexedTranslationHelper(const Index *indices, Index minIndex, GLsizei count)
- : mIndices(indices), mMinIndex(minIndex), mCount(count)
-{
-}
-
-void VertexDataManager::IndexedTranslationHelper::translate(const FormatConverter &converter, GLsizei stride, const void *source, void *dest)
-{
- converter.convertIndexed(source, stride, mMinIndex, mCount, mIndices, dest);
-}
-
-std::bitset<MAX_VERTEX_ATTRIBS> VertexDataManager::activeAttribs()
+std::bitset<MAX_VERTEX_ATTRIBS> VertexDataManager::getActiveAttribs() const
{
std::bitset<MAX_VERTEX_ATTRIBS> active;
@@ -81,28 +61,11 @@
}
GLenum VertexDataManager::preRenderValidate(GLint start, GLsizei count,
- TranslatedAttribute *outAttribs)
+ TranslatedAttribute *translated)
{
- ArrayTranslationHelper translationHelper(start, count);
+ const AttributeState *attribs = mContext->getVertexAttribBlock();
+ const std::bitset<MAX_VERTEX_ATTRIBS> activeAttribs = getActiveAttribs();
- return internalPreRenderValidate(mContext->getVertexAttribBlock(), activeAttribs(), start, start+count-1, &translationHelper, outAttribs);
-}
-
-GLenum VertexDataManager::preRenderValidate(const TranslatedIndexData &indexInfo,
- TranslatedAttribute *outAttribs)
-{
- IndexedTranslationHelper translationHelper(indexInfo.indices, indexInfo.minIndex, indexInfo.count);
-
- return internalPreRenderValidate(mContext->getVertexAttribBlock(), activeAttribs(), indexInfo.minIndex, indexInfo.maxIndex, &translationHelper, outAttribs);
-}
-
-GLenum VertexDataManager::internalPreRenderValidate(const AttributeState *attribs,
- const std::bitset<MAX_VERTEX_ATTRIBS> &activeAttribs,
- Index minIndex,
- Index maxIndex,
- TranslationHelper *translator,
- TranslatedAttribute *translated)
-{
std::bitset<MAX_VERTEX_ATTRIBS> translateOrLift;
for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
@@ -127,7 +90,7 @@
if (attribs[i].mBoundBuffer != 0 && mBackend->getFormatConverter(attribs[i].mType, attribs[i].mSize, attribs[i].mNormalized).identity)
{
std::size_t stride = interpretGlStride(attribs[i]);
- std::size_t offset = static_cast<std::size_t>(static_cast<const char*>(attribs[i].mPointer) - static_cast<const char*>(NULL)) + stride * minIndex;
+ std::size_t offset = static_cast<std::size_t>(static_cast<const char*>(attribs[i].mPointer) - static_cast<const char*>(NULL)) + stride * start;
if (mBackend->validateStream(attribs[i].mType, attribs[i].mSize, stride, offset))
{
@@ -153,8 +116,6 @@
// Handle any attributes needing translation or lifting.
if (translateOrLift.any())
{
- std::size_t count = maxIndex - minIndex + 1;
-
std::size_t requiredSpace = 0;
for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
@@ -204,9 +165,9 @@
size_t inputStride = interpretGlStride(attribs[i]);
- input = static_cast<const char*>(input) + inputStride * minIndex;
+ input = static_cast<const char*>(input) + inputStride * start;
- translator->translate(formatConverter, interpretGlStride(attribs[i]), input, output);
+ formatConverter.convertArray(input, inputStride, count, output);
mStreamBuffer->unmap();
}