diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-02-21 13:01:38 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-03-20 13:29:55 +0000 |
commit | b9ac4faf28cc27849a392019564209b319f90568 (patch) | |
tree | e36fae9592ad81dd26ab483b6d1d6a6562b7ac71 /tests/auto/render/texture | |
parent | 3c4feadc1f71d2e7cd1fa0e00d439b740bd9289d (diff) |
Make it possible to partially update a texture
- Introduce QTextureDataUpdate which contains information about the update
- QAbstractTexture::updateTexture function added
- Add manual test texture-updates-cpp
- Add unit tests for GLTexture and complete other texture tests
Change-Id: I1b792f2075830ce05cc8e04cc68110141b5571d6
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests/auto/render/texture')
-rw-r--r-- | tests/auto/render/texture/tst_texture.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/auto/render/texture/tst_texture.cpp b/tests/auto/render/texture/tst_texture.cpp index b0ce782a0..d827e900e 100644 --- a/tests/auto/render/texture/tst_texture.cpp +++ b/tests/auto/render/texture/tst_texture.cpp @@ -77,6 +77,7 @@ private slots: void checkPropertyMirroring(); void checkPropertyChanges(); void checkTextureImageBookeeping(); + void checkInitialUpdateData(); }; void tst_RenderTexture::checkDefaults() @@ -531,6 +532,25 @@ void tst_RenderTexture::checkPropertyChanges() QVERIFY(backend.dirtyFlags() == Qt3DRender::Render::Texture::DirtyImageGenerators); renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); backend.unsetDirty(); + + // WHEN + Qt3DRender::QTextureDataUpdate updateData; + updateData.setX(100); + updateData.setY(100); + updateData.setZ(100); + updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId()); + updateChange->setPropertyName("updateData"); + updateChange->setValue(QVariant::fromValue(updateData)); + backend.sceneChangeEvent(updateChange); + + // THEN + const QVector<Qt3DRender::QTextureDataUpdate> pendingUpdates = backend.takePendingTextureDataUpdates(); + QCOMPARE(pendingUpdates.size(), 1); + QCOMPARE(pendingUpdates.first(), updateData); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::TexturesDirty); + QVERIFY(backend.dirtyFlags() == Qt3DRender::Render::Texture::DirtyPendingDataUpdates); + renderer.clearDirtyBits(Qt3DRender::Render::AbstractRenderer::AllDirty); + backend.unsetDirty(); } void tst_RenderTexture::checkTextureImageBookeeping() @@ -556,7 +576,31 @@ void tst_RenderTexture::checkTextureImageBookeeping() // THEN QCOMPARE(texture.textureImages().size(), 0); +} + +void tst_RenderTexture::checkInitialUpdateData() +{ + // GIVEN + TestRenderer renderer; + DummyTexture frontend; + Qt3DRender::Render::Texture backend; + + backend.setRenderer(&renderer); + + Qt3DRender::QTextureDataUpdate updateData; + updateData.setX(100); + updateData.setY(100); + updateData.setZ(100); + + // WHEN -> updateData with no backend/arbiter + frontend.updateData(updateData); + simulateInitialization(&frontend, &backend); + // THEN -> should have received the update as part of the initial data + const QVector<Qt3DRender::QTextureDataUpdate> pendingUpdates = backend.takePendingTextureDataUpdates(); + QCOMPARE(pendingUpdates.size(), 1); + QCOMPARE(pendingUpdates.first(), updateData); + QVERIFY(backend.dirtyFlags() & Qt3DRender::Render::Texture::DirtyPendingDataUpdates); } QTEST_APPLESS_MAIN(tst_RenderTexture) |