3D editor stable with path tracer

This commit is contained in:
IlyaShurupov 2024-06-18 19:36:47 +03:00 committed by Ilya Shurupov
parent 8bec5d1ab7
commit 5ac4d56d32
11 changed files with 144 additions and 19 deletions

View file

@ -6,21 +6,31 @@
namespace tp {
class Editor {
public:
Editor() = default;
enum class RenderType { RASTER, PATH_TRACER };
public:
Editor();
~Editor();
void loadDefaults();
uint4 getViewportTexID();
void setViewportSize(const Vec2F& size);
void renderViewport();
void renderPathFrame();
void setRenderType(RenderType type);
private:
Scene mScene;
RenderType mRenderType = RenderType::RASTER;
RasterRender mRasterRenderer;
RayTracer mPathRenderer;
// TODO move inside the scene
Vec2F mViewportSize;
RayTracer::OutputBuffers mPathTracerBuffers;
uint4 mPathRenderTexture = 0;
};
}

View file

@ -21,6 +21,8 @@ namespace tp {
void eventDraw(Canvas& canvas) override {
mEditor->renderViewport();
canvas.updateTextureID(mImage, mEditor->getViewportTexID());
canvas.drawImage(this->mArea, &mImage, PI);
}
@ -37,16 +39,38 @@ namespace tp {
EditorWidget(Canvas* canvas, Editor* editor) :
mViewport(canvas, editor)
{
mEditor = editor;
this->mChildWidgets.pushBack(&mViewport);
this->mChildWidgets.pushBack(&mSplitView);
this->mChildWidgets.pushBack(&mSettingsWidget);
mRenderPathTracer.mLabel.mLabel = "Render with Path Tracer";
mRenderRaster.mLabel.mLabel = "Render with Raster";
mSettingsWidget.addWidget(&mRenderPathTracer);
mSettingsWidget.addWidget(&mRenderRaster);
}
void eventProcess(const Events& events) override {
mSplitView.setArea(this->mArea);
mViewport.setArea(mSplitView.getFirst());
mSettingsWidget.setArea(mSplitView.getSecond());
if (mRenderPathTracer.isFired()) {
mEditor->renderPathFrame();
mEditor->setRenderType(Editor::RenderType::PATH_TRACER);
}
if (mRenderRaster.isFired()) {
mEditor->setRenderType(Editor::RenderType::RASTER);
}
}
void eventDraw(Canvas& canvas) override { canvas.rect(this->mArea, mBaseColor); }
void eventDraw(Canvas& canvas) override {
canvas.rect(this->mArea, mBaseColor);
}
void eventUpdateConfiguration(WidgetManager& wm) override {
wm.setActiveId("3DEditor");
@ -54,9 +78,17 @@ namespace tp {
}
public:
ViewportWidget<Events, Canvas> mViewport;
Editor* mEditor = nullptr;
SplitView<Events, Canvas> mSplitView;
ViewportWidget<Events, Canvas> mViewport;
// Controls
ScrollableWindow<Events, Canvas> mSettingsWidget;
ButtonWidget<Events, Canvas> mRenderPathTracer;
ButtonWidget<Events, Canvas> mRenderRaster;
RGBA mBaseColor;
};
}