| /* | |
| * Copyright 2023 Rive | |
| */ | |
| #pragma once | |
| #include "rive/pls/gl/gles3.hpp" | |
| #include "rive/refcnt.hpp" | |
| #include "rive/shapes/paint/blend_mode.hpp" | |
| namespace rive::pls | |
| { | |
| // Lightweight wrapper around common GL state. | |
| class GLState : public RefCnt<GLState> | |
| { | |
| public: | |
| GLState(const GLCapabilities& capabilities) : m_capabilities(capabilities) { invalidate(); } | |
| void invalidate(); | |
| void setBlendEquation(BlendMode); | |
| void disableBlending(); | |
| void setWriteMasks(bool colorWriteMask, bool depthWriteMask, GLuint stencilWriteMask); | |
| void setCullFace(GLenum); | |
| void bindProgram(GLuint); | |
| void bindVAO(GLuint); | |
| void bindBuffer(GLenum target, GLuint); | |
| void deleteProgram(GLuint); | |
| void deleteVAO(GLuint); | |
| void deleteBuffer(GLuint); | |
| private: | |
| const GLCapabilities m_capabilities; | |
| GLenum m_blendEquation; | |
| bool m_colorWriteMask; | |
| bool m_depthWriteMask; | |
| GLuint m_stencilWriteMask; | |
| GLenum m_cullFace; | |
| GLuint m_boundProgramID; | |
| GLuint m_boundVAO; | |
| GLuint m_boundArrayBufferID; | |
| GLuint m_boundUniformBufferID; | |
| GLuint m_boundPixelUnpackBufferID; | |
| struct | |
| { | |
| bool blendEquation : 1; | |
| bool writeMasks : 1; | |
| bool cullFace : 1; | |
| bool boundProgramID : 1; | |
| bool boundVAO : 1; | |
| bool boundArrayBufferID : 1; | |
| bool boundUniformBufferID : 1; | |
| bool boundPixelUnpackBufferID : 1; | |
| } m_validState; | |
| }; | |
| } // namespace rive::pls |