支持新的CameraControl,并实现自动绑定,现BillboardTest已可正常渲染。只是鼠标键盘输入尚未接入

This commit is contained in:
2025-06-07 05:49:07 +08:00
parent c4720e8cdb
commit 0be9cb3f74
17 changed files with 113 additions and 60 deletions

View File

@@ -6,6 +6,7 @@
#include<hgl/graph/module/SwapchainModule.h>
#include<hgl/graph/module/GraphModuleManager.h>
#include<hgl/graph/RenderList.h>
#include<hgl/graph/CameraControl.h>
VK_NAMESPACE_BEGIN
@@ -52,9 +53,10 @@ protected:
protected: //RenderContext,未来合并成一个RenderContext结构
Scene * default_scene =nullptr;
Camera * default_camera =nullptr;
Renderer * default_renderer=nullptr;
Scene * default_scene =nullptr;
Camera * default_camera =nullptr;
CameraControl * default_camera_control =nullptr;
Renderer * default_renderer =nullptr;
void CreateDefaultRenderer();
@@ -83,6 +85,7 @@ public:
Scene * GetDefaultScene (){return default_scene;}
Camera * GetDefaultCamera (){return default_camera;}
CameraControl * GetDefaultCameraControl (){return default_camera_control;}
Renderer * GetDefaultRenderer (){return default_renderer;}
public:

View File

@@ -29,12 +29,16 @@ namespace hgl
virtual bool ExpendNode(SceneNode *);
public:
const CameraInfo *GetCameraInfo()const{return camera_info;}
public:
RenderList(VulkanDevice *);
virtual ~RenderList()=default;
virtual void SetCamera(CameraInfo *ci){camera_info=ci;} ///<设置相机信息
virtual void SetCameraInfo(CameraInfo *ci){camera_info=ci;} ///<设置相机信息
virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表
bool IsEmpty()const{return !renderable_count;} ///<是否是空的

View File

@@ -16,7 +16,7 @@ namespace hgl::graph
IRenderTarget * render_target;
RenderList * render_list;
Camera * camera;
CameraInfo * camera_info;
public:
@@ -24,16 +24,16 @@ namespace hgl::graph
IRenderTarget * GetRenderTarget ()const{return render_target;}
RenderList * GetRenderList ()const{return render_list;}
Camera * GetCamera ()const{return camera;}
CameraInfo * GetCameraInfo ()const{return camera_info;}
public:
RenderTask(const RenderTaskName &tn,IRenderTarget *rt=nullptr,Camera *c=nullptr);
RenderTask(const RenderTaskName &tn,IRenderTarget *rt=nullptr,CameraInfo *ci=nullptr);
virtual ~RenderTask();
bool SetRenderTarget(IRenderTarget *rt);
void SetCamera(Camera *c){camera=c;}
bool SetRenderTarget(IRenderTarget *);
void SetCameraInfo(CameraInfo *);
bool RebuildRenderList(SceneNode *);

View File

@@ -2,16 +2,16 @@
#include<hgl/graph/RenderTask.h>
#include<hgl/graph/VKRenderTarget.h>
#include<hgl/graph/CameraControl.h>
#include<hgl/type/Map.h>
namespace hgl::graph
{
class Scene;
class CameraControl;
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
using UBOCameraInfo=DeviceBufferMap<CameraInfo>;
/**
* 渲染器
*/
@@ -20,9 +20,7 @@ namespace hgl::graph
IRenderTarget *render_target;
Scene *scene;
Camera *camera;
UBOCameraInfo *ubo_camera_info;
CameraControl *camera_control;
//RenderTaskNameMap static_render_task_list; ///<静态渲染任务列表
//RenderTaskNameMap dynamic_render_task_list; ///<动态渲染任务列表
@@ -40,7 +38,7 @@ namespace hgl::graph
const VkExtent2D &GetExtent ()const{return render_target->GetExtent();} ///<取得当前渲染器画面尺寸
Scene * GetScene ()const{return scene;} ///<获取场景世界
Camera * GetCurCamera ()const{return camera;} ///<获取当前相机
Camera * GetCamera ()const{return camera_control->GetCamera();} ///<获取当前相机
public:
@@ -48,8 +46,8 @@ namespace hgl::graph
virtual ~Renderer();
bool SetRenderTarget(IRenderTarget *);
void SetCurScene(Scene *);
void SetCurCamera(Camera *);
void SetScene(Scene *);
void SetCameraControl(CameraControl *);
void SetClearColor(const Color4f &c){clear_color=c;}

View File

@@ -75,7 +75,7 @@ public:
delete dev_buf;
}
operator DeviceBuffer *(){return dev_buf;}
DeviceBuffer *GetDeviceBuffer(){return dev_buf;}
T *data(){return &data_map;}
@@ -84,6 +84,6 @@ public:
if(dev_buf)
dev_buf->Write(&data_map,sizeof(T));
}
};
};//template<typename T> class DeviceBufferMap
VK_NAMESPACE_END

View File

@@ -43,6 +43,12 @@ public:
return ubo_map.Add(name,buf);
}
template<typename T>
bool AddUBO(const AnsiString &name,DeviceBufferMap<T> *dbm)
{
return AddUBO(name,dbm->GetDeviceBuffer());
}
DeviceBuffer *GetUBO(const AnsiString &name)
{
if(name.IsEmpty())return(nullptr);
@@ -65,6 +71,12 @@ public:
return ssbo_map.Add(name,buf);
}
template<typename T>
bool AddSSBO(const AnsiString &name,DeviceBufferMap<T> *dbm)
{
return AddSSBO(name,dbm->GetDeviceBuffer());
}
DeviceBuffer *GetSSBO(const AnsiString &name)
{
if(name.IsEmpty())return(nullptr);

View File

@@ -73,7 +73,7 @@ public: // Command Buffer
public:
virtual const ViewportInfo *GetViewportInfo ()const
virtual ViewportInfo * GetViewportInfo ()
{
return ubo_vp_info->data();
}