From 46ac0e2be19be6e7b9de43bbab69ce71abec62f8 Mon Sep 17 00:00:00 2001 From: floralrainfall Date: Mon, 10 Jul 2023 02:08:08 -0400 Subject: [PATCH] Ogre --- CMakeLists.txt | 1 + Content/sky/null_plainsky512.material | 17 +++ Content/sky/null_plainsky512_bk.jpg | Bin 0 -> 10475 bytes Content/sky/null_plainsky512_dn.jpg | Bin 0 -> 5380 bytes Content/sky/null_plainsky512_ft.jpg | Bin 0 -> 12283 bytes Content/sky/null_plainsky512_lf.jpg | Bin 0 -> 11601 bytes Content/sky/null_plainsky512_rt.jpg | Bin 0 -> 10817 bytes Content/sky/null_plainsky512_up.jpg | Bin 0 -> 6591 bytes Projects/Client/CMakeLists.txt | 4 + Projects/Client/Common/CMakeLists.txt | 2 - Projects/Client/Common/Header/GL/Widget.hpp | 28 ++++- Projects/Client/Common/Source/GL/Widget.cpp | 113 +++++++++++++++++-- Projects/Client/Studio/Header/MainWindow.hpp | 2 +- Projects/Client/Studio/Source/MainWindow.cpp | 19 +++- Projects/Client/Studio/Source/main.cpp | 11 +- Projects/Engine/CMakeLists.txt | 8 +- 16 files changed, 175 insertions(+), 30 deletions(-) create mode 100644 Content/sky/null_plainsky512.material create mode 100644 Content/sky/null_plainsky512_bk.jpg create mode 100644 Content/sky/null_plainsky512_dn.jpg create mode 100644 Content/sky/null_plainsky512_ft.jpg create mode 100644 Content/sky/null_plainsky512_lf.jpg create mode 100644 Content/sky/null_plainsky512_rt.jpg create mode 100644 Content/sky/null_plainsky512_up.jpg diff --git a/CMakeLists.txt b/CMakeLists.txt index 96f53da..12b7838 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,5 +14,6 @@ set(CMAKE_AUTOMOC ON) # Enable Qt's automatic meta-object compiler find_package(Boost REQUIRED) find_package(cglm REQUIRED CONFIG) +find_package(OGRE REQUIRED COMPONENTS Bites CONFIG) add_subdirectory(Projects) \ No newline at end of file diff --git a/Content/sky/null_plainsky512.material b/Content/sky/null_plainsky512.material new file mode 100644 index 0000000..dcaca03 --- /dev/null +++ b/Content/sky/null_plainsky512.material @@ -0,0 +1,17 @@ +material sky/null_plainsky512 +{ + technique + { + pass + { + lighting off + depth_write off + + texture_unit + { + cubic_texture sky/null_plainsky512_bk.jpg sky/null_plainsky512_ft.jpg sky/null_plainsky512_lf.jpg sky/null_plainsky512_rt.jpg sky/null_plainsky512_up.jpg sky/null_plainsky512_dn.jpg separateUV + tex_address_mode clamp + } + } + } +} \ No newline at end of file diff --git a/Content/sky/null_plainsky512_bk.jpg b/Content/sky/null_plainsky512_bk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e042e22d748e61c8e125975e002e0985e9a747d GIT binary patch literal 10475 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 literal 0 HcmV?d00001 diff --git a/Content/sky/null_plainsky512_dn.jpg b/Content/sky/null_plainsky512_dn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9281a29a375c7a7d8fa8dd10bc54d76c6cf87e1 GIT binary patch literal 5380 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 ICu~go7nUq(#Q*>R literal 0 HcmV?d00001 diff --git a/Content/sky/null_plainsky512_ft.jpg b/Content/sky/null_plainsky512_ft.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c20ed2174d58ecaee198ca1943a78d03c2c15e22 GIT binary patch literal 12283 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 literal 0 HcmV?d00001 diff --git a/Content/sky/null_plainsky512_up.jpg b/Content/sky/null_plainsky512_up.jpg new file mode 100644 index 0000000000000000000000000000000000000000..efff81e1cb7d68f860b870c2aa5f1d67d9a07856 GIT binary patch literal 6591 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 +#include #include +#include #include +#include +#include #include namespace GL { - class Widget : public QOpenGLWidget + class Widget : public QWidget { Q_OBJECT public: - Widget(QWidget* parent = nullptr); + Widget(Ogre::Root *root, QWidget* parent = nullptr); double delta; + double render_time; Adorn* adorn; + + Ogre::Root* ogreRoot; + Ogre::RenderWindow* ogreWindow; + Ogre::SceneManager* ogreSceneManager; + Ogre::Camera* ogreCamera; + + void render(); + void initializeOgre(); + + Ogre::NameValuePairList getRenderOptions(); + Ogre::String getWindowHandle(); protected: - virtual void initialize(); - virtual void paint(); - virtual void resize(int x, int y); - + virtual void paintEvent(QPaintEvent* pEvent); + virtual void resizeEvent(QResizeEvent* rEvent); + virtual void mouseMoveEvent(QMouseEvent *event); + virtual QPaintEngine* paintEngine() const; private: QElapsedTimer timer; }; diff --git a/Projects/Client/Common/Source/GL/Widget.cpp b/Projects/Client/Common/Source/GL/Widget.cpp index f28098f..5485385 100644 --- a/Projects/Client/Common/Source/GL/Widget.cpp +++ b/Projects/Client/Common/Source/GL/Widget.cpp @@ -1,30 +1,121 @@ #include +#include +#ifdef __unix__ +#include +#include +#endif + +// credits to https://github.com/Ekman/Qt-Ogre-Widget namespace GL { - Widget::Widget(QWidget* parent) : QOpenGLWidget(parent) + Widget::Widget(Ogre::Root *root, QWidget *parent) : QWidget(parent) { - this->adorn = new GL::Adorn(); + this->ogreRoot = root; + this->setMinimumSize(640, 480); + this->ogreWindow = NULL; + + this->setAttribute(Qt::WA_OpaquePaintEvent); + this->setAttribute(Qt::WA_PaintOnScreen); + this->setMouseTracking(true); + this->setCursor(QCursor(Qt::BlankCursor)); + this->setFocusPolicy(Qt::StrongFocus); } - void Widget::initialize() + void Widget::initializeOgre() { - printf("RNR::GLWidget::initialize: initializing\n"); + Ogre::NameValuePairList options = this->getRenderOptions(); - if (gladLoadGL()) + printf("Widget::initializeOgre: initializing render window\n"); + ogreWindow = ogreRoot->createRenderWindow("GLWidget-RenderWindow", width(), height(), false, &options); + ogreWindow->setActive(true); + ogreWindow->setVisible(true); + ogreWindow->setAutoUpdated(true); + + Ogre::ResourceGroupManager::getSingletonPtr()->addResourceLocation("content", "FileSystem", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, true); + Ogre::ResourceGroupManager::getSingletonPtr()->addResourceLocation("../Content", "FileSystem", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, true); + + Ogre::ResourceGroupManager::getSingletonPtr()->initialiseAllResourceGroups(); + Ogre::MaterialManager::getSingletonPtr()->load("sky", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + + ogreSceneManager = ogreRoot->createSceneManager(); + ogreSceneManager->setSkyBox(true, "sky/null_plainsky512", 5.f); + ogreSceneManager->setAmbientLight(Ogre::ColourValue::White); + + //Ogre::RTShader::ShaderGenerator* shadergen = Ogre::RTShader::ShaderGenerator::getSingletonPtr(); + //shadergen->addSceneManager(ogreSceneManager); + + Ogre::Light* light = ogreSceneManager->createLight("MainLight"); + Ogre::SceneNode* lightNode = ogreSceneManager->getRootSceneNode()->createChildSceneNode(); + lightNode->setPosition(0, 10, 15); + lightNode->attachObject(light); + + Ogre::SceneNode* camNode = ogreSceneManager->getRootSceneNode()->createChildSceneNode(); + camNode->setPosition(0, 0, 5); + camNode->lookAt(Ogre::Vector3(0, sinf(render_time), cosf(render_time)), Ogre::Node::TS_PARENT); + + ogreCamera = ogreSceneManager->createCamera("myCam"); + ogreCamera->setNearClipDistance(0.1); // specific to this sample + ogreCamera->setFarClipDistance(1000.f); + ogreCamera->setAutoAspectRatio(true); + camNode->attachObject(ogreCamera); + + ogreWindow->addViewport(ogreCamera); + this->render_time = 0.0; + } + + void Widget::render() + { + this->delta = ogreRoot->getTimer()->getMicroseconds() / 1000000.0; + this->render_time += ogreRoot->getTimer()->getMilliseconds() / 1000.0; + ogreRoot->getTimer()->reset(); + + ogreCamera->getParentSceneNode()->lookAt(Ogre::Vector3(sinf(render_time)*5.f, cosf(render_time)*5.f, 0.f), Ogre::Node::TS_PARENT); + + ogreRoot->renderOneFrame(this->delta); + } + + Ogre::NameValuePairList Widget::getRenderOptions() + { + Ogre::NameValuePairList options; + + options["externalWindowHandle"] = getWindowHandle(); +#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE + options["macAPI"] = "cocoa"; + options["macAPICocoaUseNSView"] = "true"; +#endif + + return options; + } + + Ogre::String Widget::getWindowHandle() + { + Ogre::String windowHandle; + windowHandle = Ogre::StringConverter::toString((unsigned long)window()->winId()); + printf("Widget::getWindowHandle(): %s\n", windowHandle.c_str()); + return windowHandle; + } + + void Widget::resizeEvent(QResizeEvent *rEvent) + { + QWidget::resizeEvent(rEvent); + if(ogreWindow) { - printf("RNR::GLWidget::initialize: initialized\n"); + QSize size = rEvent->size(); + ogreWindow->resize(size.width(), size.height()); } } - void Widget::paint() + void Widget::paintEvent(QPaintEvent *pEvent) { - this->delta = ((double)this->timer.elapsed()) / 1000.0; - this->timer.start(); } - void Widget::resize(int x, int y) + void Widget::mouseMoveEvent(QMouseEvent *mEvent) { - printf("RNR::GLWidget::resize: resizing to (%i, %i)\n", x, y); + } + + QPaintEngine *Widget::paintEngine() const + { + return 0; } } \ No newline at end of file diff --git a/Projects/Client/Studio/Header/MainWindow.hpp b/Projects/Client/Studio/Header/MainWindow.hpp index e5e6c30..82faa98 100644 --- a/Projects/Client/Studio/Header/MainWindow.hpp +++ b/Projects/Client/Studio/Header/MainWindow.hpp @@ -13,9 +13,9 @@ class MainWindow : public QMainWindow public: MainWindow(); + Ogre::Root* ogreRoot; GL::Widget* widget; QTreeWidget* explorer; - protected: void closeEvent(QCloseEvent* event); }; \ No newline at end of file diff --git a/Projects/Client/Studio/Source/MainWindow.cpp b/Projects/Client/Studio/Source/MainWindow.cpp index 85aa4d1..34d2545 100644 --- a/Projects/Client/Studio/Source/MainWindow.cpp +++ b/Projects/Client/Studio/Source/MainWindow.cpp @@ -1,5 +1,7 @@ #include #include +#include +#include #include "Resources/StudioResources.hpp" @@ -11,16 +13,27 @@ MainWindow::MainWindow() QWidget* content_widget = new QWidget(); QGridLayout* grid = new QGridLayout(); - this->widget = new GL::Widget(); - grid->addWidget(this->widget, 0, 0, 1, 1); + ogreRoot = new Ogre::Root(); + ogreRoot->showConfigDialog(NULL); + ogreRoot->initialise(false); + this->widget = new GL::Widget(ogreRoot); + grid->addWidget(this->widget, 0, 0, 1, 2); + QTreeView* instance_tree = new QTreeView(); + grid->addWidget(instance_tree, 0, 2, 1, 1); + content_widget->setLayout(grid); + grid->setContentsMargins(0,0,0,0); + grid->setSpacing(0); + setWindowTitle(QString("RNR Studio")); setWindowIcon(QIcon(pixmap)); setCentralWidget(content_widget); + + QToolBar* tool_bar = new QToolBar(this); } void MainWindow::closeEvent(QCloseEvent* event) { - // + } \ No newline at end of file diff --git a/Projects/Client/Studio/Source/main.cpp b/Projects/Client/Studio/Source/main.cpp index fcb98b9..c48a6a6 100644 --- a/Projects/Client/Studio/Source/main.cpp +++ b/Projects/Client/Studio/Source/main.cpp @@ -1,6 +1,8 @@ #include #include +#include +#include #include @@ -11,16 +13,17 @@ int main(int argc, char** argv) format.setSwapInterval(0); QSurfaceFormat::setDefaultFormat(format); - QApplication app(argc, argv); MainWindow window = MainWindow(); window.show(); + window.widget->initializeOgre(); - bool running = true; - while (running) + while (window.isVisible()) { + window.statusBar()->showMessage(QString::asprintf("Dt=%f, Rt=%f", window.widget->delta, window.widget->render_time)); + app.processEvents(); - window.widget->update(); + window.widget->render(); } } \ No newline at end of file diff --git a/Projects/Engine/CMakeLists.txt b/Projects/Engine/CMakeLists.txt index 6243128..c798499 100644 --- a/Projects/Engine/CMakeLists.txt +++ b/Projects/Engine/CMakeLists.txt @@ -1,6 +1,5 @@ project(Engine) -include_directories(Engine/Header) add_library(Engine STATIC Header/Helpers/Name.hpp @@ -20,5 +19,8 @@ add_library(Engine STATIC Source/Rendering/Adorn.cpp ) -target_include_directories(Engine PUBLIC Header) -target_link_libraries(Engine PUBLIC ${BOOST_LIBRARIES} cglm Luau.Analysis Luau.Ast Luau.Compiler Luau.VM) \ No newline at end of file +target_include_directories(Engine PUBLIC ${BOOST_INCLUDE_DIRS} Header/) +target_link_libraries(Engine PUBLIC ${BOOST_LIBRARIES} OgreBites cglm Luau.Analysis Luau.Ast Luau.Compiler Luau.VM) + +file(COPY ${OGRE_CONFIG_DIR}/plugins.cfg ${OGRE_CONFIG_DIR}/resources.cfg + DESTINATION ${CMAKE_BINARY_DIR})