Размытие SSAO
This commit is contained in:
parent
0d95b6364d
commit
51bb5db495
33
src/main.cpp
33
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);
|
||||
// Активируем буфер кадра для теней от солнца
|
||||
|
|
Loading…
Reference in New Issue