diff options
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/TransformFeedback.h')
-rw-r--r-- | src/3rdparty/angle/src/libANGLE/TransformFeedback.h | 61 |
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; }; } |