From 89bedf95950f0c7d97ecd6e7581566ff9643fad3 Mon Sep 17 00:00:00 2001 From: Astazium <113135541+Astazium@users.noreply.github.com> Date: Thu, 17 Sep 2026 01:27:21 +0300 Subject: [PATCH] fix noiseTexture deleting --- src/graphics/core/PostProcessing.cpp | 67 ++++++++++++++++------------ src/graphics/core/PostProcessing.hpp | 2 +- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/graphics/core/PostProcessing.cpp b/src/graphics/core/PostProcessing.cpp index ec491c527..05682be04 100644 --- a/src/graphics/core/PostProcessing.cpp +++ b/src/graphics/core/PostProcessing.cpp @@ -1,4 +1,7 @@ #include "PostProcessing.hpp" + +#include + #include "Mesh.hpp" #include "Shader.hpp" #include "GBuffer.hpp" @@ -10,15 +13,37 @@ #include "window/Camera.hpp" #include -#include // TODO: REFACTOR WHOLE RENDER ENGINE using namespace advanced_pipeline; +static uint create_noise_texture() { + std::vector ssaoNoise; + for (unsigned int i = 0; i < 16; i++) { + glm::vec3 noise( + (rand() / static_cast(RAND_MAX)) * 2.0 - 1.0, + (rand() / static_cast(RAND_MAX)) * 2.0 - 1.0, + 0.0f + ); + ssaoNoise.push_back(noise); + } + + uint noiseTexture; + glGenTextures(1, &noiseTexture); + glBindTexture(GL_TEXTURE_2D, noiseTexture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, 4, 4, 0, GL_RGB, GL_FLOAT, ssaoNoise.data()); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glBindTexture(GL_TEXTURE_2D, 0); + return noiseTexture; +} + PostProcessing::PostProcessing(size_t effectSlotsCount) : effectSlots(effectSlotsCount) { - // Fullscreen quad mesh bulding + // Fullscreen quad mesh building PostProcessingVertex meshData[] { {{-1.0f, -1.0f}}, {{-1.0f, 1.0f}}, @@ -29,27 +54,12 @@ PostProcessing::PostProcessing(size_t effectSlotsCount) }; quadMesh = std::make_unique>(meshData, 6); - - std::vector ssaoNoise; - for (unsigned int i = 0; i < 16; i++) - { - glm::vec3 noise( - (rand() / static_cast(RAND_MAX)) * 2.0 - 1.0, - (rand() / static_cast(RAND_MAX)) * 2.0 - 1.0, - 0.0f); - ssaoNoise.push_back(noise); - } - glGenTextures(1, &noiseTexture); - glBindTexture(GL_TEXTURE_2D, noiseTexture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, 4, 4, 0, GL_RGB, GL_FLOAT, ssaoNoise.data()); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glBindTexture(GL_TEXTURE_2D, 0); + noiseTexture = create_noise_texture(); } -PostProcessing::~PostProcessing() = default; +PostProcessing::~PostProcessing() { + glDeleteTextures(1, &noiseTexture); +} void PostProcessing::use(DrawContext& context, bool gbufferPipeline) { const auto& vp = context.getViewport(); @@ -105,8 +115,9 @@ void PostProcessing::configureEffect( shader.uniform3f("u_cameraPos", camera.position); shader.uniform1f("u_timer", timer); shader.uniformMatrix("u_projection", camera.getProjection()); - shader.uniformMatrix("u_view", camera.getView()); - shader.uniformMatrix("u_inverseView", glm::inverse(camera.getView())); + const auto view = camera.getView(); + shader.uniformMatrix("u_view", view); + shader.uniformMatrix("u_inverseView", glm::inverse(view)); } void PostProcessing::renderDeferredShading( @@ -150,15 +161,15 @@ void PostProcessing::renderDeferredShading( gbuffer->bindSSAOBuffer(); glActiveTexture(GL_TEXTURE0); - + gbuffer->bindBuffers(); - auto& effect = assets.require("deferred_lighting"); - auto& shader = effect.use(); + auto& lightingEffect = assets.require("deferred_lighting"); + auto& lightingShader = lightingEffect.use(); configureEffect( context, - effect, - shader, + lightingEffect, + lightingShader, timer, camera ); diff --git a/src/graphics/core/PostProcessing.hpp b/src/graphics/core/PostProcessing.hpp index f05b64701..095e4e2b3 100644 --- a/src/graphics/core/PostProcessing.hpp +++ b/src/graphics/core/PostProcessing.hpp @@ -78,5 +78,5 @@ private: std::unique_ptr> quadMesh; std::vector> effectSlots; std::unique_ptr gbuffer; - uint noiseTexture; + uint noiseTexture = 0; };