WebGLTransformFeedback.h [plain text]
#pragma once
#if ENABLE(WEBGL2)
#include "WebGL2RenderingContext.h"
#include "WebGLSharedObject.h"
namespace JSC {
class SlotVisitor;
}
namespace WTF {
class AbstractLocker;
}
namespace WebCore {
class WebGLTransformFeedback final : public WebGLSharedObject {
public:
virtual ~WebGLTransformFeedback();
static Ref<WebGLTransformFeedback> create(WebGL2RenderingContext&);
bool isActive() const { return m_active; }
bool isPaused() const { return m_paused; }
void setActive(bool active) { m_active = active; }
void setPaused(bool paused) { m_paused = paused; }
void setBoundIndexedTransformFeedbackBuffer(const WTF::AbstractLocker&, GCGLuint index, WebGLBuffer*);
bool getBoundIndexedTransformFeedbackBuffer(GCGLuint index, WebGLBuffer** outBuffer);
bool validateProgramForResume(WebGLProgram*) const;
bool hasEverBeenBound() const { return object() && m_hasEverBeenBound; }
void setHasEverBeenBound() { m_hasEverBeenBound = true; }
WebGLProgram* program() const { return m_program.get(); }
void setProgram(const WTF::AbstractLocker&, WebGLProgram&);
void unbindBuffer(const AbstractLocker&, WebGLBuffer&);
bool hasEnoughBuffers(GCGLuint numRequired) const;
void addMembersToOpaqueRoots(const AbstractLocker&, JSC::SlotVisitor&);
private:
WebGLTransformFeedback(WebGL2RenderingContext&);
void deleteObjectImpl(const WTF::AbstractLocker&, GraphicsContextGL*, PlatformGLObject) override;
bool m_active { false };
bool m_paused { false };
bool m_hasEverBeenBound { false };
unsigned m_programLinkCount { 0 };
Vector<RefPtr<WebGLBuffer>> m_boundIndexedTransformFeedbackBuffers;
RefPtr<WebGLProgram> m_program;
};
}
#endif