Compare commits

...
3 Commits
Author SHA1 Message Date
jinchao ef2e7654e2 Rename render step 2025-08-25 23:34:50 +08:00
jinchao 9a0e6d7524 功能向RenderPipe集中 2025-08-25 23:12:23 +08:00
jinchao 0f9f81d568 rename RenderQueue to RenderPipe 2025-08-25 22:42:25 +08:00
29 changed files with 148 additions and 155 deletions
+8 -5
View File
@@ -7,7 +7,7 @@
#include "imgui/imgui_impl_opengl3.h" #include "imgui/imgui_impl_opengl3.h"
#include "scene/dvu_load_gltf.h" #include "scene/dvu_load_gltf.h"
#include "pipe/dvc_render_queue.h" #include "pipe/dvc_render_pipe.h"
#include "device/dvc_render_target.h" #include "device/dvc_render_target.h"
#include "shader/dvc_shader_interface.h" #include "shader/dvc_shader_interface.h"
#include "buffer/dvu_dump_buffer.h" #include "buffer/dvu_dump_buffer.h"
@@ -101,7 +101,9 @@ void drawMainUI()
ImGui::Combo("AntiAliasing", (int*)(&g_aaTech), aaItem, IM_ARRAYSIZE(aaItem)); ImGui::Combo("AntiAliasing", (int*)(&g_aaTech), aaItem, IM_ARRAYSIZE(aaItem));
if (ImGui::Button("Render")) if (ImGui::Button("Render"))
{ {
davinci::UniformBuffer uniformBuffer; davinci::RenderPipe pipe;
davinci::UniformBuffer& uniformBuffer = pipe.getUniformBuffer();
uniformBuffer.updateStandardAttribute(g_scene); uniformBuffer.updateStandardAttribute(g_scene);
//find Light node //find Light node
@@ -111,11 +113,12 @@ void drawMainUI()
uniformBuffer.setAttribute("light0:position", lightNode->getWorldPosition()); uniformBuffer.setAttribute("light0:position", lightNode->getWorldPosition());
} }
davinci::RenderQueue queue; pipe.setAntiAliasingTech(g_aaTech);
queue.build(g_scene);
g_scene.buildRenderableQueue(pipe);
g_renderTarget.clear(); g_renderTarget.clear();
queue.process(g_aaTech, uniformBuffer, g_renderTarget); pipe.process(g_renderTarget);
davinci_utils::dump_render_target("d:\\rendertarget", g_renderTarget); davinci_utils::dump_render_target("d:\\rendertarget", g_renderTarget);
} }
+10 -10
View File
@@ -106,24 +106,24 @@ source_group("source/device" FILES ${DV_CORE_DEVICE_SOURCE_FILES})
# pipe # pipe
################# #################
set(DV_CORE_PIPE_INCLUDE_FILES set(DV_CORE_PIPE_INCLUDE_FILES
include/pipe/dvc_render_queue.h include/pipe/dvc_render_pipe.h
include/pipe/dvc_renderable.h include/pipe/dvc_renderable.h
include/pipe/dvc_renderable_entity.h include/pipe/dvc_renderable_entity.h
include/pipe/dvc_render_step_IA.h include/pipe/dvc_render_step0_input_assember.h
include/pipe/dvc_render_step_VS.h include/pipe/dvc_render_step1_vertex_shader.h
include/pipe/dvc_render_step_PS.h include/pipe/dvc_render_step2_rasterizer.h
include/pipe/dvc_render_step_OM.h include/pipe/dvc_render_step3_output_merge.h
) )
source_group("include/pipe" FILES ${DV_CORE_PIPE_INCLUDE_FILES}) source_group("include/pipe" FILES ${DV_CORE_PIPE_INCLUDE_FILES})
set(DV_CORE_PIPE_SOURCE_FILES set(DV_CORE_PIPE_SOURCE_FILES
source/pipe/dvc_render_queue.cpp source/pipe/dvc_render_pipe.cpp
source/pipe/dvc_renderable.cpp source/pipe/dvc_renderable.cpp
source/pipe/dvc_renderable_entity.cpp source/pipe/dvc_renderable_entity.cpp
source/pipe/dvc_render_step_IA.cpp source/pipe/dvc_render_step0_input_assember.cpp
source/pipe/dvc_render_step_VS.cpp source/pipe/dvc_render_step1_vertex_shader.cpp
source/pipe/dvc_render_step_PS.cpp source/pipe/dvc_render_step2_rasterizer.cpp
source/pipe/dvc_render_step_OM.cpp source/pipe/dvc_render_step3_output_merge.cpp
) )
source_group("source/pipe" FILES ${DV_CORE_PIPE_SOURCE_FILES}) source_group("source/pipe" FILES ${DV_CORE_PIPE_SOURCE_FILES})
+2 -1
View File
@@ -60,11 +60,12 @@ class LightComponent;
typedef std::shared_ptr<LightComponent> LightComponentPtr; typedef std::shared_ptr<LightComponent> LightComponentPtr;
typedef std::shared_ptr<const LightComponent> LightComponentConstPtr; typedef std::shared_ptr<const LightComponent> LightComponentConstPtr;
class RenderQueue; class RenderPipe;
class Renderable; class Renderable;
typedef std::shared_ptr<Renderable> RenderablePtr; typedef std::shared_ptr<Renderable> RenderablePtr;
typedef std::shared_ptr<const Renderable> RenderableConstPtr; typedef std::shared_ptr<const Renderable> RenderableConstPtr;
typedef std::vector<RenderableConstPtr> RenderableArray;
class VertexShaderInterface; class VertexShaderInterface;
@@ -0,0 +1,36 @@
#pragma once
#include "dvc_config.h"
#include "scene/dvc_scene.h"
#include "device/dvc_uniform_buffer.h"
#include "device/dvc_render_target.h"
DV_CORE_BEGIN_NAMESPACE
class DV_CORE_API RenderPipe
{
public:
UniformBuffer& getUniformBuffer() {
return m_uniformBuffer;
}
AntiAliasingTech getAntiAliasingTech() const {
return m_aaTech;
}
void setAntiAliasingTech(AntiAliasingTech aaTech) {
m_aaTech = aaTech;
}
void pushRenderable(RenderableConstPtr renderable);
void process(RenderTarget& renderTarget);
protected:
AntiAliasingTech m_aaTech;
UniformBuffer m_uniformBuffer;
RenderableArray m_renderableQueue;
public:
RenderPipe();
~RenderPipe();
};
DV_CORE_END_NAMESPACE
@@ -1,32 +0,0 @@
#pragma once
#include "dvc_config.h"
#include "scene/dvc_scene.h"
#include "device/dvc_render_target.h"
DV_CORE_BEGIN_NAMESPACE
class DV_CORE_API RenderQueue
{
public:
void pushRenderable(RenderableConstPtr renderable);
size_t getRenderableCounts() const {
return m_queue.size();
}
RenderableConstPtr getRenderable(size_t index) const;
void build(const Scene& scene);
void process(AntiAliasingTech aaTech, UniformBuffer& uniformBuffer, RenderTarget& renderTarget);
protected:
AntiAliasingTech m_aaTech;
std::vector<RenderableConstPtr> m_queue;
public:
RenderQueue();
~RenderQueue();
};
DV_CORE_END_NAMESPACE
@@ -2,7 +2,7 @@
#include "dvc_config.h" #include "dvc_config.h"
#include "math/dvc_matrix4.h" #include "math/dvc_matrix4.h"
#include "dvc_render_queue.h" #include "dvc_render_pipe.h"
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
@@ -22,7 +22,7 @@ public:
typedef std::vector<Node> NodeArray; typedef std::vector<Node> NodeArray;
public: public:
void process(const RenderQueue& renderQueue); void process(const RenderableArray& renderableArray);
public: public:
NodeArray m_nodes; NodeArray m_nodes;
@@ -1,7 +1,7 @@
#pragma once #pragma once
#include "dvc_config.h" #include "dvc_config.h"
#include "dvc_render_step_IA.h" #include "dvc_render_step0_input_assember.h"
#include "device/dvc_uniform_buffer.h" #include "device/dvc_uniform_buffer.h"
#include "device/dvc_vertex_desc.h" #include "device/dvc_vertex_desc.h"
@@ -1,11 +1,11 @@
#pragma once #pragma once
#include "dvc_config.h" #include "dvc_config.h"
#include "dvc_render_step_VS.h" #include "dvc_render_step1_vertex_shader.h"
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
class PixelShaderStep class RasterizerStep
{ {
public: public:
struct Fragement struct Fragement
@@ -1,30 +1,30 @@
#pragma once #pragma once
#include "dvc_config.h" #include "dvc_config.h"
#include "dvc_render_step_PS.h" #include "dvc_render_step2_rasterizer.h"
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
class OutputMergerStep class OutputMergerStep
{ {
public: public:
void process(const PixelShaderStep::StartOffsetArray& startOffsetArray, const PixelShaderStep::FragementArray& fragementArray, void process(const RasterizerStep::StartOffsetArray& startOffsetArray, const RasterizerStep::FragementArray& fragementArray,
AntiAliasingTech aaTech, RenderTarget& renderTarget); AntiAliasingTech aaTech, RenderTarget& renderTarget);
private: private:
void mergeFragement_without_AA(int32_t x, int32_t y, void mergeFragement_without_AA(int32_t x, int32_t y,
const std::multimap<float32_t, int32_t>& fragementArrayMap, const std::multimap<float32_t, int32_t>& fragementArrayMap,
const PixelShaderStep::FragementArray& fragementArray, RenderTarget& renderTarget); const RasterizerStep::FragementArray& fragementArray, RenderTarget& renderTarget);
template<int32_t kSampleSize, uint32_t kSampleMask> template<int32_t kSampleSize, uint32_t kSampleMask>
void mergeFragement_with_AA(int32_t x, int32_t y, void mergeFragement_with_AA(int32_t x, int32_t y,
const std::multimap<float32_t, int32_t>& fragementArrayMap, const std::multimap<float32_t, int32_t>& fragementArrayMap,
const PixelShaderStep::FragementArray& fragementArray, RenderTarget& renderTarget); const RasterizerStep::FragementArray& fragementArray, RenderTarget& renderTarget);
}; };
template<int32_t kSampleSize, uint32_t kSampleMask> template<int32_t kSampleSize, uint32_t kSampleMask>
void OutputMergerStep::mergeFragement_with_AA(int32_t x, int32_t y, const std::multimap<float32_t, int32_t>& fragementArrayMap, void OutputMergerStep::mergeFragement_with_AA(int32_t x, int32_t y, const std::multimap<float32_t, int32_t>& fragementArrayMap,
const PixelShaderStep::FragementArray& fragementArray, RenderTarget& renderTarget) const RasterizerStep::FragementArray& fragementArray, RenderTarget& renderTarget)
{ {
if (fragementArrayMap.empty()) if (fragementArrayMap.empty())
{ {
@@ -32,7 +32,7 @@ void OutputMergerStep::mergeFragement_with_AA(int32_t x, int32_t y, const std::m
} }
else if (fragementArrayMap.size() == 1) else if (fragementArrayMap.size() == 1)
{ {
const PixelShaderStep::Fragement& fragement = fragementArray[fragementArrayMap.begin()->second]; const RasterizerStep::Fragement& fragement = fragementArray[fragementArrayMap.begin()->second];
fVector4 finalColor = fragement.color; fVector4 finalColor = fragement.color;
finalColor.w = MathUtil::popcount((uint16_t)(fragement.mask & kSampleMask)) / (float32_t)kSampleSize; finalColor.w = MathUtil::popcount((uint16_t)(fragement.mask & kSampleMask)) / (float32_t)kSampleSize;
@@ -48,7 +48,7 @@ void OutputMergerStep::mergeFragement_with_AA(int32_t x, int32_t y, const std::m
std::multimap<float32_t, int32_t>::const_iterator it, end = fragementArrayMap.end(); std::multimap<float32_t, int32_t>::const_iterator it, end = fragementArrayMap.end();
for (it = fragementArrayMap.begin(); it != end; ++it) for (it = fragementArrayMap.begin(); it != end; ++it)
{ {
const PixelShaderStep::Fragement& fragement = fragementArray[it->second]; const RasterizerStep::Fragement& fragement = fragementArray[it->second];
for (int32_t k = 0; k < kSampleSize; k++) for (int32_t k = 0; k < kSampleSize; k++)
{ {
if ((fragement.mask & (1 << k)) != 0) if ((fragement.mask & (1 << k)) != 0)
@@ -66,7 +66,7 @@ void OutputMergerStep::mergeFragement_with_AA(int32_t x, int32_t y, const std::m
int32_t fragementID = samples[k]; int32_t fragementID = samples[k];
if (fragementID < 0 || fragementID >= fragementArray.size()) continue; if (fragementID < 0 || fragementID >= fragementArray.size()) continue;
const PixelShaderStep::Fragement& fragement = fragementArray[fragementID]; const RasterizerStep::Fragement& fragement = fragementArray[fragementID];
finalColor += fragement.color.xyz(); finalColor += fragement.color.xyz();
bitCounts++; bitCounts++;
} }
+1 -1
View File
@@ -2,7 +2,7 @@
#include "dvc_config.h" #include "dvc_config.h"
#include "math/dvc_matrix4.h" #include "math/dvc_matrix4.h"
#include "pipe/dvc_render_step_IA.h" #include "pipe/dvc_render_step0_input_assember.h"
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
@@ -18,7 +18,7 @@ public:
}; };
public: public:
virtual const std::string& getTypeName() const { return typeName(); } virtual const std::string& getTypeName() const { return typeName(); }
virtual void render(const fMatrix4& transParent, RenderQueue& queue) const; virtual void buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const;
fVector3 getEye(void) const; fVector3 getEye(void) const;
fVector3 getLookat(void) const; fVector3 getLookat(void) const;
@@ -9,7 +9,7 @@ class DV_CORE_API SceneComponent
{ {
public: public:
virtual const std::string& getTypeName() const = 0; virtual const std::string& getTypeName() const = 0;
virtual void render(const fMatrix4& transParent, RenderQueue& queue) const; virtual void buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const;
protected: protected:
SceneNodePtr m_owner; SceneNodePtr m_owner;
@@ -27,7 +27,7 @@ public:
}; };
public: public:
virtual const std::string& getTypeName() const { return typeName(); } virtual const std::string& getTypeName() const { return typeName(); }
virtual void render(const fMatrix4& transParent, RenderQueue& queue) const; virtual void buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const;
void setLightDefine(const LightDefine& lightDefine); void setLightDefine(const LightDefine& lightDefine);
protected: protected:
@@ -9,7 +9,7 @@ class DV_CORE_API MeshComponent : public SceneComponent
{ {
public: public:
virtual const std::string& getTypeName() const { return typeName(); } virtual const std::string& getTypeName() const { return typeName(); }
virtual void render(const fMatrix4& transParent, RenderQueue& queue) const; virtual void buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const;
void setMesh(MeshConstPtr mesh); void setMesh(MeshConstPtr mesh);
+1
View File
@@ -40,6 +40,7 @@ public:
public: public:
SceneNodePtr newSceneNode(const std::string& name); SceneNodePtr newSceneNode(const std::string& name);
SceneNodePtr getRootSceneNode() const; SceneNodePtr getRootSceneNode() const;
void buildRenderableQueue(RenderPipe& pipe) const;
public: public:
template<typename ComponentType> template<typename ComponentType>
+1 -1
View File
@@ -55,7 +55,7 @@ public:
} }
public: public:
void buildRenderQueue(const fMatrix4& transParent, RenderQueue& queue); void buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe);
protected: protected:
std::string m_name; std::string m_name;
@@ -24,9 +24,6 @@ void RenderTarget::setPixel(int32_t x, int32_t y, const fVector4& color, float32
{ {
if (x < 0 || x >= m_width || y < 0 || y >= m_height) return; if (x < 0 || x >= m_width || y < 0 || y >= m_height) return;
if (depth > m_depthBuffer.getPixel(x, y)) {
// return;
}
m_colorBuffer.setPixel(x, y, color); m_colorBuffer.setPixel(x, y, color);
m_depthBuffer.setPixel(x, y, depth); m_depthBuffer.setPixel(x, y, depth);
} }
@@ -0,0 +1,45 @@
#include "pipe/dvc_render_pipe.h"
#include "scene/dvc_scene_node.h"
#include "pipe/dvc_render_step0_input_assember.h"
#include "pipe/dvc_render_step1_vertex_shader.h"
#include "pipe/dvc_render_step2_rasterizer.h"
#include "pipe/dvc_render_step3_output_merge.h"
#include "scene/component/dvc_camera_component.h"
DV_CORE_BEGIN_NAMESPACE
RenderPipe::RenderPipe()
{
}
RenderPipe::~RenderPipe()
{
}
void RenderPipe::pushRenderable(RenderableConstPtr renderable)
{
m_renderableQueue.push_back(renderable);
}
void RenderPipe::process(RenderTarget& renderTarget)
{
//Assembere input
InputAssemberStep IA;
IA.process(m_renderableQueue);
//Vertex shader
VertexShaderStep VS;
VS.process(m_uniformBuffer, IA.m_nodes);
//Pixel shader
RasterizerStep rasterizerStep;
rasterizerStep.process(VS.m_nodes, m_aaTech, renderTarget.getWidth(), renderTarget.getHeight());
//Output Merge
OutputMergerStep OM;
OM.process(rasterizerStep.m_startOffsetArray, rasterizerStep.m_fragementArray, m_aaTech, renderTarget);
}
DV_CORE_END_NAMESPACE
@@ -1,63 +0,0 @@
#include "pipe/dvc_render_queue.h"
#include "scene/dvc_scene_node.h"
#include "pipe/dvc_render_step_IA.h"
#include "pipe/dvc_render_step_VS.h"
#include "pipe/dvc_render_step_PS.h"
#include "pipe/dvc_render_step_OM.h"
#include "scene/component/dvc_camera_component.h"
DV_CORE_BEGIN_NAMESPACE
RenderQueue::RenderQueue()
{
}
RenderQueue::~RenderQueue()
{
}
void RenderQueue::pushRenderable(RenderableConstPtr renderable)
{
m_queue.push_back(renderable);
}
RenderableConstPtr RenderQueue::getRenderable(size_t index) const
{
assert(index < m_queue.size());
if (index < m_queue.size())
{
return m_queue[index];
}
return nullptr;
}
void RenderQueue::build(const Scene& scene)
{
//Build render queue
scene.getRootSceneNode()->buildRenderQueue(fMatrix4::IDENTITY, *this);
}
void RenderQueue::process(AntiAliasingTech aaTech, UniformBuffer& uniformBuffer, RenderTarget& renderTarget)
{
m_aaTech = aaTech;
//Assembere input
InputAssemberStep IA;
IA.process(*this);
//Vertex shader
VertexShaderStep VS;
VS.process(uniformBuffer, IA.m_nodes);
//Pixel shader
PixelShaderStep PS;
PS.process(VS.m_nodes, m_aaTech, renderTarget.getWidth(), renderTarget.getHeight());
//Output Merge
OutputMergerStep OM;
OM.process(PS.m_startOffsetArray, PS.m_fragementArray, m_aaTech, renderTarget);
}
DV_CORE_END_NAMESPACE
@@ -1,14 +1,14 @@
#include "pipe/dvc_render_step_IA.h" #include "pipe/dvc_render_step0_input_assember.h"
#include "pipe/dvc_renderable.h" #include "pipe/dvc_renderable.h"
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
void InputAssemberStep::process(const RenderQueue& renderQueue) void InputAssemberStep::process(const RenderableArray& renderableArray)
{ {
size_t counts = renderQueue.getRenderableCounts(); size_t counts = renderableArray.size();
for (size_t i = 0; i < counts; i++) for (size_t i = 0; i < counts; i++)
{ {
RenderableConstPtr renderable = renderQueue.getRenderable(i); RenderableConstPtr renderable = renderableArray[i];
if (renderable) if (renderable)
{ {
Node node; Node node;
@@ -1,4 +1,4 @@
#include "pipe/dvc_render_step_VS.h" #include "pipe/dvc_render_step1_vertex_shader.h"
#include "shader/dvc_shader_interface.h" #include "shader/dvc_shader_interface.h"
#include "device/dvc_buffer_accessor.h" #include "device/dvc_buffer_accessor.h"
#include "math/dvc_math_util.h" #include "math/dvc_math_util.h"
@@ -1,4 +1,4 @@
#include "pipe/dvc_render_step_PS.h" #include "pipe/dvc_render_step2_rasterizer.h"
#include "shader/dvc_shader_interface.h" #include "shader/dvc_shader_interface.h"
#include "device/dvc_buffer.h" #include "device/dvc_buffer.h"
#include "rasterizer/dvc_rasterizer_triangle.h" #include "rasterizer/dvc_rasterizer_triangle.h"
@@ -6,7 +6,7 @@
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
void PixelShaderStep::process(const VertexShaderStep::NodeArray& vsNodeArray, AntiAliasingTech aaTech, int32_t canvasWidth, int32_t canvasHeight) void RasterizerStep::process(const VertexShaderStep::NodeArray& vsNodeArray, AntiAliasingTech aaTech, int32_t canvasWidth, int32_t canvasHeight)
{ {
ShaderFileInterface* shaderInterface = davinci::LoadShaderFile("TestShader.dll"); ShaderFileInterface* shaderInterface = davinci::LoadShaderFile("TestShader.dll");
PixelShaderInterface* pixelShader = shaderInterface->getPixelShader("xxx"); PixelShaderInterface* pixelShader = shaderInterface->getPixelShader("xxx");
@@ -1,8 +1,8 @@
#include "pipe/dvc_render_step_OM.h" #include "pipe/dvc_render_step3_output_merge.h"
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
void OutputMergerStep::process(const PixelShaderStep::StartOffsetArray& startOffsetArray, const PixelShaderStep::FragementArray& fragementArray, void OutputMergerStep::process(const RasterizerStep::StartOffsetArray& startOffsetArray, const RasterizerStep::FragementArray& fragementArray,
AntiAliasingTech aaTech, RenderTarget& renderTarget) AntiAliasingTech aaTech, RenderTarget& renderTarget)
{ {
int32_t canvasWidth = renderTarget.getWidth(); int32_t canvasWidth = renderTarget.getWidth();
@@ -17,7 +17,7 @@ void OutputMergerStep::process(const PixelShaderStep::StartOffsetArray& startOff
while (fragementID >=0 && fragementID < (int32_t)fragementArray.size()) while (fragementID >=0 && fragementID < (int32_t)fragementArray.size())
{ {
const PixelShaderStep::Fragement& fragement = fragementArray[fragementID]; const RasterizerStep::Fragement& fragement = fragementArray[fragementID];
fragementArrayMap.insert(std::make_pair(-fragement.depth, fragementID)); fragementArrayMap.insert(std::make_pair(-fragement.depth, fragementID));
fragementID = fragement.next; fragementID = fragement.next;
} }
@@ -39,14 +39,14 @@ void OutputMergerStep::process(const PixelShaderStep::StartOffsetArray& startOff
} }
void OutputMergerStep::mergeFragement_without_AA(int32_t x, int32_t y, const std::multimap<float32_t, int32_t>& fragementArrayMap, void OutputMergerStep::mergeFragement_without_AA(int32_t x, int32_t y, const std::multimap<float32_t, int32_t>& fragementArrayMap,
const PixelShaderStep::FragementArray& fragementArray, RenderTarget& renderTarget) const RasterizerStep::FragementArray& fragementArray, RenderTarget& renderTarget)
{ {
if (fragementArrayMap.empty()) if (fragementArrayMap.empty())
{ {
return; return;
} }
const PixelShaderStep::Fragement& firstFragement = fragementArray[fragementArrayMap.rbegin()->second]; const RasterizerStep::Fragement& firstFragement = fragementArray[fragementArrayMap.rbegin()->second];
renderTarget.setPixel(x, y, firstFragement.color, firstFragement.depth); renderTarget.setPixel(x, y, firstFragement.color, firstFragement.depth);
} }
@@ -51,7 +51,7 @@ void CameraComponent::setCameraDefine(const CameraComponent::CameraDefine& camer
m_viewProjMatrix = matProj * matView; m_viewProjMatrix = matProj * matView;
} }
void CameraComponent::render(const fMatrix4& transParent, RenderQueue& queue) const void CameraComponent::buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const
{ {
} }
@@ -13,7 +13,7 @@ SceneComponent::~SceneComponent()
} }
void SceneComponent::render(const fMatrix4& transParent, RenderQueue& queue) const void SceneComponent::buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const
{ {
} }
@@ -24,7 +24,7 @@ void LightComponent::setLightDefine(const LightDefine& lightDefine)
m_define = lightDefine; m_define = lightDefine;
} }
void LightComponent::render(const fMatrix4& transParent, RenderQueue& queue) const void LightComponent::buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const
{ {
} }
@@ -1,7 +1,7 @@
#include "scene/component/dvc_mesh_component.h" #include "scene/component/dvc_mesh_component.h"
#include "asset/dvc_mesh.h" #include "asset/dvc_mesh.h"
#include "pipe/dvc_renderable_entity.h" #include "pipe/dvc_renderable_entity.h"
#include "pipe/dvc_render_queue.h" #include "pipe/dvc_render_pipe.h"
DV_CORE_BEGIN_NAMESPACE DV_CORE_BEGIN_NAMESPACE
@@ -27,9 +27,9 @@ void MeshComponent::setMesh(MeshConstPtr mesh)
m_mesh = mesh; m_mesh = mesh;
} }
void MeshComponent::render(const fMatrix4& transParent, RenderQueue& queue) const void MeshComponent::buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe) const
{ {
SceneComponent::render(transParent, queue); SceneComponent::buildRenderableQueue(transParent, pipe);
int32_t primitiveCounts = m_mesh->getPrimitiveCounts(); int32_t primitiveCounts = m_mesh->getPrimitiveCounts();
for (int32_t i = 0; i < primitiveCounts; i++) for (int32_t i = 0; i < primitiveCounts; i++)
@@ -37,7 +37,7 @@ void MeshComponent::render(const fMatrix4& transParent, RenderQueue& queue) cons
Mesh::PrimitiveConstPtr primitivePtr = m_mesh->getPrimitive(i); Mesh::PrimitiveConstPtr primitivePtr = m_mesh->getPrimitive(i);
RenderablePtr renderable = std::make_shared<RenderableEntity>(primitivePtr, transParent); RenderablePtr renderable = std::make_shared<RenderableEntity>(primitivePtr, transParent);
queue.pushRenderable(renderable); pipe.pushRenderable(renderable);
} }
} }
+5
View File
@@ -120,4 +120,9 @@ SceneNodePtr Scene::getRootSceneNode(void) const
return m_rootSceneNode; return m_rootSceneNode;
} }
void Scene::buildRenderableQueue(RenderPipe& pipe) const
{
getRootSceneNode()->buildRenderableQueue(fMatrix4::IDENTITY, pipe);
}
DV_CORE_END_NAMESPACE DV_CORE_END_NAMESPACE
+3 -3
View File
@@ -89,18 +89,18 @@ SceneComponentConstPtr SceneNode::getComponent(size_t index) const
return m_componentArray[index]; return m_componentArray[index];
} }
void SceneNode::buildRenderQueue(const fMatrix4& transParent, RenderQueue& queue) void SceneNode::buildRenderableQueue(const fMatrix4& transParent, RenderPipe& pipe)
{ {
fMatrix4 transform = m_transform * transParent; fMatrix4 transform = m_transform * transParent;
for (auto component : m_componentArray) for (auto component : m_componentArray)
{ {
component->render(transform, queue); component->buildRenderableQueue(transform, pipe);
} }
for (auto child : m_childen) for (auto child : m_childen)
{ {
child->buildRenderQueue(transform, queue); child->buildRenderableQueue(transform, pipe);
} }
} }