diff options
Diffstat (limited to 'src/plugins/renderers/rhi/textures/texture.cpp')
-rw-r--r-- | src/plugins/renderers/rhi/textures/texture.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/plugins/renderers/rhi/textures/texture.cpp b/src/plugins/renderers/rhi/textures/texture.cpp index 6bbfb1d13..4561aa936 100644 --- a/src/plugins/renderers/rhi/textures/texture.cpp +++ b/src/plugins/renderers/rhi/textures/texture.cpp @@ -5,7 +5,7 @@ #include "texture_p.h" #include <private/qdebug_p.h> -#include <private/qrhi_p.h> +#include <rhi/qrhi.h> #include <QDebug> #include <Qt3DCore/private/vector_helper_p.h> #include <Qt3DRender/qtexture.h> @@ -19,8 +19,6 @@ QT_BEGIN_NAMESPACE -using namespace Qt3DCore; - namespace Qt3DRender { namespace Render { namespace Rhi { @@ -193,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))); @@ -218,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 { @@ -632,7 +626,20 @@ QRhiTexture *RHITexture::buildRhiTexture(SubmissionContext *ctx) } } - QRhiTexture *rhiTexture = ctx->rhi()->newTexture(rhiFormat, pixelSize, sampleCount, rhiFlags); + if(actualTarget == QAbstractTexture::Target3D) + rhiFlags |= QRhiTexture::ThreeDimensional; + + 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"; @@ -721,7 +728,7 @@ void RHITexture::uploadRhiTextureData(SubmissionContext *ctx) }); } - if (uploadEntries.size() > 0) { + if (!uploadEntries.empty()) { QRhiTextureUploadDescription uploadDescription; uploadDescription.setEntries(uploadEntries.begin(), uploadEntries.end()); ctx->m_currentUpdates->uploadTexture(m_rhi, uploadDescription); |