141 lines
3.3 KiB
C++
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();
|
|
}
|
|
}
|