Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef2e7654e2 | ||
|
|
9a0e6d7524 | ||
|
|
0f9f81d568 |
@@ -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
@@ -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})
|
||||||
|
|
||||||
|
|||||||
@@ -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
-2
@@ -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
-1
@@ -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"
|
||||||
|
|
||||||
+2
-2
@@ -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
|
||||||
+8
-8
@@ -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++;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
|
||||||
+4
-4
@@ -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
-1
@@ -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"
|
||||||
+2
-2
@@ -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");
|
||||||
+5
-5
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user