PeriDyno 1.0.0
Loading...
Searching...
No Matches
SSAO.cpp
Go to the documentation of this file.
1#include "SSAO.h"
2
3#include <random>
4#include <glad/glad.h>
5
6#include "screen.vert.h"
7#include "ssao.frag.h"
8
9namespace dyno
10{
12 {
13 mWidth = mHeight = 0;
14
15 // shader programs
17 SCREEN_VERT, sizeof(SCREEN_VERT),
18 SSAO_FRAG, sizeof(SSAO_FRAG));
19
20 // SSAO kernel
21 mSSAOKernelUBO.create(GL_UNIFORM_BUFFER, GL_STATIC_DRAW);
22 mSSAOKernelUBO.bindBufferBase(3);
23
24 std::uniform_real_distribution<float> randomFloats(0.0, 1.0); // random floats between [0.0, 1.0]
25 std::default_random_engine generator;
26 std::vector<glm::vec3> ssaoKernel;
27 for (unsigned int i = 0; i < 64; ++i)
28 {
29 glm::vec3 sample(
30 randomFloats(generator) * 2.0 - 1.0,
31 randomFloats(generator) * 2.0 - 1.0,
32 randomFloats(generator)
33 );
34 sample = glm::normalize(sample);
35 //sample *= randomFloats(generator);
36 //ssaoKernel.push_back(sample);
37 float scale = (float)i / 64.0;
38 //scale = lerp(0.1f, 1.0f, scale * scale);
39 scale = 0.1f + scale * scale * 0.9f;
40 sample *= scale;
41 ssaoKernel.push_back(sample);
42 }
43
44 mSSAOKernelUBO.load(ssaoKernel.data(), ssaoKernel.size() * sizeof(glm::vec3));
45
46 // create SSAO noise here...
47 std::vector<glm::vec3> ssaoNoise;
48 for (unsigned int i = 0; i < 16; i++)
49 {
50 glm::vec3 noise(
51 randomFloats(generator) * 2.0 - 1.0,
52 randomFloats(generator) * 2.0 - 1.0,
53 0.0f);
54 ssaoNoise.push_back(noise);
55 }
56
57 mSSAONoiseTex.format = GL_RGB;
58 mSSAONoiseTex.internalFormat = GL_RGB32F;
59 mSSAONoiseTex.create();
60 mSSAONoiseTex.load(4, 4, &ssaoNoise[0]);
61 }
62
64 {
65
66 }
67
68 void SSAO::resize(unsigned int w, unsigned int h)
69 {
70 if (w == mWidth && h == mHeight)
71 return;
72
73 mWidth = w;
74 mHeight = h;
75 }
76}
77
78
static Program * createProgramSPIRV(const void *vs, size_t vs_len, const void *fs, size_t fs_len, const void *gs=0, size_t gs_len=0)
Definition Shader.cpp:202
void resize(unsigned int w, unsigned int h)
Definition SSAO.cpp:68
unsigned int mHeight
Definition SSAO.h:52
Program * mSSAOProgram
Definition SSAO.h:37
unsigned int mWidth
Definition SSAO.h:51
Texture2D mSSAONoiseTex
Definition SSAO.h:40
Buffer mSSAOKernelUBO
Definition SSAO.h:39
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25