tmp
This commit is contained in:
parent
e161fffc0c
commit
2160dfca34
22 changed files with 339 additions and 157 deletions
70
3DEditor/public/EditorWidget.hpp
Normal file
70
3DEditor/public/EditorWidget.hpp
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
#include "Widgets.hpp"
|
||||
#include "Render.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) {
|
||||
mGeometry = geometry;
|
||||
this->createConfig("ViewportWidget");
|
||||
mImage = canvas->createImageFromTextId(mRender.getRenderBuffer(), mRender.getBufferSize());
|
||||
mCanvas = canvas;
|
||||
}
|
||||
|
||||
~ViewportWidget() { mCanvas->deleteImageHandle(mImage); }
|
||||
|
||||
void proc(const Events& events, const RectF& areaParent, const RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
|
||||
mGeometry->mCamera.rotate(0.01f, 0.0);
|
||||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
mRender.render(*mGeometry, this->mArea.size);
|
||||
canvas.drawImage(this->mArea, &mImage, PI);
|
||||
}
|
||||
|
||||
public:
|
||||
Render mRender;
|
||||
Scene* mGeometry = nullptr;
|
||||
Canvas* mCanvas = nullptr;
|
||||
Canvas::ImageHandle mImage;
|
||||
};
|
||||
|
||||
template <typename Events, typename Canvas>
|
||||
class EditorWidget : public Widget<Events, Canvas> {
|
||||
public:
|
||||
EditorWidget(Canvas* canvas, Scene* geometry, Vec2F renderResolution) :
|
||||
mViewport(canvas, geometry, renderResolution) {
|
||||
this->createConfig("EditorWidget");
|
||||
this->addColor("Base", "Base");
|
||||
}
|
||||
|
||||
void proc(const Events& events, const RectF& areaParent, const RectF& aArea) override {
|
||||
this->mArea = aArea;
|
||||
this->mVisible = areaParent.isOverlap(aArea);
|
||||
if (!this->mVisible) return;
|
||||
|
||||
mSplitView.proc(events, aArea, aArea);
|
||||
mViewport.proc(events, aArea, mSplitView.getFirst());
|
||||
}
|
||||
|
||||
void draw(Canvas& canvas) override {
|
||||
if (!this->mVisible) return;
|
||||
|
||||
canvas.rect(this->mArea, this->getColor("Base"));
|
||||
mSplitView.draw(canvas);
|
||||
mViewport.draw(canvas);
|
||||
}
|
||||
|
||||
public:
|
||||
ViewportWidget<Events, Canvas> mViewport;
|
||||
SplitView<Events, Canvas> mSplitView;
|
||||
};
|
||||
}
|
||||
23
3DEditor/public/Render.hpp
Normal file
23
3DEditor/public/Render.hpp
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#pragma once
|
||||
|
||||
#include "Scene.hpp"
|
||||
#include "Rect.hpp"
|
||||
|
||||
#include "FrameBuffer.hpp"
|
||||
#include "Shader.hpp"
|
||||
|
||||
namespace tp {
|
||||
class Render {
|
||||
public:
|
||||
explicit Render(Vec2F renderResolution);
|
||||
~Render();
|
||||
|
||||
void render(const Scene& geometry, Vec2F size);
|
||||
uint4 getRenderBuffer();
|
||||
Vec2F getBufferSize();
|
||||
|
||||
private:
|
||||
RenderBuffer mRenderBuffer;
|
||||
RenderShader mDefaultShader;
|
||||
};
|
||||
}
|
||||
34
3DEditor/public/Scene.hpp
Normal file
34
3DEditor/public/Scene.hpp
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#pragma once
|
||||
|
||||
#include "Topology.hpp"
|
||||
#include <memory>
|
||||
|
||||
class ObjectBuffers;
|
||||
|
||||
namespace tp {
|
||||
|
||||
class Object {
|
||||
public:
|
||||
Object() = default;
|
||||
|
||||
public:
|
||||
Topology mTopology;
|
||||
std::shared_ptr<ObjectBuffers> mBuffers;
|
||||
};
|
||||
|
||||
struct PointLight {
|
||||
Vec3F pos;
|
||||
halnf fallOut = 1.f;
|
||||
halnf intensity = 1.f;
|
||||
};
|
||||
|
||||
class Scene {
|
||||
public:
|
||||
Scene() = default;
|
||||
|
||||
public:
|
||||
Buffer<Object> mObjects;
|
||||
Buffer<PointLight> mLights;
|
||||
Camera mCamera;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue