CSEngine
Loading...
Searching...
No Matches
CSE::ForwardRenderGroup Class Reference

#include <ForwardRenderGroup.h>

Inheritance diagram for CSE::ForwardRenderGroup:
CSE::SRenderGroup

Public Member Functions

 ForwardRenderGroup (const RenderMgr &renderMgr)
 
 ~ForwardRenderGroup () override
 
void RegisterObject (SIRender *object) override
 
void RemoveObjects (SIRender *object) override
 
void RenderAll (const CameraBase &camera) const override
 
void Exterminate () override
 
- Public Member Functions inherited from CSE::SRenderGroup
 SRenderGroup (const RenderMgr &renderMgr)
 

Additional Inherited Members

- Static Protected Member Functions inherited from CSE::SRenderGroup
static void BindSourceBuffer (const SFrameBuffer &buffer, const GLProgramHandle &handle, int layout)
 
- Protected Attributes inherited from CSE::SRenderGroup
const RenderMgrm_renderMgr
 

Detailed Description

This class is used for forward-rendering objects. It contains a collection of objects which should be forward-rendered.

Definition at line 16 of file ForwardRenderGroup.h.

Constructor & Destructor Documentation

◆ ForwardRenderGroup()

ForwardRenderGroup::ForwardRenderGroup ( const RenderMgr & renderMgr)
explicit

Constructor for the ForwardRenderGroup class.

Parameters
renderMgrThe render manager object.

Definition at line 15 of file ForwardRenderGroup.cpp.

15 : SRenderGroup(renderMgr) {
16 m_lightMgr = CORE->GetCore(LightMgr);
17}

◆ ~ForwardRenderGroup()

ForwardRenderGroup::~ForwardRenderGroup ( )
overridedefault

Destructor for the ForwardRenderGroup class.

Member Function Documentation

◆ Exterminate()

void ForwardRenderGroup::Exterminate ( )
overridevirtual

Clear all objects in the forward-rendering list.

Implements CSE::SRenderGroup.

Definition at line 109 of file ForwardRenderGroup.cpp.

109 {
110 m_rendersLayer.clear();
111}

◆ RegisterObject()

void ForwardRenderGroup::RegisterObject ( SIRender * object)
overridevirtual

Register an object to be forward-rendered.

Parameters
objectThe object to be registered.

Implements CSE::SRenderGroup.

Definition at line 21 of file ForwardRenderGroup.cpp.

21 {
22 const auto& material = object->GetMaterialReference();
23 if (material == nullptr) return;
24
25 short orderLayer = material->GetOrderLayer();
26 const auto& shaders = material->GetShaders();
27 if (shaders == nullptr) return;
28
29 auto& layer = m_rendersLayer[orderLayer][shaders];
30 layer.push_back(object);
31}

◆ RemoveObjects()

void ForwardRenderGroup::RemoveObjects ( SIRender * object)
overridevirtual

Remove an object from the forward-rendering list.

Parameters
objectThe object to be removed.

Implements CSE::SRenderGroup.

Definition at line 33 of file ForwardRenderGroup.cpp.

33 {
34 const auto& material = object->GetMaterialReference();
35 if (material == nullptr) return;
36
37 short orderLayer = material->GetOrderLayer();
38 const auto& shaders = material->GetShaders();
39 if (shaders == nullptr) return;
40
41 auto orderLayerIter = m_rendersLayer.find(orderLayer);
42 if (orderLayerIter != m_rendersLayer.end()) {
43 auto& programLayer = orderLayerIter->second;
44 auto handlerPair = programLayer.find(shaders);
45 if (handlerPair != programLayer.end()) {
46 auto& layerVector = handlerPair->second;
47 layerVector.erase(std::remove(layerVector.begin(), layerVector.end(), object),
48 layerVector.end());
49
50 // 렌더링 객체가 제거된 뒤에도 공간이 비어 있는 경우, 그 공간을 제거한다.
51 if (layerVector.empty()) programLayer.erase(handlerPair);
52 }
53 if (programLayer.empty()) m_rendersLayer.erase(orderLayerIter);
54 }
55}

◆ RenderAll()

void ForwardRenderGroup::RenderAll ( const CameraBase & camera) const
overridevirtual

Render the objects to be forward-rendered.

Parameters
cameraStructure containing information values of the camera to be drawn.

Implements CSE::SRenderGroup.

Definition at line 57 of file ForwardRenderGroup.cpp.

57 {
58 const auto cameraMatrix = camera.GetCameraMatrixStruct();
59 const auto& cameraBuffer = camera.GetFrameBuffer();
60 const auto& frameBuffer = cameraBuffer == nullptr
61 ? m_renderMgr->GetMainBuffer() : cameraBuffer;
62 OrderRenderLayer orderRenderLayer(m_rendersLayer.begin(), m_rendersLayer.end());
63 frameBuffer->AttachFrameBuffer();
64
65 for (const auto& orderLayerPair : orderRenderLayer) {
66 const auto& orderLayer = orderLayerPair.second;
67 ProgramRenderLayer programComp(orderLayer.begin(), orderLayer.end());
68
69 for (const auto& programPair : programComp) {
70 const auto& handler = *programPair.first->GetForwardHandle();
71 const auto& renderComp = programPair.second;
72
73 if (programPair.first == nullptr) continue;
74 if (renderComp.empty()) continue;
75
76 glUseProgram(handler.Program);
77 //Attach Light
78 int layoutBegin = m_lightMgr->AttachLightToShader(&handler);
79 layoutBegin += m_lightMgr->AttachLightMapToShader(&handler, layoutBegin);
80#ifdef CSE_SETTINGS_RENDER_SDFGI_SUPPORT
81 m_renderMgr->BindSdfMapUniforms(handler);
82 layoutBegin += m_renderMgr->BindSdfMapTextures(handler, layoutBegin);
83#endif
84 if (handler.CullFace == 0) {
85 glDisable(GL_CULL_FACE);
86 }else {
87 glEnable(GL_CULL_FACE);
88 glCullFace(handler.CullFace);
89 }
90
91 for (const auto& render : renderComp) {
92 if (render == nullptr) continue;
93 if (!render->isRenderActive) continue;
94
95 const auto& material = render->GetMaterial();
96 int materialLayout = material->AttachElement(layoutBegin);
97 render->SetMatrix(cameraMatrix, &handler);
98 BindSourceBuffer(*frameBuffer, handler, layoutBegin + materialLayout + 1);
99 render->Render(&handler);
100 }
101 }
102 }
103
105 glBindBuffer(GL_ARRAY_BUFFER, 0);
106 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
107}
int AttachLightMapToShader(const GLProgramHandle *handle, int textureLayout) const
Definition LightMgr.cpp:47
int AttachLightToShader(const GLProgramHandle *handle) const
Definition LightMgr.cpp:15
static void BindSourceBuffer(const SFrameBuffer &buffer, const GLProgramHandle &handle, int layout)

References CSE::LightMgr::AttachLightMapToShader(), CSE::LightMgr::AttachLightToShader(), and CSE::SRenderGroup::BindSourceBuffer().


The documentation for this class was generated from the following files: