forked from qt-creator/qt-creator
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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user