diff --git a/Nuake/src/Rendering/PostFX/Bloom.cpp b/Nuake/src/Rendering/PostFX/Bloom.cpp index 07bb46a7..a3433c1f 100644 --- a/Nuake/src/Rendering/PostFX/Bloom.cpp +++ b/Nuake/src/Rendering/PostFX/Bloom.cpp @@ -12,6 +12,17 @@ namespace Nuake m_Iteration = iteration; } + void Bloom::SetLensDirt(Ref texture) + { + m_LensDirt = texture; + m_HasLensDirt = true; + } + + void Bloom::ClearLensDirt() + { + m_HasLensDirt = false; + } + void Bloom::SetSource(Ref source) { if (m_Source == source) @@ -164,8 +175,17 @@ namespace Nuake shader->SetUniform("u_Stage", 5); shader->SetUniform("u_Source", 1); shader->SetUniform("u_Source2", 2); + shader->SetUniform("u_HasLensDirt", m_HasLensDirt); + shader->SetUniform("u_LensDirt", 3); + if (m_LensDirt) + { + m_LensDirt->Bind(3); + shader->SetUniform("u_LensDirtIntensity", m_LensDirtIntensity); + } + m_UpSampleFB[m_Iteration - 1]->GetTexture()->Bind(1); m_Source->Bind(2); + Renderer::DrawQuad(Matrix4()); } diff --git a/Nuake/src/Rendering/PostFX/Bloom.h b/Nuake/src/Rendering/PostFX/Bloom.h index 98e9f58e..8824cafa 100644 --- a/Nuake/src/Rendering/PostFX/Bloom.h +++ b/Nuake/src/Rendering/PostFX/Bloom.h @@ -20,10 +20,15 @@ namespace Nuake { private: float m_Threshold = 2.3f; float m_BlurAmount = 12.0f; + float m_LensDirtIntensity = 1.0f; + uint32_t m_Iteration = 4; Vector2 m_Size = Vector2(); Ref m_Source; + + bool m_HasLensDirt = false; + Ref m_LensDirt; Ref m_FinalFB; Ref m_ThresholdFB; std::vector> m_DownSampleFB; @@ -34,6 +39,13 @@ namespace Nuake { Bloom() {} Bloom(unsigned int iteration = 4); + Ref GetLensDirt() { return m_LensDirt; } + void SetLensDirt(Ref texture); + void ClearLensDirt(); + + float GetLensDirtIntensity() const { return m_LensDirtIntensity; } + void SetLensDirtIntensity(float intensity) { m_LensDirtIntensity = intensity; } + void Init(); void Draw(); diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index 966aaf30..1760488b 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -46,6 +46,11 @@ namespace Nuake }; }(); + SceneRenderer::SceneRenderer() + { + Init(); + } + void SceneRenderer::Init() { const auto defaultResolution = Vector2(1920, 1080); @@ -232,7 +237,7 @@ namespace Nuake } } - if(renderUI) + if (renderUI) { mTempFrameBuffer->QueueResize(framebuffer.GetSize()); } @@ -524,13 +529,26 @@ namespace Nuake } mVignetteBuffer->Unbind(); + + + framebuffer.Bind(); { RenderCommand::Clear(); - Shader* shader = ShaderManager::GetShader("Resources/Shaders/copy.shader"); - shader->Bind(); - - shader->SetUniform("u_Source", mVignetteBuffer->GetTexture().get(), 0); + if (sceneEnv->PosterizationEnabled) + { + Shader* shader = ShaderManager::GetShader("Resources/Shaders/posterization.shader"); + shader->Bind(); + shader->SetUniform("u_Source", mVignetteBuffer->GetTexture().get(), 0); + shader->SetUniform("u_Levels", sceneEnv->PosterizationLevels); + } + else + { + Shader* shader = ShaderManager::GetShader("Resources/Shaders/copy.shader"); + shader->Bind(); + shader->SetUniform("u_Source", mVignetteBuffer->GetTexture().get(), 0); + } + Renderer::DrawQuad(); } framebuffer.Unbind(); @@ -546,6 +564,33 @@ namespace Nuake } mTempFrameBuffer->Unbind(); + if (sceneEnv->PixelizationEnabled) + { + framebuffer.Bind(); + { + RenderCommand::Clear(); + Shader* shader = ShaderManager::GetShader("Resources/Shaders/pixelization.shader"); + shader->Bind(); + + shader->SetUniform("u_Source", mTempFrameBuffer->GetTexture().get(), 0); + shader->SetUniform("u_SourceSize", framebufferResolution); + shader->SetUniform("u_PixelSize", sceneEnv->PixelSize); + Renderer::DrawQuad(); + } + framebuffer.Unbind(); + + mTempFrameBuffer->Bind(); + { + RenderCommand::Clear(); + Shader* shader = ShaderManager::GetShader("Resources/Shaders/copy.shader"); + shader->Bind(); + + shader->SetUniform("u_Source", framebuffer.GetTexture().get(), 0); + Renderer::DrawQuad(); + } + mTempFrameBuffer->Unbind(); + } + //ImGui::Begin("SDF Params"); //{ // static auto renderer = NuakeUI::Renderer::Get(); diff --git a/Nuake/src/Rendering/SceneRenderer.h b/Nuake/src/Rendering/SceneRenderer.h index eb3e9a41..78f2038b 100644 --- a/Nuake/src/Rendering/SceneRenderer.h +++ b/Nuake/src/Rendering/SceneRenderer.h @@ -48,6 +48,8 @@ namespace Nuake }; public: + SceneRenderer(); + void Init(); void Cleanup(); diff --git a/Nuake/src/Rendering/Shaders/ShaderManager.cpp b/Nuake/src/Rendering/Shaders/ShaderManager.cpp index bbbaa754..03937adb 100644 --- a/Nuake/src/Rendering/Shaders/ShaderManager.cpp +++ b/Nuake/src/Rendering/Shaders/ShaderManager.cpp @@ -48,6 +48,8 @@ namespace Nuake LoadEmbeddedShader(Resources_Shaders_ui_panel_shader); LoadEmbeddedShader(Resources_Shaders_ui_text_shader); LoadEmbeddedShader(Resources_Shaders_displayVelocity_shader); + LoadEmbeddedShader(Resources_Shaders_posterization_shader); + LoadEmbeddedShader(Resources_Shaders_pixelization_shader); } Shader* ShaderManager::GetShader(const std::string& path) diff --git a/Nuake/src/Resource/StaticResources.cpp b/Nuake/src/Resource/StaticResources.cpp index c60b84a2..f6b07974 100644 --- a/Nuake/src/Resource/StaticResources.cpp +++ b/Nuake/src/Resource/StaticResources.cpp @@ -268054,300 +268054,327 @@ namespace Nuake { 0x72, 0x63, 0x65, 0x32, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, - 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x66, 0x6C, - 0x6F, 0x61, 0x74, 0x20, 0x75, 0x5F, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6F, 0x6C, 0x64, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, - 0x6D, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x75, 0x5F, 0x42, 0x6C, - 0x75, 0x72, 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x3B, 0x0D, 0x0A, 0x75, - 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, - 0x75, 0x5F, 0x42, 0x6C, 0x75, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x69, 0x6E, 0x20, 0x76, - 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x6F, - 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x46, 0x72, 0x61, 0x67, - 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x65, - 0x63, 0x34, 0x20, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, - 0x28, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, - 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, 0x29, 0x0D, 0x0A, 0x7B, + 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x69, 0x6E, 0x74, 0x20, + 0x75, 0x5F, 0x48, 0x61, 0x73, 0x4C, 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, + 0x74, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, + 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x72, 0x32, 0x44, 0x20, 0x75, 0x5F, + 0x4C, 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, 0x74, 0x3B, 0x0D, 0x0A, 0x75, + 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, + 0x20, 0x75, 0x5F, 0x4C, 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, 0x74, 0x49, + 0x6E, 0x74, 0x65, 0x6E, 0x73, 0x69, 0x74, 0x79, 0x3B, 0x0D, 0x0A, 0x0D, + 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x66, 0x6C, 0x6F, + 0x61, 0x74, 0x20, 0x75, 0x5F, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, + 0x6C, 0x64, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, + 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x75, 0x5F, 0x42, 0x6C, 0x75, + 0x72, 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, + 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, + 0x5F, 0x42, 0x6C, 0x75, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x69, 0x6E, 0x20, 0x76, 0x65, + 0x63, 0x32, 0x20, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x6F, 0x75, + 0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, + 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x65, 0x63, + 0x34, 0x20, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, 0x28, + 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x20, + 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, 0x29, 0x0D, 0x0A, 0x7B, 0x0D, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x62, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x6E, 0x65, 0x73, 0x73, 0x20, 0x3D, 0x20, + 0x6D, 0x61, 0x78, 0x28, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x72, 0x2C, + 0x20, 0x6D, 0x61, 0x78, 0x28, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x67, + 0x2C, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x62, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, - 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6E, 0x65, 0x73, 0x73, 0x20, 0x3D, - 0x20, 0x6D, 0x61, 0x78, 0x28, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x72, - 0x2C, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, - 0x67, 0x2C, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x62, 0x29, 0x29, - 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, - 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6F, - 0x6E, 0x20, 0x3D, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x30, 0x2C, 0x20, 0x62, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x6E, 0x65, 0x73, 0x73, 0x20, 0x2D, 0x20, - 0x75, 0x5F, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, 0x29, - 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x2F, 0x3D, 0x20, 0x6D, - 0x61, 0x78, 0x28, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6E, 0x65, 0x73, - 0x73, 0x2C, 0x20, 0x30, 0x2E, 0x30, 0x30, 0x30, 0x30, 0x31, 0x29, 0x3B, - 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, - 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2A, 0x20, 0x63, 0x6F, 0x6E, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, - 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x65, 0x63, 0x34, 0x20, 0x44, 0x6F, - 0x77, 0x6E, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x42, 0x6F, 0x78, 0x31, - 0x33, 0x54, 0x61, 0x70, 0x28, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, - 0x29, 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, - 0x20, 0x3D, 0x20, 0x31, 0x2E, 0x30, 0x20, 0x2F, 0x20, 0x75, 0x5F, 0x53, - 0x6F, 0x75, 0x72, 0x63, 0x65, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x41, 0x20, 0x3D, - 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, - 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, - 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, - 0x76, 0x65, 0x63, 0x32, 0x28, 0x2D, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x2D, - 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x76, 0x65, 0x63, 0x34, 0x20, 0x42, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, - 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, - 0x28, 0x30, 0x2E, 0x30, 0x2C, 0x20, 0x2D, 0x31, 0x2E, 0x30, 0x29, 0x29, - 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x43, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, - 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, - 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, - 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2E, 0x30, 0x2C, - 0x20, 0x2D, 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x44, 0x20, 0x3D, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, - 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, - 0x63, 0x32, 0x28, 0x2D, 0x30, 0x2E, 0x35, 0x2C, 0x20, 0x2D, 0x30, 0x2E, - 0x35, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x34, 0x20, 0x45, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, - 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, - 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, - 0x2E, 0x35, 0x2C, 0x20, 0x2D, 0x30, 0x2E, 0x35, 0x29, 0x29, 0x3B, 0x0D, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x46, 0x20, - 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, - 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, - 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, - 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x2D, 0x31, 0x2E, 0x30, 0x2C, 0x20, - 0x30, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x76, 0x65, 0x63, 0x34, 0x20, 0x47, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x2C, 0x20, 0x75, 0x76, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x48, 0x20, 0x3D, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, - 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, - 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, - 0x32, 0x28, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x30, 0x2E, 0x30, 0x29, 0x29, - 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x49, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, - 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, - 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, - 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x2D, 0x30, 0x2E, 0x35, - 0x2C, 0x20, 0x30, 0x2E, 0x35, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x4A, 0x20, 0x3D, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, - 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, - 0x63, 0x32, 0x28, 0x30, 0x2E, 0x35, 0x2C, 0x20, 0x30, 0x2E, 0x35, 0x29, - 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x4B, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, - 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, - 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x2D, 0x31, 0x2E, - 0x30, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x4C, 0x20, 0x3D, 0x20, + 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6F, 0x6E, + 0x20, 0x3D, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x30, 0x2C, 0x20, 0x62, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x6E, 0x65, 0x73, 0x73, 0x20, 0x2D, 0x20, 0x75, + 0x5F, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, 0x29, 0x3B, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x2F, 0x3D, 0x20, 0x6D, 0x61, + 0x78, 0x28, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6E, 0x65, 0x73, 0x73, + 0x2C, 0x20, 0x30, 0x2E, 0x30, 0x30, 0x30, 0x30, 0x31, 0x29, 0x3B, 0x0D, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, + 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2A, 0x20, 0x63, 0x6F, 0x6E, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x7D, + 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x65, 0x63, 0x34, 0x20, 0x44, 0x6F, 0x77, + 0x6E, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x42, 0x6F, 0x78, 0x31, 0x33, + 0x54, 0x61, 0x70, 0x28, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, 0x29, + 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, + 0x32, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, + 0x3D, 0x20, 0x31, 0x2E, 0x30, 0x20, 0x2F, 0x20, 0x75, 0x5F, 0x53, 0x6F, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x41, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, - 0x65, 0x63, 0x32, 0x28, 0x30, 0x2E, 0x30, 0x2C, 0x20, 0x31, 0x2E, 0x30, + 0x65, 0x63, 0x32, 0x28, 0x2D, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x2D, 0x31, + 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x65, 0x63, 0x34, 0x20, 0x42, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, + 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, + 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, + 0x30, 0x2E, 0x30, 0x2C, 0x20, 0x2D, 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x43, + 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, + 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, + 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, + 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2E, 0x30, 0x2C, 0x20, + 0x2D, 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x44, 0x20, 0x3D, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, + 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, + 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, + 0x32, 0x28, 0x2D, 0x30, 0x2E, 0x35, 0x2C, 0x20, 0x2D, 0x30, 0x2E, 0x35, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, - 0x34, 0x20, 0x4D, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x34, 0x20, 0x45, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, - 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2E, - 0x30, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x64, 0x69, - 0x76, 0x20, 0x3D, 0x20, 0x28, 0x31, 0x2E, 0x30, 0x20, 0x2F, 0x20, 0x34, - 0x2E, 0x30, 0x29, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, - 0x2E, 0x35, 0x2C, 0x20, 0x30, 0x2E, 0x31, 0x32, 0x35, 0x29, 0x3B, 0x0D, - 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x6F, 0x20, 0x3D, 0x20, 0x28, 0x44, 0x20, 0x2B, 0x20, 0x45, 0x20, 0x2B, - 0x20, 0x49, 0x20, 0x2B, 0x20, 0x4A, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, - 0x76, 0x2E, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, - 0x2B, 0x3D, 0x20, 0x28, 0x41, 0x20, 0x2B, 0x20, 0x42, 0x20, 0x2B, 0x20, - 0x47, 0x20, 0x2B, 0x20, 0x46, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, - 0x2E, 0x79, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x2B, - 0x3D, 0x20, 0x28, 0x42, 0x20, 0x2B, 0x20, 0x43, 0x20, 0x2B, 0x20, 0x48, - 0x20, 0x2B, 0x20, 0x47, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, 0x2E, - 0x79, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x2B, 0x3D, - 0x20, 0x28, 0x46, 0x20, 0x2B, 0x20, 0x47, 0x20, 0x2B, 0x20, 0x4C, 0x20, - 0x2B, 0x20, 0x4B, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, 0x2E, 0x79, - 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x2B, 0x3D, 0x20, - 0x28, 0x47, 0x20, 0x2B, 0x20, 0x48, 0x20, 0x2B, 0x20, 0x4D, 0x20, 0x2B, - 0x20, 0x4C, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, 0x2E, 0x79, 0x3B, - 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6E, 0x20, 0x6F, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, - 0x76, 0x65, 0x63, 0x34, 0x20, 0x55, 0x70, 0x73, 0x61, 0x6D, 0x70, 0x6C, - 0x65, 0x28, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, 0x29, 0x0D, 0x0A, - 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x64, 0x20, 0x3D, 0x20, 0x28, 0x31, 0x2E, 0x30, 0x20, 0x2F, 0x20, 0x75, - 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x53, 0x69, 0x7A, 0x65, - 0x2E, 0x78, 0x79, 0x78, 0x79, 0x29, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, - 0x34, 0x28, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x2C, 0x20, - 0x2D, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x30, 0x2E, 0x30, 0x29, 0x20, 0x3B, - 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x73, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x3D, + 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2E, + 0x35, 0x2C, 0x20, 0x2D, 0x30, 0x2E, 0x35, 0x29, 0x29, 0x3B, 0x0D, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x46, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, - 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2D, - 0x20, 0x64, 0x2E, 0x78, 0x79, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, - 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, - 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, - 0x20, 0x75, 0x76, 0x20, 0x2D, 0x20, 0x64, 0x2E, 0x77, 0x79, 0x29, 0x20, - 0x2A, 0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, + 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, + 0x76, 0x65, 0x63, 0x32, 0x28, 0x2D, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x30, + 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x65, 0x63, 0x34, 0x20, 0x47, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, + 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, + 0x2C, 0x20, 0x75, 0x76, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x76, 0x65, 0x63, 0x34, 0x20, 0x48, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, + 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, + 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, + 0x28, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x30, 0x2E, 0x30, 0x29, 0x29, 0x3B, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x49, + 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, + 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, + 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, + 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x2D, 0x30, 0x2E, 0x35, 0x2C, + 0x20, 0x30, 0x2E, 0x35, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x4A, 0x20, 0x3D, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, + 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, + 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, + 0x32, 0x28, 0x30, 0x2E, 0x35, 0x2C, 0x20, 0x30, 0x2E, 0x35, 0x29, 0x29, + 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, + 0x4B, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, + 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, + 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, + 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x2D, 0x31, 0x2E, 0x30, + 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x4C, 0x20, 0x3D, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, + 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, + 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, + 0x63, 0x32, 0x28, 0x30, 0x2E, 0x30, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29, + 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, + 0x20, 0x4D, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x75, + 0x76, 0x20, 0x2B, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, + 0x65, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2E, 0x30, + 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x64, 0x69, 0x76, + 0x20, 0x3D, 0x20, 0x28, 0x31, 0x2E, 0x30, 0x20, 0x2F, 0x20, 0x34, 0x2E, + 0x30, 0x29, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2E, + 0x35, 0x2C, 0x20, 0x30, 0x2E, 0x31, 0x32, 0x35, 0x29, 0x3B, 0x0D, 0x0A, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x6F, + 0x20, 0x3D, 0x20, 0x28, 0x44, 0x20, 0x2B, 0x20, 0x45, 0x20, 0x2B, 0x20, + 0x49, 0x20, 0x2B, 0x20, 0x4A, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, + 0x2E, 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x2B, + 0x3D, 0x20, 0x28, 0x41, 0x20, 0x2B, 0x20, 0x42, 0x20, 0x2B, 0x20, 0x47, + 0x20, 0x2B, 0x20, 0x46, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, 0x2E, + 0x79, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x2B, 0x3D, + 0x20, 0x28, 0x42, 0x20, 0x2B, 0x20, 0x43, 0x20, 0x2B, 0x20, 0x48, 0x20, + 0x2B, 0x20, 0x47, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, 0x2E, 0x79, + 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x2B, 0x3D, 0x20, + 0x28, 0x46, 0x20, 0x2B, 0x20, 0x47, 0x20, 0x2B, 0x20, 0x4C, 0x20, 0x2B, + 0x20, 0x4B, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, 0x2E, 0x79, 0x3B, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x2B, 0x3D, 0x20, 0x28, + 0x47, 0x20, 0x2B, 0x20, 0x48, 0x20, 0x2B, 0x20, 0x4D, 0x20, 0x2B, 0x20, + 0x4C, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x76, 0x2E, 0x79, 0x3B, 0x0D, + 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6E, 0x20, 0x6F, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x76, + 0x65, 0x63, 0x34, 0x20, 0x55, 0x70, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, + 0x28, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, 0x29, 0x0D, 0x0A, 0x7B, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x64, + 0x20, 0x3D, 0x20, 0x28, 0x31, 0x2E, 0x30, 0x20, 0x2F, 0x20, 0x75, 0x5F, + 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x53, 0x69, 0x7A, 0x65, 0x2E, + 0x78, 0x79, 0x78, 0x79, 0x29, 0x20, 0x2A, 0x20, 0x76, 0x65, 0x63, 0x34, + 0x28, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x2D, + 0x31, 0x2E, 0x30, 0x2C, 0x20, 0x30, 0x2E, 0x30, 0x29, 0x20, 0x3B, 0x0D, + 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, + 0x73, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x3D, 0x20, + 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, + 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2D, 0x20, + 0x64, 0x2E, 0x78, 0x79, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, - 0x75, 0x76, 0x20, 0x2D, 0x20, 0x64, 0x2E, 0x7A, 0x79, 0x29, 0x3B, 0x0D, - 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, - 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, - 0x64, 0x2E, 0x7A, 0x77, 0x29, 0x20, 0x2A, 0x20, 0x32, 0x2E, 0x30, 0x3B, - 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, - 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x29, 0x20, 0x2A, 0x20, - 0x34, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, - 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, - 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, - 0x20, 0x2B, 0x20, 0x64, 0x2E, 0x78, 0x77, 0x29, 0x20, 0x2A, 0x20, 0x32, - 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, + 0x75, 0x76, 0x20, 0x2D, 0x20, 0x64, 0x2E, 0x77, 0x79, 0x29, 0x20, 0x2A, + 0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, - 0x76, 0x20, 0x2B, 0x20, 0x64, 0x2E, 0x7A, 0x79, 0x29, 0x3B, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, - 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x64, 0x2E, 0x77, - 0x79, 0x29, 0x20, 0x2A, 0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x20, + 0x76, 0x20, 0x2D, 0x20, 0x64, 0x2E, 0x7A, 0x79, 0x29, 0x3B, 0x0D, 0x0A, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, + 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x64, + 0x2E, 0x7A, 0x77, 0x29, 0x20, 0x2A, 0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, + 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x29, 0x20, 0x2A, 0x20, 0x34, + 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, + 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, + 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, + 0x2B, 0x20, 0x64, 0x2E, 0x78, 0x77, 0x29, 0x20, 0x2A, 0x20, 0x32, 0x2E, + 0x30, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, + 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, + 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x75, 0x76, + 0x20, 0x2B, 0x20, 0x64, 0x2E, 0x7A, 0x79, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, - 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x64, 0x2E, 0x78, 0x79, - 0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6E, 0x20, 0x73, 0x20, 0x2A, 0x20, 0x28, 0x31, 0x2E, - 0x30, 0x20, 0x2F, 0x20, 0x31, 0x36, 0x2E, 0x30, 0x29, 0x3B, 0x0D, 0x0A, - 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x6C, - 0x75, 0x72, 0x39, 0x28, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x72, 0x32, - 0x44, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x2C, 0x20, 0x76, 0x65, 0x63, - 0x32, 0x20, 0x75, 0x76, 0x2C, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, - 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x76, - 0x65, 0x63, 0x32, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, - 0x6E, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x34, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x76, - 0x65, 0x63, 0x34, 0x28, 0x30, 0x2E, 0x30, 0x29, 0x3B, 0x0D, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6F, 0x66, 0x66, 0x31, - 0x20, 0x3D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2E, 0x33, 0x38, - 0x34, 0x36, 0x31, 0x35, 0x33, 0x38, 0x34, 0x36, 0x29, 0x20, 0x2A, 0x20, + 0x32, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x64, 0x2E, 0x77, 0x79, + 0x29, 0x20, 0x2A, 0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x73, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x32, + 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x64, 0x2E, 0x78, 0x79, 0x29, + 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6E, 0x20, 0x73, 0x20, 0x2A, 0x20, 0x28, 0x31, 0x2E, 0x30, + 0x20, 0x2F, 0x20, 0x31, 0x36, 0x2E, 0x30, 0x29, 0x3B, 0x0D, 0x0A, 0x7D, + 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x6C, 0x75, + 0x72, 0x39, 0x28, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x72, 0x32, 0x44, + 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x2C, 0x20, 0x76, 0x65, 0x63, 0x32, + 0x20, 0x75, 0x76, 0x2C, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x72, 0x65, + 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x76, 0x65, + 0x63, 0x32, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, + 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, + 0x34, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x76, 0x65, + 0x63, 0x34, 0x28, 0x30, 0x2E, 0x30, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6F, 0x66, 0x66, 0x31, 0x20, + 0x3D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2E, 0x33, 0x38, 0x34, + 0x36, 0x31, 0x35, 0x33, 0x38, 0x34, 0x36, 0x29, 0x20, 0x2A, 0x20, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6F, 0x66, 0x66, 0x32, + 0x20, 0x3D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x33, 0x2E, 0x32, 0x33, + 0x30, 0x37, 0x36, 0x39, 0x32, 0x33, 0x30, 0x38, 0x29, 0x20, 0x2A, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6F, 0x66, 0x66, - 0x32, 0x20, 0x3D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x33, 0x2E, 0x32, - 0x33, 0x30, 0x37, 0x36, 0x39, 0x32, 0x33, 0x30, 0x38, 0x29, 0x20, 0x2A, - 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x3B, 0x0D, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, 0x3D, + 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x69, 0x6D, 0x61, + 0x67, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x29, 0x20, 0x2A, 0x20, 0x30, 0x2E, + 0x32, 0x32, 0x37, 0x30, 0x32, 0x37, 0x30, 0x32, 0x37, 0x30, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x69, 0x6D, - 0x61, 0x67, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x29, 0x20, 0x2A, 0x20, 0x30, - 0x2E, 0x32, 0x32, 0x37, 0x30, 0x32, 0x37, 0x30, 0x32, 0x37, 0x30, 0x3B, - 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, - 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x69, - 0x6D, 0x61, 0x67, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x28, - 0x6F, 0x66, 0x66, 0x31, 0x20, 0x2F, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x6C, - 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x29, 0x29, 0x20, 0x2A, 0x20, 0x30, 0x2E, - 0x33, 0x31, 0x36, 0x32, 0x31, 0x36, 0x32, 0x31, 0x36, 0x32, 0x3B, 0x0D, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, - 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x69, 0x6D, - 0x61, 0x67, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2D, 0x20, 0x28, 0x6F, + 0x61, 0x67, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x28, 0x6F, 0x66, 0x66, 0x31, 0x20, 0x2F, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x29, 0x29, 0x20, 0x2A, 0x20, 0x30, 0x2E, 0x33, 0x31, 0x36, 0x32, 0x31, 0x36, 0x32, 0x31, 0x36, 0x32, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x69, 0x6D, 0x61, - 0x67, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x28, 0x6F, 0x66, - 0x66, 0x32, 0x20, 0x2F, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, - 0x69, 0x6F, 0x6E, 0x29, 0x29, 0x20, 0x2A, 0x20, 0x30, 0x2E, 0x30, 0x37, - 0x30, 0x32, 0x37, 0x30, 0x32, 0x37, 0x30, 0x33, 0x3B, 0x0D, 0x0A, 0x20, + 0x67, 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2D, 0x20, 0x28, 0x6F, 0x66, + 0x66, 0x31, 0x20, 0x2F, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, + 0x69, 0x6F, 0x6E, 0x29, 0x29, 0x20, 0x2A, 0x20, 0x30, 0x2E, 0x33, 0x31, + 0x36, 0x32, 0x31, 0x36, 0x32, 0x31, 0x36, 0x32, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x69, 0x6D, 0x61, 0x67, - 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2D, 0x20, 0x28, 0x6F, 0x66, 0x66, + 0x65, 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2B, 0x20, 0x28, 0x6F, 0x66, 0x66, 0x32, 0x20, 0x2F, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x29, 0x29, 0x20, 0x2A, 0x20, 0x30, 0x2E, 0x30, 0x37, 0x30, 0x32, 0x37, 0x30, 0x32, 0x37, 0x30, 0x33, 0x3B, 0x0D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x63, 0x6F, 0x6C, - 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, - 0x0D, 0x0A, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x28, - 0x29, 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x34, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, - 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x55, - 0x56, 0x29, 0x2E, 0x72, 0x67, 0x62, 0x61, 0x3B, 0x0D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, - 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x54, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, 0x0D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, - 0x20, 0x3D, 0x20, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, - 0x28, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, - 0x2C, 0x20, 0x55, 0x56, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, - 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, 0x65, 0x20, - 0x3D, 0x3D, 0x20, 0x31, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x44, 0x6F, 0x77, - 0x6E, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x69, 0x6E, 0x67, 0x0D, 0x0A, 0x20, - 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, - 0x72, 0x20, 0x3D, 0x20, 0x44, 0x6F, 0x77, 0x6E, 0x73, 0x61, 0x6D, 0x70, - 0x6C, 0x65, 0x42, 0x6F, 0x78, 0x31, 0x33, 0x54, 0x61, 0x70, 0x28, 0x55, - 0x56, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, - 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, 0x65, 0x20, 0x3D, 0x3D, 0x20, - 0x32, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x42, 0x6C, 0x75, 0x72, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, - 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x62, 0x6C, 0x75, 0x72, 0x39, 0x28, 0x75, - 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x55, 0x56, 0x2C, - 0x20, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x53, 0x69, 0x7A, - 0x65, 0x2C, 0x20, 0x75, 0x5F, 0x42, 0x6C, 0x75, 0x72, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, - 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, - 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x33, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x43, - 0x6F, 0x70, 0x79, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, - 0x63, 0x65, 0x2C, 0x20, 0x55, 0x56, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, - 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, - 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, - 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x34, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x55, - 0x70, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x69, 0x6E, 0x67, 0x20, 0x2B, 0x20, - 0x63, 0x6F, 0x6D, 0x62, 0x69, 0x6E, 0x65, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, 0x3D, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x69, 0x6D, 0x61, 0x67, 0x65, + 0x2C, 0x20, 0x75, 0x76, 0x20, 0x2D, 0x20, 0x28, 0x6F, 0x66, 0x66, 0x32, + 0x20, 0x2F, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x6C, 0x75, 0x74, 0x69, 0x6F, + 0x6E, 0x29, 0x29, 0x20, 0x2A, 0x20, 0x30, 0x2E, 0x30, 0x37, 0x30, 0x32, + 0x37, 0x30, 0x32, 0x37, 0x30, 0x33, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x63, 0x6F, 0x6C, 0x6F, + 0x72, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, + 0x0A, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x28, 0x29, + 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, + 0x34, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, + 0x72, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, + 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x55, 0x56, + 0x29, 0x2E, 0x72, 0x67, 0x62, 0x61, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, 0x65, + 0x20, 0x3D, 0x3D, 0x20, 0x30, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x54, 0x68, + 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, - 0x2B, 0x3D, 0x20, 0x55, 0x70, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x28, - 0x55, 0x56, 0x29, 0x20, 0x2F, 0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6C, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, - 0x61, 0x67, 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x35, 0x29, 0x20, 0x2F, 0x2F, - 0x20, 0x46, 0x69, 0x6E, 0x61, 0x6C, 0x20, 0x63, 0x6F, 0x6D, 0x62, 0x69, - 0x6E, 0x65, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, + 0x3D, 0x20, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C, 0x64, 0x28, + 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, + 0x20, 0x55, 0x56, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, 0x65, 0x20, 0x3D, + 0x3D, 0x20, 0x31, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x44, 0x6F, 0x77, 0x6E, + 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x69, 0x6E, 0x67, 0x0D, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, + 0x20, 0x3D, 0x20, 0x44, 0x6F, 0x77, 0x6E, 0x73, 0x61, 0x6D, 0x70, 0x6C, + 0x65, 0x42, 0x6F, 0x78, 0x31, 0x33, 0x54, 0x61, 0x70, 0x28, 0x55, 0x56, + 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, + 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x32, + 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x42, 0x6C, 0x75, 0x72, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, + 0x72, 0x20, 0x3D, 0x20, 0x62, 0x6C, 0x75, 0x72, 0x39, 0x28, 0x75, 0x5F, + 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, 0x55, 0x56, 0x2C, 0x20, + 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x53, 0x69, 0x7A, 0x65, + 0x2C, 0x20, 0x75, 0x5F, 0x42, 0x6C, 0x75, 0x72, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, 0x65, + 0x20, 0x3D, 0x3D, 0x20, 0x33, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x43, 0x6F, + 0x70, 0x79, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, 0x3D, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, - 0x63, 0x65, 0x32, 0x2C, 0x20, 0x55, 0x56, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, - 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, - 0x33, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x6F, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x72, 0x67, - 0x62, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, - 0x3D, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6F, 0x6C, 0x6F, 0x72, - 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29, 0x3B, 0x2F, 0x2F, 0x76, 0x65, 0x63, - 0x34, 0x28, 0x61, 0x63, 0x65, 0x73, 0x4F, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6F, 0x72, 0x28, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, - 0x6F, 0x72, 0x2E, 0x72, 0x67, 0x62, 0x29, 0x2C, 0x20, 0x31, 0x2E, 0x30, - 0x66, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, - 0x20, 0x20, 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6F, 0x6C, 0x6F, - 0x72, 0x20, 0x3D, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, - 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x7D, + 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, + 0x65, 0x2C, 0x20, 0x55, 0x56, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, 0x67, 0x65, + 0x20, 0x3D, 0x3D, 0x20, 0x34, 0x29, 0x20, 0x2F, 0x2F, 0x20, 0x55, 0x70, + 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x69, 0x6E, 0x67, 0x20, 0x2B, 0x20, 0x63, + 0x6F, 0x6D, 0x62, 0x69, 0x6E, 0x65, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, + 0x3D, 0x20, 0x55, 0x70, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x28, 0x55, + 0x56, 0x29, 0x20, 0x2F, 0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, + 0x73, 0x65, 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5F, 0x53, 0x74, 0x61, + 0x67, 0x65, 0x20, 0x3D, 0x3D, 0x20, 0x35, 0x29, 0x20, 0x2F, 0x2F, 0x20, + 0x46, 0x69, 0x6E, 0x61, 0x6C, 0x20, 0x63, 0x6F, 0x6D, 0x62, 0x69, 0x6E, + 0x65, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x6C, + 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, 0x74, 0x20, 0x3D, 0x20, 0x76, 0x65, + 0x63, 0x34, 0x28, 0x30, 0x2E, 0x30, 0x66, 0x29, 0x3B, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x75, 0x5F, + 0x48, 0x61, 0x73, 0x4C, 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, 0x74, 0x20, + 0x3D, 0x3D, 0x20, 0x31, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6C, 0x65, 0x6E, 0x73, 0x44, 0x69, + 0x72, 0x74, 0x20, 0x3D, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x4C, 0x65, 0x6E, 0x73, 0x44, + 0x69, 0x72, 0x74, 0x2C, 0x20, 0x55, 0x56, 0x29, 0x20, 0x2A, 0x20, 0x75, + 0x5F, 0x4C, 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, 0x74, 0x49, 0x6E, 0x74, + 0x65, 0x6E, 0x73, 0x69, 0x74, 0x79, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x20, + 0x2D, 0x20, 0x75, 0x5F, 0x4C, 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, 0x74, + 0x49, 0x6E, 0x74, 0x65, 0x6E, 0x73, 0x69, 0x74, 0x79, 0x29, 0x3B, 0x0D, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2A, 0x3D, + 0x20, 0x6C, 0x65, 0x6E, 0x73, 0x44, 0x69, 0x72, 0x74, 0x3B, 0x0D, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2B, 0x3D, 0x20, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, + 0x72, 0x63, 0x65, 0x32, 0x2C, 0x20, 0x55, 0x56, 0x29, 0x3B, 0x0D, 0x0A, + 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, + 0x63, 0x33, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x6F, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x72, + 0x67, 0x62, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, + 0x20, 0x3D, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6F, 0x6C, 0x6F, + 0x72, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29, 0x3B, 0x2F, 0x2F, 0x76, 0x65, + 0x63, 0x34, 0x28, 0x61, 0x63, 0x65, 0x73, 0x4F, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6F, 0x72, 0x28, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x6F, + 0x6C, 0x6F, 0x72, 0x2E, 0x72, 0x67, 0x62, 0x29, 0x2C, 0x20, 0x31, 0x2E, + 0x30, 0x66, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6F, 0x6C, + 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, + 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x7D, }; unsigned int Resources_Shaders_bloom_shader_len = sizeof(Resources_Shaders_bloom_shader); @@ -273714,6 +273741,172 @@ namespace Nuake { }; unsigned int Resources_Shaders_pbr_shader_len = sizeof(Resources_Shaders_pbr_shader); + // Data for file: Resources_Shaders_pixelization_shader_path + const std::string Resources_Shaders_pixelization_shader_path = R"(Resources/Shaders/pixelization.shader)"; + unsigned char Resources_Shaders_pixelization_shader[] = { + 0x23, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x0D, 0x0A, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, + 0x20, 0x34, 0x34, 0x30, 0x20, 0x63, 0x6F, 0x72, 0x65, 0x0D, 0x0A, 0x0D, + 0x0A, 0x6C, 0x61, 0x79, 0x6F, 0x75, 0x74, 0x28, 0x6C, 0x6F, 0x63, 0x61, + 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x30, 0x29, 0x20, 0x69, 0x6E, + 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x6C, + 0x61, 0x79, 0x6F, 0x75, 0x74, 0x28, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x31, 0x29, 0x20, 0x69, 0x6E, 0x20, 0x76, + 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, + 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x6F, 0x75, 0x74, 0x20, 0x66, + 0x6C, 0x61, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x3B, + 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, + 0x6E, 0x28, 0x29, 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x55, 0x56, 0x20, 0x3D, 0x20, 0x55, 0x56, 0x50, 0x6F, 0x73, 0x69, 0x74, + 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6C, + 0x5F, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, + 0x76, 0x65, 0x63, 0x34, 0x28, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x50, + 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x31, 0x2E, 0x30, + 0x66, 0x29, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x23, 0x73, + 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6D, 0x65, + 0x6E, 0x74, 0x0D, 0x0A, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, + 0x20, 0x34, 0x34, 0x30, 0x20, 0x63, 0x6F, 0x72, 0x65, 0x0D, 0x0A, 0x0D, + 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x69, 0x6E, 0x74, + 0x20, 0x75, 0x5F, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, + 0x20, 0x3D, 0x20, 0x34, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x75, 0x6E, 0x69, + 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x72, + 0x32, 0x44, 0x20, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x3B, + 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x76, 0x65, + 0x63, 0x32, 0x20, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x53, + 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x69, 0x6E, 0x20, 0x76, + 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x6F, + 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x46, 0x72, 0x61, 0x67, + 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x2F, 0x2F, + 0x20, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x3A, 0x20, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x6C, 0x65, 0x74, 0x74, 0x69, 0x65, + 0x72, 0x2E, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2E, 0x69, 0x6F, 0x2F, + 0x33, 0x64, 0x2D, 0x67, 0x61, 0x6D, 0x65, 0x2D, 0x73, 0x68, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x2D, 0x66, 0x6F, 0x72, 0x2D, 0x62, 0x65, 0x67, 0x69, + 0x6E, 0x6E, 0x65, 0x72, 0x73, 0x2F, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x69, + 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0x0D, + 0x0A, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x28, 0x29, + 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, + 0x32, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x43, 0x6F, 0x6F, 0x72, 0x64, + 0x20, 0x3D, 0x20, 0x55, 0x56, 0x20, 0x2A, 0x20, 0x75, 0x5F, 0x53, 0x6F, + 0x75, 0x72, 0x63, 0x65, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x78, 0x20, 0x3D, + 0x20, 0x69, 0x6E, 0x74, 0x28, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x43, 0x6F, + 0x6F, 0x72, 0x64, 0x2E, 0x78, 0x29, 0x20, 0x25, 0x20, 0x75, 0x5F, 0x50, + 0x69, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x79, 0x20, 0x3D, + 0x20, 0x69, 0x6E, 0x74, 0x28, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x43, 0x6F, + 0x6F, 0x72, 0x64, 0x2E, 0x79, 0x29, 0x20, 0x25, 0x20, 0x75, 0x5F, 0x50, + 0x69, 0x78, 0x65, 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, 0x0D, + 0x0A, 0x20, 0x20, 0x20, 0x20, 0x78, 0x20, 0x3D, 0x20, 0x66, 0x6C, 0x6F, + 0x6F, 0x72, 0x28, 0x75, 0x5F, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x53, 0x69, + 0x7A, 0x65, 0x20, 0x2F, 0x20, 0x32, 0x2E, 0x30, 0x29, 0x20, 0x2D, 0x20, + 0x78, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x79, 0x20, 0x3D, 0x20, + 0x66, 0x6C, 0x6F, 0x6F, 0x72, 0x28, 0x75, 0x5F, 0x50, 0x69, 0x78, 0x65, + 0x6C, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2F, 0x20, 0x32, 0x2E, 0x30, 0x29, + 0x20, 0x2D, 0x20, 0x79, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x78, 0x20, 0x3D, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x43, 0x6F, + 0x6F, 0x72, 0x64, 0x2E, 0x78, 0x20, 0x2B, 0x20, 0x78, 0x3B, 0x0D, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x79, 0x20, 0x3D, 0x20, 0x70, 0x69, 0x78, 0x65, + 0x6C, 0x43, 0x6F, 0x6F, 0x72, 0x64, 0x2E, 0x79, 0x20, 0x2B, 0x20, 0x79, + 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, + 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, + 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x78, 0x2C, 0x20, 0x79, 0x29, 0x20, + 0x2F, 0x20, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x53, 0x69, + 0x7A, 0x65, 0x29, 0x3B, 0x0D, 0x0A, 0x7D, + }; + unsigned int Resources_Shaders_pixelization_shader_len = sizeof(Resources_Shaders_pixelization_shader); + + // Data for file: Resources_Shaders_posterization_shader_path + const std::string Resources_Shaders_posterization_shader_path = R"(Resources/Shaders/posterization.shader)"; + unsigned char Resources_Shaders_posterization_shader[] = { + 0x23, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x74, + 0x65, 0x78, 0x0D, 0x0A, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, + 0x20, 0x34, 0x34, 0x30, 0x20, 0x63, 0x6F, 0x72, 0x65, 0x0D, 0x0A, 0x0D, + 0x0A, 0x6C, 0x61, 0x79, 0x6F, 0x75, 0x74, 0x28, 0x6C, 0x6F, 0x63, 0x61, + 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x30, 0x29, 0x20, 0x69, 0x6E, + 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, + 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x6C, + 0x61, 0x79, 0x6F, 0x75, 0x74, 0x28, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x31, 0x29, 0x20, 0x69, 0x6E, 0x20, 0x76, + 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, + 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x6F, 0x75, 0x74, 0x20, 0x66, + 0x6C, 0x61, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x3B, + 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, + 0x6E, 0x28, 0x29, 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x55, 0x56, 0x20, 0x3D, 0x20, 0x55, 0x56, 0x50, 0x6F, 0x73, 0x69, 0x74, + 0x69, 0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6C, + 0x5F, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, + 0x76, 0x65, 0x63, 0x34, 0x28, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x50, + 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x2C, 0x20, 0x31, 0x2E, 0x30, + 0x66, 0x29, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x23, 0x73, + 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6D, 0x65, + 0x6E, 0x74, 0x0D, 0x0A, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, + 0x20, 0x34, 0x34, 0x30, 0x20, 0x63, 0x6F, 0x72, 0x65, 0x0D, 0x0A, 0x0D, + 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x73, 0x61, 0x6D, + 0x70, 0x6C, 0x65, 0x72, 0x32, 0x44, 0x20, 0x75, 0x5F, 0x53, 0x6F, 0x75, + 0x72, 0x63, 0x65, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, + 0x6D, 0x20, 0x69, 0x6E, 0x74, 0x20, 0x75, 0x5F, 0x4C, 0x65, 0x76, 0x65, + 0x6C, 0x73, 0x20, 0x3D, 0x20, 0x31, 0x30, 0x3B, 0x0D, 0x0A, 0x69, 0x6E, + 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x0D, + 0x0A, 0x6F, 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x46, 0x72, + 0x61, 0x67, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, + 0x2F, 0x2F, 0x20, 0x49, 0x6D, 0x70, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, + 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x3A, 0x20, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x6C, 0x65, 0x74, 0x74, + 0x69, 0x65, 0x72, 0x2E, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2E, 0x69, + 0x6F, 0x2F, 0x33, 0x64, 0x2D, 0x67, 0x61, 0x6D, 0x65, 0x2D, 0x73, 0x68, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x2D, 0x66, 0x6F, 0x72, 0x2D, 0x62, 0x65, + 0x67, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x73, 0x2F, 0x70, 0x6F, 0x73, 0x74, + 0x65, 0x72, 0x69, 0x7A, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x68, 0x74, + 0x6D, 0x6C, 0x0D, 0x0A, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, + 0x6E, 0x28, 0x29, 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x72, 0x61, 0x6D, 0x65, 0x43, 0x6F, + 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x28, 0x75, 0x5F, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x2C, 0x20, + 0x55, 0x56, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, + 0x6F, 0x61, 0x74, 0x20, 0x67, 0x72, 0x65, 0x79, 0x73, 0x63, 0x61, 0x6C, + 0x65, 0x20, 0x3D, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x66, 0x72, 0x61, 0x6D, + 0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x72, 0x2C, 0x20, 0x6D, 0x61, + 0x78, 0x28, 0x66, 0x72, 0x61, 0x6D, 0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, + 0x2E, 0x67, 0x2C, 0x20, 0x66, 0x72, 0x61, 0x6D, 0x65, 0x43, 0x6F, 0x6C, + 0x6F, 0x72, 0x2E, 0x62, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x6C, 0x6F, 0x77, 0x65, 0x72, + 0x20, 0x3D, 0x20, 0x66, 0x6C, 0x6F, 0x6F, 0x72, 0x28, 0x67, 0x72, 0x65, + 0x79, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x20, 0x2A, 0x20, 0x75, 0x5F, 0x4C, + 0x65, 0x76, 0x65, 0x6C, 0x73, 0x29, 0x20, 0x2F, 0x20, 0x75, 0x5F, 0x4C, + 0x65, 0x76, 0x65, 0x6C, 0x73, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x6C, 0x6F, 0x77, 0x65, 0x72, 0x44, + 0x69, 0x66, 0x66, 0x20, 0x3D, 0x20, 0x61, 0x62, 0x73, 0x28, 0x67, 0x72, + 0x65, 0x79, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x20, 0x2D, 0x20, 0x6C, 0x6F, + 0x77, 0x65, 0x72, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x3D, 0x20, 0x63, 0x65, 0x69, 0x6C, 0x28, 0x67, 0x72, + 0x65, 0x79, 0x73, 0x63, 0x61, 0x6C, 0x65, 0x20, 0x2A, 0x20, 0x75, 0x5F, + 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x73, 0x29, 0x20, 0x2F, 0x20, 0x75, 0x5F, + 0x4C, 0x65, 0x76, 0x65, 0x6C, 0x73, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, + 0x44, 0x69, 0x66, 0x66, 0x20, 0x3D, 0x20, 0x61, 0x62, 0x73, 0x28, 0x75, + 0x70, 0x70, 0x65, 0x72, 0x20, 0x2D, 0x20, 0x67, 0x72, 0x65, 0x79, 0x73, + 0x63, 0x61, 0x6C, 0x65, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, + 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x6C, 0x65, 0x76, 0x65, 0x6C, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3D, 0x20, 0x6C, 0x6F, 0x77, 0x65, 0x72, + 0x44, 0x69, 0x66, 0x66, 0x20, 0x3C, 0x3D, 0x20, 0x75, 0x70, 0x70, 0x65, + 0x72, 0x44, 0x69, 0x66, 0x66, 0x20, 0x3F, 0x20, 0x6C, 0x6F, 0x77, 0x65, + 0x72, 0x20, 0x3A, 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x3B, 0x0D, 0x0A, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x61, 0x64, + 0x6A, 0x75, 0x73, 0x74, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x3D, 0x20, 0x6C, + 0x65, 0x76, 0x65, 0x6C, 0x20, 0x2F, 0x20, 0x67, 0x72, 0x65, 0x79, 0x73, + 0x63, 0x61, 0x6C, 0x65, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x46, + 0x72, 0x61, 0x67, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x66, + 0x72, 0x61, 0x6D, 0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x2A, 0x20, + 0x61, 0x64, 0x6A, 0x75, 0x73, 0x74, 0x6D, 0x65, 0x6E, 0x74, 0x3B, 0x0D, + 0x0A, 0x7D, + }; + unsigned int Resources_Shaders_posterization_shader_len = sizeof(Resources_Shaders_posterization_shader); + // Data for file: Resources_Shaders_sdf_text_shader_path const std::string Resources_Shaders_sdf_text_shader_path = R"(Resources/Shaders/sdf_text.shader)"; unsigned char Resources_Shaders_sdf_text_shader[] = { diff --git a/Nuake/src/Resource/StaticResources.h b/Nuake/src/Resource/StaticResources.h index ef86391f..4103bccd 100644 --- a/Nuake/src/Resource/StaticResources.h +++ b/Nuake/src/Resource/StaticResources.h @@ -236,6 +236,12 @@ namespace Nuake { extern const std::string Resources_Shaders_pbr_shader_path; extern unsigned int Resources_Shaders_pbr_shader_len; extern unsigned char Resources_Shaders_pbr_shader[]; + extern const std::string Resources_Shaders_pixelization_shader_path; + extern unsigned int Resources_Shaders_pixelization_shader_len; + extern unsigned char Resources_Shaders_pixelization_shader[]; + extern const std::string Resources_Shaders_posterization_shader_path; + extern unsigned int Resources_Shaders_posterization_shader_len; + extern unsigned char Resources_Shaders_posterization_shader[]; extern const std::string Resources_Shaders_sdf_text_shader_path; extern unsigned int Resources_Shaders_sdf_text_shader_len; extern unsigned char Resources_Shaders_sdf_text_shader[]; diff --git a/Nuake/src/Scene/Lighting/Environment.h b/Nuake/src/Scene/Lighting/Environment.h index ea51c241..fe91ede6 100644 --- a/Nuake/src/Scene/Lighting/Environment.h +++ b/Nuake/src/Scene/Lighting/Environment.h @@ -79,6 +79,12 @@ namespace Nuake float VignetteIntensity = 15.0f; float VignetteExtend = 0.5f; + bool PosterizationEnabled = false; + int PosterizationLevels = 10; + + bool PixelizationEnabled = false; + int PixelSize = 4; + Vector3 ClearColor; glm::vec4 m_AmbientColor; diff --git a/Resources/Shaders/bloom.shader b/Resources/Shaders/bloom.shader index 72834428..4c4e5005 100644 --- a/Resources/Shaders/bloom.shader +++ b/Resources/Shaders/bloom.shader @@ -23,6 +23,9 @@ uniform float u_Exposure; uniform float u_Gamma; uniform sampler2D u_Source2; uniform vec2 u_Source2Size; +uniform int u_HasLensDirt; +uniform sampler2D u_LensDirt; +uniform float u_LensDirtIntensity; uniform float u_Threshold; uniform float u_BlurAmount; @@ -127,6 +130,13 @@ void main() } else if (u_Stage == 5) // Final combine { + vec4 lensDirt = vec4(0.0f); + if(u_HasLensDirt == 1) + { + lensDirt = max(texture(u_LensDirt, UV) * u_LensDirtIntensity, 1.0 - u_LensDirtIntensity); + } + + outputColor *= lensDirt; outputColor += texture(u_Source2, UV); vec3 color = outputColor.rgb; diff --git a/Resources/Shaders/pixelization.shader b/Resources/Shaders/pixelization.shader new file mode 100644 index 00000000..8967c4c1 --- /dev/null +++ b/Resources/Shaders/pixelization.shader @@ -0,0 +1,40 @@ +#shader vertex +#version 440 core + +layout(location = 0) in vec3 VertexPosition; +layout(location = 1) in vec2 UVPosition; + +out flat vec2 UV; + +void main() +{ + UV = UVPosition; + gl_Position = vec4(VertexPosition, 1.0f); +} + +#shader fragment +#version 440 core + +uniform int u_PixelSize = 4; + +uniform sampler2D u_Source; +uniform vec2 u_SourceSize; + +in vec2 UV; + +out vec4 FragColor; + +// Implementation from: https://lettier.github.io/3d-game-shaders-for-beginners/pixelization.html +void main() +{ + vec2 pixelCoord = UV * u_SourceSize; + float x = int(pixelCoord.x) % u_PixelSize; + float y = int(pixelCoord.y) % u_PixelSize; + + x = floor(u_PixelSize / 2.0) - x; + y = floor(u_PixelSize / 2.0) - y; + + x = pixelCoord.x + x; + y = pixelCoord.y + y; + FragColor = texture(u_Source, vec2(x, y) / u_SourceSize); +} \ No newline at end of file diff --git a/Resources/Shaders/posterization.shader b/Resources/Shaders/posterization.shader new file mode 100644 index 00000000..a4a291c0 --- /dev/null +++ b/Resources/Shaders/posterization.shader @@ -0,0 +1,36 @@ +#shader vertex +#version 440 core + +layout(location = 0) in vec3 VertexPosition; +layout(location = 1) in vec2 UVPosition; + +out flat vec2 UV; + +void main() +{ + UV = UVPosition; + gl_Position = vec4(VertexPosition, 1.0f); +} + +#shader fragment +#version 440 core + +uniform sampler2D u_Source; +uniform int u_Levels = 10; +in vec2 UV; + +out vec4 FragColor; + +// Implementation from: https://lettier.github.io/3d-game-shaders-for-beginners/posterization.html +void main() +{ + vec4 frameColor = texture(u_Source, UV); + float greyscale = max(frameColor.r, max(frameColor.g, frameColor.b)); + float lower = floor(greyscale * u_Levels) / u_Levels; + float lowerDiff = abs(greyscale - lower); + float upper = ceil(greyscale * u_Levels) / u_Levels; + float upperDiff = abs(upper - greyscale); + float level = lowerDiff <= upperDiff ? lower : upper; + float adjustment = level / greyscale; + FragColor = frameColor * adjustment; +} \ No newline at end of file