Add a Buffer::getIndexRange function.
Instead of exposing the index range cache, add a more generic method that
allows the buffers to handle their own caching of index ranges.
BufferImpl::getData can be hard to implement for BufferGL because there
isn't a way to tell the buffer to unmap and glGetBufferSubData can be very
expensive, requiring an extra copy of the data.
BUG=angleproject:881
Change-Id: Idec645219056132e0d72a410fbe7b971fa02c9e9
Reviewed-on: https://chromium-review.googlesource.com/261892
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 4c26dbf..71e9eea 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -1219,7 +1219,26 @@
Error Context::drawArrays(GLenum mode, GLint first, GLsizei count, GLsizei instances)
{
- return mRenderer->drawArrays(getData(), mode, first, count, instances);
+ Error error = mRenderer->drawArrays(getData(), mode, first, count, instances);
+ if (error.isError())
+ {
+ return error;
+ }
+
+ TransformFeedback *transformFeedback = mState.getCurrentTransformFeedback();
+ if (transformFeedback->isActive() && !transformFeedback->isPaused())
+ {
+ for (size_t tfBufferIndex = 0; tfBufferIndex < transformFeedback->getIndexedBufferCount(); tfBufferIndex++)
+ {
+ const OffsetBindingPointer<Buffer> &buffer = transformFeedback->getIndexedBuffer(tfBufferIndex);
+ if (buffer.get() != nullptr)
+ {
+ buffer->onTransformFeedback();
+ }
+ }
+ }
+
+ return Error(GL_NO_ERROR);
}
Error Context::drawElements(GLenum mode, GLsizei count, GLenum type,