summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-02-13 11:51:38 +0100
committerPaul Lemire <paul.lemire@kdab.com>2020-02-13 15:59:42 +0100
commit596bc5734ba525f3d3df45980087c2b3fd90a98f (patch)
treeec1abfecd587235e50c12f4df3ea93a426ec7ba2 /tests
parent9b653c35349d26110258deeea4a859a1499343e4 (diff)
Destroy FBOs when RenderTarget node is destroyed
It appears we never destroyed FBOs which lead to bugs when destroying and recreating a RenderTarget Change-Id: I507b045d9b9e1088ff49f719c8846cc43c4fc8f2 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/render/rendertarget/tst_rendertarget.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/auto/render/rendertarget/tst_rendertarget.cpp b/tests/auto/render/rendertarget/tst_rendertarget.cpp
index 31eee6ec5..9b436aa5b 100644
--- a/tests/auto/render/rendertarget/tst_rendertarget.cpp
+++ b/tests/auto/render/rendertarget/tst_rendertarget.cpp
@@ -32,6 +32,7 @@
#include <Qt3DRender/qrendertargetoutput.h>
#include <Qt3DRender/private/qrendertarget_p.h>
#include <Qt3DRender/private/rendertarget_p.h>
+#include <Qt3DRender/private/managers_p.h>
#include "qbackendnodetester.h"
#include "testrenderer.h"
@@ -205,6 +206,47 @@ private Q_SLOTS:
}
}
+ void checkRenderTargetManager()
+ {
+ // GIVEN
+ Qt3DRender::QRenderTarget renderTarget;
+ TestRenderer renderer;
+ Qt3DRender::Render::RenderTargetManager manager;
+ Qt3DRender::Render::RenderTargetFunctor creationFunctor(&renderer, &manager);
+
+ // THEN
+ QVERIFY(manager.renderTargetIdsToCleanup().isEmpty());
+
+ // WHEN
+ Qt3DCore::QNodeCreatedChangeBase changeObj(&renderTarget);
+ Qt3DCore::QNodeCreatedChangeBasePtr changePtr(&changeObj, [](Qt3DCore::QNodeCreatedChangeBase *) {});
+ auto backend = creationFunctor.create(changePtr);
+
+ // THEN
+ QVERIFY(backend != nullptr);
+ QVERIFY(manager.renderTargetIdsToCleanup().isEmpty());
+
+ {
+ // WHEN
+ auto sameBackend = creationFunctor.get(renderTarget.id());
+ // THEN
+ QCOMPARE(backend, sameBackend);
+ }
+
+ // WHEN
+ creationFunctor.destroy(renderTarget.id());
+
+ // THEN -> Should be in list of ids to remove and return null on get
+ QVERIFY(manager.renderTargetIdsToCleanup().contains(renderTarget.id()));
+ QVERIFY(creationFunctor.get(renderTarget.id()) == nullptr);
+
+ // WHEN -> Should be removed from list of ids to remove
+ creationFunctor.create(changePtr);
+
+ // THEN
+ QVERIFY(manager.renderTargetIdsToCleanup().isEmpty());
+ QVERIFY(creationFunctor.get(renderTarget.id()) != nullptr);
+ }
};
QTEST_MAIN(tst_RenderTarget)