summaryrefslogtreecommitdiffstats
path: root/src/render/backend/openglvertexarrayobject_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/backend/openglvertexarrayobject_p.h')
-rw-r--r--src/render/backend/openglvertexarrayobject_p.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/render/backend/openglvertexarrayobject_p.h b/src/render/backend/openglvertexarrayobject_p.h
index 4f21497f0..a564175f6 100644
--- a/src/render/backend/openglvertexarrayobject_p.h
+++ b/src/render/backend/openglvertexarrayobject_p.h
@@ -59,31 +59,39 @@ QT_BEGIN_NAMESPACE
namespace Qt3DRender {
namespace Render {
+class GeometryManager;
+class ShaderManager;
+
+typedef QPair<HGeometry, HShader> VAOIdentifier;
+
class OpenGLVertexArrayObject
{
public:
OpenGLVertexArrayObject();
- void setGraphicsContext(GraphicsContext *ctx);
void bind();
void release();
- void create();
+
+ void create(GraphicsContext *ctx, const VAOIdentifier &key);
void destroy();
- bool isCreated() const;
+ void cleanup();
+
+ bool isAbandoned(GeometryManager *geomMgr, ShaderManager *shaderMgr);
QOpenGLVertexArrayObject *vao() { return m_vao.data(); }
const QOpenGLVertexArrayObject *vao() const { return m_vao.data(); }
- void setVao(QOpenGLVertexArrayObject *vao) { m_vao.reset(vao); }
void setSpecified(bool b) { m_specified = b; }
bool isSpecified() const { return m_specified; }
+
private:
+ QMutex m_mutex;
GraphicsContext *m_ctx;
QScopedPointer<QOpenGLVertexArrayObject> m_vao;
bool m_specified;
bool m_supportsVao;
- bool m_createdEmulatedVAO;
+ VAOIdentifier m_owners;
friend class GraphicsContext;