source-tree refactoring

This commit is contained in:
2023-02-03 21:22:25 +03:00
parent b20068165f
commit 7d30802cbd
153 changed files with 606 additions and 278 deletions

View File

@@ -0,0 +1,6 @@
project(qglengine_test)
qad_sources(SRC)
qad_wrap(${SRC} CPPS test_CPP)
qad_add_executable(${PROJECT_NAME} test_CPP)
qad_target_link_libraries(${PROJECT_NAME} qglengine_core qglengine_widgets)
#qad_target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/core" "${CMAKE_CURRENT_SOURCE_DIR}/widgets")

35
src/qglview_test/main.cpp Normal file
View File

@@ -0,0 +1,35 @@
/*
QGLViewWindow
Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "qglview_window.h"
#include <QApplication>
#include <QDebug>
#include <QDir>
int main(int argc, char ** argv) {
QApplication a(argc, argv);
a.setAttribute(Qt::AA_UseHighDpiPixmaps, true);
QGLViewWindow w;
w.show();
QStringList al(a.arguments());
al.pop_front();
foreach(QString s, al)
w.loadFile(s);
return a.exec();
}

View File

@@ -0,0 +1,276 @@
/*
QGLViewWindow
Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "qglview_window.h"
#include "glshaders.h"
#include "gltexture_manager.h"
#include "glwidget.h"
#include "qad_types.h"
#include "renderer.h"
#include <QGraphicsRectItem>
#include <QImageReader>
#include <QMessageBox>
class Effect1: public FramebufferEffectBase {
public:
void reloadShaders() { QGLEngineShaders::loadShadersMulti(mys, "test1.glsl"); }
void draw() {
auto planes = getFreePlanes(1);
bindPreviousOutput(0);
// bindDeferredBuffer(Renderer::dbrNormalZSolid, 1);
mys->bind();
mys->setUniformValue("tex_in", 0);
mys->setUniformValue("step", QVector2D(1, 0));
drawScreen(mys);
setOutputPlane(planes[0]);
bindPreviousOutput(0);
mys->setUniformValue("step", QVector2D(0, 1));
drawScreen(mys);
}
QOpenGLShaderProgram * mys = nullptr;
};
QGLViewWindow::QGLViewWindow(QWidget * parent): QMainWindow(parent), Ui::QGLViewWindow() {
setupUi(this);
session.setFile("session_qglview_test.conf");
session.addEntry(this);
extensions = "All(" + supportedFormats().join(" ") + " *.qgl)";
extensions += ";;QGLEngine(*.qgl)";
// view->view()->camera()->setPos(QVector3D(2, 2, 2));
// view->view()->camera()->setAim(QVector3D());
// view->view()->camera()->flyToDistance(2.);
// view->setFrameShape(QFrame::NoFrame);
view->view()->setMouseRotateEnabled(true);
view->view()->setMouseSelectionEnabled(true);
view->view()->setSelectionHaloEnabled(true);
view->view()->setHoverHaloEnabled(true);
view->view()->setDepthStart(0.1);
view->view()->setSelectionMode(Scene::smMultiSelection);
view->view()->renderer_.addFramebufferEffect(new Effect1());
groupShadows->setChecked(view->view()->isFeatureEnabled(QGLView::qglShadowsEnabled));
groupEyeAccomodation->setChecked(view->view()->isFeatureEnabled(QGLView::qglEyeAccomodationEnabled));
groupBloom->setChecked(view->view()->isFeatureEnabled(QGLView::qglBloomEnabled));
groupMotionBlur->setChecked(view->view()->isFeatureEnabled(QGLView::qglMotionBlurEnabled));
groupReflections->setChecked(view->view()->isFeatureEnabled(QGLView::qglReflectionsEnabled));
checkSoftShadows->setChecked(view->view()->isFeatureEnabled(QGLView::qglShadowsSoftEnabled));
groupSSAO->setChecked(view->view()->isFeatureEnabled(QGLView::qglSSAOEnabled));
spinAccom->setValue(view->view()->feature(QGLView::qglEyeAccomodationTime).toDouble());
spinAccomMS->setValue(view->view()->feature(QGLView::qglEyeAccomodationMaxSpeed).toDouble());
checkReflectionsBlur->setChecked(view->view()->isFeatureEnabled(QGLView::qglReflectionsBlur));
spinShadowmapSize->setValue(view->view()->feature(QGLView::qglShadowsMapSize).toInt());
spinMotionBlurFactor->setValue(view->view()->feature(QGLView::qglMotionBlurFactor).toDouble());
spinMotionBlurSteps->setValue(view->view()->feature(QGLView::qglMotionBlurSteps).toInt());
spinBloomFactor->setValue(view->view()->feature(QGLView::qglBloomFactor).toDouble());
spinBloomRadius->setValue(view->view()->feature(QGLView::qglBloomRadius).toInt());
spinBloomThreshold->setValue(view->view()->feature(QGLView::qglBloomThreshold).toDouble());
spinSSAORadius->setValue(view->view()->feature(QGLView::qglSSAORadius).toInt());
groupDOF->setChecked(view->view()->isFeatureEnabled(QGLView::qglDepthOfFieldEnabled));
checkDOFAutoFocus->setChecked(view->view()->isFeatureEnabled(QGLView::qglDepthOfFieldAutoFocusEnabled));
spinDOFFocus->setValue(view->view()->feature(QGLView::qglDepthOfFieldFocus).toDouble());
spinDOFDiaphragm->setValue(view->view()->feature(QGLView::qglDepthOfFieldDiaphragm).toDouble());
spinDOFSpeed->setValue(view->view()->feature(QGLView::qglDepthOfFieldAutoFocusSpeed).toDouble());
view->view()->start(-1);
startTimer(1000 / 60);
connect(view->view(), SIGNAL(keyEvent(Qt::Key, Qt::KeyboardModifiers)), this, SLOT(view_keyEvent(Qt::Key, Qt::KeyboardModifiers)));
// connect(matEditor, SIGNAL(changed()), this, SLOT(materialChanged()));
sceneTree->assignQGLView(view->view());
matEditor->assignQGLView(view->view());
objectEditor->assignQGLView(view->view());
primitiveEditor->assignQGLView(view->view());
viewEditor->assignQGLView(view->view());
session.load();
// loadFile("axis.DAE.qgl");
// matEditor->setMaterial(const_cast<ObjectBase*>(view->view()->scene()->rootObject()->child(0))->material());
/*Scene * sc = loadScene("truck.obj");
//view->view()->scene()->addScene(sc);
sc->rootObject()->moveY(-8);
for (int i = 0; i < 7; ++i) {
sc->rootObject()->moveY(2);
view->view()->scene()->addScene(sc);
}
//view->view()->scene()->dump();
delete sc;*/
}
QGLViewWindow::~QGLViewWindow() {
session.save();
// delete ps;
}
void QGLViewWindow::changeEvent(QEvent * e) {
QMainWindow::changeEvent(e);
if (e->type() == QEvent::LanguageChange) {
retranslateUi(this);
return;
}
}
void QGLViewWindow::timerEvent(QTimerEvent *) {
// static double t = 0.;
//((RendererSimple*)(view->view()->renderer()))->mpos = view->view()->mapFromGlobal(QCursor::pos());
statusBar()->showMessage(QString("FPS: %1").arg(QString::number(view->view()->currentFPS(), 'f', 2)));
}
void QGLViewWindow::loadFile(const QString & path, bool import) {
prev_path = path;
QApplication::setOverrideCursor(Qt::WaitCursor);
QFileInfo fi(path);
Scene * s = nullptr;
if (fi.suffix().toLower() == "qgl")
s = loadFromQGLFile(path);
else
s = loadScene(path);
QApplication::restoreOverrideCursor();
if (!s) {
QMessageBox::critical(this, "Import", "Can`t load " + path + "!");
return;
}
s->setName(fi.baseName());
if (import)
view->scene()->addScene(s);
else {
TextureManager::clearSearchPathes();
view->scene()->assignFrom(s);
view->view()->focusOn(view->scene()->boundingBox());
}
TextureManager::addSearchPath(fi.absoluteDir().path());
delete s;
}
void QGLViewWindow::on_actionReset_triggered() {
/// view->view()->removeObject(axis, false);
view->view()->scene()->clear();
/// view->view()->addObject(axis);
}
void QGLViewWindow::on_actionImport_triggered() {
QStringList fl = QFileDialog::getOpenFileNames(this, "Select files", prev_path, extensions);
if (fl.isEmpty()) return;
prev_path = fl.back();
foreach(QString f, fl)
loadFile(f, true);
}
void QGLViewWindow::on_actionSave_triggered() {
QString f = QFileDialog::getSaveFileName(this, "Select file", prev_path, "QGLView(*.qgl)");
if (f.isEmpty()) return;
if (f.right(4).toLower() != ".qgl") f += ".qgl";
prev_path = f;
QApplication::setOverrideCursor(Qt::WaitCursor);
saveToQGLFile(f, view->scene());
QApplication::restoreOverrideCursor();
}
void QGLViewWindow::on_actionSaveSelected_triggered() {
ObjectBase * sel_obj = view->view()->selectedObject();
if (!sel_obj) return;
QString f = QFileDialog::getSaveFileName(this, "Select file", prev_path, "QGLView(*.qgl)");
if (f.isEmpty()) return;
if (f.right(4).toLower() != ".qgl") f += ".qgl";
prev_path = f;
QApplication::setOverrideCursor(Qt::WaitCursor);
/// saveToQGLFile(f, sel_obj);
QApplication::restoreOverrideCursor();
}
void QGLViewWindow::on_actionOpen_triggered() {
QString f = QFileDialog::getOpenFileName(this, "Select file", prev_path, extensions);
if (f.isEmpty()) return;
prev_path = f;
loadFile(f);
}
void QGLViewWindow::view_keyEvent(Qt::Key k, Qt::KeyboardModifiers m) {
// qDebug() << k;
double spd = 0.2;
if (m.testFlag(Qt::ShiftModifier)) spd = 0.5;
switch (k) {
case Qt::Key_W: view->view()->camera()->moveForward(spd); break;
case Qt::Key_S: view->view()->camera()->moveBackward(spd); break;
case Qt::Key_A: view->view()->camera()->moveLeft(spd); break;
case Qt::Key_D: view->view()->camera()->moveRight(spd); break;
default: break;
}
}
void QGLViewWindow::on_actionArrow_triggered(bool on) {
actionArrow->setChecked(true);
actionMove->setChecked(false);
actionRotate->setChecked(false);
actionScale->setChecked(false);
view->view()->setCurrentAction(RendererService::haNoAction);
}
void QGLViewWindow::on_actionMove_triggered(bool on) {
actionArrow->setChecked(false);
actionMove->setChecked(true);
actionRotate->setChecked(false);
actionScale->setChecked(false);
view->view()->setCurrentAction(RendererService::haMove);
}
void QGLViewWindow::on_actionRotate_triggered(bool on) {
actionArrow->setChecked(false);
actionMove->setChecked(false);
actionRotate->setChecked(true);
actionScale->setChecked(false);
view->view()->setCurrentAction(RendererService::haRotate);
}
void QGLViewWindow::on_actionScale_triggered(bool on) {
actionArrow->setChecked(false);
actionMove->setChecked(false);
actionRotate->setChecked(false);
actionScale->setChecked(true);
view->view()->setCurrentAction(RendererService::haScale);
}
#include "glcubemap.h"
void QGLViewWindow::on_pushButton_3_clicked() {
QString f = QFileDialog::getOpenFileName(this, "Select file", "", "*");
if (f.isEmpty()) return;
}

