From 8bec5d1ab7d0144e236d75e0631089f3d6633c32 Mon Sep 17 00:00:00 2001 From: IlyaShurupov Date: Tue, 18 Jun 2024 18:20:14 +0300 Subject: [PATCH] Editor multyrender initial --- 3DEditor/CMakeLists.txt | 10 +++++----- 3DEditor/applications/Entry.cpp | 9 ++++----- 3DEditor/private/Editor.cpp | 24 ++++++++++++++++++++++++ 3DEditor/public/Editor.hpp | 26 ++++++++++++++++++++++++++ 3DEditor/public/EditorWidget.hpp | 26 +++++++++++--------------- RasterRender/private/Render.cpp | 6 +++--- RasterRender/public/RasterRender.hpp | 2 +- 7 files changed, 74 insertions(+), 29 deletions(-) create mode 100644 3DEditor/private/Editor.cpp create mode 100644 3DEditor/public/Editor.hpp diff --git a/3DEditor/CMakeLists.txt b/3DEditor/CMakeLists.txt index 2e54bca..909fa6d 100644 --- a/3DEditor/CMakeLists.txt +++ b/3DEditor/CMakeLists.txt @@ -8,16 +8,16 @@ set(BINDINGS_LIBS glfw Imgui) file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp") file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp") -add_library(${PROJECT_NAME} INTERFACE ${HEADERS}) +add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) -target_include_directories(${PROJECT_NAME} INTERFACE ./public/ ${BINDINGS_INCLUDE} ./ext/) -target_link_libraries(${PROJECT_NAME} INTERFACE Graphics Connection Widgets Math RasterRender) -target_link_libraries(${PROJECT_NAME} INTERFACE ${BINDINGS_LIBS}) +target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ${BINDINGS_INCLUDE} ./ext/) +target_link_libraries(${PROJECT_NAME} PUBLIC Widgets RasterRender RayTracer) +target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS}) ### -------------------------- Applications -------------------------- ### file(GLOB APP_SOURCES "./applications/*.cpp") add_executable(3DEditorApp ${APP_SOURCES}) -target_link_libraries(3DEditorApp ${PROJECT_NAME} Lua ImageIO) +target_link_libraries(3DEditorApp ${PROJECT_NAME}) file(COPY "rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") file(COPY "rsc/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/") diff --git a/3DEditor/applications/Entry.cpp b/3DEditor/applications/Entry.cpp index a1f2bc2..a7dfd9d 100644 --- a/3DEditor/applications/Entry.cpp +++ b/3DEditor/applications/Entry.cpp @@ -9,13 +9,12 @@ using namespace tp; class EditorGUI : public Application { public: EditorGUI() { - Vec2F renderResolution = { 1000, 1000 }; auto canvas = this->mGraphics->getCanvas(); - mGui = new EditorWidget(canvas, &mScene, renderResolution); + mGui = new EditorWidget(canvas, &mEditor); - mScene.load("rsc/scene/script.lua"); + mEditor.loadDefaults(); - mScene.mCamera.lookAtPoint({ 0, 0, 0 }, { 3, 3, 2 }, { 0, 0, 1 }); + // mScene.mCamera.lookAtPoint({ 0, 0, 0 }, { 3, 3, 2 }, { 0, 0, 1 }); } ~EditorGUI() override { delete mGui; } @@ -32,7 +31,7 @@ public: void drawFrame(Canvas* canvas) override { mGui->drawWrapper(*canvas); } private: - Scene mScene; + Editor mEditor; WidgetManager mWidgetManager; EditorWidget* mGui; }; diff --git a/3DEditor/private/Editor.cpp b/3DEditor/private/Editor.cpp new file mode 100644 index 0000000..94e82e9 --- /dev/null +++ b/3DEditor/private/Editor.cpp @@ -0,0 +1,24 @@ + +#include "Editor.hpp" + +using namespace tp; + +void Editor::loadDefaults() { + mScene.load("rsc/scene/script.lua"); +} + +uint4 Editor::getViewportTexID() { + return mRasterRenderer.getRenderBufferID(); +} + +void Editor::renderViewport() { + mRasterRenderer.render(mScene, mViewportSize); +} + +void Editor::setViewportSize(const Vec2F& size) { + // TODO remove + mScene.mCamera.rotate(0.01f, 0.0); + + mRasterRenderer.getRenderBuffer()->resize(size); + mScene.mCamera.setRatio(size.y / size.x); +} diff --git a/3DEditor/public/Editor.hpp b/3DEditor/public/Editor.hpp new file mode 100644 index 0000000..ff0aa8e --- /dev/null +++ b/3DEditor/public/Editor.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "RayTracer.hpp" +#include "RasterRender.hpp" + +namespace tp { + class Editor { + public: + Editor() = default; + + void loadDefaults(); + + uint4 getViewportTexID(); + void setViewportSize(const Vec2F& size); + void renderViewport(); + + private: + Scene mScene; + + RasterRender mRasterRenderer; + RayTracer mPathRenderer; + + // TODO move inside the scene + Vec2F mViewportSize; + }; +} \ No newline at end of file diff --git a/3DEditor/public/EditorWidget.hpp b/3DEditor/public/EditorWidget.hpp index b9564b2..177e5c9 100644 --- a/3DEditor/public/EditorWidget.hpp +++ b/3DEditor/public/EditorWidget.hpp @@ -1,35 +1,31 @@ #include "Widgets.hpp" -#include "RasterRender.hpp" + +#include "Editor.hpp" namespace tp { template class ViewportWidget : public Widget { public: - explicit ViewportWidget(Canvas* canvas, Scene* geometry, Vec2F renderResolution) : - mRender(renderResolution) { - - mImage = canvas->createImageFromTextId(mRender.getRenderBufferID(), { 0, 0 }); - mScene = geometry; + explicit ViewportWidget(Canvas* canvas, Editor* editor) { + mEditor = editor; + mImage = canvas->createImageFromTextId(mEditor->getViewportTexID(), { 0, 0 }); mCanvas = canvas; } ~ViewportWidget() { mCanvas->deleteImageHandle(mImage); } void eventProcess(const Events& events) override { - mRender.getRenderBuffer()->resize(this->mArea.size); - mScene->mCamera.rotate(0.01f, 0.0); - mScene->mCamera.setRatio(this->mArea.w / this->mArea.z); + mEditor->setViewportSize(this->mArea.size); } void eventDraw(Canvas& canvas) override { - mRender.render(*mScene, this->mArea.size); + mEditor->renderViewport(); canvas.drawImage(this->mArea, &mImage, PI); } public: - RasterRender mRender; - Scene* mScene = nullptr; + Editor* mEditor; Canvas* mCanvas = nullptr; Canvas::ImageHandle mImage; @@ -38,9 +34,9 @@ namespace tp { template class EditorWidget : public Widget { public: - EditorWidget(Canvas* canvas, Scene* geometry, Vec2F renderResolution) : - mViewport(canvas, geometry, renderResolution) { - + EditorWidget(Canvas* canvas, Editor* editor) : + mViewport(canvas, editor) + { this->mChildWidgets.pushBack(&mViewport); this->mChildWidgets.pushBack(&mSplitView); } diff --git a/RasterRender/private/Render.cpp b/RasterRender/private/Render.cpp index 53037ce..46e57a6 100644 --- a/RasterRender/private/Render.cpp +++ b/RasterRender/private/Render.cpp @@ -3,9 +3,9 @@ using namespace tp; -RasterRender::RasterRender(Vec2F renderResolution) : - mRenderBuffer(renderResolution) { - +RasterRender::RasterRender() : + mRenderBuffer({ 100, 100 }) +{ mDefaultShader.load("rsc/shaders/default.vert", nullptr, "rsc/shaders/default.frag", true); } diff --git a/RasterRender/public/RasterRender.hpp b/RasterRender/public/RasterRender.hpp index 9255112..49b2f8f 100644 --- a/RasterRender/public/RasterRender.hpp +++ b/RasterRender/public/RasterRender.hpp @@ -9,7 +9,7 @@ namespace tp { class RasterRender { public: - explicit RasterRender(Vec2F renderResolution); + RasterRender(); ~RasterRender(); void render(const Scene& geometry, Vec2F size);