summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/TransformFeedback.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/TransformFeedback.h')
-rw-r--r--src/3rdparty/angle/src/libANGLE/TransformFeedback.h61
1 files changed, 45 insertions, 16 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/TransformFeedback.h b/src/3rdparty/angle/src/libANGLE/TransformFeedback.h
index 098e4ea4d6..2b35d43f9a 100644
--- a/src/3rdparty/angle/src/libANGLE/TransformFeedback.h
+++ b/src/3rdparty/angle/src/libANGLE/TransformFeedback.h
@@ -16,6 +16,7 @@
namespace rx
{
+class GLImplFactory;
class TransformFeedbackImpl;
}
@@ -23,18 +24,46 @@ namespace gl
{
class Buffer;
struct Caps;
+class Context;
+class Program;
+
+class TransformFeedbackState final : angle::NonCopyable
+{
+ public:
+ TransformFeedbackState(size_t maxIndexedBuffers);
+ ~TransformFeedbackState();
+
+ const BindingPointer<Buffer> &getGenericBuffer() const;
+ const OffsetBindingPointer<Buffer> &getIndexedBuffer(size_t idx) const;
+ const std::vector<OffsetBindingPointer<Buffer>> &getIndexedBuffers() const;
+
+ private:
+ friend class TransformFeedback;
+
+ std::string mLabel;
+
+ bool mActive;
+ GLenum mPrimitiveMode;
+ bool mPaused;
+
+ Program *mProgram;
+
+ BindingPointer<Buffer> mGenericBuffer;
+ std::vector<OffsetBindingPointer<Buffer>> mIndexedBuffers;
+};
class TransformFeedback final : public RefCountObject, public LabeledObject
{
public:
- TransformFeedback(rx::TransformFeedbackImpl* impl, GLuint id, const Caps &caps);
- virtual ~TransformFeedback();
+ TransformFeedback(rx::GLImplFactory *implFactory, GLuint id, const Caps &caps);
+ ~TransformFeedback() override;
+ Error onDestroy(const Context *context) override;
void setLabel(const std::string &label) override;
const std::string &getLabel() const override;
- void begin(GLenum primitiveMode);
- void end();
+ void begin(const Context *context, GLenum primitiveMode, Program *program);
+ void end(const Context *context);
void pause();
void resume();
@@ -42,29 +71,29 @@ class TransformFeedback final : public RefCountObject, public LabeledObject
bool isPaused() const;
GLenum getPrimitiveMode() const;
- void bindGenericBuffer(Buffer *buffer);
+ bool hasBoundProgram(GLuint program) const;
+
+ void bindGenericBuffer(const Context *context, Buffer *buffer);
const BindingPointer<Buffer> &getGenericBuffer() const;
- void bindIndexedBuffer(size_t index, Buffer *buffer, size_t offset, size_t size);
+ void bindIndexedBuffer(const Context *context,
+ size_t index,
+ Buffer *buffer,
+ size_t offset,
+ size_t size);
const OffsetBindingPointer<Buffer> &getIndexedBuffer(size_t index) const;
size_t getIndexedBufferCount() const;
- void detachBuffer(GLuint bufferName);
+ void detachBuffer(const Context *context, GLuint bufferName);
rx::TransformFeedbackImpl *getImplementation();
const rx::TransformFeedbackImpl *getImplementation() const;
private:
- rx::TransformFeedbackImpl* mImplementation;
-
- std::string mLabel;
+ void bindProgram(const Context *context, Program *program);
- bool mActive;
- GLenum mPrimitiveMode;
- bool mPaused;
-
- BindingPointer<Buffer> mGenericBuffer;
- std::vector<OffsetBindingPointer<Buffer>> mIndexedBuffers;
+ TransformFeedbackState mState;
+ rx::TransformFeedbackImpl* mImplementation;
};
}