2025-05-28 02:27:59 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include<hgl/graph/RenderTask.h>
|
2025-06-04 01:09:05 +08:00
|
|
|
#include<hgl/graph/VKRenderTarget.h>
|
2025-05-28 02:27:59 +08:00
|
|
|
#include<hgl/type/Map.h>
|
|
|
|
|
|
|
|
namespace hgl::graph
|
|
|
|
{
|
2025-06-04 00:04:46 +08:00
|
|
|
class Scene;
|
2025-05-28 02:27:59 +08:00
|
|
|
|
|
|
|
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
|
|
|
|
|
2025-06-06 23:39:57 +08:00
|
|
|
using UBOCameraInfo=DeviceBufferMap<CameraInfo>;
|
|
|
|
|
2025-05-28 02:27:59 +08:00
|
|
|
/**
|
|
|
|
* 渲染器
|
|
|
|
*/
|
|
|
|
class Renderer
|
|
|
|
{
|
2025-05-30 00:32:45 +08:00
|
|
|
IRenderTarget *render_target;
|
2025-06-04 01:09:05 +08:00
|
|
|
Scene *scene;
|
2025-05-28 02:27:59 +08:00
|
|
|
|
2025-05-30 00:32:45 +08:00
|
|
|
Camera *camera;
|
|
|
|
|
2025-06-06 23:39:57 +08:00
|
|
|
UBOCameraInfo *ubo_camera_info;
|
|
|
|
|
2025-05-30 00:32:45 +08:00
|
|
|
//RenderTaskNameMap static_render_task_list; ///<静态渲染任务列表
|
|
|
|
//RenderTaskNameMap dynamic_render_task_list; ///<动态渲染任务列表
|
|
|
|
|
|
|
|
RenderTask *render_task; ///<当前渲染任务
|
|
|
|
|
2025-06-04 01:09:05 +08:00
|
|
|
Color4f clear_color; ///<清屏颜色
|
2025-05-30 00:32:45 +08:00
|
|
|
|
2025-06-04 01:09:05 +08:00
|
|
|
bool build_frame=false;
|
2025-05-28 02:27:59 +08:00
|
|
|
|
|
|
|
public:
|
|
|
|
|
2025-06-04 01:09:05 +08:00
|
|
|
RenderPass *GetRenderPass (){return render_target->GetRenderPass();} ///<取得当前渲染器RenderPass
|
|
|
|
|
|
|
|
const VkExtent2D &GetExtent ()const{return render_target->GetExtent();} ///<取得当前渲染器画面尺寸
|
|
|
|
|
|
|
|
Scene * GetScene ()const{return scene;} ///<获取场景世界
|
|
|
|
Camera * GetCurCamera ()const{return camera;} ///<获取当前相机
|
2025-05-30 00:32:45 +08:00
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
Renderer(IRenderTarget *);
|
|
|
|
virtual ~Renderer();
|
|
|
|
|
2025-06-06 23:39:57 +08:00
|
|
|
bool SetRenderTarget(IRenderTarget *);
|
2025-06-04 01:09:05 +08:00
|
|
|
void SetCurScene(Scene *);
|
2025-05-30 00:32:45 +08:00
|
|
|
void SetCurCamera(Camera *);
|
2025-05-28 02:27:59 +08:00
|
|
|
|
2025-06-04 01:09:05 +08:00
|
|
|
void SetClearColor(const Color4f &c){clear_color=c;}
|
|
|
|
|
2025-06-06 22:20:18 +08:00
|
|
|
bool RenderFrame(); ///<重新重成这一帧的CommandList
|
2025-06-04 01:09:05 +08:00
|
|
|
bool Submit(); ///<提交CommandList到GPU
|
2025-05-28 02:27:59 +08:00
|
|
|
};//class Renderer
|
|
|
|
}//namespace hgl::graph
|