View File

@@ -0,0 +1,121 @@
/*
QGLViewWindow
Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef QGLVIEWWINDOW_H
#define QGLVIEWWINDOW_H
#include "formats/loader_assimp.h"
#include "formats/loader_qgl.h"
#include "session_manager.h"
#include "ui_qglview_window.h"
#include <QClipboard>
#include <QCloseEvent>
#include <QColorDialog>
#include <QFileDialog>
#include <QInputDialog>
#include <QRadioButton>
#include <QSplitter>
#include <QThread>
#include <QTime>
#include <QTranslator>
#include <QUrl>
// #include "renderer_rt.h"
#include "qglview.h"
#include "ui_qglview_window.h"
class QGLViewWindow
: public QMainWindow
, public Ui::QGLViewWindow {
Q_OBJECT
public:
QGLViewWindow(QWidget * parent = 0);
~QGLViewWindow();
void loadFile(const QString & path, bool import = false);
private:
// Qt`s overloaded
void changeEvent(QEvent * e);
void timerEvent(QTimerEvent *);
QString extensions;
QTranslator translator;
QString prev_path;
// GLPrimitiveCube * box;
Material m;
SessionManager session;
bool isChanged;
private slots:
void on_groupShadows_clicked(bool val) { view->view()->setFeature(QGLView::qglShadowsEnabled, val); }
void on_groupEyeAccomodation_clicked(bool val) { view->view()->setFeature(QGLView::qglEyeAccomodationEnabled, val); }
void on_groupBloom_clicked(bool val) { view->view()->setFeature(QGLView::qglBloomEnabled, val); }
void on_groupMotionBlur_clicked(bool val) { view->view()->setFeature(QGLView::qglMotionBlurEnabled, val); }
void on_groupReflections_clicked(bool val) { view->view()->setFeature(QGLView::qglReflectionsEnabled, val); }
void on_checkSoftShadows_clicked(bool val) { view->view()->setFeature(QGLView::qglShadowsSoftEnabled, val); }
void on_groupSSAO_clicked(bool val) { view->view()->setFeature(QGLView::qglSSAOEnabled, val); }
void on_groupDOF_clicked(bool val) { view->view()->setFeature(QGLView::qglDepthOfFieldEnabled, val); }
void on_checkDOFAutoFocus_clicked(bool val) { view->view()->setFeature(QGLView::qglDepthOfFieldAutoFocusEnabled, val); }
void on_spinDOFFocus_valueChanged(double val) { view->view()->setFeature(QGLView::qglDepthOfFieldFocus, val); }
void on_spinDOFDiaphragm_valueChanged(double val) { view->view()->setFeature(QGLView::qglDepthOfFieldDiaphragm, val); }
void on_spinDOFSpeed_valueChanged(double val) { view->view()->setFeature(QGLView::qglDepthOfFieldAutoFocusSpeed, val); }
void on_spinAccom_valueChanged(double val) { view->view()->setFeature(QGLView::qglEyeAccomodationTime, val); }
void on_spinAccomMS_valueChanged(double val) { view->view()->setFeature(QGLView::qglEyeAccomodationMaxSpeed, val); }
void on_checkReflectionsBlur_clicked(bool val) { view->view()->setFeature(QGLView::qglReflectionsBlur, val); }
void on_spinShadowmapSize_valueChanged(double val) { view->view()->setFeature(QGLView::qglShadowsMapSize, val); }
void on_spinMotionBlurFactor_valueChanged(double val) { view->view()->setFeature(QGLView::qglMotionBlurFactor, val); }
void on_spinMotionBlurSteps_valueChanged(int val) { view->view()->setFeature(QGLView::qglMotionBlurSteps, val); }
void on_spinBloomFactor_valueChanged(double val) { view->view()->setFeature(QGLView::qglBloomFactor, val); }
void on_spinBloomRadius_valueChanged(int val) { view->view()->setFeature(QGLView::qglBloomRadius, val); }
void on_spinBloomThreshold_valueChanged(double val) { view->view()->setFeature(QGLView::qglBloomThreshold, val); }
void on_spinSSAORadius_valueChanged(int val) { view->view()->setFeature(QGLView::qglSSAORadius, val); }
void on_actionExit_triggered() { close(); }
void on_actionReset_triggered();
void on_actionImport_triggered();
void on_actionSave_triggered();
void on_actionSaveSelected_triggered();
void on_actionOpen_triggered();
void view_keyEvent(Qt::Key k, Qt::KeyboardModifiers m);
void on_pushButton_2_clicked() { view->view()->reloadShaders(); }
void on_actionArrow_triggered(bool on);
void on_actionMove_triggered(bool on);
void on_actionRotate_triggered(bool on);
void on_actionScale_triggered(bool on);
void on_colorFogBack_colorChanged(const QColor & v) { view->view()->setFogColor(v); }
void on_spinFogDensity_valueChanged(double v) { view->view()->setFogDensity(v); }
void on_spinFogDecay_valueChanged(double v) { view->view()->setFogDecay(v); }
void on_pushButton_3_clicked();
public slots:
signals:
private:
QMatrix4x4 cam_mat;
};
#endif // QGLVIEWWINDOW_H

View File

@@ -0,0 +1,979 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGLViewWindow</class>
<widget class="QMainWindow" name="QGLViewWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1107</width>
<height>878</height>
</rect>
</property>
<property name="windowTitle">
<string>QGLView converter</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_10">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>2</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>View</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QTabWidget" name="tabWidget_2">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string>Common</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_11">
<item>
<widget class="ViewEditor" name="viewEditor" native="true"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_6">
<attribute name="title">
<string>Features</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QScrollArea" name="scrollArea_2">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents_2">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>904</width>
<height>840</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="groupShadows">
<property name="title">
<string>Shadows</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_3">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="1" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Shadowmap size</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="SpinSlider" name="spinShadowmapSize">
<property name="minimum">
<double>16.000000000000000</double>
</property>
<property name="maximum">
<double>2048.000000000000000</double>
</property>
<property name="value">
<double>512.000000000000000</double>
</property>
<property name="decimals">
<number>0</number>
</property>
<property name="singleStep">
<double>16.000000000000000</double>
</property>
<property name="pageStep">
<double>512.000000000000000</double>
</property>
<property name="squareScale">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="checkSoftShadows">
<property name="text">
<string>Soft</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBloom">
<property name="title">
<string>Bloom</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_5">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Factror</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="SpinSlider" name="spinBloomFactor">
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>100.000000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="pageStep">
<double>1.000000000000000</double>
</property>
<property name="squareScale">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="SpinSlider" name="spinBloomRadius">
<property name="minimum">
<double>1.000000000000000</double>
</property>
<property name="maximum">
<double>128.000000000000000</double>
</property>
<property name="value">
<double>8.000000000000000</double>
</property>
<property name="decimals">
<number>0</number>
</property>
<property name="singleStep">
<double>1.000000000000000</double>
</property>
<property name="pageStep">
<double>4.000000000000000</double>
</property>
<property name="squareScale">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Radius</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Threshold</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="SpinSlider" name="spinBloomThreshold">
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>1.000000000000000</double>
</property>
<property name="value">
<double>0.900000000000000</double>
</property>
<property name="decimals">
<number>2</number>
</property>
<property name="singleStep">
<double>0.050000000000000</double>
</property>
<property name="pageStep">
<double>0.100000000000000</double>
</property>
<property name="squareScale">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupMotionBlur">
<property name="title">
<string>Motion blur</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Factror</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Steps</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="SpinSlider" name="spinMotionBlurFactor">
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>10000.000000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="pageStep">
<double>1.000000000000000</double>
</property>
<property name="squareScale">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="SpinSlider" name="spinMotionBlurSteps">
<property name="minimum">
<double>1.000000000000000</double>
</property>
<property name="maximum">
<double>128.000000000000000</double>
</property>
<property name="value">
<double>8.000000000000000</double>
</property>
<property name="decimals">
<number>0</number>
</property>
<property name="singleStep">
<double>1.000000000000000</double>
</property>
<property name="pageStep">
<double>4.000000000000000</double>
</property>
<property name="squareScale">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupEyeAccomodation">
<property name="title">
<string>Eye accomodation</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_4">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Time</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Max speed</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="SpinSlider" name="spinAccom">
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>256.000000000000000</double>
</property>
<property name="value">
<double>32.000000000000000</double>
</property>
<property name="squareScale">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="SpinSlider" name="spinAccomMS">
<property name="minimum">
<double>0.010000000000000</double>
</property>
<property name="maximum">
<double>1.000000000000000</double>
</property>
<property name="value">
<double>0.100000000000000</double>
</property>
<property name="decimals">
<number>3</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="pageStep">
<double>1.000000000000000</double>
</property>
<property name="squareScale">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupDOF">
<property name="title">
<string>Depth of field</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_11">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="2" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Diaphragm</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Max speed</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="SpinSlider" name="spinDOFDiaphragm">
<property name="minimum">
<double>0.100000000000000</double>
</property>
<property name="maximum">
<double>1024.000000000000000</double>
</property>
<property name="value">
<double>8.000000000000000</double>
</property>
<property name="squareScale">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="SpinSlider" name="spinDOFSpeed">
<property name="minimum">
<double>0.010000000000000</double>
</property>
<property name="maximum">
<double>10.000000000000000</double>
</property>
<property name="value">
<double>0.100000000000000</double>
</property>
<property name="decimals">
<number>2</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
<property name="pageStep">
<double>1.000000000000000</double>
</property>
<property name="squareScale">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>Focus</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="SpinSlider" name="spinDOFFocus">
<property name="minimum">
<double>0.100000000000000</double>
</property>
<property name="maximum">
<double>1000.000000000000000</double>
</property>
<property name="value">
<double>1.000000000000000</double>
</property>
<property name="squareScale">
<bool>true</bool>
</property>
<property name="spinMaximum">
<double>999999.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="checkDOFAutoFocus">
<property name="text">
<string>Auto focus</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupReflections">
<property name="title">
<string>Reflections</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_6">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="checkReflectionsBlur">
<property name="text">
<string>Blur</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupSSAO">
<property name="title">
<string>SSAO</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_7">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Time</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="SpinSlider" name="spinSSAORadius">
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>16.000000000000000</double>
</property>
<property name="value">
<double>5.000000000000000</double>
</property>
<property name="decimals">
<number>0</number>
</property>
<property name="singleStep">
<double>1.000000000000000</double>
</property>
<property name="pageStep">
<double>4.000000000000000</double>
</property>
<property name="squareScale">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout"/>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>reload shaders</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>load HDR</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>107</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Object</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="ObjectEditor" name="objectEditor" native="true"/>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Material</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="MaterialsEditor" name="matEditor" native="true"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>Primitives</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="PrimitiveEditor" name="primitiveEditor" native="true"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="GLWidget" name="view">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Scene</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="SceneTree" name="sceneTree" native="true"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionReset"/>
<addaction name="actionOpen"/>
<addaction name="actionSave"/>
<addaction name="actionSaveSelected"/>
<addaction name="actionImport"/>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1107</width>
<height>31</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionReset"/>
<addaction name="actionOpen"/>
<addaction name="actionSave"/>
<addaction name="actionSaveSelected"/>
<addaction name="separator"/>
<addaction name="actionImport"/>
<addaction name="separator"/>
<addaction name="actionExit"/>
</widget>
<widget class="QMenu" name="menuAdd">
<property name="title">
<string>Scene</string>
</property>
</widget>
<widget class="QMenu" name="menuMode">
<property name="title">
<string>Mode</string>
</property>
<addaction name="actionArrow"/>
<addaction name="actionMove"/>
<addaction name="actionRotate"/>
<addaction name="actionScale"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuAdd"/>
<addaction name="menuMode"/>
</widget>
<widget class="QStatusBar" name="statusBar_"/>
<widget class="QToolBar" name="toolBar_2">
<property name="windowTitle">
<string>toolBar_2</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<action name="actionExit">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/application-exit.png</normaloff>:/icons/application-exit.png</iconset>
</property>
<property name="text">
<string>Exit</string>
</property>
</action>
<action name="actionImport">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/document-import.png</normaloff>:/icons/document-import.png</iconset>
</property>
<property name="text">
<string>Import ...</string>
</property>
<property name="shortcut">
<string>Ctrl+I</string>
</property>
</action>
<action name="actionOpen">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
</property>
<property name="text">
<string>Open ...</string>
</property>
<property name="shortcut">
<string>Ctrl+O</string>
</property>
</action>
<action name="actionSave">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/document-save-all.png</normaloff>:/icons/document-save-all.png</iconset>
</property>
<property name="text">
<string>Save ...</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</action>
<action name="actionReset">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/document-new.png</normaloff>:/icons/document-new.png</iconset>
</property>
<property name="text">
<string>Reset</string>
</property>
<property name="shortcut">
<string>Ctrl+N</string>
</property>
</action>
<action name="actionSaveSelected">
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/document-save.png</normaloff>:/icons/document-save.png</iconset>
</property>
<property name="text">
<string>Save selected ...</string>
</property>
<property name="toolTip">
<string>Save selected</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+S</string>
</property>
</action>
<action name="actionArrow">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Arrow</string>
</property>
<property name="shortcut">
<string>Ctrl+1</string>
</property>
</action>
<action name="actionMove">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/transform-move.png</normaloff>:/icons/transform-move.png</iconset>
</property>
<property name="text">
<string>Move</string>
</property>
<property name="shortcut">
<string>Ctrl+2</string>
</property>
</action>
<action name="actionRotate">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/transform-rotate.png</normaloff>:/icons/transform-rotate.png</iconset>
</property>
<property name="text">
<string>Rotate</string>
</property>
<property name="shortcut">
<string>Ctrl+3</string>
</property>
</action>
<action name="actionScale">
<property name="checkable">
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="../core/qglengine_core.qrc">
<normaloff>:/icons/transform-scale.png</normaloff>:/icons/transform-scale.png</iconset>
</property>
<property name="text">
<string>Scale</string>
</property>
<property name="shortcut">
<string>Ctrl+4</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>SpinSlider</class>
<extends>QWidget</extends>
<header>spinslider.h</header>
</customwidget>
<customwidget>
<class>GLWidget</class>
<extends>QWidget</extends>
<header>glwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>ObjectEditor</class>
<extends>QWidget</extends>
<header>object_editor.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>SceneTree</class>
<extends>QWidget</extends>
<header>scene_tree.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>MaterialsEditor</class>
<extends>QWidget</extends>
<header>materials_editor.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>PrimitiveEditor</class>
<extends>QWidget</extends>
<header>primitiveeditor.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>ViewEditor</class>
<extends>QWidget</extends>
<header>view_editor.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../core/qglengine_core.qrc"/>
</resources>
<connections/>
</ui>