Added rendered picture saving ui

This commit is contained in:
Michaël Lemaire 2015-09-15 01:26:05 +02:00
parent 20c03f84b7
commit 4fb7078815
5 changed files with 60 additions and 5 deletions

1
TODO
View file

@ -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.

View file

@ -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"));

View file

@ -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();
} }

View file

@ -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;

View file

@ -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