QmlPuppet: Render 2D content inside 3D edit view

In order to render embedded 2D items in 3D scenes or 2D items used
as 3D material textures, those 2D items must be rendered.
2D content is now rendered when necessary also in editor puppet.

Fixes: QDS-4471
Change-Id: I83da90198ecebc3a3a9a35aab28f4aec36620492
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2021-06-22 16:18:35 +03:00
parent 95e82882ef
commit 1c44dab5af
2 changed files with 22 additions and 0 deletions

View File

@@ -793,6 +793,11 @@ void Qt5InformationNodeInstanceServer::doRender3DEditView()
m_editView3DData.window->afterRendering(); m_editView3DData.window->afterRendering();
} }
#else #else
if (m_render2D) {
// Render 2D content, as it might be used by 3D content
grabWindow();
m_render2D = false;
}
renderImage = grabRenderControl(m_editView3DData); renderImage = grabRenderControl(m_editView3DData);
#endif #endif
@@ -1767,6 +1772,11 @@ void Qt5InformationNodeInstanceServer::changePropertyValues(const ChangeValuesCo
if (!container.isReflected()) { if (!container.isReflected()) {
hasDynamicProperties |= container.isDynamic(); hasDynamicProperties |= container.isDynamic();
setInstancePropertyVariant(container); setInstancePropertyVariant(container);
if (!m_render2D && isQuick3DMode() && hasInstanceForId(container.instanceId())) {
ServerNodeInstance instance = instanceForId(container.instanceId());
if (instance.isSubclassOf("QQuickItem"))
m_render2D = true;
}
} }
} }
@@ -1877,6 +1887,17 @@ void Qt5InformationNodeInstanceServer::changeAuxiliaryValues(const ChangeAuxilia
void Qt5InformationNodeInstanceServer::changePropertyBindings(const ChangeBindingsCommand &command) void Qt5InformationNodeInstanceServer::changePropertyBindings(const ChangeBindingsCommand &command)
{ {
Qt5NodeInstanceServer::changePropertyBindings(command); Qt5NodeInstanceServer::changePropertyBindings(command);
const QVector<PropertyBindingContainer> &values = command.bindingChanges;
for (const PropertyBindingContainer &container : values) {
if (!m_render2D && isQuick3DMode() && hasInstanceForId(container.instanceId())) {
ServerNodeInstance instance = instanceForId(container.instanceId());
if (instance.isSubclassOf("QQuickItem")) {
m_render2D = true;
break;
}
}
}
render3DEditView(); render3DEditView();
} }

View File

@@ -165,6 +165,7 @@ private:
QList<InputEventCommand> m_pendingInputEventCommands; QList<InputEventCommand> m_pendingInputEventCommands;
QObject *m_3dHelper = nullptr; QObject *m_3dHelper = nullptr;
int m_need3DEditViewRender = 0; int m_need3DEditViewRender = 0;
bool m_render2D = true;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner