diff options
Diffstat (limited to 'tests/manual/rhi/tessellation/tessellation.cpp')
-rw-r--r-- | tests/manual/rhi/tessellation/tessellation.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/tests/manual/rhi/tessellation/tessellation.cpp b/tests/manual/rhi/tessellation/tessellation.cpp index 56e9503afc..a50ddeeeb2 100644 --- a/tests/manual/rhi/tessellation/tessellation.cpp +++ b/tests/manual/rhi/tessellation/tessellation.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2021 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "../shared/examplefw.h" @@ -9,9 +9,13 @@ static const float tri[] = { 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, }; +static const bool INDEXED = false; +static const quint32 indices[] = { 0, 1, 2 }; + struct { QVector<QRhiResource *> releasePool; QRhiBuffer *vbuf = nullptr; + QRhiBuffer *ibuf = nullptr; QRhiBuffer *ubuf = nullptr; QRhiShaderResourceBindings *srb = nullptr; QRhiGraphicsPipeline *ps = nullptr; @@ -29,6 +33,12 @@ void Window::customInit() d.vbuf->create(); d.releasePool << d.vbuf; + if (INDEXED) { + d.ibuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::IndexBuffer, sizeof(indices)); + d.ibuf->create(); + d.releasePool << d.ibuf; + } + d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 4 + 4); d.ubuf->create(); d.releasePool << d.ubuf; @@ -71,8 +81,12 @@ void Window::customInit() d.initialUpdates = m_r->nextResourceUpdateBatch(); d.initialUpdates->uploadStaticBuffer(d.vbuf, tri); + const float amplitude = 0.5f; d.initialUpdates->updateDynamicBuffer(d.ubuf, 68, 4, &litude); + + if (INDEXED) + d.initialUpdates->uploadStaticBuffer(d.ibuf, indices); } void Window::customRelease() @@ -96,14 +110,20 @@ void Window::customRender() u->updateDynamicBuffer(d.ubuf, 0, 64, d.winProj.constData()); } u->updateDynamicBuffer(d.ubuf, 64, 4, &d.time); - d.time += 0.1f; + d.time += 0.01f; cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u); cb->setGraphicsPipeline(d.ps); cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) }); cb->setShaderResources(); QRhiCommandBuffer::VertexInput vbufBinding(d.vbuf, 0); - cb->setVertexInput(0, 1, &vbufBinding); - cb->draw(3); + if (INDEXED) { + cb->setVertexInput(0, 1, &vbufBinding, d.ibuf, 0, QRhiCommandBuffer::IndexUInt32); + cb->drawIndexed(3); + } else { + cb->setVertexInput(0, 1, &vbufBinding); + cb->draw(3); + } + cb->endPass(); } |