25 const auto& material =
object->GetMaterialReference();
26 const auto& shaders = material->GetShaders();
27 if (shaders ==
nullptr)
return;
28 auto* handle =
const_cast<GLProgramHandle*
>(shaders->GetHandle(
"deferred"));
30 auto gbuffer = m_gbufferLayer[shaders];
33 gbuffer->GenerateGBuffer(*m_width, *m_height);
34 m_gbufferLayer[shaders] = gbuffer;
36 gbuffer->PushBackToLayer(
object);
37 gbuffer->BindLightPass(handle);
41 const auto& material =
object->GetMaterialReference();
42 const auto& programLayer = m_gbufferLayer;
43 auto it = std::find_if(programLayer.begin(), programLayer.end(), [&material](
const auto& elem) {
44 return elem.first == material->GetShaders();
46 if (it != programLayer.end()) {
47 it->second->RemoveToLayer(
object);
62 const auto cameraMatrix = camera.GetCameraMatrixStruct();
63 const auto& frameBuffer = camera.GetFrameBuffer();
64 const bool hasFrameBuffer = frameBuffer !=
nullptr;
65 const auto& lightPassHandle = gbuffer.GetLightPassHandle();
67 const int bufferWidth = hasFrameBuffer ? frameBuffer->GetWidth() : (int) *m_width;
68 const int bufferHeight = hasFrameBuffer ? frameBuffer->GetHeight() : (int) *m_height;
73 gbuffer.AttachGeometryFrameBuffer();
74 glViewport(0, 0, *m_width, *m_height);
75 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
76 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
77 const auto& renderLayer = gbuffer.GetRendersLayer();
78 const auto& handle = shaders.GetGeometryHandle();
79 glUseProgram(handle->Program);
81 if (handle->CullFace == 0) {
82 glDisable(GL_CULL_FACE);
84 glEnable(GL_CULL_FACE);
85 glCullFace(handle->CullFace);
88 for (
const auto& render : renderLayer) {
89 if (render ==
nullptr)
continue;
90 if (!render->isRenderActive)
continue;
92 const auto& material = render->GetMaterial();
93 material->AttachElement(0);
94 render->SetMatrix(cameraMatrix, handle);
95 render->Render(handle);
101 const auto& deferredBuffer =
102 frameBuffer ==
nullptr ? m_renderMgr->GetMainBuffer() : frameBuffer;
103 deferredBuffer->AttachFrameBuffer();
104 gbuffer.AttachLightPass();
108#ifdef CSE_SETTINGS_RENDER_SDFGI_SUPPORT
110 m_renderMgr->BindSdfMapUniforms(*lightPassHandle);
111 layoutBegin += m_renderMgr->BindSdfMapTextures(*lightPassHandle, layoutBegin);
114 if (lightPassHandle->CullFace == 0) {
115 glDisable(GL_CULL_FACE);
117 glEnable(GL_CULL_FACE);
118 glCullFace(lightPassHandle->CullFace);
121 gbuffer.AttachLightPassTexture(layoutBegin);
125 cameraMatrix.projection, cameraMatrix.camera);
126 gbuffer.RenderLightPass();
static void BindCameraToShader(const GLProgramHandle &handle, const mat4 &camera, const vec3 &cameraPosition, const mat4 &projection, const mat4 &transform)
Binds the camera data to the shader.