Added rendered picture saving ui
This commit is contained in:
parent
20c03f84b7
commit
4fb7078815
5 changed files with 60 additions and 5 deletions
1
TODO
1
TODO
|
@ -5,6 +5,7 @@ Technlology Preview 2 :
|
||||||
- Add clouds to OpenGL with 3d textures.
|
- Add clouds to OpenGL with 3d textures.
|
||||||
- Fix potential holes in land rendering (OpenGL and software).
|
- Fix potential holes in land rendering (OpenGL and software).
|
||||||
- Fix polygon culling near the camera in low-res renders (automatic tessellation ?).
|
- Fix polygon culling near the camera in low-res renders (automatic tessellation ?).
|
||||||
|
- Fix OpenGL water renderer sometimes not initializing correctly (value error in OpenGL).
|
||||||
|
|
||||||
Technology Preview 3 :
|
Technology Preview 3 :
|
||||||
- Alter aerial perspective using estimation of the amount of light left after cloud layers traversal.
|
- Alter aerial perspective using estimation of the amount of light left after cloud layers traversal.
|
||||||
|
|
|
@ -27,7 +27,7 @@ MainModelerWindow::MainModelerWindow()
|
||||||
qmlRegisterType<OpenGLView>("Paysages", 1, 0, "OpenGLView");
|
qmlRegisterType<OpenGLView>("Paysages", 1, 0, "OpenGLView");
|
||||||
engine()->addImageProvider("renderpreviewprovider", render_preview_provider);
|
engine()->addImageProvider("renderpreviewprovider", render_preview_provider);
|
||||||
|
|
||||||
setMinimumSize(QSize(1000, 800));
|
setMinimumSize(QSize(1280, 720));
|
||||||
setTitle(QObject::tr("Paysages 3D"));
|
setTitle(QObject::tr("Paysages 3D"));
|
||||||
setResizeMode(QQuickView::SizeRootObjectToView);
|
setResizeMode(QQuickView::SizeRootObjectToView);
|
||||||
setSource(QUrl("qrc:///main.qml"));
|
setSource(QUrl("qrc:///main.qml"));
|
||||||
|
|
|
@ -61,6 +61,11 @@ RenderProcess::RenderProcess(MainModelerWindow *window, RenderPreviewProvider *d
|
||||||
connect(button_cancel, SIGNAL(clicked()), this, SLOT(stopRender()));
|
connect(button_cancel, SIGNAL(clicked()), this, SLOT(stopRender()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QObject *dialog_save = window->findQmlObject("render_save_dialog");
|
||||||
|
if (dialog_save) {
|
||||||
|
connect(dialog_save, SIGNAL(saveRequired(QString)), this, SLOT(savePicture(QString)));
|
||||||
|
}
|
||||||
|
|
||||||
startTimer(100);
|
startTimer(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,10 +98,8 @@ void RenderProcess::startRender(Scenery *scenery, const RenderConfig &config)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable "show last render" button
|
// Enable "show last render" button
|
||||||
QObject *button_show = window->findQmlObject("tool_render_show");
|
window->setQmlProperty("tool_render_show", "enabled", true);
|
||||||
if (button_show) {
|
window->setQmlProperty("render_dialog", "rendering", true);
|
||||||
button_show->setProperty("enabled", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
has_render = true;
|
has_render = true;
|
||||||
rendering = true;
|
rendering = true;
|
||||||
|
@ -169,6 +172,11 @@ void RenderProcess::stopRender()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RenderProcess::savePicture(QString path)
|
||||||
|
{
|
||||||
|
renderer->saveToDisk(path.replace("file://", "").toStdString());
|
||||||
|
}
|
||||||
|
|
||||||
const QSize RenderProcess::getPreviewSize()
|
const QSize RenderProcess::getPreviewSize()
|
||||||
{
|
{
|
||||||
if (renderer)
|
if (renderer)
|
||||||
|
@ -192,6 +200,7 @@ void RenderProcess::timerEvent(QTimerEvent *)
|
||||||
delete render_thread;
|
delete render_thread;
|
||||||
render_thread = NULL;
|
render_thread = NULL;
|
||||||
|
|
||||||
|
window->setQmlProperty("render_dialog", "rendering", false);
|
||||||
window->getRenderer()->resume();
|
window->getRenderer()->resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,11 @@ public slots:
|
||||||
*/
|
*/
|
||||||
void stopRender();
|
void stopRender();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the current picture to a given path on disk.
|
||||||
|
*/
|
||||||
|
void savePicture(QString path);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void timerEvent(QTimerEvent *event) override;
|
virtual void timerEvent(QTimerEvent *event) override;
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
import QtQuick 2.2
|
import QtQuick 2.2
|
||||||
import QtQuick.Controls 1.2
|
import QtQuick.Controls 1.2
|
||||||
|
import QtQuick.Dialogs 1.0
|
||||||
import QtGraphicalEffects 1.0
|
import QtGraphicalEffects 1.0
|
||||||
|
|
||||||
BaseRectangle {
|
BaseRectangle {
|
||||||
|
id: render_dialog
|
||||||
|
objectName: "render_dialog"
|
||||||
width: 400
|
width: 400
|
||||||
height: 300
|
height: 300
|
||||||
color: "#222429"
|
color: "#222429"
|
||||||
|
property bool rendering: false
|
||||||
|
|
||||||
function refresh() {
|
function refresh() {
|
||||||
preview_image.source = "";
|
preview_image.source = "";
|
||||||
|
@ -20,6 +24,41 @@ BaseRectangle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
width: parent.width
|
||||||
|
height: 80
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
color: "#667080"
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDialog {
|
||||||
|
id: render_save_dialog
|
||||||
|
objectName: "render_save_dialog"
|
||||||
|
title: "Choose a file to save the rendered image"
|
||||||
|
folder: shortcuts.documents
|
||||||
|
selectExisting: false
|
||||||
|
|
||||||
|
signal saveRequired(string filepath);
|
||||||
|
|
||||||
|
onAccepted: saveRequired(render_save_dialog.fileUrls[0].toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
ToolbarButton {
|
||||||
|
id: render_save
|
||||||
|
objectName: "render_save"
|
||||||
|
picture: "images/icon_file_save.png"
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.margins: 10
|
||||||
|
enabled: !render_dialog.rendering
|
||||||
|
checkable: false
|
||||||
|
image_width: 48
|
||||||
|
image_height: 48
|
||||||
|
|
||||||
|
onClicked: render_save_dialog.open()
|
||||||
|
}
|
||||||
|
|
||||||
ToolbarButton {
|
ToolbarButton {
|
||||||
id: render_cancel
|
id: render_cancel
|
||||||
objectName: "render_cancel"
|
objectName: "render_cancel"
|
||||||
|
@ -53,6 +92,7 @@ BaseRectangle {
|
||||||
ProgressBar {
|
ProgressBar {
|
||||||
id: render_progress
|
id: render_progress
|
||||||
objectName: "render_progress"
|
objectName: "render_progress"
|
||||||
|
visible: render_dialog.rendering
|
||||||
width: parent.width * 0.8
|
width: parent.width * 0.8
|
||||||
anchors.top: preview_image.bottom
|
anchors.top: preview_image.bottom
|
||||||
anchors.horizontalCenter: preview_image.horizontalCenter
|
anchors.horizontalCenter: preview_image.horizontalCenter
|
||||||
|
|
Loading…
Reference in a new issue