Implementing basic scene tree

This commit is contained in:
Dynamitos
2020-04-15 02:04:42 +02:00
parent 576747c369
commit 3ef8342247
34 changed files with 722 additions and 54 deletions
+12 -6
View File
@@ -1,21 +1,27 @@
target_sources(SeeleEngine
PRIVATE
ForwardPlusRenderPath.h
ForwardPlusRenderPath.cpp
GraphicsResources.h
GraphicsResources.cpp
GraphicsEnums.h
Graphics.h
Graphics.cpp
Mesh.h
Mesh.cpp
RenderCore.h
RenderCore.cpp
RenderPath.h
RenderPath.cpp
SceneView.h
SceneView.cpp
SceneRenderPath.h
SceneRenderPath.cpp
View.h
View.cpp
SceneView.h
SceneView.cpp
Window.cpp
Window.h
WindowManager.h
WindowManager.cpp
GraphicsResources.h
GraphicsResources.cpp
GraphicsEnums.h)
WindowManager.cpp)
add_subdirectory(Vulkan/)
@@ -0,0 +1,24 @@
#include "ForwardPlusRenderPath.h"
using namespace Seele;
Seele::ForwardPlusRenderPath::ForwardPlusRenderPath(Gfx::PGraphics graphics, Gfx::PViewport viewport)
: SceneRenderPath(graphics, viewport)
{
}
Seele::ForwardPlusRenderPath::~ForwardPlusRenderPath()
{}
void Seele::ForwardPlusRenderPath::beginFrame()
{
}
void Seele::ForwardPlusRenderPath::render()
{
}
void Seele::ForwardPlusRenderPath::endFrame()
{
}
@@ -0,0 +1,16 @@
#pragma once
#include "SceneRenderPath.h"
namespace Seele
{
class ForwardPlusRenderPath : public SceneRenderPath
{
public:
ForwardPlusRenderPath(Gfx::PGraphics graphics, Gfx::PViewport target);
virtual ~ForwardPlusRenderPath();
virtual void beginFrame() override;
virtual void render() override;
virtual void endFrame() override;
private:
};
}
+2 -1
View File
@@ -283,7 +283,8 @@ class Viewport
public:
Viewport(PWindow owner, const ViewportCreateInfo &createInfo);
virtual ~Viewport();
virtual void resize(uint32 newX, uint32 newY) = 0;
virtual void move(uint32 newOffsetX, uint32 newOffsetY) = 0;
protected:
uint32 sizeX;
uint32 sizeY;
+1
View File
@@ -0,0 +1 @@
#include "Mesh.h"
+15
View File
@@ -0,0 +1,15 @@
#pragma once
#include "GraphicsResources.h"
namespace Seele
{
class Mesh
{
public:
Mesh(Gfx::PVertexBuffer vertexBuffer, Gfx::PIndexBuffer indexBuffer);
~Mesh();
private:
Gfx::VertexBuffer vertexBuffer;
Gfx::IndexBuffer indexBuffer;
};
}
+8 -1
View File
@@ -1,10 +1,17 @@
#include "RenderPath.h"
Seele::RenderPath::RenderPath(Gfx::PGraphics graphics)
Seele::RenderPath::RenderPath(Gfx::PGraphics graphics, Gfx::PViewport target)
: graphics(graphics)
, target(target)
{
}
Seele::RenderPath::~RenderPath()
{
}
void Seele::RenderPath::applyArea(Rect newArea)
{
target->resize(newArea.size.x, newArea.size.y);
target->move(newArea.offset.x, newArea.offset.y);
}
+3 -5
View File
@@ -6,17 +6,15 @@ namespace Seele
class RenderPath
{
public:
RenderPath(Gfx::PGraphics graphics);
RenderPath(Gfx::PGraphics graphics, Gfx::PViewport target);
virtual ~RenderPath();
virtual void applyArea(Rect area) = 0;
virtual void init() = 0;
virtual void applyArea(Rect area);
virtual void beginFrame() = 0;
virtual void render() = 0;
virtual void endFrame() = 0;
protected:
Gfx::PGraphics graphics;
Rect area;
Gfx::PViewport target;
};
DEFINE_REF(RenderPath);
} // namespace Seele
+2 -23
View File
@@ -1,31 +1,10 @@
#include "SceneRenderPath.h"
Seele::SceneRenderPath::SceneRenderPath(Gfx::PGraphics graphics)
: RenderPath(graphics)
Seele::SceneRenderPath::SceneRenderPath(Gfx::PGraphics graphics, Gfx::PViewport target)
: RenderPath(graphics, target)
{
}
Seele::SceneRenderPath::~SceneRenderPath()
{
}
void Seele::SceneRenderPath::applyArea(Rect newArea)
{
area = newArea;
}
void Seele::SceneRenderPath::init()
{
}
void Seele::SceneRenderPath::beginFrame()
{
}
void Seele::SceneRenderPath::render()
{
}
void Seele::SceneRenderPath::endFrame()
{
}
+4 -6
View File
@@ -6,12 +6,10 @@ namespace Seele
class SceneRenderPath : public RenderPath
{
public:
SceneRenderPath(Gfx::PGraphics graphics);
SceneRenderPath(Gfx::PGraphics graphics, Gfx::PViewport target);
virtual ~SceneRenderPath();
virtual void applyArea(Rect area) override;
virtual void init() override;
virtual void beginFrame() override;
virtual void render() override;
virtual void endFrame() override;
virtual void beginFrame() = 0;
virtual void render() = 0;
virtual void endFrame() = 0;
};
} // namespace Seele
+4 -4
View File
@@ -1,10 +1,10 @@
#include "SceneView.h"
#include "SceneRenderPath.h"
#include "ForwardPlusRenderPath.h"
Seele::SceneView::SceneView(Gfx::PGraphics graphics)
: View(graphics)
Seele::SceneView::SceneView(Gfx::PGraphics graphics, PWindow owner, const ViewportCreateInfo& createInfo)
: View(graphics, owner, createInfo)
{
renderer = new SceneRenderPath(graphics);
renderer = new ForwardPlusRenderPath(graphics, viewport);
}
Seele::SceneView::~SceneView()
+1 -1
View File
@@ -5,7 +5,7 @@ namespace Seele
class SceneView : public View
{
public:
SceneView(Gfx::PGraphics graphics);
SceneView(Gfx::PGraphics graphics, PWindow owner, const ViewportCreateInfo& createInfo);
~SceneView();
};
} // namespace Seele
+9 -1
View File
@@ -1,8 +1,11 @@
#include "View.h"
#include "Window.h"
Seele::View::View(Gfx::PGraphics graphics)
Seele::View::View(Gfx::PGraphics graphics, PWindow window, const ViewportCreateInfo& viewportInfo)
: graphics(graphics)
, owner(owner)
{
viewport = graphics->createViewport(owner->getGfxHandle(), viewportInfo);
}
Seele::View::~View()
@@ -14,6 +17,11 @@ void Seele::View::beginFrame()
renderer->beginFrame();
}
void Seele::View::render()
{
renderer->render();
}
void Seele::View::endFrame()
{
renderer->endFrame();
+5 -1
View File
@@ -2,18 +2,22 @@
#include "RenderPath.h"
namespace Seele
{
DECLARE_REF(Window);
// A view is a part of the window, which can be anything from a viewport to an editor
class View
{
public:
View(Gfx::PGraphics graphics);
View(Gfx::PGraphics graphics, PWindow window, const ViewportCreateInfo& createInfo);
virtual ~View();
void beginFrame();
void render();
void endFrame();
void applyArea(Rect area);
protected:
Gfx::PGraphics graphics;
Gfx::PViewport viewport;
PWindow owner;
PRenderPath renderer;
};
@@ -332,7 +332,8 @@ class Viewport : public Gfx::Viewport
public:
Viewport(PGraphics graphics, PWindow owner, const ViewportCreateInfo &createInfo);
virtual ~Viewport();
virtual void resize(uint32 newX, uint32 newY);
virtual void move(uint32 newOffsetX, uint32 newOffsetY);
protected:
private:
PGraphics graphics;
@@ -241,3 +241,15 @@ Viewport::Viewport(PGraphics graphics, PWindow owner, const ViewportCreateInfo &
Viewport::~Viewport()
{
}
void Viewport::resize(uint32 newX, uint32 newY)
{
sizeX = newX;
sizeY = newY;
}
void Viewport::move(uint32 newOffsetX, uint32 newOffsetY)
{
offsetX = newOffsetX;
offsetY = newOffsetY;
}
+47
View File
@@ -0,0 +1,47 @@
#include "Window.h"
Seele::Window::Window(Gfx::PWindow handle)
: gfxHandle(handle)
{
}
Seele::Window::~Window()
{
}
void Seele::Window::addView(PView view)
{
viewports.add(view);
}
void Seele::Window::beginFrame()
{
gfxHandle->beginFrame();
for(auto view : viewports)
{
view->beginFrame();
}
}
void Seele::Window::render()
{
for(auto view : viewports)
{
view->render();
}
}
void Seele::Window::endFrame()
{
gfxHandle->endFrame();
for(auto view : viewports)
{
view->endFrame();
}
}
Gfx::PWindow Seele::Window::getGfxHandle()
{
return gfxHandle;
}
+23
View File
@@ -0,0 +1,23 @@
#pragma once
#include "GraphicsResources.h"
#include "View.h"
namespace Seele
{
// The logical window, with the graphics proxy
class Window
{
public:
Window(Gfx::PWindow handle);
~Window();
void addView(PView view);
void beginFrame();
void render();
void endFrame();
Gfx::PWindow getGfxHandle();
private:
Array<PView> viewports;
Gfx::PWindow gfxHandle;
};
DEFINE_REF(Window);
}