blob: cb706c4fbe8e6868c9c533708baeb8538cb31b82 [file] [log] [blame]
/*
* 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