diff options
author | Wieland Hagen <wieland.hagen@kdab.com> | 2017-02-01 15:12:18 +0700 |
---|---|---|
committer | Wieland Hagen <wieland.hagen@kdab.com> | 2017-02-01 09:29:10 +0000 |
commit | 0da1d0e6a93e9c1f745f5ff3b8d628a2de9b0fa3 (patch) | |
tree | edde9d0c5ae1acb7713dae49a0be1fc59ea2bd52 | |
parent | 9c39fd7915e6d23c27ceb21bb1aa3e4b9ae2aed1 (diff) |
OpenGLVertexArrayObject: require cleanup
Change-Id: I65d7e85abd707aea0554652694803bfdc52b8632
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/render/backend/managers_p.h | 3 | ||||
-rw-r--r-- | src/render/backend/openglvertexarrayobject.cpp | 14 | ||||
-rw-r--r-- | src/render/backend/openglvertexarrayobject_p.h | 3 |
3 files changed, 15 insertions, 5 deletions
diff --git a/src/render/backend/managers_p.h b/src/render/backend/managers_p.h index ed43fde13..15006fd6e 100644 --- a/src/render/backend/managers_p.h +++ b/src/render/backend/managers_p.h @@ -248,7 +248,7 @@ public: class VAOManager : public Qt3DCore::QResourceManager< OpenGLVertexArrayObject, - QPair<HGeometry, HShader>, + VAOIdentifier, 16, Qt3DCore::ArrayAllocatingPolicy, Qt3DCore::NonLockingPolicy> @@ -410,6 +410,7 @@ Q_DECLARE_RESOURCE_INFO(Qt3DRender::Render::BoundingVolumeDebug, Q_REQUIRES_CLEA Q_DECLARE_RESOURCE_INFO(Qt3DRender::Render::ComputeCommand, Q_REQUIRES_CLEANUP) Q_DECLARE_RESOURCE_INFO(Qt3DRender::Render::Parameter, Q_REQUIRES_CLEANUP) Q_DECLARE_RESOURCE_INFO(Qt3DRender::Render::Transform, Q_REQUIRES_CLEANUP) +Q_DECLARE_RESOURCE_INFO(Qt3DRender::Render::OpenGLVertexArrayObject, Q_REQUIRES_CLEANUP) QT_END_NAMESPACE diff --git a/src/render/backend/openglvertexarrayobject.cpp b/src/render/backend/openglvertexarrayobject.cpp index 6120c7233..30f79c466 100644 --- a/src/render/backend/openglvertexarrayobject.cpp +++ b/src/render/backend/openglvertexarrayobject.cpp @@ -113,15 +113,21 @@ void OpenGLVertexArrayObject::create() void OpenGLVertexArrayObject::destroy() { Q_ASSERT(m_ctx); - if (m_supportsVao) { - Q_ASSERT(!m_vao.isNull()); - m_vao->destroy(); - } + cleanup(); +} + +void OpenGLVertexArrayObject::cleanup() +{ + m_vao.reset(); + m_ctx = nullptr; m_specified = false; + m_supportsVao = false; + m_createdEmulatedVAO = false; m_indexAttribute = GraphicsContext::VAOIndexAttribute(); m_vertexAttributes.clear(); } + bool OpenGLVertexArrayObject::isCreated() const { if (m_supportsVao) { diff --git a/src/render/backend/openglvertexarrayobject_p.h b/src/render/backend/openglvertexarrayobject_p.h index 4f21497f0..6d8eecec8 100644 --- a/src/render/backend/openglvertexarrayobject_p.h +++ b/src/render/backend/openglvertexarrayobject_p.h @@ -59,6 +59,8 @@ QT_BEGIN_NAMESPACE namespace Qt3DRender { namespace Render { +typedef QPair<HGeometry, HShader> VAOIdentifier; + class OpenGLVertexArrayObject { public: @@ -69,6 +71,7 @@ public: void release(); void create(); void destroy(); + void cleanup(); bool isCreated() const; QOpenGLVertexArrayObject *vao() { return m_vao.data(); } |