46template <
typename MainCameraTag>
50 std::optional<GLuint>
update();
170template <
typename MainCameraTag>
181 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/position_and_normal.glsl",
Shader::Type::Vertex);
189 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/distance.glsl",
Shader::Type::Vertex);
197 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/viewspace_normal.glsl",
Shader::Type::Vertex);
199 utils::assets::readPermanent<Shader>(
"resources/shaders/fragment/viewspace_normal.glsl",
Shader::Type::Fragment);
205 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/viewspace_position.glsl",
Shader::Type::Vertex);
213 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/texcoords.glsl",
Shader::Type::Vertex);
221 utils::assets::readPermanent<Shader>(
"resources/shaders/fragment/tonemapping_aces.glsl",
Shader::Type::Fragment);
227 utils::assets::readPermanent<Shader>(
"resources/shaders/fragment/gamma_correction.glsl",
Shader::Type::Fragment);
251 utils::assets::readPermanent<Shader>(
"resources/shaders/fragment/weighted_addition.glsl",
Shader::Type::Fragment);
257 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/position.glsl",
Shader::Type::Vertex);
293 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/skybox.glsl",
Shader::Type::Vertex);
301 utils::assets::readPermanent<Shader>(
"resources/shaders/vertex/depth.glsl",
Shader::Type::Vertex);
318 utils::assets::readPermanent<Texture>(
"resources/icons/components/point_light.png");
320 utils::assets::readPermanent<Texture>(
"resources/icons/components/spot_light.png");
322 utils::assets::readPermanent<Texture>(
"resources/icons/components/directional_light.png");
324 utils::assets::readPermanent<Texture>(
"resources/icons/components/ambient_light.png");
326 utils::assets::readPermanent<Texture>(
"resources/icons/components/particles_gray.png");
328 utils::assets::readPermanent<Texture>(
"resources/icons/components/post_processing_gray.png");
330 utils::assets::readPermanent<Texture>(
"resources/icons/components/audio_source_gray.png");
333template <
typename MainCameraTag>
338 const auto aspectRatio =
static_cast<float>(
width) /
height;
339 RegistryViewer::write<CameraComponent>(*cameraOpt).aspectRatio = aspectRatio;
344 _horizontallyDilatedFrameBuffer.setSize(
width,
height);
351 _outlinedObjectsFrameBuffer.setSize(
width,
height);
352 _viewSpaceNormalFrameBuffer.setSize(
width,
height);
353 _viewSpacePositionFrameBuffer.setSize(
width,
height);
357 for (
size_t i = 0;
i < BloomSteps; ++
i) {
365template <
typename MainCameraTag>
367 return _mostRecentFrameBufferPtr->getTexture().getID();
370template <
typename MainCameraTag>
374 _litModelsFrameBuffer.clear();
375 _bloomedFrameBuffer.clear();
376 _antiAliasedFrameBuffer.clear();
377 _outlinedObjectsFrameBuffer.clear();
378 _silhouetteFrameBuffer.clear();
379 _horizontallyDilatedFrameBuffer.clear();
380 _fullyDilatedFrameBuffer.clear();
381 _differenceFrameBuffer.clear();
382 _toneMappedFrameBuffer.clear();
383 _gammaCorrectedFrameBuffer.clear();
384 _viewSpaceNormalFrameBuffer.clear();
385 _viewSpacePositionFrameBuffer.clear();
386 _ssaoFrameBuffer.clear(glm::vec3{1.0, 1.0, 1.0});
388 for (
auto&
buffer : _downscaledFrameBuffers) {
391 for (
auto&
buffer : _horizontallyBluredDownscaledFrameBuffers) {
394 for (
auto&
buffer : _fullyBluredDownscaledFrameBuffers) {
399template <
typename MainCameraTag>
404 Logger::ERROR(
"There is no Camera with registered type. Cannot render anything");
410 constexpr auto DrawDebugInfo = std::is_same_v<MainCameraTag, SceneCamera>;
415 _mostRecentFrameBufferPtr = &_litModelsFrameBuffer;
422 renderViewPosition();
425 renderDirectionalLightShadowMaps();
426 renderPointLightShadowMaps();
427 renderSpotLightShadowMaps();
431 renderWorldObjects();
447 renderPostProcessingVolumes();
448 renderOutlineOfSelectedEntities();
449 renderDebugBillboards();
450 renderOverlayModels();
458template <
typename MainCameraTag>
462 _viewSpacePositionShaderProgram.use();
463 _viewSpacePositionFrameBuffer.bind();
471 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
474 _viewSpacePositionShaderProgram.setUniform(
"view",
viewMatrix);
483 _viewSpacePositionFrameBuffer.unbind();
484 _viewSpacePositionShaderProgram.stopUsing();
487template <
typename MainCameraTag>
491 _viewSpaceNormalShaderProgram.use();
492 _viewSpaceNormalFrameBuffer.bind();
500 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
503 _viewSpaceNormalShaderProgram.setUniform(
"view",
viewMatrix);
512 _viewSpaceNormalFrameBuffer.unbind();
513 _viewSpaceNormalShaderProgram.stopUsing();
516template <
typename MainCameraTag>
523 if (_ssaoKernel.empty() ||
radius != _usedSsaoRadius) {
534 scale = glm::mix(0.05f, _usedSsaoRadius, scale * scale);
542 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
546 _ssaoShaderProgram.setUniform(
"strength",
strength);
548 _viewSpacePositionFrameBuffer.getTexture().activate(
GL_TEXTURE0);
549 _ssaoShaderProgram.setUniform(
"depthTexture", 0);
550 _viewSpaceNormalFrameBuffer.getTexture().activate(
GL_TEXTURE1);
551 _ssaoShaderProgram.setUniform(
"normalTexture", 1);
555 _ssaoShaderProgram.setUniform(
"samples[" + std::to_string(
i) +
"]", _ssaoKernel[
i]);
563 _ssaoFrameBuffer.bind();
565 _ssaoFrameBuffer.unbind();
568template <
typename MainCameraTag>
571 for (
const auto& [
entity,
_] : RegistryViewer::readAll<SelectedEntityComponent>()) {
576template <
typename MainCameraTag>
579 [
this](
auto e) { return _registry->hasComponent<NameComponent>(e); })) {
586 const auto&
children = _registry->getHierarchy().getChildren(
entity);
593 _silhouetteFrameBuffer.bind();
598 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
601 _silhouetteShaderProgram.use();
602 _silhouetteShaderProgram.setUniform(
"fixedColor", glm::vec3{1.0, 0.1, 1.0});
611 _silhouetteShaderProgram.stopUsing();
612 _silhouetteFrameBuffer.unbind();
615 {{
"silhouetteTexture", &_silhouetteFrameBuffer.getTexture()}},
619 {{
"silhouetteTexture", &_horizontallyDilatedFrameBuffer.getTexture()}},
623 _differenceFrameBuffer, _subtractShaderProgram,
624 {{
"first", &_fullyDilatedFrameBuffer.getTexture()}, {
"second", &_silhouetteFrameBuffer.getTexture()}});
627 _outlinedObjectsFrameBuffer, _overlayShaderProgram,
628 {{
"background", &_mostRecentFrameBufferPtr->getTexture()}, {
"overlay", &_differenceFrameBuffer.getTexture()}});
632 _mostRecentFrameBufferPtr = &_outlinedObjectsFrameBuffer;
635template <
typename MainCameraTag>
637 SHKYERA_PROFILE(
"RenderingSystem<MainCameraTag>::renderDirectionalLightShadowMaps");
647 if (_directionalLightToShadowMap.find(
entity) == _directionalLightToShadowMap.end()) {
659 for (
const auto& [
entity,
_buffer] : _directionalLightToShadowMap) {
679 _depthShaderProgram.use();
692 _depthShaderProgram.stopUsing();
698template <
typename MainCameraTag>
700 SHKYERA_PROFILE(
"RenderingSystem<MainCameraTag>::renderPointLightShadowMaps");
710 if (_pointLightToShadowMap.find(
entity) == _pointLightToShadowMap.end()) {
722 for (
const auto& [
entity,
_buffer] : _pointLightToShadowMap) {
744 glm::vec3(0.0f, -1.0f, 0.0f)),
746 glm::vec3(0.0f, -1.0f, 0.0f)),
750 glm::vec3(0.0f, 0.0f, -1.0f)),
752 glm::vec3(0.0f, -1.0f, 0.0f)),
754 glm::vec3(0.0f, -1.0f, 0.0f))
757 _distanceShaderProgram.use();
763 _distanceShaderProgram.setUniform(
"projectionViewMatrix",
lightSpaceMatrix);
775 _distanceShaderProgram.stopUsing();
779template <
typename MainCameraTag>
781 SHKYERA_PROFILE(
"RenderingSystem<MainCameraTag>::renderSpotLightShadowMaps");
791 if (_spotLightToShadowMap.find(
entity) == _spotLightToShadowMap.end()) {
803 for (
const auto& [
entity,
_buffer] : _spotLightToShadowMap) {
825 _distanceShaderProgram.use();
828 _distanceShaderProgram.setUniform(
"projectionViewMatrix",
lightSpaceMatrix);
836 _distanceShaderProgram.stopUsing();
840template <
typename MainCameraTag>
854 _mostRecentFrameBufferPtr->bind();
859 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
868 _modelShaderProgram.setUniform(
"ambientLight",
ambientColor);
874 _modelShaderProgram.setUniform(
"pointLightsDepthCubeMap[" + std::to_string(
pointLightIndex) +
"]", _textureIndex);
878 _modelShaderProgram.setUniform(
"pointLights[" + std::to_string(
pointLightIndex) +
"].position",
880 _modelShaderProgram.setUniform(
"pointLights[" + std::to_string(
pointLightIndex) +
"].color",
882 _modelShaderProgram.setUniform(
"pointLights[" + std::to_string(
pointLightIndex) +
"].range",
903 _modelShaderProgram.setUniform(
"directionalLightsDepthMap[" + std::to_string(
directionalLightIndex) +
"]",
908 _modelShaderProgram.setUniform(
"directionalLights[" + std::to_string(
directionalLightIndex) +
"].direction",
910 _modelShaderProgram.setUniform(
"directionalLights[" + std::to_string(
directionalLightIndex) +
"].color",
926 _modelShaderProgram.setUniform(
"spotLights[" + std::to_string(
spotLightIndex) +
"].lightSpaceMatrix",
928 _modelShaderProgram.setUniform(
"spotLights[" + std::to_string(
spotLightIndex) +
"].position",
931 _modelShaderProgram.setUniform(
"spotLights[" + std::to_string(
spotLightIndex) +
"].color",
933 _modelShaderProgram.setUniform(
"spotLights[" + std::to_string(
spotLightIndex) +
"].range",
935 _modelShaderProgram.setUniform(
"spotLights[" + std::to_string(
spotLightIndex) +
"].innerCutoffCosine",
937 _modelShaderProgram.setUniform(
"spotLights[" + std::to_string(
spotLightIndex) +
"].outerCutoffCosine",
944 _modelShaderProgram.setUniform(
"spotLightsShadowMap[" + std::to_string(
spotLightIndex) +
"]", _textureIndex);
953 _ssaoFrameBuffer.getTexture().activate(
GL_TEXTURE0 + _textureIndex);
954 _modelShaderProgram.setUniform(
"ssao", _textureIndex);
957 _modelShaderProgram.setUniform(
"viewportSize", _mostRecentFrameBufferPtr->getSize());
961 SHKYERA_PROFILE(
"RenderingSystem<MainCameraTag>::renderWorldObjects - Models");
967 const auto& material = std::get<AssetRef<Material>>(
modelComponent.material);
968 setMaterial(material.get());
975template <
typename MainCameraTag>
995 for (
const auto& [
entity,
emitter] : RegistryViewer::readAll<ParticleEmitterComponent>()) {
1004 const auto& material = std::get<AssetRef<Material>>(
emitter.material);
1005 setMaterial(material.get());
1007 const auto& state =
emitter.state;
1009 for (
size_t i = 0;
i < state.lifetimes.size(); ++
i) {
1010 if (state.lifetimes[
i] < 0) {
1018 _modelShaderProgram.setUniform(
"material.alphaMultiplier", state.transparencies[
i]);
1030template <
typename MainCameraTag>
1035 _mostRecentFrameBufferPtr->bind();
1053 RegistryViewer::readAll<BillboardComponent<RuntimeMode::PRODUCTION>>()) {
1062 _modelShaderProgram.setUniform(
"modelMatrix",
modelMatrix);
1065 setMaterial(material.get());
1075 _mostRecentFrameBufferPtr->unbind();
1078template <
typename MainCameraTag>
1083 _mostRecentFrameBufferPtr->bind();
1112 glm::vec3 forward = glm::normalize(glm::vec3(
baseTransform[2]));
1122 _modelShaderProgram.setUniform(
"modelMatrix",
modelMatrix);
1124 setMaterial(material);
1132 drawDebugBillboard(RegistryViewer::readAll<PointLightComponent>(), &_pointLightDebugMaterial);
1133 drawDebugBillboard(RegistryViewer::readAll<DirectionalLightComponent>(), &_directionalLightDebugMaterial);
1134 drawDebugBillboard(RegistryViewer::readAll<SpotLightComponent>(), &_spotLightDebugMaterial);
1135 drawDebugBillboard(RegistryViewer::readAll<AmbientLightComponent>(), &_ambientLightDebugMaterial);
1136 drawDebugBillboard(RegistryViewer::readAll<ParticleEmitterComponent>(), &_particleEmitterDebugMaterial);
1137 drawDebugBillboard(RegistryViewer::readAll<PostProcessingVolumeComponent>(), &_postProcessingVolumeDebugMaterial);
1138 drawDebugBillboard(RegistryViewer::readAll<AudioSourceComponent>(), &_audioSourceDebugMaterial);
1146 _mostRecentFrameBufferPtr->unbind();
1148template <
typename MainCameraTag>
1153 _mostRecentFrameBufferPtr->bind();
1162 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
1168 for (
const auto& [
entity,
_volumeComponent] : RegistryViewer::readAll<PostProcessingVolumeComponent>()) {
1175 _mostRecentFrameBufferPtr->unbind();
1178template <
typename MainCameraTag>
1186 {{
"sceneTexture", &_mostRecentFrameBufferPtr->getTexture()}},
1188 for (
size_t i = 1;
i < BloomSteps; ++
i) {
1190 {{
"sceneTexture", &_downscaledFrameBuffers[
i - 1].getTexture()}},
1195 for (
size_t i = 0;
i < BloomSteps; ++
i) {
1197 {{
"textureToBlur", &_downscaledFrameBuffers[
i].getTexture()}},
1202 for (
size_t i = 0;
i < BloomSteps; ++
i) {
1204 _fullyBluredDownscaledFrameBuffers[
i], _verticalBlurShaderProgram,
1205 {{
"textureToBlur", &_horizontallyBluredDownscaledFrameBuffers[
i].getTexture()}},
1206 utils::Uniform(
"resolution", _horizontallyBluredDownscaledFrameBuffers[
i].getSize()));
1210 auto*
currentBuffer = &_fullyBluredDownscaledFrameBuffers[BloomSteps - 1];
1213 for (
int i = BloomSteps - 2;
i >= 0; --
i) {
1214 auto*
nextBuffer = &_fullyBluredDownscaledFrameBuffers[
i];
1227 _bloomedFrameBuffer, _weightedAdditionShaderProgram,
1228 {{
"firstTexture", &_mostRecentFrameBufferPtr->getTexture()}, {
"secondTexture", &
currentBuffer->getTexture()}},
1232 _mostRecentFrameBufferPtr = &_bloomedFrameBuffer;
1235template <
typename MainCameraTag>
1242 {{
"original", &_mostRecentFrameBufferPtr->getTexture()}});
1245 _mostRecentFrameBufferPtr = &_toneMappedFrameBuffer;
1248template <
typename MainCameraTag>
1255 {{
"original", &_mostRecentFrameBufferPtr->getTexture()}},
1259 _mostRecentFrameBufferPtr = &_gammaCorrectedFrameBuffer;
1262template <
typename MainCameraTag>
1268 _mostRecentFrameBufferPtr->bind();
1274 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
1276 _wireframeShaderProgram.use();
1285 _wireframeShaderProgram.setUniform(
"fixedColor",
wireframeColor);
1289 _wireframeShaderProgram.stopUsing();
1290 _mostRecentFrameBufferPtr->unbind();
1293template <
typename MainCameraTag>
1301 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
1306 _mostRecentFrameBufferPtr->bind();
1307 _skyboxShaderProgram.use();
1308 _skyboxShaderProgram.setUniform(
"viewMatrix", glm::mat4(
viewMatrix));
1311 for (
const auto&
skybox : RegistryViewer::read<SkyboxComponent>()) {
1312 const auto& skyboxCubeMap = std::get<AssetRef<CubeMap>>(
skybox.skyboxCubeMap);
1313 SHKYERA_ASSERT(skyboxCubeMap,
"Skybox CubeMap Asset is not loaded");
1316 _skyboxShaderProgram.setUniform(
"skybox", 0);
1320 _skyboxShaderProgram.stopUsing();
1321 _mostRecentFrameBufferPtr->unbind();
1326template <
typename MainCameraTag>
1328 SHKYERA_PROFILE(
"RenderingSystem<MainCameraTag>::renderOverlayModels");
1332 _mostRecentFrameBufferPtr->bind();
1338 RegistryViewer::read<CameraComponent>(*_registry->getEntity<
MainCameraTag>()).getProjectionMatrix();
1340 _wireframeShaderProgram.use();
1351 _wireframeShaderProgram.stopUsing();
1352 _mostRecentFrameBufferPtr->unbind();
1357template <
typename MainCameraTag>
1362 {{
"sceneTexture", &_mostRecentFrameBufferPtr->getTexture()}});
1365 _mostRecentFrameBufferPtr = &_antiAliasedFrameBuffer;
1368template <
typename MainCameraTag>
1373 _modelShaderProgram.setUniform(
"material." +
textureName +
"TextureLoaded",
true);
1376 _modelShaderProgram.setUniform(
"material." +
textureName +
"Texture", _textureIndex);
1379 _modelShaderProgram.setUniform(
"material." +
textureName +
"TextureLoaded",
false);
1383template <
typename MainCameraTag>
1386 if (material ==
nullptr) {
1387 material = &_defaultMaterial;
1390 _modelShaderProgram.setUniform(
"material.lit", material->
lit);
1391 _modelShaderProgram.setUniform(
"material.alphaMultiplier", material->
alphaMultiplier);
1392 _modelShaderProgram.setUniform(
"material.albedoColor", material->
albedo);
1394 _modelShaderProgram.setUniform(
"material.roughness", material->
roughness);
1395 _modelShaderProgram.setUniform(
"material.metallic", material->
metallic);
1396 _modelShaderProgram.setUniform(
"material.normalMapStrength", material->
normalMapStrength);
1405template <
typename MainCameraTag>
1407 static const auto volume =
AABB{.
center = {0, 0, 0}, .extents = {1.0, 1.0, 1.0}};
1421 for (
const auto&
postProcessingVolume : RegistryViewer::read<PostProcessingVolumeComponent>()) {
#define SHKYERA_ASSERT(predicate,...)
Definition Assert.hpp:7
#define SHKYERA_PROFILE(name)
Definition Profiler.hpp:45
Component that enables audio playback for an entity.
Definition AudioSourceComponent.hpp:13
Definition CameraComponent.hpp:10
Definition CubeMap.hpp:12
Definition DepthAtlasFrameBuffer.hpp:10
Definition EntityHierarchy.hpp:20
Definition ModelComponent.hpp:12
Definition NameComponent.hpp:9
Definition OverlayModelComponent.hpp:12
Definition RegistryViewer.hpp:51
Definition RenderingSystem.hpp:47
Material _spotLightDebugMaterial
Definition RenderingSystem.hpp:162
std::optional< GLuint > update()
Definition RenderingSystem.hpp:400
void renderBillboards()
Definition RenderingSystem.hpp:1031
SceneFrameBuffer _gammaCorrectedFrameBuffer
Definition RenderingSystem.hpp:121
void renderSSAO(float strength, float radius)
Definition RenderingSystem.hpp:517
void setSize(uint32_t width, uint32_t height)
Definition RenderingSystem.hpp:334
ShaderProgram _ssaoShaderProgram
Definition RenderingSystem.hpp:111
PostProcessingVolumeComponent getPostProcessingSettings()
Definition RenderingSystem.hpp:1406
ShaderProgram _viewSpacePositionShaderProgram
Definition RenderingSystem.hpp:110
SceneFrameBuffer _differenceFrameBuffer
Definition RenderingSystem.hpp:138
SceneFrameBuffer _horizontallyDilatedFrameBuffer
Definition RenderingSystem.hpp:136
int _textureIndex
Definition RenderingSystem.hpp:88
void setTexture(Material const *material, const std::string &textureName, auto textureMember)
Definition RenderingSystem.hpp:1369
void renderSkybox()
Definition RenderingSystem.hpp:1294
void renderWireframes()
Definition RenderingSystem.hpp:1263
Material _defaultMaterial
Definition RenderingSystem.hpp:159
static constexpr size_t BloomSteps
Definition RenderingSystem.hpp:124
SceneFrameBuffer _outlinedObjectsFrameBuffer
Definition RenderingSystem.hpp:139
SceneFrameBuffer _antiAliasedFrameBuffer
Definition RenderingSystem.hpp:102
SceneFrameBuffer _litModelsFrameBuffer
Definition RenderingSystem.hpp:97
ShaderProgram _skyboxShaderProgram
Definition RenderingSystem.hpp:147
ShaderProgram _modelShaderProgram
Definition RenderingSystem.hpp:98
Material _pointLightDebugMaterial
Definition RenderingSystem.hpp:163
SceneFrameBuffer _toneMappedFrameBuffer
Definition RenderingSystem.hpp:117
std::unordered_map< Entity, DepthAtlasFrameBuffer > _directionalLightToShadowMap
Definition RenderingSystem.hpp:150
ShaderProgram _viewSpaceNormalShaderProgram
Definition RenderingSystem.hpp:109
SceneFrameBuffer _fullyDilatedFrameBuffer
Definition RenderingSystem.hpp:137
void renderDebugBillboards()
Definition RenderingSystem.hpp:1079
SceneFrameBuffer _bloomedFrameBuffer
Definition RenderingSystem.hpp:128
std::vector< glm::vec3 > _ssaoKernel
Definition RenderingSystem.hpp:112
void renderPointLightShadowMaps()
Definition RenderingSystem.hpp:699
ShaderProgram _overlayShaderProgram
Definition RenderingSystem.hpp:143
ShaderProgram _wireframeShaderProgram
Definition RenderingSystem.hpp:99
ShaderProgram _distanceShaderProgram
Definition RenderingSystem.hpp:154
float _usedSsaoRadius
Definition RenderingSystem.hpp:113
void renderDirectionalLightShadowMaps()
Definition RenderingSystem.hpp:636
void clearFrameBuffers()
Definition RenderingSystem.hpp:371
void antiAliasing()
Definition RenderingSystem.hpp:1358
std::unordered_map< Entity, DepthAtlasFrameBuffer > _spotLightToShadowMap
Definition RenderingSystem.hpp:156
std::unordered_map< Entity, DepthAtlasFrameBuffer > _pointLightToShadowMap
Definition RenderingSystem.hpp:153
void renderOutlineOfSelectedEntities()
Definition RenderingSystem.hpp:569
void renderViewNormals()
Definition RenderingSystem.hpp:488
void renderViewPosition()
Definition RenderingSystem.hpp:459
SceneFrameBuffer * _mostRecentFrameBufferPtr
Definition RenderingSystem.hpp:94
RenderingSystem(std::shared_ptr< Registry > registry)
Definition RenderingSystem.hpp:171
void renderSpotLightShadowMaps()
Definition RenderingSystem.hpp:780
void renderParticles()
Definition RenderingSystem.hpp:976
GLuint getRenderFrameBuffer()
Definition RenderingSystem.hpp:366
CubeMap _skyboxCubeMap
Definition RenderingSystem.hpp:146
ShaderProgram _antiAliasingShaderProgram
Definition RenderingSystem.hpp:103
ShaderProgram _thresholdShaderProgram
Definition RenderingSystem.hpp:129
SceneFrameBuffer _silhouetteFrameBuffer
Definition RenderingSystem.hpp:135
Material _particleEmitterDebugMaterial
Definition RenderingSystem.hpp:165
void renderPostProcessingVolumes()
Definition RenderingSystem.hpp:1149
Material _directionalLightDebugMaterial
Definition RenderingSystem.hpp:161
std::shared_ptr< Registry > _registry
Definition RenderingSystem.hpp:91
ShaderProgram _dilateShaderProgram
Definition RenderingSystem.hpp:141
SceneFrameBuffer _viewSpaceNormalFrameBuffer
Definition RenderingSystem.hpp:107
void toneMapping()
Definition RenderingSystem.hpp:1236
void renderOverlayModels()
Definition RenderingSystem.hpp:1327
void bloom(float threshold, float weight)
Definition RenderingSystem.hpp:1179
SceneFrameBuffer _viewSpacePositionFrameBuffer
Definition RenderingSystem.hpp:106
ShaderProgram _horizontalBlurShaderProgram
Definition RenderingSystem.hpp:130
SceneFrameBuffer _ssaoFrameBuffer
Definition RenderingSystem.hpp:108
ShaderProgram _subtractShaderProgram
Definition RenderingSystem.hpp:142
void setMaterial(Material const *material)
Definition RenderingSystem.hpp:1384
void renderWorldObjects()
Definition RenderingSystem.hpp:841
ShaderProgram _silhouetteShaderProgram
Definition RenderingSystem.hpp:140
ShaderProgram _weightedAdditionShaderProgram
Definition RenderingSystem.hpp:132
std::array< SceneFrameBuffer, BloomSteps > _horizontallyBluredDownscaledFrameBuffers
Definition RenderingSystem.hpp:126
std::array< SceneFrameBuffer, BloomSteps > _downscaledFrameBuffers
Definition RenderingSystem.hpp:125
ShaderProgram _gammaCorrectionShaderProgram
Definition RenderingSystem.hpp:120
void renderOutline(const std::set< Entity > &entities)
Definition RenderingSystem.hpp:577
Material _postProcessingVolumeDebugMaterial
Definition RenderingSystem.hpp:166
std::array< SceneFrameBuffer, BloomSteps > _fullyBluredDownscaledFrameBuffers
Definition RenderingSystem.hpp:127
void gammaCorrection(float gamma)
Definition RenderingSystem.hpp:1249
ShaderProgram _toneMappingShaderProgram
Definition RenderingSystem.hpp:116
Material _audioSourceDebugMaterial
Definition RenderingSystem.hpp:167
Material _ambientLightDebugMaterial
Definition RenderingSystem.hpp:164
ShaderProgram _depthShaderProgram
Definition RenderingSystem.hpp:151
ShaderProgram _verticalBlurShaderProgram
Definition RenderingSystem.hpp:131
Definition SceneFrameBuffer.hpp:11
Definition ShaderProgram.hpp:15
void attachShader(const std::shared_ptr< Shader > &shader)
Definition ShaderProgram.cpp:14
void link()
Definition ShaderProgram.cpp:18
Definition ShaderProgram.hpp:43
std::pair< std::string, ValueType > Uniform(const std::string &name, const ValueType &value)
Definition Utils.hpp:12
void drawFullscreenQuad()
Definition Utils.cpp:5
void applyShaderToFrameBuffer(SceneFrameBuffer &frameBuffer, ShaderProgram &shaderProgram, std::vector< std::pair< const char *, const Texture * > > textures, Uniforms... uniforms)
Definition Utils.hpp:17
glm::vec3 center
Definition AABB.hpp:9
Definition AmbientLightComponent.hpp:8
Definition BillboardComponent.hpp:16
Occlusion occlusion
Definition BillboardComponent.hpp:26
Scale scale
Definition BillboardComponent.hpp:25
Definition DirectionalLightComponent.hpp:13
static glm::vec3 getDirection(const glm::mat4 &lightTransformMatrix)
Definition DirectionalLightComponent.hpp:49
static uint8_t LevelsOfDetail
Definition DirectionalLightComponent.hpp:18
Definition Material.hpp:10
float metallic
Definition Material.hpp:20
HandleAndAsset< Texture > roughnessTexture
Definition Material.hpp:23
HandleAndAsset< Texture > normalTexture
Definition Material.hpp:22
bool lit
Definition Material.hpp:13
HandleAndAsset< Texture > metallicTexture
Definition Material.hpp:24
HandleAndAsset< Texture > albedoTexture
Definition Material.hpp:21
float emissiveStrength
Definition Material.hpp:17
float alphaMultiplier
Definition Material.hpp:14
glm::vec3 emissive
Definition Material.hpp:16
HandleAndAsset< Texture > emissiveTexture
Definition Material.hpp:25
glm::vec3 albedo
Definition Material.hpp:15
float roughness
Definition Material.hpp:19
float normalMapStrength
Definition Material.hpp:18
Definition ParticleEmitterComponent.hpp:11
Definition PointLightComponent.hpp:11
Definition PostProcessingVolumeComponent.hpp:5
Definition RegistryViewer.hpp:14
Definition SelectedEntityComponent.hpp:7
Definition SkyboxComponent.hpp:10
Definition SpotLightComponent.hpp:11
Definition WireframeComponent.hpp:10
Definition RegistryViewer.hpp:24