From 194adddb49a8f2a5bbb34a98120e7974cb285378 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 24 May 2019 21:43:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0RenderList=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/graph/SceneNode.h | 16 +++++++++------- inc/hgl/graph/VertexBuffer.h | 22 +++++++++++----------- inc/hgl/graph/vulkan/VK.h | 1 + src/SceneGraph/CMakeLists.txt | 2 +- src/SceneGraph/RenderList.cpp | 21 ++++++++++----------- 5 files changed, 32 insertions(+), 30 deletions(-) diff --git a/inc/hgl/graph/SceneNode.h b/inc/hgl/graph/SceneNode.h index e8325627..6861070d 100644 --- a/inc/hgl/graph/SceneNode.h +++ b/inc/hgl/graph/SceneNode.h @@ -3,22 +3,24 @@ #include #include +#include namespace hgl { namespace graph { + using namespace vulkan; + class SceneNode; struct Camera; class Frustum; - class Renderable; - typedef List RenderList; ///<渲染列表类型重定义 + using RenderList=List; ///<渲染列表类型重定义 - typedef float (*RenderListCompFunc)(Camera *,SceneNode *,SceneNode *); ///<渲染列表排序比较函数 + using RenderListCompFunc=float (*)(Camera *,SceneNode *,SceneNode *); ///<渲染列表排序比较函数 float CameraLengthComp(Camera *,SceneNode *,SceneNode *); ///<摄像机距离比较函数 - typedef bool (*FilterSceneNodeFunc)(const SceneNode *,void *); ///<场景节点过滤函数重定义 + using FilterSceneNodeFunc=bool (*)(const SceneNode *,void *); ///<场景节点过滤函数重定义 bool FrustumClipFilter(const SceneNode *,void *); ///<平截头截减过滤函数 @@ -40,7 +42,7 @@ namespace hgl public: - List SubData; ///<可渲染数据 + List SubData; ///<可渲染数据 ObjectList SubNode; ///<子节点 public: @@ -52,7 +54,7 @@ namespace hgl ClearRenderable(); } - void Add(Renderable *r){if(r)SubData.Add(r);} ///<增加一个可渲染数据 + void Add(RenderableInstance *r){if(r)SubData.Add(r);} ///<增加一个可渲染数据 void ClearRenderable(){SubData.Clear();} ///<清除可渲染数据 void AddSubNode(SceneNode *n){if(n)SubNode.Add(n);} ///<增加一个子节点 @@ -63,7 +65,7 @@ namespace hgl return sn; } - SceneNode * AddSubNode(Renderable *r,const Matrix4f &m) + SceneNode * AddSubNode(RenderableInstance *r,const Matrix4f &m) { if(!r)return(nullptr); diff --git a/inc/hgl/graph/VertexBuffer.h b/inc/hgl/graph/VertexBuffer.h index a7defe09..47c97a0d 100644 --- a/inc/hgl/graph/VertexBuffer.h +++ b/inc/hgl/graph/VertexBuffer.h @@ -14,7 +14,7 @@ namespace hgl /** * 顶点属性数据实际模板 */ - template class VertexBuffer:public VertexBufferCreater + template class VertexBufferBase:public VertexBufferCreater { protected: @@ -25,7 +25,7 @@ namespace hgl public: - VertexBuffer(uint32_t _size,const T *_data=nullptr):VertexBufferCreater(_size,C,sizeof(T)) + VertexBufferBase(uint32_t _size,const T *_data=nullptr):VertexBufferCreater(_size,C,sizeof(T)) { mem_type=(T *)GetData(); access=0; @@ -35,7 +35,7 @@ namespace hgl memcpy(mem_type,_data,total_bytes); } - virtual ~VertexBuffer()=default; + virtual ~VertexBufferBase()=default; /** * 取得数据区地址 @@ -111,11 +111,11 @@ namespace hgl /** * 一元数据缓冲区 */ - template class VertexBuffer1:public VertexBuffer + template class VertexBuffer1:public VertexBufferBase { public: - using VertexBuffer::VertexBuffer; + using VertexBufferBase::VertexBufferBase; virtual ~VertexBuffer1()=default; VkFormat GetDataType()const override; @@ -154,11 +154,11 @@ namespace hgl /** * 二元数据缓冲区 */ - template class VertexBuffer2:public VertexBuffer + template class VertexBuffer2:public VertexBufferBase { public: - using VertexBuffer::VertexBuffer; + using VertexBufferBase::VertexBufferBase; virtual ~VertexBuffer2()=default; VkFormat GetDataType()const override; @@ -401,11 +401,11 @@ namespace hgl /** * 三元数据缓冲区 */ - template class VertexBuffer3:public VertexBuffer + template class VertexBuffer3:public VertexBufferBase { public: - using VertexBuffer::VertexBuffer; + using VertexBufferBase::VertexBufferBase; virtual ~VertexBuffer3()=default; VkFormat GetDataType()const override; @@ -641,11 +641,11 @@ namespace hgl /** * 四元数据缓冲区 */ - template class VertexBuffer4:public VertexBuffer + template class VertexBuffer4:public VertexBufferBase { public: - using VertexBuffer::VertexBuffer; + using VertexBufferBase::VertexBufferBase; virtual ~VertexBuffer4()=default; VkFormat GetDataType()const override; diff --git a/inc/hgl/graph/vulkan/VK.h b/inc/hgl/graph/vulkan/VK.h index 646567b1..4a45f59e 100644 --- a/inc/hgl/graph/vulkan/VK.h +++ b/inc/hgl/graph/vulkan/VK.h @@ -49,6 +49,7 @@ class DescriptorSets; class VertexAttributeBinding; class Renderable; +class RenderableInstance; using CharPointerList=hgl::List; diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 47f83bbc..1ad55edd 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -9,7 +9,7 @@ SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/AABox.h SET(SCENE_GRAPH_SOURCE AABox.cpp Camera.cpp -# RenderList.cpp + RenderList.cpp SceneNode.cpp SceneOrient.cpp InlineGeometry.cpp) diff --git a/src/SceneGraph/RenderList.cpp b/src/SceneGraph/RenderList.cpp index d0f8dda3..9f0911a5 100644 --- a/src/SceneGraph/RenderList.cpp +++ b/src/SceneGraph/RenderList.cpp @@ -1,31 +1,30 @@ #include #include -#include +#include #include -#include //#include -#include +#include namespace hgl { namespace graph { -/* float CameraLengthComp(Camera *cam,SceneNode *obj_one,SceneNode *obj_two) + float CameraLengthComp(Camera *cam,SceneNode *obj_one,SceneNode *obj_two) { if(!cam||!obj_one||!obj_two) return(0); - return( length_squared(obj_one->GetCenter(),cam->eye)- + return( length_squared(obj_one->GetCenter(),cam->eye)- length_squared(obj_two->GetCenter(),cam->eye)); } - bool FrustumClipFilter(const SceneNode *node,void *fc) - { - if(!node||!fc)return(false); + //bool FrustumClipFilter(const SceneNode *node,void *fc) + //{ + // if(!node||!fc)return(false); - return (((Frustum *)fc)->BoxIn(node->GetWorldBoundingBox())!=Frustum::OUTSIDE); - }*/ + // return (((Frustum *)fc)->BoxIn(node->GetWorldBoundingBox())!=Frustum::OUTSIDE); + //} /** * 使用指定矩阵渲染一个渲染列表 @@ -47,7 +46,7 @@ namespace hgl const Matrix4f fin_mv=(*mv)*(*node)->GetLocalToWorldMatrix(); int sn=(*node)->SubData.GetCount(); - Renderable **p=(*node)->SubData.GetData(); + RenderableInstance **p=(*node)->SubData.GetData(); for(int j=0;j