#ifndef SSAOPass_h__ #define SSAOPass_h__ #include "IRenderer.h" #include "SSAOPassState.h" //#include "LightCullingPass.h" Finalpass om den skall skickas in #include "FrameBuffer.h" #include "ShaderProgram.h" #include "DrawBloomPass.h" //#include "Util/UnorderedMapVec2.h" #include "Texture.h" class SSAOPass { public: SSAOPass(IRenderer* renderer, ConfigFile* config); ~SSAOPass() { }; void ChangeQuality(int quality); void Draw(GLuint depthBuffer, Camera* camera); void Setting(float radius, float bias, float contrast, float intensityScale, int numOfSamples, int numOfTurns, int iterations, int quality); void ClearBuffer(); void OnWindowResize(); //Return the SSAO of the texture sent to Draw GLuint SSAOTexture() const { if (m_Quality == 0) { return m_WhiteTexture->m_Texture; } else { return m_Gaussian_vert; } } int TextureQuality() const { if (m_Quality == 0) { return 13; } else { return m_TextureQuality; } } private: void InitializeTexture(); void InitializeFrameBuffer(); void InitializeShaderProgram(); void InitializeBuffer(); //void blurHorizontal(GLuint depthBuffer); //void blurVertical(GLuint depthBuffer); Model* m_ScreenQuad; const IRenderer* m_Renderer; ConfigFile* m_Config; float m_Radius; float m_Bias; float m_Contrast; float m_IntensityScale; int m_NumOfSamples; int m_NumOfTurns; int m_Iterations; int m_TextureQuality; int m_Quality = 0; Texture* m_WhiteTexture; GLuint m_SSAOTexture = 0; FrameBuffer m_SSAOFramBuffer; GLuint m_SSAOViewSpaceZTexture = 0; FrameBuffer m_SSAOViewSpaceZFramBuffer; GLuint m_Gaussian_horiz = 0; GLuint m_Gaussian_vert = 0; FrameBuffer m_GaussianFrameBuffer_horiz; FrameBuffer m_GaussianFrameBuffer_vert; ShaderProgram* m_SSAOProgram; ShaderProgram* m_SSAOViewSpaceZProgram; ShaderProgram* m_GaussianProgram_horiz; ShaderProgram* m_GaussianProgram_vert; }; #endif