summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/TransformFeedback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/TransformFeedback.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/TransformFeedback.cpp127
1 files changed, 103 insertions, 24 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/TransformFeedback.cpp b/src/3rdparty/angle/src/libANGLE/TransformFeedback.cpp
index 6effaca976..b7961971d0 100644
--- a/src/3rdparty/angle/src/libANGLE/TransformFeedback.cpp
+++ b/src/3rdparty/angle/src/libANGLE/TransformFeedback.cpp
@@ -5,67 +5,146 @@
//
#include "libANGLE/TransformFeedback.h"
+
+#include "libANGLE/Buffer.h"
+#include "libANGLE/Caps.h"
#include "libANGLE/renderer/TransformFeedbackImpl.h"
namespace gl
{
-TransformFeedback::TransformFeedback(rx::TransformFeedbackImpl* impl, GLuint id)
+TransformFeedback::TransformFeedback(rx::TransformFeedbackImpl *impl, GLuint id, const Caps &caps)
: RefCountObject(id),
- mTransformFeedback(impl),
- mStarted(GL_FALSE),
+ mImplementation(impl),
+ mLabel(),
+ mActive(false),
mPrimitiveMode(GL_NONE),
- mPaused(GL_FALSE)
+ mPaused(false),
+ mGenericBuffer(),
+ mIndexedBuffers(caps.maxTransformFeedbackSeparateAttributes)
{
ASSERT(impl != NULL);
}
TransformFeedback::~TransformFeedback()
{
- SafeDelete(mTransformFeedback);
+ mGenericBuffer.set(nullptr);
+ for (size_t i = 0; i < mIndexedBuffers.size(); i++)
+ {
+ mIndexedBuffers[i].set(nullptr);
+ }
+
+ SafeDelete(mImplementation);
}
-void TransformFeedback::start(GLenum primitiveMode)
+void TransformFeedback::setLabel(const std::string &label)
{
- mStarted = GL_TRUE;
- mPrimitiveMode = primitiveMode;
- mPaused = GL_FALSE;
- mTransformFeedback->begin(primitiveMode);
+ mLabel = label;
}
-void TransformFeedback::stop()
+const std::string &TransformFeedback::getLabel() const
{
- mStarted = GL_FALSE;
- mPrimitiveMode = GL_NONE;
- mPaused = GL_FALSE;
- mTransformFeedback->end();
+ return mLabel;
}
-GLboolean TransformFeedback::isStarted() const
+void TransformFeedback::begin(GLenum primitiveMode)
{
- return mStarted;
+ mActive = true;
+ mPrimitiveMode = primitiveMode;
+ mPaused = false;
+ mImplementation->begin(primitiveMode);
}
-GLenum TransformFeedback::getDrawMode() const
+void TransformFeedback::end()
{
- return mPrimitiveMode;
+ mActive = false;
+ mPrimitiveMode = GL_NONE;
+ mPaused = false;
+ mImplementation->end();
}
void TransformFeedback::pause()
{
- mPaused = GL_TRUE;
- mTransformFeedback->pause();
+ mPaused = true;
+ mImplementation->pause();
}
void TransformFeedback::resume()
{
- mPaused = GL_FALSE;
- mTransformFeedback->resume();
+ mPaused = false;
+ mImplementation->resume();
+}
+
+bool TransformFeedback::isActive() const
+{
+ return mActive;
}
-GLboolean TransformFeedback::isPaused() const
+bool TransformFeedback::isPaused() const
{
return mPaused;
}
+GLenum TransformFeedback::getPrimitiveMode() const
+{
+ return mPrimitiveMode;
+}
+
+void TransformFeedback::bindGenericBuffer(Buffer *buffer)
+{
+ mGenericBuffer.set(buffer);
+ mImplementation->bindGenericBuffer(mGenericBuffer);
+}
+
+void TransformFeedback::detachBuffer(GLuint bufferName)
+{
+ for (size_t index = 0; index < mIndexedBuffers.size(); index++)
+ {
+ if (mIndexedBuffers[index].id() == bufferName)
+ {
+ mIndexedBuffers[index].set(nullptr);
+ mImplementation->bindIndexedBuffer(index, mIndexedBuffers[index]);
+ }
+ }
+
+ if (mGenericBuffer.id() == bufferName)
+ {
+ mGenericBuffer.set(nullptr);
+ mImplementation->bindGenericBuffer(mGenericBuffer);
+ }
+}
+
+const BindingPointer<Buffer> &TransformFeedback::getGenericBuffer() const
+{
+ return mGenericBuffer;
+}
+
+void TransformFeedback::bindIndexedBuffer(size_t index, Buffer *buffer, size_t offset, size_t size)
+{
+ ASSERT(index < mIndexedBuffers.size());
+ mIndexedBuffers[index].set(buffer, offset, size);
+ mImplementation->bindIndexedBuffer(index, mIndexedBuffers[index]);
+}
+
+const OffsetBindingPointer<Buffer> &TransformFeedback::getIndexedBuffer(size_t index) const
+{
+ ASSERT(index < mIndexedBuffers.size());
+ return mIndexedBuffers[index];
+}
+
+size_t TransformFeedback::getIndexedBufferCount() const
+{
+ return mIndexedBuffers.size();
+}
+
+rx::TransformFeedbackImpl *TransformFeedback::getImplementation()
+{
+ return mImplementation;
+}
+
+const rx::TransformFeedbackImpl *TransformFeedback::getImplementation() const
+{
+ return mImplementation;
+}
+
}