Editor multyrender initial

This commit is contained in:
IlyaShurupov 2024-06-18 18:20:14 +03:00 committed by Ilya Shurupov
parent e32e5e77d1
commit 8bec5d1ab7
7 changed files with 74 additions and 29 deletions

View file

@ -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}/")

View file

@ -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<EventHandler, Canvas>(canvas, &mScene, renderResolution);
mGui = new EditorWidget<EventHandler, Canvas>(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<EventHandler, Canvas>* mGui;
};

View file

@ -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);
}

View file

@ -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;
};
}

View file

@ -1,35 +1,31 @@
#include "Widgets.hpp"
#include "RasterRender.hpp"
#include "Editor.hpp"
namespace tp {
template <typename Events, typename Canvas>
class ViewportWidget : public Widget<Events, Canvas> {
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 <typename Events, typename Canvas>
class EditorWidget : public Widget<Events, Canvas> {
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);
}

View file

@ -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);
}

View file

@ -9,7 +9,7 @@
namespace tp {
class RasterRender {
public:
explicit RasterRender(Vec2F renderResolution);
RasterRender();
~RasterRender();
void render(const Scene& geometry, Vec2F size);