paysages3d/src/interface/desktop/formrender.cpp

141 lines
3.3 KiB
C++

#include "formrender.h"
#include <QPushButton>
#include "dialogrender.h"
#include "inputcamera.h"
#include "tools.h"
#include "DesktopScenery.h"
#include "PackStream.h"
#include "SoftwareCanvasRenderer.h"
#include "BasePreview.h"
#include "CloudsDefinition.h"
#include "CameraDefinition.h"
#include "SceneryTopDownPreviewRenderer.h"
/**************** Form ****************/
FormRender::FormRender(QWidget *parent) :
BaseForm(parent, true)
{
QPushButton* button;
_params.quality = 5;
_params.width = 800;
_params.height = 600;
_params.antialias = 1;
_camera = new CameraDefinition;
_renderer_inited = false;
disablePreviewsUpdate();
_preview_landscape = new BasePreview(this);
_preview_landscape_renderer = new SceneryTopDownPreviewRenderer(DesktopScenery::getCurrent());
addPreview(_preview_landscape, QString(tr("Top-down preview")));
_preview_landscape->setRenderer(_preview_landscape_renderer);
addInput(new InputCamera(this, tr("Camera"), _camera));
addInputInt(tr("Quality"), &_params.quality, 1, 10, 1, 1);
addInputInt(tr("Image width"), &_params.width, 100, 4000, 10, 100);
addInputInt(tr("Image height"), &_params.height, 100, 3000, 10, 100);
addInputInt(tr("Anti aliasing"), &_params.antialias, 1, 4, 1, 1);
button = addButton(tr("Start new render"));
connect(button, SIGNAL(clicked()), this, SLOT(startRender()));
button = addButton(tr("Show last render"));
connect(button, SIGNAL(clicked()), this, SLOT(showRender()));
revertConfig();
}
FormRender::~FormRender()
{
delete _camera;
if (_renderer_inited)
{
delete _renderer;
}
}
void FormRender::savePack(PackStream* stream)
{
BaseForm::savePack(stream);
stream->write(&_params.width);
stream->write(&_params.height);
stream->write(&_params.antialias);
stream->write(&_params.quality);
}
void FormRender::loadPack(PackStream* stream)
{
BaseForm::loadPack(stream);
stream->read(&_params.width);
stream->read(&_params.height);
stream->read(&_params.antialias);
stream->read(&_params.quality);
revertConfig();
}
void FormRender::revertConfig()
{
DesktopScenery::getCurrent()->getCamera(_camera);
BaseForm::revertConfig();
}
void FormRender::applyConfig()
{
DesktopScenery::getCurrent()->setCamera(_camera);
BaseForm::applyConfig();
}
void FormRender::configChangeEvent()
{
_camera->validate();
BaseForm::configChangeEvent();
}
void FormRender::startQuickRender()
{
if (_renderer_inited)
{
delete _renderer;
}
RenderConfig config(400, 300, 1, 3);
_renderer = new SoftwareCanvasRenderer();
_renderer->setScenery(DesktopScenery::getCurrent());
_renderer->setConfig(config);
_renderer_inited = true;
DialogRender dialog(this, _renderer);
dialog.startRender();
}
void FormRender::startRender()
{
if (_renderer_inited)
{
delete _renderer;
}
_renderer = new SoftwareCanvasRenderer();
_renderer->setScenery(DesktopScenery::getCurrent());
_renderer->setConfig(_params);
_renderer_inited = true;
DialogRender dialog(this, _renderer);
dialog.startRender();
}
void FormRender::showRender()
{
if (_renderer_inited)
{
DialogRender dialog(this, _renderer);
dialog.loadLastRender();
}
}