summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWieland Hagen <wieland.hagen@kdab.com>2017-02-01 15:12:18 +0700
committerWieland Hagen <wieland.hagen@kdab.com>2017-02-01 09:29:10 +0000
commit0da1d0e6a93e9c1f745f5ff3b8d628a2de9b0fa3 (patch)
treeedde9d0c5ae1acb7713dae49a0be1fc59ea2bd52
parent9c39fd7915e6d23c27ceb21bb1aa3e4b9ae2aed1 (diff)
OpenGLVertexArrayObject: require cleanup
Change-Id: I65d7e85abd707aea0554652694803bfdc52b8632 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/backend/managers_p.h3
-rw-r--r--src/render/backend/openglvertexarrayobject.cpp14
-rw-r--r--src/render/backend/openglvertexarrayobject_p.h3
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(); }