summaryrefslogtreecommitdiffstats
path: root/src/plugins/renderers/rhi/textures/texture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/renderers/rhi/textures/texture.cpp')
-rw-r--r--src/plugins/renderers/rhi/textures/texture.cpp31
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);