34 const auto& material =
object->GetMaterialReference();
35 if (material ==
nullptr)
return;
37 short orderLayer = material->GetOrderLayer();
38 const auto& shaders = material->GetShaders();
39 if (shaders ==
nullptr)
return;
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),
51 if (layerVector.empty()) programLayer.erase(handlerPair);
53 if (programLayer.empty()) m_rendersLayer.erase(orderLayerIter);
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();
65 for (
const auto& orderLayerPair : orderRenderLayer) {
66 const auto& orderLayer = orderLayerPair.second;
67 ProgramRenderLayer programComp(orderLayer.begin(), orderLayer.end());
69 for (
const auto& programPair : programComp) {
70 const auto& handler = *programPair.first->GetForwardHandle();
71 const auto& renderComp = programPair.second;
73 if (programPair.first ==
nullptr)
continue;
74 if (renderComp.empty())
continue;
76 glUseProgram(handler.Program);
80#ifdef CSE_SETTINGS_RENDER_SDFGI_SUPPORT
81 m_renderMgr->BindSdfMapUniforms(handler);
82 layoutBegin += m_renderMgr->BindSdfMapTextures(handler, layoutBegin);
84 if (handler.CullFace == 0) {
85 glDisable(GL_CULL_FACE);
87 glEnable(GL_CULL_FACE);
88 glCullFace(handler.CullFace);
91 for (
const auto& render : renderComp) {
92 if (render ==
nullptr)
continue;
93 if (!render->isRenderActive)
continue;
95 const auto& material = render->GetMaterial();
96 int materialLayout = material->AttachElement(layoutBegin);
97 render->SetMatrix(cameraMatrix, &handler);
99 render->Render(&handler);
105 glBindBuffer(GL_ARRAY_BUFFER, 0);
106 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);