diff options
author | Philip Schuchardt <vpicaver@gmail.com> | 2023-08-23 18:03:22 -0700 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-08-25 20:44:13 +0000 |
commit | 6d225afa5e8b78264b91cdd77e756b7f1f9421e0 (patch) | |
tree | dd7b0a1787afb7b75ee1f3012ba21f30627526b4 | |
parent | 26a88d6886137b9afe2512edc8d26634c9e8f14f (diff) |
Texture array support for RHI renderer
This fixes QTBUG-116354 - Qt3D - Enable texture array. QTBUG-83343 has
been implemented and Qt3D just need to use the RHI API to support 1D and
2D texture arrays.
[ChangeLog] Enable texture array on the RHI render plugin
Fixes: QTBUG-116354
Change-Id: I75c6c03ddf388eef3e4899fa772f77d3dac2a931
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
(cherry picked from commit 781c07e2a17a4927ec9a6e1648af3de9ec492d7c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/plugins/renderers/rhi/textures/texture.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/plugins/renderers/rhi/textures/texture.cpp b/src/plugins/renderers/rhi/textures/texture.cpp index c216cefdc..919240be9 100644 --- a/src/plugins/renderers/rhi/textures/texture.cpp +++ b/src/plugins/renderers/rhi/textures/texture.cpp @@ -191,15 +191,12 @@ void filterLayersAndFaces(const QTextureImageData &data, F f) f(createUploadEntry(level, 0, data.data(0, 0, level))); } } else if (layers > 1 && faces == 1) { - qWarning() << Q_FUNC_INFO << "Unsupported case, see QTBUG-83343"; - /* for (int layer = 0; layer < data.layers(); layer++) { - for (int level = 0; level < mipLevels; level++) { + for (int level = 0; level < miplevels; level++) { f(createUploadEntry(level, layer, data.data(layer, 0, level))); } } - */ - } else if (faces > 1 && layers == 1) { + } else if (faces > 1 && layers == 1) { // Mip levels do not seem to be supported by cubemaps... for (int face = 0; face < data.faces(); face++) { f(createUploadEntry(0, face, data.data(0, face, 0))); @@ -216,8 +213,7 @@ void filterLayerAndFace(int layer, int face, F f) if (layer == 0 && face == 0) { f(0); } else if (layer > 0 && face == 0) { - qWarning() << Q_FUNC_INFO << "Unsupported case, see QTBUG-83343"; - // f(layer); + f(layer); } else if (layer == 0 && face > 0) { f(face); } else { @@ -630,7 +626,17 @@ QRhiTexture *RHITexture::buildRhiTexture(SubmissionContext *ctx) } } - QRhiTexture *rhiTexture = ctx->rhi()->newTexture(rhiFormat, pixelSize, sampleCount, rhiFlags); + QRhiTexture *rhiTexture = nullptr; + switch (m_properties.target) { + case QAbstractTexture::Target1DArray: + case QAbstractTexture::Target2DArray: + //This will setup the array flags correctly + rhiTexture = ctx->rhi()->newTextureArray(rhiFormat, m_properties.layers, pixelSize, sampleCount, rhiFlags); + break; + default: + rhiTexture = ctx->rhi()->newTexture(rhiFormat, pixelSize, sampleCount, rhiFlags); + break; + } if (!rhiTexture->create()) { qWarning() << Q_FUNC_INFO << "creating QRhiTexture failed"; |