QmlDesigner: Add "Apply as light probe" option to material browser

Textures in material browser can now be applied as light probes to
the active SceneEnvironment node.

Also changed the logic for resolving the active SceneEnvironment node
to prefer a currently single-selected SceneEnvironment node over
the SceneEnvironment node associated with currently active 3D scene.

Fixes: QDS-8472
Change-Id: I9a3a7b9c2fad3c8120e85ade507a7ea66de19f1d
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2022-12-05 15:54:45 +02:00
parent 216f3dd243
commit a5fb9fc95f
6 changed files with 64 additions and 26 deletions

View File

@@ -4,6 +4,7 @@
#include "materialbrowserview.h"
#include "bindingproperty.h"
#include "createtexture.h"
#include "materialbrowsermodel.h"
#include "materialbrowsertexturesmodel.h"
#include "materialbrowserwidget.h"
@@ -186,6 +187,19 @@ WidgetInfo MaterialBrowserView::widgetInfo()
connect(texturesModel, &MaterialBrowserTexturesModel::addNewTextureTriggered, this, [&] {
emitCustomNotification("add_new_texture");
});
connect(texturesModel, &MaterialBrowserTexturesModel::updateSceneEnvStateRequested, this, [&]() {
ModelNode activeSceneEnv = CreateTexture(this).resolveSceneEnv(m_sceneId);
const bool sceneEnvExists = activeSceneEnv.isValid();
m_widget->materialBrowserTexturesModel()->setHasSceneEnv(sceneEnvExists);
});
connect(texturesModel, &MaterialBrowserTexturesModel::applyAsLightProbeRequested, this,
[&] (const ModelNode &texture) {
executeInTransaction(__FUNCTION__, [&] {
CreateTexture(this).assignTextureAsLightProbe(texture, m_sceneId);
});
});
}
return createWidgetInfo(m_widget.data(),
@@ -458,29 +472,6 @@ void MaterialBrowserView::active3DSceneChanged(qint32 sceneId)
m_sceneId = sceneId;
}
ModelNode MaterialBrowserView::resolveSceneEnv()
{
ModelNode activeSceneEnv;
if (m_sceneId != -1) {
ModelNode activeScene = active3DSceneNode();
if (activeScene.isValid()) {
QmlObjectNode view3D;
if (activeScene.metaInfo().isQtQuick3DView3D()) {
view3D = activeScene;
} else {
ModelNode sceneParent = activeScene.parentProperty().parentModelNode();
if (sceneParent.metaInfo().isQtQuick3DView3D())
view3D = sceneParent;
}
if (view3D.isValid())
activeSceneEnv = modelNodeForId(view3D.expression("environment"));
}
}
return activeSceneEnv;
}
void MaterialBrowserView::instancesCompleted(const QVector<ModelNode> &completedNodeList)
{
for (const ModelNode &node : completedNodeList) {