From 51bb5db4951c593279d57795b4103fac46386345 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Sun, 15 Jan 2023 04:52:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=BC=D1=8B=D1=82=D0=B8?= =?UTF-8?q?=D0=B5=20SSAO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9256268..66d7e32 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,6 +19,7 @@ Texture* pgDiffuseP = NULL; Texture* pgAmbientSpecular = NULL; RBO* pgrbo = NULL; Texture* pssaoTexture = NULL; +Texture* pssaoTexture_raw = NULL; // Размеры окна int WINDOW_WIDTH = 800; int WINDOW_HEIGHT = 600; @@ -43,6 +44,8 @@ void framebuffer_size_callback(GLFWwindow* window, int width, int height) // SSAO if (pssaoTexture) pssaoTexture->reallocate(width, height, 6, GL_RED, GL_RED); + if (pssaoTexture_raw) + pssaoTexture_raw->reallocate(width, height, 0, GL_RED, GL_RED); // Запомним новые размеры окна WINDOW_WIDTH = width; @@ -252,8 +255,8 @@ int main(void) GLuint attachments_ssao[] = { GL_COLOR_ATTACHMENT0 }; FBO ssaoBuffer(attachments_ssao, sizeof(attachments_ssao) / sizeof(GLuint)); // Создадим текстуры для буфера кадра - Texture ssaoTexture(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT0, 6, GL_RED, GL_RED); - pssaoTexture = &ssaoTexture; + Texture ssaoTexture_raw(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT0, 0, GL_RED, GL_RED); + pssaoTexture_raw = &ssaoTexture_raw; // Активируем базовый буфер кадра FBO::useDefault(); @@ -300,6 +303,21 @@ int main(void) const char* ssaoShader_names[] = {"gPosition", "gNormal", "noise"}; ssaoShader.bindTextures(ssaoShader_names, sizeof(ssaoShader_names)/sizeof(const char*)); + // Создадим буфер для размытия SSAO + FBO ssaoBlurBuffer(attachments_ssao, sizeof(attachments_ssao) / sizeof(GLuint)); + // Создадим текстуры для буфера кадра + Texture ssaoTexture(WINDOW_WIDTH, WINDOW_HEIGHT, GL_COLOR_ATTACHMENT0, 6, GL_RED, GL_RED); + pssaoTexture = &ssaoTexture; + // Активируем базовый буфер кадра + FBO::useDefault(); + + // Шейдер для размытия SSAO + ShaderProgram ssaoBlurShader; + // Загрузим шейдер + ssaoBlurShader.load(GL_VERTEX_SHADER, "shaders/quad.vert"); + ssaoBlurShader.load(GL_FRAGMENT_SHADER, "shaders/ssaoBlur.frag"); + ssaoBlurShader.link(); + // Модель прямоугольника Model rectangle; @@ -443,6 +461,17 @@ int main(void) // Рендерим прямоугольник quadModel.render(); + // Активируем буфер размытия SSAO + ssaoBlurBuffer.use(); + // Используем шейдер для размытия SSAO + ssaoBlurShader.use(); + // Очистка буфера цвета + glClear(GL_COLOR_BUFFER_BIT); + // Подключаем текстуру сырого SSAO + ssaoTexture_raw.use(); + // Рендерим прямоугольник + quadModel.render(); + // Изменим размер вывода для тени glViewport(0, 0, sunShadow_resolution, sunShadow_resolution); // Активируем буфер кадра для теней от солнца