Compare commits
2 Commits
5e541e2f46
...
eeb4492023
Author | SHA1 | Date | |
---|---|---|---|
eeb4492023 | |||
55204779ba |
@ -47,8 +47,8 @@ namespace hgl
|
||||
|
||||
graph::Scene * GetScene (){return scene;}
|
||||
graph::SceneNode * GetSceneRoot (){return scene->GetRootNode();}
|
||||
|
||||
graph::Renderer * GetRenderer (){return renderer;}
|
||||
graph::Camera * GetCamera (){return renderer->GetCurCamera();}
|
||||
|
||||
public:
|
||||
|
||||
|
@ -53,6 +53,7 @@ protected:
|
||||
protected:
|
||||
|
||||
Scene * default_scene =nullptr;
|
||||
Camera * default_camera =nullptr;
|
||||
Renderer * default_renderer=nullptr;
|
||||
|
||||
void CreateDefaultRenderer();
|
||||
@ -81,6 +82,7 @@ public:
|
||||
public:
|
||||
|
||||
Scene * GetDefaultScene (){return default_scene;}
|
||||
Camera * GetDefaultCamera (){return default_camera;}
|
||||
Renderer * GetDefaultRenderer (){return default_renderer;}
|
||||
|
||||
public:
|
||||
|
@ -5,12 +5,6 @@
|
||||
|
||||
namespace hgl::graph
|
||||
{
|
||||
class SceneNode;
|
||||
class Scene;
|
||||
class Camera;
|
||||
class IRenderTarget;
|
||||
class RenderList;
|
||||
|
||||
HGL_DEFINE_IDNAME(RenderTaskName,char)
|
||||
|
||||
/**
|
||||
@ -38,8 +32,8 @@ namespace hgl::graph
|
||||
|
||||
virtual ~RenderTask();
|
||||
|
||||
bool Set(IRenderTarget *rt);
|
||||
void Set(Camera *c){camera=c;}
|
||||
bool SetRenderTarget(IRenderTarget *rt);
|
||||
void SetCamera(Camera *c){camera=c;}
|
||||
|
||||
bool RebuildRenderList(SceneNode *);
|
||||
|
||||
|
@ -10,6 +10,8 @@ namespace hgl::graph
|
||||
|
||||
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
|
||||
|
||||
using UBOCameraInfo=DeviceBufferMap<CameraInfo>;
|
||||
|
||||
/**
|
||||
* 渲染器
|
||||
*/
|
||||
@ -20,6 +22,8 @@ namespace hgl::graph
|
||||
|
||||
Camera *camera;
|
||||
|
||||
UBOCameraInfo *ubo_camera_info;
|
||||
|
||||
//RenderTaskNameMap static_render_task_list; ///<静态渲染任务列表
|
||||
//RenderTaskNameMap dynamic_render_task_list; ///<动态渲染任务列表
|
||||
|
||||
@ -43,7 +47,7 @@ namespace hgl::graph
|
||||
Renderer(IRenderTarget *);
|
||||
virtual ~Renderer();
|
||||
|
||||
void SetRenderTarget(IRenderTarget *);
|
||||
bool SetRenderTarget(IRenderTarget *);
|
||||
void SetCurScene(Scene *);
|
||||
void SetCurCamera(Camera *);
|
||||
|
||||
|
@ -136,6 +136,15 @@ class RenderResource;
|
||||
|
||||
class StaticMesh;
|
||||
|
||||
class SceneNode;
|
||||
class Scene;
|
||||
class RenderList;
|
||||
|
||||
struct CameraInfo;
|
||||
struct Camera;
|
||||
|
||||
class Renderer;
|
||||
|
||||
enum class SharingMode
|
||||
{
|
||||
Exclusive = 0,
|
||||
|
@ -50,6 +50,8 @@ public:
|
||||
};//class VulkanCmdBuffer
|
||||
|
||||
class DescriptorBinding;
|
||||
using DescriptorBindingPtr=DescriptorBinding *;
|
||||
using DescriptorBindingArray=DescriptorBindingPtr[size_t(DescriptorSetType::RANGE_SIZE)];
|
||||
|
||||
class RenderCmdBuffer:public VulkanCmdBuffer
|
||||
{
|
||||
@ -61,7 +63,7 @@ class RenderCmdBuffer:public VulkanCmdBuffer
|
||||
RenderPassBeginInfo rp_begin;
|
||||
VkPipelineLayout pipeline_layout;
|
||||
|
||||
DescriptorBinding *desc_binding=nullptr;
|
||||
DescriptorBindingArray desc_binding{};
|
||||
|
||||
private:
|
||||
|
||||
@ -72,11 +74,11 @@ public:
|
||||
RenderCmdBuffer(const VulkanDevAttr *attr,VkCommandBuffer cb);
|
||||
~RenderCmdBuffer();
|
||||
|
||||
void SetDescriptorBinding(DescriptorBinding *db) { desc_binding=db; }
|
||||
bool SetDescriptorBinding(DescriptorBinding *);
|
||||
|
||||
bool End() override
|
||||
{
|
||||
desc_binding=nullptr;
|
||||
hgl_zero(desc_binding);
|
||||
|
||||
return VulkanCmdBuffer::End();
|
||||
}
|
||||
|
@ -24,6 +24,10 @@ class DescriptorBinding
|
||||
Map<AnsiString,DeviceBuffer *> ssbo_map;
|
||||
Map<AnsiString,Texture *> texture_map;
|
||||
|
||||
public:
|
||||
|
||||
const DescriptorSetType GetType()const{return set_type;}
|
||||
|
||||
public:
|
||||
|
||||
DescriptorBinding(const DescriptorSetType &dst)
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include<hgl/graph/VKFramebuffer.h>
|
||||
#include<hgl/graph/VKSwapchain.h>
|
||||
#include<hgl/graph/VKQueue.h>
|
||||
#include<hgl/graph/VKBuffer.h>
|
||||
#include<hgl/graph/VKPipeline.h>
|
||||
#include<hgl/graph/VKCommandBuffer.h>
|
||||
#include<hgl/graph/VKDescriptorBindingManage.h>
|
||||
@ -72,10 +73,9 @@ public: // Command Buffer
|
||||
|
||||
public:
|
||||
|
||||
virtual void Bind (Material *mtl)
|
||||
virtual const ViewportInfo *GetViewportInfo ()const
|
||||
{
|
||||
if(mtl)
|
||||
desc_binding.Bind(mtl);
|
||||
return ubo_vp_info->data();
|
||||
}
|
||||
};//class IRenderTarget
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include<hgl/graph/VKRenderResource.h>
|
||||
#include<hgl/graph/VKCommandBuffer.h>
|
||||
#include<hgl/graph/Scene.h>
|
||||
#include<hgl/graph/Camera.h>
|
||||
#include<hgl/graph/Renderer.h>
|
||||
#include<hgl/log/Logger.h>
|
||||
#include<hgl/Time.h>
|
||||
@ -51,6 +52,7 @@ RenderFramework::RenderFramework(const OSString &an)
|
||||
RenderFramework::~RenderFramework()
|
||||
{
|
||||
SAFE_CLEAR(default_renderer)
|
||||
SAFE_CLEAR(default_camera)
|
||||
SAFE_CLEAR(default_scene)
|
||||
SAFE_CLEAR(render_resource)
|
||||
SAFE_CLEAR(module_manager)
|
||||
@ -124,6 +126,8 @@ bool RenderFramework::Init(uint w,uint h)
|
||||
|
||||
default_scene=new Scene;
|
||||
|
||||
default_camera=new Camera();
|
||||
|
||||
CreateDefaultRenderer();
|
||||
|
||||
return(true);
|
||||
@ -135,6 +139,7 @@ void RenderFramework::CreateDefaultRenderer()
|
||||
|
||||
default_renderer=new Renderer(GetSwapchainRenderTarget());
|
||||
default_renderer->SetCurScene(default_scene);
|
||||
default_renderer->SetCurCamera(default_camera);
|
||||
}
|
||||
|
||||
void RenderFramework::OnResize(uint w,uint h)
|
||||
|
@ -25,6 +25,18 @@ RenderCmdBuffer::~RenderCmdBuffer()
|
||||
hgl_free(clear_values);
|
||||
}
|
||||
|
||||
bool RenderCmdBuffer::SetDescriptorBinding(DescriptorBinding *db)
|
||||
{
|
||||
if(!db)
|
||||
return(false);
|
||||
|
||||
const int index=int(db->GetType())-int(DescriptorSetType::BEGIN_RANGE);
|
||||
|
||||
desc_binding[index]=db;
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
void RenderCmdBuffer::SetClear()
|
||||
{
|
||||
if(cv_count>0)
|
||||
@ -91,8 +103,11 @@ bool RenderCmdBuffer::BindDescriptorSets(Material *mtl)
|
||||
{
|
||||
if(!mtl)return(false);
|
||||
|
||||
if(desc_binding)
|
||||
desc_binding->Bind(mtl);
|
||||
ENUM_CLASS_FOR(DescriptorSetType,int,i)
|
||||
{
|
||||
if(desc_binding[i])
|
||||
desc_binding[i]->Bind(mtl);
|
||||
}
|
||||
|
||||
{
|
||||
uint32_t count=0;
|
||||
|
@ -13,7 +13,7 @@ namespace hgl::graph
|
||||
render_target=nullptr;
|
||||
render_list=nullptr;
|
||||
|
||||
Set(rt);
|
||||
SetRenderTarget(rt);
|
||||
}
|
||||
|
||||
RenderTask::~RenderTask()
|
||||
@ -21,7 +21,7 @@ namespace hgl::graph
|
||||
SAFE_CLEAR(render_list)
|
||||
}
|
||||
|
||||
bool RenderTask::Set(IRenderTarget *rt)
|
||||
bool RenderTask::SetRenderTarget(IRenderTarget *rt)
|
||||
{
|
||||
if(render_target)
|
||||
{
|
||||
|
@ -1,6 +1,8 @@
|
||||
#include<hgl/graph/Renderer.h>
|
||||
#include<hgl/graph/Scene.h>
|
||||
#include<hgl/graph/VKCommandBuffer.h>
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
#include<hgl/graph/Camera.h>
|
||||
|
||||
namespace hgl::graph
|
||||
{
|
||||
@ -9,6 +11,7 @@ namespace hgl::graph
|
||||
render_target=rt;
|
||||
scene=nullptr;
|
||||
camera=nullptr;
|
||||
ubo_camera_info=rt->GetDevice()->CreateUBO<UBOCameraInfo>();
|
||||
render_task=new RenderTask("DefaultRenderTask",rt);
|
||||
|
||||
clear_color.Set(0,0,0,1);
|
||||
@ -16,17 +19,30 @@ namespace hgl::graph
|
||||
|
||||
Renderer::~Renderer()
|
||||
{
|
||||
delete ubo_camera_info;
|
||||
delete render_task;
|
||||
}
|
||||
|
||||
void Renderer::SetRenderTarget(IRenderTarget *rt)
|
||||
bool Renderer::SetRenderTarget(IRenderTarget *rt)
|
||||
{
|
||||
if(render_target==rt)
|
||||
return;
|
||||
return(true);
|
||||
|
||||
if(render_target)
|
||||
{
|
||||
if(render_target->GetDevice()!=rt->GetDevice())
|
||||
{
|
||||
//换Device是不允许的,当然这一般也不可能
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
|
||||
render_target=rt;
|
||||
|
||||
render_task->Set(rt);
|
||||
render_task->SetRenderTarget(rt);
|
||||
render_task->SetCamera(camera);
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
void Renderer::SetCurScene(Scene *sw)
|
||||
@ -69,6 +85,8 @@ namespace hgl::graph
|
||||
|
||||
// camera->Join(this);
|
||||
//}
|
||||
|
||||
render_task->SetCamera(camera); //它要camera只是为了CPU端算远近
|
||||
}
|
||||
|
||||
bool Renderer::RenderFrame()
|
||||
@ -83,6 +101,11 @@ namespace hgl::graph
|
||||
|
||||
root->RefreshMatrix();
|
||||
|
||||
if(camera)
|
||||
{
|
||||
RefreshCameraInfo(ubo_camera_info->data(),render_target->GetViewportInfo(),camera);
|
||||
}
|
||||
|
||||
render_task->RebuildRenderList(root);
|
||||
|
||||
bool result=false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user