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

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