From 653ff3d4d5f992b64c4949e9741f4213a81a9f42 Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Mon, 23 Feb 2015 10:10:34 +0100 Subject: Unit Tests for RenderShader Note: Only test proper initialization, cleanup and that it matches a frontend peer. Doesn't that shader loading as this requires a context, surface... Change-Id: I05f6ef059005b4781b82876a8d73e46d41d44387 Reviewed-by: Sean Harmer --- tests/auto/render/render.pro | 3 +- tests/auto/render/rendershader/rendershader.pro | 9 ++ .../auto/render/rendershader/tst_rendershader.cpp | 128 +++++++++++++++++++++ 3 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 tests/auto/render/rendershader/rendershader.pro create mode 100644 tests/auto/render/rendershader/tst_rendershader.cpp (limited to 'tests') diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro index bc8d8a22a..5cb2a88c3 100644 --- a/tests/auto/render/render.pro +++ b/tests/auto/render/render.pro @@ -5,5 +5,6 @@ contains(QT_CONFIG, private_tests) { renderentity \ renderqueues \ renderrenderpass \ - qgraphicsutils + qgraphicsutils \ + rendershader } diff --git a/tests/auto/render/rendershader/rendershader.pro b/tests/auto/render/rendershader/rendershader.pro new file mode 100644 index 000000000..c5d28d410 --- /dev/null +++ b/tests/auto/render/rendershader/rendershader.pro @@ -0,0 +1,9 @@ +TEMPLATE = app + +TARGET = tst_rendershader + +QT += core-private 3dcore 3dcore-private 3drenderer 3drenderer-private testlib + +CONFIG += testcase + +SOURCES += tst_rendershader.cpp diff --git a/tests/auto/render/rendershader/tst_rendershader.cpp b/tests/auto/render/rendershader/tst_rendershader.cpp new file mode 100644 index 000000000..980058285 --- /dev/null +++ b/tests/auto/render/rendershader/tst_rendershader.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +class tst_RenderShader : public QObject +{ + Q_OBJECT +private slots: + + void hasCoherentInitialState(); + void matchesFrontendPeer(); + void cleanupLeavesACoherentState(); +}; + + +Qt3D::QShaderProgram *createFrontendShader() +{ + Qt3D::QShaderProgram *shader = new Qt3D::QShaderProgram(); + + shader->setVertexShaderCode(QByteArrayLiteral( + "#version 150"\ + "in vec3 vertexPosition;"\ + "in vec3 vertexColor; "\ + "out vec3 color;"\ + "void main()"\ + "{"\ + " color = vertexColor;"\ + " gl_Position = vec4( vertexPosition, 1.0 );"\ + "}")); + + shader->setFragmentShaderCode(QByteArrayLiteral( + "#version 150"\ + "in vec3 color;"\ + "out vec4 fragColor;"\ + "void main()"\ + "{"\ + " fragColor = vec4( color, 1.0 );"\ + "}")); + + return shader; +} + +void tst_RenderShader::hasCoherentInitialState() +{ + Qt3D::Render::RenderShader *shader = new Qt3D::Render::RenderShader(); + + QCOMPARE(shader->isLoaded(), false); + QCOMPARE(shader->dna(), 0U); + QVERIFY(shader->uniformsNames().isEmpty()); + QVERIFY(shader->attributesNames().isEmpty()); + QVERIFY(shader->uniformBlockNames().isEmpty()); + QVERIFY(shader->uniforms().isEmpty()); + QVERIFY(shader->attributes().isEmpty()); + QVERIFY(shader->uniformBlocks().isEmpty()); +} + +void tst_RenderShader::matchesFrontendPeer() +{ + Qt3D::QShaderProgram *frontend = createFrontendShader(); + Qt3D::Render::RenderShader *backend = new Qt3D::Render::RenderShader(); + + backend->updateFromPeer(frontend); + QCOMPARE(backend->isLoaded(), false); + QVERIFY(backend->dna() != 0U); + + for (int i = Qt3D::QShaderProgram::Vertex; i <= Qt3D::QShaderProgram::Compute; ++i) + QCOMPARE(backend->shaderCode()[i], + frontend->shaderCode( static_cast(i))); +} + +void tst_RenderShader::cleanupLeavesACoherentState() +{ + Qt3D::QShaderProgram *frontend = createFrontendShader(); + Qt3D::Render::RenderShader *shader = new Qt3D::Render::RenderShader(); + + shader->updateFromPeer(frontend); + + shader->cleanup(); + + QCOMPARE(shader->isLoaded(), false); + QCOMPARE(shader->dna(), 0U); + QVERIFY(shader->uniformsNames().isEmpty()); + QVERIFY(shader->attributesNames().isEmpty()); + QVERIFY(shader->uniformBlockNames().isEmpty()); + QVERIFY(shader->uniforms().isEmpty()); + QVERIFY(shader->attributes().isEmpty()); + QVERIFY(shader->uniformBlocks().isEmpty()); +} + +QTEST_APPLESS_MAIN(tst_RenderShader) + +#include "tst_rendershader.moc" -- cgit v1.2.3