2#include "../LightMgr.h"
3#include "../EngineCore.h"
4#include "../../Util/Render/SFrameBuffer.h"
5#include "../../Util/Render/SEnvironmentMgr.h"
6#include "../../Util/Render/SGBuffer.h"
7#include "../CameraMgr.h"
8#include "../../Component/RenderComponent.h"
9#include "../../Util/Settings.h"
10#include "../../Util/GLProgramHandle.h"
12#include "ForwardRenderGroup.h"
13#include "DeferredRenderGroup.h"
14#include "DepthOnlyRenderGroup.h"
15#include "SdfRenderGroup.h"
24RenderMgr::~RenderMgr() {
30 m_lightMgr = CORE->GetCore(
LightMgr);
32 m_width = SEnvironmentMgr::GetPointerWidth();
33 m_height = SEnvironmentMgr::GetPointerHeight();
35 InitBuffers((
int) *m_width, (
int) *m_height);
36#ifdef CSE_SETTINGS_RENDER_FORWARD_SUPPORT
39#ifdef CSE_SETTINGS_RENDER_DEFERRED_SUPPORT
43#ifdef CSE_SETTINGS_RENDER_SDFGI_SUPPORT
52#ifdef CSE_SETTINGS_RENDER_DEFERRED_SUPPORT
53 if (m_deferredRenderGroup !=
nullptr)
56 ResizeBuffers((
int) *m_width, (
int) *m_height);
63#ifdef CSE_SETTINGS_RENDER_SDFGI_SUPPORT
75void RenderMgr::RenderShadows()
const {
76 const auto& lightObjects = m_lightMgr->GetAll();
77 for (
const auto& light: lightObjects) {
78 if (!light->IsShadow())
continue;
79 m_depthOnlyRenderGroup->RenderAll(*light);
84void RenderMgr::RenderSubCameras()
const {
85 const auto& cameraObjects = m_cameraMgr->GetAll();
86 const auto& mainCamera = m_cameraMgr->GetCurrentCamera();
88 for (
const auto& camera: cameraObjects) {
89 if (!camera->GetIsEnable() || camera == mainCamera || camera->GetFrameBuffer() ==
nullptr)
continue;
91 RenderAllGroup(*camera);
95void RenderMgr::RenderMainCamera()
const {
96 const auto& mainCamera = m_cameraMgr->GetCurrentCamera();
97 if (mainCamera ==
nullptr)
return;
99 ResetBuffer(*mainCamera);
100 RenderAllGroup(*mainCamera);
103 const auto& mainBuffer = GetMainBuffer();
105 mainBuffer->AttachFrameBuffer(GL_READ_FRAMEBUFFER);
106 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_deviceBuffer);
107 glBlitFramebuffer(0, 0, *m_width, *m_height, 0, 0, *m_width, *m_height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
110void RenderMgr::RenderSdfMap()
const {
111 const auto& mainCamera = m_cameraMgr->GetCurrentCamera();
112 if (mainCamera ==
nullptr)
return;
113 m_sdfRenderGroup->RenderAll(*mainCamera);
117 RenderContainer::Exterminate();
120void RenderMgr::ResetBuffer(
const CameraBase& camera)
const {
121 auto frameBuffer = camera.GetFrameBuffer();
122 if (frameBuffer ==
nullptr) {
123 frameBuffer = GetMainBuffer();
125 frameBuffer->AttachFrameBuffer();
126 camera.RenderBackground();
129void RenderMgr::BindSdfMapUniforms(
const GLProgramHandle& handle)
const {
130 static_cast<SdfRenderGroup*
>(m_sdfRenderGroup)->BindShaderUniforms(handle);
133int RenderMgr::BindSdfMapTextures(
const GLProgramHandle& handle,
int textureLayout)
const {
134 return static_cast<SdfRenderGroup*
>(m_sdfRenderGroup)->BindShaderMap(handle, textureLayout);
137void RenderMgr::RenderAllGroup(
const CameraBase& camera)
const {
138#ifdef CSE_SETTINGS_RENDER_DEFERRED_SUPPORT
139 m_deferredRenderGroup->RenderAll(camera);
141#ifdef CSE_SETTINGS_RENDER_FORWARD_SUPPORT
142 m_forwardRenderGroup->RenderAll(camera);
void RefreshShadowCount(int shadowCount=-1) const
void Init() override
Initialization of resources required for rendering.
void SetViewport()
Modify the framebuffer to fit the modified screen size.
RenderMgr()
Constructor for RenderMgr.
void Exterminate() override
Destroy all resources used for rendering.
void Render() const override
Rendering all stuffs.