diff --git a/mainwindow.cpp b/mainwindow.cpp index b804dd9..b13b18b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,45 +1,67 @@ #include "mainwindow.h" -#include "ui_mainwindow.h" -#include "sparrowrenderer.h" +#include <QtCore/QVariant> +#include <QtWidgets/QAction> +#include <QtWidgets/QApplication> +#include <QtWidgets/QButtonGroup> +#include <QtWidgets/QHBoxLayout> +#include <QtWidgets/QHeaderView> +#include <QtWidgets/QMainWindow> +#include <QtWidgets/QMenu> +#include <QtWidgets/QMenuBar> +#include <QtWidgets/QVBoxLayout> +#include <QtWidgets/QWidget> +#include "modulewidget.h" +#include "resourcewidget.h" +#include "myglwidget.h" -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow) +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { - ui->setupUi(this); + setWindowTitle("SparrowRenderer"); + resize(800, 600); + + // modules widget + moduleWidget = new ModuleWidget(this); + addDockWidget(Qt::LeftDockWidgetArea, moduleWidget); + + // resources widget + resourceWidget = new ResourceWidget(this); + addDockWidget(Qt::RightDockWidgetArea, resourceWidget); + + // opengl widget + openGLWidget = new OpenGLWidget(this); + openGLWidget->setRenderer(moduleWidget); + setCentralWidget(openGLWidget); + + // actions + actionExit = new QAction(this); + actionExit->setText("Exit"); + + actionShowModuleWidget = new QAction(this); + actionShowModuleWidget->setText("Modules"); + actionShowModuleWidget->setEnabled(false); + + // menubar + menuBar = new QMenuBar(this); + menuBar->setGeometry(QRect(0, 0, 800, 22)); + menuMenu = new QMenu(menuBar); + menuMenu->setTitle("Main menu"); + menuMenu->addAction(actionShowModuleWidget); + menuMenu->addAction(actionExit); + menuBar->addAction(menuMenu->menuAction()); + menuBar->setNativeMenuBar(false); + setMenuBar(menuBar); + + // connect signals to slots + QObject::connect(actionExit, SIGNAL(triggered()), this, SLOT(close())); + QObject::connect(moduleWidget, SIGNAL(visibilityChanged(bool)), actionShowModuleWidget, SLOT(setDisabled(bool))); + QObject::connect(actionShowModuleWidget, SIGNAL(triggered()), this, SLOT(reopenModuleWidget())); + QObject::connect(openGLWidget, SIGNAL(modulesChanged()), moduleWidget, SLOT(updateList())); + QObject::connect(openGLWidget, SIGNAL(modulesChanged()), resourceWidget, SLOT(updateList())); + + QMetaObject::connectSlotsByName(this); } -MainWindow::~MainWindow() +void MainWindow::reopenModuleWidget() { - delete ui; -} - -void MainWindow::dockWidgetClosed() -{ - emit(ui->dockWidget->setVisible(true)); -} - -void MainWindow::updateTree() -{ - QTreeWidget* tree = ui->treeWidget; - SparrowRenderer* renderer = ui->openGLWidget->getRenderer(); - tree->clear(); - for(int i=0; i<renderer->getNbModules(); ++i) - { - std::string moduleName = renderer->getModuleName(i); - QTreeWidgetItem* item = new QTreeWidgetItem(); - item->setText(0, QString(moduleName.c_str())); - tree->addTopLevelItem(item); - } -} - -void MainWindow::moduleSetEnabled(QTreeWidgetItem* item, int button) -{ - SparrowRenderer* renderer = ui->openGLWidget->getRenderer(); - std::string name = item->text(0).toStdString(); - if(renderer->isModuleEnabled(name)) - renderer->disableModule(name); - else - renderer->enableModule(name); - ui->openGLWidget->updateGL(); + emit(moduleWidget->setVisible(true)); } diff --git a/mainwindow.h b/mainwindow.h index c494f43..440a9f9 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -3,7 +3,9 @@ #include <QMainWindow> -class QTreeWidgetItem; +class OpenGLWidget; +class ModuleWidget; +class ResourceWidget; namespace Ui { class MainWindow; @@ -15,15 +17,18 @@ class MainWindow : public QMainWindow public: explicit MainWindow(QWidget *parent = 0); - ~MainWindow(); private: - Ui::MainWindow *ui; + QAction *actionExit; + QAction *actionShowModuleWidget; + QMenuBar *menuBar; + QMenu *menuMenu; + OpenGLWidget *openGLWidget; + ModuleWidget *moduleWidget; + ResourceWidget *resourceWidget; -public slots: - void dockWidgetClosed(); - void updateTree(); - void moduleSetEnabled(QTreeWidgetItem* item, int button); +private slots: + void reopenModuleWidget(); }; #endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui deleted file mode 100644 index 634380d..0000000 --- a/mainwindow.ui +++ /dev/null @@ -1,202 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>MainWindow</class> - <widget class="QMainWindow" name="MainWindow"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>854</width> - <height>510</height> - </rect> - </property> - <property name="windowTitle"> - <string>MainWindow</string> - </property> - <widget class="QWidget" name="centralWidget"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>0</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="MyGLWidget" name="openGLWidget"/> - </item> - </layout> - </widget> - <widget class="QMenuBar" name="menuBar"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>854</width> - <height>21</height> - </rect> - </property> - <widget class="QMenu" name="menuMenu"> - <property name="title"> - <string>menu</string> - </property> - <addaction name="actionShow_control_panel"/> - <addaction name="actionExit"/> - </widget> - <addaction name="menuMenu"/> - </widget> - <widget class="QDockWidget" name="dockWidget"> - <attribute name="dockWidgetArea"> - <number>1</number> - </attribute> - <widget class="QWidget" name="dockWidgetContents"> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="spacing"> - <number>0</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="QTreeWidget" name="treeWidget"> - <column> - <property name="text"> - <string notr="true">rendering pipeline</string> - </property> - </column> - </widget> - </item> - </layout> - </widget> - </widget> - <action name="actionExit"> - <property name="text"> - <string>exit</string> - </property> - </action> - <action name="actionShow_control_panel"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>show control panel</string> - </property> - </action> - </widget> - <layoutdefault spacing="6" margin="11"/> - <customwidgets> - <customwidget> - <class>MyGLWidget</class> - <extends>QOpenGLWidget</extends> - <header>myglwidget.h</header> - <slots> - <signal>modulesChanged()</signal> - </slots> - </customwidget> - </customwidgets> - <resources/> - <connections> - <connection> - <sender>actionExit</sender> - <signal>triggered()</signal> - <receiver>MainWindow</receiver> - <slot>close()</slot> - <hints> - <hint type="sourcelabel"> - <x>-1</x> - <y>-1</y> - </hint> - <hint type="destinationlabel"> - <x>426</x> - <y>254</y> - </hint> - </hints> - </connection> - <connection> - <sender>dockWidget</sender> - <signal>visibilityChanged(bool)</signal> - <receiver>actionShow_control_panel</receiver> - <slot>setDisabled(bool)</slot> - <hints> - <hint type="sourcelabel"> - <x>127</x> - <y>265</y> - </hint> - <hint type="destinationlabel"> - <x>-1</x> - <y>-1</y> - </hint> - </hints> - </connection> - <connection> - <sender>actionShow_control_panel</sender> - <signal>triggered()</signal> - <receiver>MainWindow</receiver> - <slot>dockWidgetClosed()</slot> - <hints> - <hint type="sourcelabel"> - <x>-1</x> - <y>-1</y> - </hint> - <hint type="destinationlabel"> - <x>426</x> - <y>254</y> - </hint> - </hints> - </connection> - <connection> - <sender>openGLWidget</sender> - <signal>modulesChanged()</signal> - <receiver>MainWindow</receiver> - <slot>updateTree()</slot> - <hints> - <hint type="sourcelabel"> - <x>555</x> - <y>265</y> - </hint> - <hint type="destinationlabel"> - <x>426</x> - <y>254</y> - </hint> - </hints> - </connection> - <connection> - <sender>treeWidget</sender> - <signal>itemClicked(QTreeWidgetItem*,int)</signal> - <receiver>MainWindow</receiver> - <slot>moduleSetEnabled(QTreeWidgetItem*,int)</slot> - <hints> - <hint type="sourcelabel"> - <x>127</x> - <y>276</y> - </hint> - <hint type="destinationlabel"> - <x>426</x> - <y>254</y> - </hint> - </hints> - </connection> - </connections> - <slots> - <slot>dockWidgetClosed()</slot> - <slot>updateTree()</slot> - <slot>moduleSetEnabled(QTreeWidgetItem*,int)</slot> - </slots> -</ui> diff --git a/modulewidget.cpp b/modulewidget.cpp new file mode 100644 index 0000000..dbcd09a --- /dev/null +++ b/modulewidget.cpp @@ -0,0 +1,33 @@ +#include "modulewidget.h" +#include "ui_modulewidget.h" + +ModuleWidget::ModuleWidget(QWidget *parent) : + QDockWidget(parent), + ui(new Ui::ModuleWidget) +{ + ui->setupUi(this); +} + +ModuleWidget::~ModuleWidget() +{ + delete ui; +} + +void ModuleWidget::updateList() +{ + QListWidget* list = ui->listWidget; + list->clear(); + for(ModuleNode& m : modules) + list->addItem(new QListWidgetItem(QString(m.name.c_str()))); +} + +/*void ModuleWidget::moduleSetEnabled(QTreeWidgetItem* item, int button) +{ + SparrowRenderer* renderer = ui->openGLWidget->getRenderer(); + std::string name = item->text(0).toStdString(); + if(renderer->isModuleEnabled(name)) + renderer->disableModule(name); + else + renderer->enableModule(name); + ui->openGLWidget->updateGL(); +}*/ diff --git a/modulewidget.h b/modulewidget.h new file mode 100644 index 0000000..df402f8 --- /dev/null +++ b/modulewidget.h @@ -0,0 +1,26 @@ +#ifndef MODULEWIDGET_H +#define MODULEWIDGET_H + +#include <QDockWidget> +#include "sparrowrenderer.h" + +namespace Ui { +class ModuleWidget; +} + +class ModuleWidget : public QDockWidget, public SparrowRenderer +{ + Q_OBJECT + +public: + explicit ModuleWidget(QWidget *parent = 0); + ~ModuleWidget(); + +private: + Ui::ModuleWidget *ui; + +public slots: + void updateList(); +}; + +#endif // MODULEWIDGET_H diff --git a/modulewidget.ui b/modulewidget.ui new file mode 100644 index 0000000..1f606d2 --- /dev/null +++ b/modulewidget.ui @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ModuleWidget</class> + <widget class="QDockWidget" name="ModuleWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>141</width> + <height>392</height> + </rect> + </property> + <property name="allowedAreas"> + <set>Qt::LeftDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Modules</string> + </property> + <widget class="QWidget" name="dockWidgetContents"> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</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="QListWidget" name="listWidget"/> + </item> + <item> + <widget class="QWidget" name="widget" native="true"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>157</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/myglwidget.cpp b/myglwidget.cpp index f573c14..4b6808d 100644 --- a/myglwidget.cpp +++ b/myglwidget.cpp @@ -20,26 +20,25 @@ #include <QKeyEvent> #include <QMouseEvent> -MyGLWidget::MyGLWidget(QWidget *parent) : +OpenGLWidget::OpenGLWidget(QWidget *parent) : QGLWidget(parent), renderer(NULL), controller(NULL) {} -MyGLWidget::~MyGLWidget() +OpenGLWidget::~OpenGLWidget() { - if(renderer != NULL) - delete(renderer); + renderer->destroyGL(); if(controller != NULL) delete(controller); } -SparrowRenderer* MyGLWidget::getRenderer() +void OpenGLWidget::setRenderer(SparrowRenderer* myRenderer) { - return renderer; + renderer = myRenderer; } -void MyGLWidget::loadResources() +void OpenGLWidget::loadResources() { std::string filenames[6] = { "../data/skybox_ft", "../data/skybox_bk", @@ -59,7 +58,7 @@ void MyGLWidget::loadResources() ResourceBase::setShader("phong", new Shader(vertSource, fragSource)); } -void MyGLWidget::buildScene() +void OpenGLWidget::buildScene() { // camera positionning Camera* cam = renderer->getCamera(); @@ -94,59 +93,57 @@ void MyGLWidget::buildScene() emit modulesChanged(); } -void MyGLWidget::initializeGL() +void OpenGLWidget::initializeGL() { - if(renderer != NULL) - delete(renderer); - renderer = new SparrowRenderer(width(), height()); + renderer->initGL(width(), height()); loadResources(); buildScene(); controller = new FocusController(new glm::vec3(0)); controller->setCamera(renderer->getCamera()); } -void MyGLWidget::resizeGL(int width, int height) +void OpenGLWidget::resizeGL(int width, int height) { renderer->resize(width, height); updateGL(); } -void MyGLWidget::paintGL() +void OpenGLWidget::paintGL() { renderer->render(); } -void MyGLWidget::mouseMoveEvent(QMouseEvent *e) +void OpenGLWidget::mouseMoveEvent(QMouseEvent *e) { controller->mouseMove(e->pos().x() - last.x(), e->pos().y() - last.y()); last = e->pos(); updateGL(); } -void MyGLWidget::mousePressEvent(QMouseEvent* e) +void OpenGLWidget::mousePressEvent(QMouseEvent* e) { controller->mouseEvent(e->button(), true); last = e->pos(); updateGL(); } -void MyGLWidget::mouseReleaseEvent(QMouseEvent* e) +void OpenGLWidget::mouseReleaseEvent(QMouseEvent* e) { controller->mouseEvent(e->button(), false); updateGL(); } -void MyGLWidget::wheelEvent(QWheelEvent *e) +void OpenGLWidget::wheelEvent(QWheelEvent *e) { controller->mouseWheelEvent(e->delta()); updateGL(); } -void MyGLWidget::keyPressEvent(QKeyEvent *e) +void OpenGLWidget::keyPressEvent(QKeyEvent *e) { controller->mouseEvent(e->key(), true); updateGL(); } -void MyGLWidget::keyReleaseEvent(QKeyEvent *e) +void OpenGLWidget::keyReleaseEvent(QKeyEvent *e) { controller->mouseEvent(e->key(), false); updateGL(); diff --git a/myglwidget.h b/myglwidget.h index b929319..35cc2ea 100644 --- a/myglwidget.h +++ b/myglwidget.h @@ -10,7 +10,7 @@ namespace Ui { class MyGLWidget; } -class MyGLWidget : public QGLWidget +class OpenGLWidget : public QGLWidget { Q_OBJECT @@ -19,10 +19,9 @@ class MyGLWidget : public QGLWidget QPoint last; public: - explicit MyGLWidget(QWidget *parent = 0); - ~MyGLWidget(); - - SparrowRenderer* getRenderer(); + explicit OpenGLWidget(QWidget *parent = 0); + ~OpenGLWidget(); + void setRenderer(SparrowRenderer* myRenderer); protected: void initializeGL(); diff --git a/resourcebase.h b/resourcebase.h index 9886ad3..5dd5fb3 100644 --- a/resourcebase.h +++ b/resourcebase.h @@ -26,7 +26,7 @@ public: static Shader* getShader(const std::string &shaderName); static Entity* getEntity(const std::string &entityName); -private: +protected: template <typename T> class DataBase { @@ -42,7 +42,10 @@ private: T* get(const std::string &name) { - return data[name]; + if(data.count(name)) + return data[name]; + else + return NULL; } }; diff --git a/resourcewidget.cpp b/resourcewidget.cpp new file mode 100644 index 0000000..0e445f4 --- /dev/null +++ b/resourcewidget.cpp @@ -0,0 +1,76 @@ +#include "resourcewidget.h" +#include "ui_resourcewidget.h" +#include <iostream> + +ResourceWidget::ResourceWidget(QWidget *parent) : + QDockWidget(parent), + ui(new Ui::ResourceWidget) +{ + ui->setupUi(this); + ui->treeWidget->resresizeColumnToContents(0); + ui->treeWidget->header()->setStretchLastSection(false); +} + +ResourceWidget::~ResourceWidget() +{ + delete ui; +} + +void ResourceWidget::updateList() +{ + QTreeWidget* tree = ui->treeWidget; + for(QTreeWidgetItemIterator it(tree); *it; ++it) + { + QTreeWidgetItem* item = *it; + if(item->parent()) + continue; + item->setBackgroundColor(0, QColor(180, 220, 255)); + item->setExpanded(true); + QString text = item->text(0); + if (text == "Textures") + { + for(std::string &name : textures.names) + { + QTreeWidgetItem* myItem = new QTreeWidgetItem(item); + myItem->setText(0, QString(name.c_str())); + tree->addTopLevelItem(myItem); + } + } + else if(text == "Meshes") + { + for(std::string &name : meshes.names) + { + QTreeWidgetItem* myItem = new QTreeWidgetItem(item); + myItem->setText(0, QString(name.c_str())); + tree->addTopLevelItem(myItem); + } + } + else if(text == "Materials") + { + for(std::string &name : materials.names) + { + QTreeWidgetItem* myItem = new QTreeWidgetItem(item); + myItem->setText(0, QString(name.c_str())); + tree->addTopLevelItem(myItem); + } + } + else if(text == "Shaders") + { + for(std::string &name : shaders.names) + { + QTreeWidgetItem* myItem = new QTreeWidgetItem(item); + myItem->setText(0, QString(name.c_str())); + tree->addTopLevelItem(myItem); + } + } + else if(text == "Entities") + { + for(std::string &name : entities.names) + { + QTreeWidgetItem* myItem = new QTreeWidgetItem(item); + myItem->setText(0, QString(name.c_str())); + tree->addTopLevelItem(myItem); + } + } + } +} diff --git a/resourcewidget.h b/resourcewidget.h new file mode 100644 index 0000000..bfa6a18 --- /dev/null +++ b/resourcewidget.h @@ -0,0 +1,26 @@ +#ifndef RESOURCEWIDGET_H +#define RESOURCEWIDGET_H + +#include <QDockWidget> +#include "resourcebase.h" + +namespace Ui { +class ResourceWidget; +} + +class ResourceWidget : public QDockWidget, public ResourceBase +{ + Q_OBJECT + +public: + explicit ResourceWidget(QWidget *parent = 0); + ~ResourceWidget(); + +private: + Ui::ResourceWidget *ui; + +public slots: + void updateList(); +}; + +#endif // RESOURCEWIDGET_H diff --git a/resourcewidget.ui b/resourcewidget.ui new file mode 100644 index 0000000..1e2e2ec --- /dev/null +++ b/resourcewidget.ui @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ResourceWidget</class> + <widget class="QDockWidget" name="ResourceWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>171</width> + <height>411</height> + </rect> + </property> + <property name="allowedAreas"> + <set>Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Resources</string> + </property> + <widget class="QWidget" name="dockWidgetContents"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>0</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="QTreeWidget" name="treeWidget"> + <property name="alternatingRowColors"> + <bool>false</bool> + </property> + <property name="autoExpandDelay"> + <number>-1</number> + </property> + <property name="indentation"> + <number>20</number> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerStretchLastSection"> + <bool>false</bool> + </attribute> + <column> + <property name="text"> + <string>name</string> + </property> + </column> + <item> + <property name="text"> + <string>Textures</string> + </property> + </item> + <item> + <property name="text"> + <string>Meshes</string> + </property> + </item> + <item> + <property name="text"> + <string>Materials</string> + </property> + </item> + <item> + <property name="text"> + <string>Shaders</string> + </property> + </item> + <item> + <property name="text"> + <string>Entities</string> + </property> + </item> + </widget> + </item> + </layout> + </widget> + </widget> + <resources/> + <connections/> +</ui> diff --git a/sparrowRenderer.pro b/sparrowRenderer.pro index 05e79e1..0b3c01c 100644 --- a/sparrowRenderer.pro +++ b/sparrowRenderer.pro @@ -40,7 +40,9 @@ SOURCES += main.cpp\ focuscontroller.cpp \ phongmodule.cpp \ skyboxmodule.cpp \ - basicmodule.cpp + basicmodule.cpp \ + resourcewidget.cpp \ + modulewidget.cpp HEADERS += mainwindow.h \ myglwidget.h \ @@ -64,9 +66,13 @@ HEADERS += mainwindow.h \ skyboxmodule.h \ basicmodule.h \ module.h \ - resource.h + resource.h \ + resourcewidget.h \ + modulewidget.h -FORMS += mainwindow.ui +FORMS += \ + resourcewidget.ui \ + modulewidget.ui OTHER_FILES += *.frag *.vert *.glsl *.todo diff --git a/sparrowrenderer.cpp b/sparrowrenderer.cpp index 83b4555..fe513e8 100644 --- a/sparrowrenderer.cpp +++ b/sparrowrenderer.cpp @@ -7,7 +7,7 @@ // main methods -SparrowRenderer::SparrowRenderer(int width, int height) : camera(width, height) +void SparrowRenderer::initGL(int width, int height) { glewExperimental = GL_TRUE; GLenum err = glewInit(); @@ -30,7 +30,12 @@ SparrowRenderer::SparrowRenderer(int width, int height) : camera(width, height) glAssert(glEnable(GL_DEPTH_TEST)); glAssert(glEnable(GL_CULL_FACE)); glAssert(glEnable(GL_TEXTURE_2D)); - glAssert(glViewport(0, 0, width, height)); + resize(width, height); +} + +void SparrowRenderer::destroyGL() +{ + } void SparrowRenderer::resize(int width, int height) diff --git a/sparrowrenderer.h b/sparrowrenderer.h index fe7c823..66de07a 100644 --- a/sparrowrenderer.h +++ b/sparrowrenderer.h @@ -9,22 +9,10 @@ class Module; class SparrowRenderer { - typedef struct s_moduleNode{ - Module* module; - std::string name; - bool isEnabled; - - s_moduleNode(Module* myModule, const std::string &myName) : module(myModule), name(myName), isEnabled(true) {} - } ModuleNode; - - std::list<ModuleNode>::iterator getModuleNode(std::string name); - - Camera camera; - std::list<ModuleNode> modules; public: - // main methods - SparrowRenderer(int width, int height); + void initGL(int width, int height); + void destroyGL(); void resize(int width, int height); void render(); @@ -46,6 +34,20 @@ public: // camera methods Camera* getCamera(); + +protected: + typedef struct s_moduleNode{ + Module* module; + std::string name; + bool isEnabled; + + s_moduleNode(Module* myModule, const std::string &myName) : module(myModule), name(myName), isEnabled(true) {} + } ModuleNode; + + Camera camera; + std::list<ModuleNode> modules; + + std::list<ModuleNode>::iterator getModuleNode(std::string name); }; #endif // SPARROWRENDERER_H