render pass
This commit is contained in:
parent
5a22344a67
commit
3ce73c2f99
@ -9,8 +9,8 @@ namespace engineapi {
|
|||||||
App::App(const string& path)
|
App::App(const string& path)
|
||||||
{
|
{
|
||||||
const char* name = "zengine";
|
const char* name = "zengine";
|
||||||
RenderAPI::MakeInstance();
|
_RenderAPI = RenderAPI::MakeInstance();
|
||||||
Window::MakeInstance(3, 640, 720, name);
|
_Window = Window::MakeInstance(3, 640, 720, name);
|
||||||
auto scene_manager = new SceneManager();
|
auto scene_manager = new SceneManager();
|
||||||
scene_manager->LoadScene(path);
|
scene_manager->LoadScene(path);
|
||||||
new AssetManager();
|
new AssetManager();
|
||||||
@ -29,6 +29,11 @@ namespace engineapi {
|
|||||||
auto actor = ActorMesh::New(property);
|
auto actor = ActorMesh::New(property);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
App::~App()
|
||||||
|
{
|
||||||
|
delete _Window;
|
||||||
|
delete _RenderAPI;
|
||||||
|
}
|
||||||
void App::Launch()
|
void App::Launch()
|
||||||
{
|
{
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -38,13 +43,13 @@ namespace engineapi {
|
|||||||
}
|
}
|
||||||
void App::Update()
|
void App::Update()
|
||||||
{
|
{
|
||||||
SceneManager::GetSingletonPtr()->GetCurScene()->Update();
|
SceneManager::GetSingletonPtr()->Update();
|
||||||
}
|
}
|
||||||
void App::Render()
|
void App::Render()
|
||||||
{
|
{
|
||||||
RenderAPI::GetSingletonPtr()->BeginFrame();
|
RenderAPI::GetSingletonPtr()->BeginFrame();
|
||||||
|
|
||||||
SceneManager::GetSingletonPtr()->GetCurScene()->Render();
|
SceneManager::GetSingletonPtr()->Render();
|
||||||
|
|
||||||
RenderAPI::GetSingletonPtr()->EndFrame();
|
RenderAPI::GetSingletonPtr()->EndFrame();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,11 +3,15 @@
|
|||||||
using std::string;
|
using std::string;
|
||||||
namespace engineapi
|
namespace engineapi
|
||||||
{
|
{
|
||||||
|
class RenderAPI;
|
||||||
|
class Window;
|
||||||
class App {
|
class App {
|
||||||
protected:
|
public:
|
||||||
|
RenderAPI* _RenderAPI{nullptr};
|
||||||
|
Window* _Window{ nullptr };
|
||||||
public:
|
public:
|
||||||
App(const string& path);
|
App(const string& path);
|
||||||
|
~App();
|
||||||
void Launch();
|
void Launch();
|
||||||
public:
|
public:
|
||||||
void Update();
|
void Update();
|
||||||
|
|||||||
10
engine/src/engine/object/camera/camera.cpp
Normal file
10
engine/src/engine/object/camera/camera.cpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include "camera.h"
|
||||||
|
|
||||||
|
namespace engineapi {
|
||||||
|
Camera::Camera()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Camera::~Camera()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
9
engine/src/engine/object/camera/camera.h
Normal file
9
engine/src/engine/object/camera/camera.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
namespace engineapi {
|
||||||
|
class Camera {
|
||||||
|
protected:
|
||||||
|
public:
|
||||||
|
Camera();
|
||||||
|
~Camera();
|
||||||
|
};
|
||||||
|
};
|
||||||
0
engine/src/engine/object/component/mesh_render.cpp
Normal file
0
engine/src/engine/object/component/mesh_render.cpp
Normal file
8
engine/src/engine/object/component/mesh_render.h
Normal file
8
engine/src/engine/object/component/mesh_render.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "../component.h"
|
||||||
|
|
||||||
|
namespace engineapi {
|
||||||
|
class MeshRenderer : public Component {
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
@ -58,6 +58,16 @@ namespace engineapi {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SceneManager::Render()
|
||||||
|
{
|
||||||
|
curScene->scene->Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SceneManager::Update()
|
||||||
|
{
|
||||||
|
curScene->scene->Update();
|
||||||
|
}
|
||||||
|
|
||||||
Scene* SceneManager::GetCurScene()
|
Scene* SceneManager::GetCurScene()
|
||||||
{
|
{
|
||||||
return curScene->scene;
|
return curScene->scene;
|
||||||
|
|||||||
@ -19,6 +19,8 @@ namespace engineapi {
|
|||||||
void DeleteScene(const string& name);
|
void DeleteScene(const string& name);
|
||||||
void DeleteAllScene();
|
void DeleteAllScene();
|
||||||
void ReloadScene();
|
void ReloadScene();
|
||||||
|
void Render();
|
||||||
|
void Update();
|
||||||
Scene* GetCurScene();
|
Scene* GetCurScene();
|
||||||
SceneInfo* GetSceneInfo(const string& name);
|
SceneInfo* GetSceneInfo(const string& name);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
#include "asset_render.h"
|
#include "asset_render.h"
|
||||||
|
|
||||||
namespace engineapi {
|
namespace engineapi {
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
#include "asset_render.h"
|
#include "asset_render.h"
|
||||||
|
|
||||||
namespace engineapi {
|
namespace engineapi {
|
||||||
|
|||||||
37
engine/src/engine/render/pass/renderpass.h
Normal file
37
engine/src/engine/render/pass/renderpass.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "../asset/material.h"
|
||||||
|
#include "../asset/mesh.h"
|
||||||
|
#include "../asset/texture.h"
|
||||||
|
namespace engineapi {
|
||||||
|
enum RenderPassType
|
||||||
|
{
|
||||||
|
ZX_RENDER_PASS_SHADOW_GENERATION,
|
||||||
|
ZX_RENDER_PASS_FORWARD_RENDERING,
|
||||||
|
ZX_RENDER_PASS_RAY_TRACING,
|
||||||
|
ZX_RENDER_PASS_AFTER_EFFECT_RENDERING,
|
||||||
|
ZX_RENDER_PASS_UI_RENDERING,
|
||||||
|
ZX_RENDER_PASS_COUNT
|
||||||
|
};
|
||||||
|
class Camera;
|
||||||
|
class RenderPass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RenderPass() {};
|
||||||
|
~RenderPass() {};
|
||||||
|
|
||||||
|
virtual void Render(Camera* camera) = 0;
|
||||||
|
};
|
||||||
|
class RenderStateSetting
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool depthTest = true;
|
||||||
|
bool depthWrite = true;
|
||||||
|
BlendFactor srcFactor = BlendFactor::SRC_ALPHA;
|
||||||
|
BlendFactor dstFactor = BlendFactor::ONE_MINUS_SRC_ALPHA;
|
||||||
|
Vector4 clearColor = Vector4();
|
||||||
|
float clearDepth = 1.0f;
|
||||||
|
uint32_t clearStencil = 0;
|
||||||
|
bool faceCull = true;
|
||||||
|
FaceCullOption faceCullOption = FaceCullOption::Back;
|
||||||
|
};
|
||||||
|
};
|
||||||
33
engine/src/engine/render/pass/renderpass_forward.cpp
Normal file
33
engine/src/engine/render/pass/renderpass_forward.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "renderpass_forward.h"
|
||||||
|
#include "../renderapi.h"
|
||||||
|
namespace engineapi {
|
||||||
|
RenderPassForwardRendering::RenderPassForwardRendering()
|
||||||
|
{
|
||||||
|
skyBox = nullptr;
|
||||||
|
skyBoxMaterial = nullptr;
|
||||||
|
|
||||||
|
skyBoxRenderState = new RenderStateSetting();
|
||||||
|
skyBoxRenderState->depthTest = false;
|
||||||
|
skyBoxRenderState->depthWrite = false;
|
||||||
|
|
||||||
|
opaqueRenderState = new RenderStateSetting();
|
||||||
|
|
||||||
|
transparentRenderState = new RenderStateSetting();
|
||||||
|
transparentRenderState->depthWrite = false;
|
||||||
|
|
||||||
|
//drawCommandID = RenderAPI::GetSingletonPtr()->AllocateDrawCommand(CommandType::ForwardRendering);
|
||||||
|
}
|
||||||
|
RenderPassForwardRendering::~RenderPassForwardRendering()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void RenderPassForwardRendering::Render(Camera* camera)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void RenderPassForwardRendering::RenderSkyBox(Camera* camera)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
void RenderPassForwardRendering::RenderBatches(const map<uint32_t, vector<MeshRenderer*>>& batchs)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
24
engine/src/engine/render/pass/renderpass_forward.h
Normal file
24
engine/src/engine/render/pass/renderpass_forward.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "renderpass.h"
|
||||||
|
#include "object/component/mesh_render.h"
|
||||||
|
namespace engineapi {
|
||||||
|
class RenderPassForwardRendering : public RenderPass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RenderPassForwardRendering();
|
||||||
|
~RenderPassForwardRendering();
|
||||||
|
|
||||||
|
virtual void Render(Camera* camera);
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint32_t drawCommandID = 0;
|
||||||
|
Mesh* skyBox;
|
||||||
|
Material* skyBoxMaterial;
|
||||||
|
RenderStateSetting* skyBoxRenderState;
|
||||||
|
RenderStateSetting* opaqueRenderState;
|
||||||
|
RenderStateSetting* transparentRenderState;
|
||||||
|
|
||||||
|
void RenderSkyBox(Camera* camera);
|
||||||
|
void RenderBatches(const map<uint32_t, vector<MeshRenderer*>>& batchs);
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -1,13 +1,34 @@
|
|||||||
#include "renderapi.h"
|
#include "renderapi.h"
|
||||||
|
#include "pass/renderpass.h"
|
||||||
|
#include "pass/renderpass_forward.h"
|
||||||
#ifdef VULKAN_API
|
#ifdef VULKAN_API
|
||||||
#include "vulkanapi/vulkanapi.h"
|
#include "vulkanapi/vulkanapi.h"
|
||||||
#endif // VULKAN_API
|
#endif // VULKAN_API
|
||||||
namespace engineapi {
|
namespace engineapi {
|
||||||
|
RenderAPI::RenderAPI()
|
||||||
|
{
|
||||||
|
mAllPasses.resize(ZX_RENDER_PASS_COUNT);
|
||||||
|
|
||||||
void RenderAPI::MakeInstance()
|
//mAllPasses[ZX_RENDER_PASS_SHADOW_GENERATION] = new RenderPassShadowGeneration();
|
||||||
|
mAllPasses[ZX_RENDER_PASS_FORWARD_RENDERING] = new RenderPassForwardRendering();
|
||||||
|
//mAllPasses[ZX_RENDER_PASS_RAY_TRACING] = new RenderPassRayTracing();
|
||||||
|
//mAllPasses[ZX_RENDER_PASS_AFTER_EFFECT_RENDERING] = new RenderPassAfterEffectRendering();
|
||||||
|
//mAllPasses[ZX_RENDER_PASS_UI_RENDERING] = new RenderPassUIRendering();
|
||||||
|
|
||||||
|
SetUpRenderPasses();
|
||||||
|
}
|
||||||
|
void RenderAPI::SetUpRenderPasses()
|
||||||
|
{
|
||||||
|
mCurPasses.clear();
|
||||||
|
//mCurPasses.push_back(mAllPasses[ZX_RENDER_PASS_SHADOW_GENERATION]);
|
||||||
|
mCurPasses.push_back(mAllPasses[ZX_RENDER_PASS_FORWARD_RENDERING]);
|
||||||
|
//mCurPasses.push_back(mAllPasses[ZX_RENDER_PASS_AFTER_EFFECT_RENDERING]);
|
||||||
|
//mCurPasses.push_back(mAllPasses[ZX_RENDER_PASS_UI_RENDERING]);
|
||||||
|
}
|
||||||
|
RenderAPI* RenderAPI::MakeInstance()
|
||||||
{
|
{
|
||||||
#ifdef VULKAN_API
|
#ifdef VULKAN_API
|
||||||
new RenderVulkanAPI();
|
return new RenderVulkanAPI();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4,14 +4,23 @@
|
|||||||
namespace engineapi
|
namespace engineapi
|
||||||
{
|
{
|
||||||
class Mesh;
|
class Mesh;
|
||||||
|
class Camera;
|
||||||
|
class RenderPass;
|
||||||
class RenderAPI : public Singleton<RenderAPI>
|
class RenderAPI : public Singleton<RenderAPI>
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
vector<RenderPass*> mCurPasses;
|
||||||
|
vector<RenderPass*> mAllPasses;
|
||||||
|
public:
|
||||||
|
RenderAPI();
|
||||||
|
virtual void SetUpRenderPasses();
|
||||||
public:
|
public:
|
||||||
virtual void BeginFrame() = 0;
|
virtual void BeginFrame() = 0;
|
||||||
|
virtual void Render(Camera& camera) = 0;
|
||||||
virtual void EndFrame() = 0;
|
virtual void EndFrame() = 0;
|
||||||
virtual void SetStaticMesh(Mesh* mesh) = 0;
|
virtual void SetStaticMesh(Mesh* mesh) = 0;
|
||||||
public:
|
public:
|
||||||
static void MakeInstance();
|
static RenderAPI* MakeInstance();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
template<>
|
template<>
|
||||||
|
|||||||
@ -4,10 +4,10 @@
|
|||||||
#endif // VULKAN_API
|
#endif // VULKAN_API
|
||||||
namespace engineapi {
|
namespace engineapi {
|
||||||
Window::WindowClass Window::WindowClass::wndClass;
|
Window::WindowClass Window::WindowClass::wndClass;
|
||||||
void Window::MakeInstance(int frames, uint32_t width, uint32_t height, const char* title)
|
Window* Window::MakeInstance(int frames, uint32_t width, uint32_t height, const char* title)
|
||||||
{
|
{
|
||||||
#ifdef VULKAN_API
|
#ifdef VULKAN_API
|
||||||
new vulkanapi::Window(frames, width, height, title);
|
return new vulkanapi::Window(frames, width, height, title);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
Window::WindowClass::WindowClass() noexcept
|
Window::WindowClass::WindowClass() noexcept
|
||||||
|
|||||||
@ -35,7 +35,7 @@ namespace engineapi {
|
|||||||
return mPtr;
|
return mPtr;
|
||||||
}
|
}
|
||||||
static bool ProcessMessages(int& code);
|
static bool ProcessMessages(int& code);
|
||||||
static void MakeInstance(int frames, uint32_t width, uint32_t height, const char* title);
|
static Window* MakeInstance(int frames, uint32_t width, uint32_t height, const char* title);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
template<>
|
template<>
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../vulkan.h"
|
|
||||||
#include "gbuffer.h"
|
#include "gbuffer.h"
|
||||||
namespace vulkanapi {
|
namespace vulkanapi {
|
||||||
class RenderPass;
|
class RenderPass;
|
||||||
class Device;
|
|
||||||
//class MaterialCache;
|
//class MaterialCache;
|
||||||
class ForwardPass {
|
class ForwardPass {
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
#include "wrapper/commandbuffer.h"
|
#include "wrapper/commandbuffer.h"
|
||||||
#include "thread/worker.h"
|
#include "thread/worker.h"
|
||||||
#include "render/asset/mesh.h"
|
#include "render/asset/mesh.h"
|
||||||
|
#include "object/camera/camera.h"
|
||||||
namespace engineapi {
|
namespace engineapi {
|
||||||
RenderVulkanAPI::RenderVulkanAPI()
|
RenderVulkanAPI::RenderVulkanAPI()
|
||||||
:backend("vulkan")
|
:backend("vulkan")
|
||||||
@ -13,6 +14,10 @@ namespace engineapi {
|
|||||||
void RenderVulkanAPI::BeginFrame()
|
void RenderVulkanAPI::BeginFrame()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
void RenderVulkanAPI::Render(Camera& camera)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
void RenderVulkanAPI::EndFrame()
|
void RenderVulkanAPI::EndFrame()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -14,6 +14,7 @@ namespace engineapi
|
|||||||
RenderVulkanAPI();
|
RenderVulkanAPI();
|
||||||
|
|
||||||
virtual void BeginFrame()override;
|
virtual void BeginFrame()override;
|
||||||
|
virtual void Render(Camera& camera)override;
|
||||||
virtual void EndFrame()override;
|
virtual void EndFrame()override;
|
||||||
virtual void SetStaticMesh(Mesh* mesh)override;
|
virtual void SetStaticMesh(Mesh* mesh)override;
|
||||||
public:
|
public:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user