增加Camera数据在渲染器中的定义

This commit is contained in:
hyzboy 2025-06-06 23:39:57 +08:00
parent 55204779ba
commit eeb4492023
9 changed files with 55 additions and 18 deletions

View File

@ -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:

View File

@ -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:

View File

@ -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 *);

View File

@ -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 *);

View File

@ -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,

View File

@ -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

View File

@ -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)

View File

@ -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)
{ {

View File

@ -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;