summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Schuchardt <vpicaver@gmail.com>2023-08-23 18:03:22 -0700
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-08-25 20:44:13 +0000
commit6d225afa5e8b78264b91cdd77e756b7f1f9421e0 (patch)
treedd7b0a1787afb7b75ee1f3012ba21f30627526b4
parent26a88d6886137b9afe2512edc8d26634c9e8f14f (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.cpp22
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";