增加Camera数据在渲染器中的定义
This commit is contained in:
parent
55204779ba
commit
eeb4492023
@ -47,8 +47,8 @@ namespace hgl
|
|||||||
|
|
||||||
graph::Scene * GetScene (){return scene;}
|
graph::Scene * GetScene (){return scene;}
|
||||||
graph::SceneNode * GetSceneRoot (){return scene->GetRootNode();}
|
graph::SceneNode * GetSceneRoot (){return scene->GetRootNode();}
|
||||||
|
|
||||||
graph::Renderer * GetRenderer (){return renderer;}
|
graph::Renderer * GetRenderer (){return renderer;}
|
||||||
|
graph::Camera * GetCamera (){return renderer->GetCurCamera();}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ protected:
|
|||||||
protected:
|
protected:
|
||||||
|
|
||||||
Scene * default_scene =nullptr;
|
Scene * default_scene =nullptr;
|
||||||
|
Camera * default_camera =nullptr;
|
||||||
Renderer * default_renderer=nullptr;
|
Renderer * default_renderer=nullptr;
|
||||||
|
|
||||||
void CreateDefaultRenderer();
|
void CreateDefaultRenderer();
|
||||||
@ -81,6 +82,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
Scene * GetDefaultScene (){return default_scene;}
|
Scene * GetDefaultScene (){return default_scene;}
|
||||||
|
Camera * GetDefaultCamera (){return default_camera;}
|
||||||
Renderer * GetDefaultRenderer (){return default_renderer;}
|
Renderer * GetDefaultRenderer (){return default_renderer;}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -5,12 +5,6 @@
|
|||||||
|
|
||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
class SceneNode;
|
|
||||||
class Scene;
|
|
||||||
class Camera;
|
|
||||||
class IRenderTarget;
|
|
||||||
class RenderList;
|
|
||||||
|
|
||||||
HGL_DEFINE_IDNAME(RenderTaskName,char)
|
HGL_DEFINE_IDNAME(RenderTaskName,char)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -38,8 +32,8 @@ namespace hgl::graph
|
|||||||
|
|
||||||
virtual ~RenderTask();
|
virtual ~RenderTask();
|
||||||
|
|
||||||
bool Set(IRenderTarget *rt);
|
bool SetRenderTarget(IRenderTarget *rt);
|
||||||
void Set(Camera *c){camera=c;}
|
void SetCamera(Camera *c){camera=c;}
|
||||||
|
|
||||||
bool RebuildRenderList(SceneNode *);
|
bool RebuildRenderList(SceneNode *);
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@ namespace hgl::graph
|
|||||||
|
|
||||||
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
|
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
|
||||||
|
|
||||||
|
using UBOCameraInfo=DeviceBufferMap<CameraInfo>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 渲染器
|
* 渲染器
|
||||||
*/
|
*/
|
||||||
@ -20,6 +22,8 @@ namespace hgl::graph
|
|||||||
|
|
||||||
Camera *camera;
|
Camera *camera;
|
||||||
|
|
||||||
|
UBOCameraInfo *ubo_camera_info;
|
||||||
|
|
||||||
//RenderTaskNameMap static_render_task_list; ///<静态渲染任务列表
|
//RenderTaskNameMap static_render_task_list; ///<静态渲染任务列表
|
||||||
//RenderTaskNameMap dynamic_render_task_list; ///<动态渲染任务列表
|
//RenderTaskNameMap dynamic_render_task_list; ///<动态渲染任务列表
|
||||||
|
|
||||||
@ -43,7 +47,7 @@ namespace hgl::graph
|
|||||||
Renderer(IRenderTarget *);
|
Renderer(IRenderTarget *);
|
||||||
virtual ~Renderer();
|
virtual ~Renderer();
|
||||||
|
|
||||||
void SetRenderTarget(IRenderTarget *);
|
bool SetRenderTarget(IRenderTarget *);
|
||||||
void SetCurScene(Scene *);
|
void SetCurScene(Scene *);
|
||||||
void SetCurCamera(Camera *);
|
void SetCurCamera(Camera *);
|
||||||
|
|
||||||
|
@ -136,6 +136,15 @@ class RenderResource;
|
|||||||
|
|
||||||
class StaticMesh;
|
class StaticMesh;
|
||||||
|
|
||||||
|
class SceneNode;
|
||||||
|
class Scene;
|
||||||
|
class RenderList;
|
||||||
|
|
||||||
|
struct CameraInfo;
|
||||||
|
struct Camera;
|
||||||
|
|
||||||
|
class Renderer;
|
||||||
|
|
||||||
enum class SharingMode
|
enum class SharingMode
|
||||||
{
|
{
|
||||||
Exclusive = 0,
|
Exclusive = 0,
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include<hgl/graph/VKFramebuffer.h>
|
#include<hgl/graph/VKFramebuffer.h>
|
||||||
#include<hgl/graph/VKSwapchain.h>
|
#include<hgl/graph/VKSwapchain.h>
|
||||||
#include<hgl/graph/VKQueue.h>
|
#include<hgl/graph/VKQueue.h>
|
||||||
|
#include<hgl/graph/VKBuffer.h>
|
||||||
#include<hgl/graph/VKPipeline.h>
|
#include<hgl/graph/VKPipeline.h>
|
||||||
#include<hgl/graph/VKCommandBuffer.h>
|
#include<hgl/graph/VKCommandBuffer.h>
|
||||||
#include<hgl/graph/VKDescriptorBindingManage.h>
|
#include<hgl/graph/VKDescriptorBindingManage.h>
|
||||||
@ -72,10 +73,9 @@ public: // Command Buffer
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual void Bind (Material *mtl)
|
virtual const ViewportInfo *GetViewportInfo ()const
|
||||||
{
|
{
|
||||||
if(mtl)
|
return ubo_vp_info->data();
|
||||||
desc_binding.Bind(mtl);
|
|
||||||
}
|
}
|
||||||
};//class IRenderTarget
|
};//class IRenderTarget
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include<hgl/graph/VKRenderResource.h>
|
#include<hgl/graph/VKRenderResource.h>
|
||||||
#include<hgl/graph/VKCommandBuffer.h>
|
#include<hgl/graph/VKCommandBuffer.h>
|
||||||
#include<hgl/graph/Scene.h>
|
#include<hgl/graph/Scene.h>
|
||||||
|
#include<hgl/graph/Camera.h>
|
||||||
#include<hgl/graph/Renderer.h>
|
#include<hgl/graph/Renderer.h>
|
||||||
#include<hgl/log/Logger.h>
|
#include<hgl/log/Logger.h>
|
||||||
#include<hgl/Time.h>
|
#include<hgl/Time.h>
|
||||||
@ -51,6 +52,7 @@ RenderFramework::RenderFramework(const OSString &an)
|
|||||||
RenderFramework::~RenderFramework()
|
RenderFramework::~RenderFramework()
|
||||||
{
|
{
|
||||||
SAFE_CLEAR(default_renderer)
|
SAFE_CLEAR(default_renderer)
|
||||||
|
SAFE_CLEAR(default_camera)
|
||||||
SAFE_CLEAR(default_scene)
|
SAFE_CLEAR(default_scene)
|
||||||
SAFE_CLEAR(render_resource)
|
SAFE_CLEAR(render_resource)
|
||||||
SAFE_CLEAR(module_manager)
|
SAFE_CLEAR(module_manager)
|
||||||
@ -124,6 +126,8 @@ bool RenderFramework::Init(uint w,uint h)
|
|||||||
|
|
||||||
default_scene=new Scene;
|
default_scene=new Scene;
|
||||||
|
|
||||||
|
default_camera=new Camera();
|
||||||
|
|
||||||
CreateDefaultRenderer();
|
CreateDefaultRenderer();
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
@ -135,6 +139,7 @@ void RenderFramework::CreateDefaultRenderer()
|
|||||||
|
|
||||||
default_renderer=new Renderer(GetSwapchainRenderTarget());
|
default_renderer=new Renderer(GetSwapchainRenderTarget());
|
||||||
default_renderer->SetCurScene(default_scene);
|
default_renderer->SetCurScene(default_scene);
|
||||||
|
default_renderer->SetCurCamera(default_camera);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderFramework::OnResize(uint w,uint h)
|
void RenderFramework::OnResize(uint w,uint h)
|
||||||
|
@ -13,7 +13,7 @@ namespace hgl::graph
|
|||||||
render_target=nullptr;
|
render_target=nullptr;
|
||||||
render_list=nullptr;
|
render_list=nullptr;
|
||||||
|
|
||||||
Set(rt);
|
SetRenderTarget(rt);
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderTask::~RenderTask()
|
RenderTask::~RenderTask()
|
||||||
@ -21,7 +21,7 @@ namespace hgl::graph
|
|||||||
SAFE_CLEAR(render_list)
|
SAFE_CLEAR(render_list)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenderTask::Set(IRenderTarget *rt)
|
bool RenderTask::SetRenderTarget(IRenderTarget *rt)
|
||||||
{
|
{
|
||||||
if(render_target)
|
if(render_target)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include<hgl/graph/Renderer.h>
|
#include<hgl/graph/Renderer.h>
|
||||||
#include<hgl/graph/Scene.h>
|
#include<hgl/graph/Scene.h>
|
||||||
#include<hgl/graph/VKCommandBuffer.h>
|
#include<hgl/graph/VKCommandBuffer.h>
|
||||||
|
#include<hgl/graph/VKDevice.h>
|
||||||
|
#include<hgl/graph/Camera.h>
|
||||||
|
|
||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
@ -9,6 +11,7 @@ namespace hgl::graph
|
|||||||
render_target=rt;
|
render_target=rt;
|
||||||
scene=nullptr;
|
scene=nullptr;
|
||||||
camera=nullptr;
|
camera=nullptr;
|
||||||
|
ubo_camera_info=rt->GetDevice()->CreateUBO<UBOCameraInfo>();
|
||||||
render_task=new RenderTask("DefaultRenderTask",rt);
|
render_task=new RenderTask("DefaultRenderTask",rt);
|
||||||
|
|
||||||
clear_color.Set(0,0,0,1);
|
clear_color.Set(0,0,0,1);
|
||||||
@ -16,17 +19,30 @@ namespace hgl::graph
|
|||||||
|
|
||||||
Renderer::~Renderer()
|
Renderer::~Renderer()
|
||||||
{
|
{
|
||||||
|
delete ubo_camera_info;
|
||||||
delete render_task;
|
delete render_task;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::SetRenderTarget(IRenderTarget *rt)
|
bool Renderer::SetRenderTarget(IRenderTarget *rt)
|
||||||
{
|
{
|
||||||
if(render_target==rt)
|
if(render_target==rt)
|
||||||
return;
|
return(true);
|
||||||
|
|
||||||
|
if(render_target)
|
||||||
|
{
|
||||||
|
if(render_target->GetDevice()!=rt->GetDevice())
|
||||||
|
{
|
||||||
|
//换Device是不允许的,当然这一般也不可能
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render_target=rt;
|
render_target=rt;
|
||||||
|
|
||||||
render_task->Set(rt);
|
render_task->SetRenderTarget(rt);
|
||||||
|
render_task->SetCamera(camera);
|
||||||
|
|
||||||
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::SetCurScene(Scene *sw)
|
void Renderer::SetCurScene(Scene *sw)
|
||||||
@ -69,6 +85,8 @@ namespace hgl::graph
|
|||||||
|
|
||||||
// camera->Join(this);
|
// camera->Join(this);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
render_task->SetCamera(camera); //它要camera只是为了CPU端算远近
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Renderer::RenderFrame()
|
bool Renderer::RenderFrame()
|
||||||
@ -83,6 +101,11 @@ namespace hgl::graph
|
|||||||
|
|
||||||
root->RefreshMatrix();
|
root->RefreshMatrix();
|
||||||
|
|
||||||
|
if(camera)
|
||||||
|
{
|
||||||
|
RefreshCameraInfo(ubo_camera_info->data(),render_target->GetViewportInfo(),camera);
|
||||||
|
}
|
||||||
|
|
||||||
render_task->RebuildRenderList(root);
|
render_task->RebuildRenderList(root);
|
||||||
|
|
||||||
bool result=false;
|
bool result=false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user