44void QQuick3DLightmapBaker::bake()
47 if (m_currentlyBaking)
50 m_bakingRequested =
true;
51 m_bakingControl->reset();
53 m_windowCancelRequested =
false;
56 m_lmWindow =
new QQuickView();
57 m_lmWindow->setSource(QUrl::fromLocalFile(QStringLiteral(
":/qt-project.org/imports/QtQuick3D/LightmapperOutputWindow.qml")));
59 m_lmWindow->setProperty(
"width", 400);
60 m_lmWindow->setProperty(
"height", 400);
62 QObject *rootObject = m_lmWindow->rootObject();
63 QObject *cancelButton = rootObject->findChild<QObject *>(QStringLiteral(
"cancelButton"));
65 QObject::connect(cancelButton, SIGNAL(clicked()),
this, SLOT(onLmCancelButtonClicked()));
67 QObject::connect(m_lmWindow, &QQuickWindow::closing,
this, &QQuick3DLightmapBaker::onLmWindowClosing);
69 QObject *rootObject = m_lmWindow->rootObject();
70 QMetaObject::invokeMethod(rootObject,
"clearText");
73 m_callback = [
this] (
const QVariantMap &payload, BakingControl *bakingControl) {
74 if (m_windowCancelRequested && !bakingControl->isCancelled())
75 bakingControl->requestCancel();
77 const BakingStatus status =
static_cast<BakingStatus>(payload[QStringLiteral(
"status")].toInt());
79 QQuickWindow *window = m_view->window();
80 if (status == BakingStatus::Complete) {
81 m_currentlyBaking =
false;
82 QQuickWindowPrivate::get(window)->updatesEnabled =
true;
83 }
else if (status != BakingStatus::None) {
84 if (status == BakingStatus::Cancelled || status == BakingStatus::Failed) {
85 m_currentlyBaking =
false;
89 QObject *rootObject = m_lmWindow->rootObject();
92 if (payload.contains(QStringLiteral(
"message"))) {
93 msg = payload[QStringLiteral(
"message")].toString();
96 if (status == BakingStatus::Warning)
97 msg.prepend(QStringLiteral(
"Warning: "));
98 else if (status == BakingStatus::Error)
99 msg.prepend(QStringLiteral(
"Error: "));
103 QMetaObject::invokeMethod(rootObject,
"update", Q_ARG(QVariant, payload));
108 m_currentlyBaking =
true;
128void QQuick3DLightmapBaker::denoise()
131 if (m_currentlyBaking)
133 m_denoisingRequested =
true;
134 m_bakingControl->reset();
136 m_windowCancelRequested =
false;
139 m_lmWindow =
new QQuickView();
140 m_lmWindow->setSource(QUrl::fromLocalFile(QStringLiteral(
":/qt-project.org/imports/QtQuick3D/LightmapperOutputWindow.qml")));
142 m_lmWindow->setProperty(
"width", 400);
143 m_lmWindow->setProperty(
"height", 400);
145 QObject *rootObject = m_lmWindow->rootObject();
146 QObject *cancelButton = rootObject->findChild<QObject *>(QStringLiteral(
"cancelButton"));
148 QObject::connect(cancelButton, SIGNAL(clicked()),
this, SLOT(onLmCancelButtonClicked()));
150 QObject::connect(m_lmWindow, &QQuickWindow::closing,
this, &QQuick3DLightmapBaker::onLmWindowClosing);
152 QObject *rootObject = m_lmWindow->rootObject();
153 QMetaObject::invokeMethod(rootObject,
"clearText");
156 m_callback = [
this] (
const QVariantMap &payload, BakingControl *bakingControl) {
157 if (m_windowCancelRequested && !bakingControl->isCancelled())
158 bakingControl->requestCancel();
160 const BakingStatus status =
static_cast<BakingStatus>(payload[QStringLiteral(
"status")].toInt());
162 QQuickWindow *window = m_view->window();
163 if (status == BakingStatus::Complete) {
164 QMetaObject::invokeMethod(window,
"releaseResources", Qt::QueuedConnection);
166 m_currentlyBaking =
false;
167 QQuickWindowPrivate::get(window)->updatesEnabled =
true;
168 }
else if (status != BakingStatus::None) {
169 if (status == BakingStatus::Cancelled || status == BakingStatus::Failed)
170 m_currentlyBaking =
false;
173 QObject *rootObject = m_lmWindow->rootObject();
176 if (payload.contains(QStringLiteral(
"message"))) {
177 msg = payload[QStringLiteral(
"message")].toString();
179 if (!msg.isEmpty()) {
180 if (status == BakingStatus::Warning)
181 msg.prepend(QStringLiteral(
"Warning: "));
182 else if (status == BakingStatus::Error)
183 msg.prepend(QStringLiteral(
"Error: "));
187 QMetaObject::invokeMethod(rootObject,
"update", Q_ARG(QVariant, payload));
192 m_currentlyBaking =
true;