dm 7 years ago
parent
commit
c67c754144

+ 24 - 2
oxygine/src/oxygine/PostProcess.cpp

@@ -14,6 +14,8 @@ namespace oxygine
 {
 {
     ShaderProgram* PostProcess::shaderBlurV = 0;
     ShaderProgram* PostProcess::shaderBlurV = 0;
     ShaderProgram* PostProcess::shaderBlurH = 0;
     ShaderProgram* PostProcess::shaderBlurH = 0;
+    ShaderProgram* PostProcess::shaderBlurV2 = 0;
+    ShaderProgram* PostProcess::shaderBlurH2 = 0;
     ShaderProgram* PostProcess::shaderBlit = 0;
     ShaderProgram* PostProcess::shaderBlit = 0;
     bool _ppBuilt = false;
     bool _ppBuilt = false;
 
 
@@ -38,18 +40,22 @@ namespace oxygine
         file::buffer vs_h;
         file::buffer vs_h;
         file::buffer vs_v;
         file::buffer vs_v;
         file::buffer fs_blur;
         file::buffer fs_blur;
+        file::buffer fs_blur2;
         zp.read("system/pp_hblur_vs.glsl", vs_h);
         zp.read("system/pp_hblur_vs.glsl", vs_h);
         zp.read("system/pp_vblur_vs.glsl", vs_v);
         zp.read("system/pp_vblur_vs.glsl", vs_v);
         zp.read("system/pp_rast_fs.glsl", fs_blur);
         zp.read("system/pp_rast_fs.glsl", fs_blur);
+        zp.read("system/pp_rast_fs2.glsl", fs_blur2);
 
 
         vs_h.push_back(0);
         vs_h.push_back(0);
         vs_v.push_back(0);
         vs_v.push_back(0);
         fs_blur.push_back(0);
         fs_blur.push_back(0);
+        fs_blur2.push_back(0);
 
 
 
 
         unsigned int h = ShaderProgramGL::createShader(GL_VERTEX_SHADER, (const char*)&vs_h.front());
         unsigned int h = ShaderProgramGL::createShader(GL_VERTEX_SHADER, (const char*)&vs_h.front());
         unsigned int v = ShaderProgramGL::createShader(GL_VERTEX_SHADER, (const char*)&vs_v.front());
         unsigned int v = ShaderProgramGL::createShader(GL_VERTEX_SHADER, (const char*)&vs_v.front());
         unsigned int ps = ShaderProgramGL::createShader(GL_FRAGMENT_SHADER, (const char*)&fs_blur.front());
         unsigned int ps = ShaderProgramGL::createShader(GL_FRAGMENT_SHADER, (const char*)&fs_blur.front());
+        unsigned int ps2 = ShaderProgramGL::createShader(GL_FRAGMENT_SHADER, (const char*)&fs_blur2.front());
 
 
 
 
         shaderBlurV = new ShaderProgramGL(ShaderProgramGL::createProgram(v, ps, decl));
         shaderBlurV = new ShaderProgramGL(ShaderProgramGL::createProgram(v, ps, decl));
@@ -61,9 +67,19 @@ namespace oxygine
         driver->setUniformInt("s_texture", 0);
         driver->setUniformInt("s_texture", 0);
 
 
 
 
+        shaderBlurV2 = new ShaderProgramGL(ShaderProgramGL::createProgram(v, ps2, decl));
+        driver->setShaderProgram(shaderBlurV2);
+        driver->setUniformInt("s_texture", 0);
+
+        shaderBlurH2 = new ShaderProgramGL(ShaderProgramGL::createProgram(h, ps2, decl));
+        driver->setShaderProgram(shaderBlurH2);
+        driver->setUniformInt("s_texture", 0);
+
+
         oxglDeleteShader(h);
         oxglDeleteShader(h);
         oxglDeleteShader(v);
         oxglDeleteShader(v);
         oxglDeleteShader(ps);
         oxglDeleteShader(ps);
+        oxglDeleteShader(ps2);
 
 
         file::buffer vs_blit;
         file::buffer vs_blit;
         file::buffer fs_blit;
         file::buffer fs_blit;
@@ -92,6 +108,12 @@ namespace oxygine
 
 
         delete shaderBlurV;
         delete shaderBlurV;
         shaderBlurV = 0;
         shaderBlurV = 0;
+
+        delete shaderBlurH2;
+        shaderBlurH = 0;
+
+        delete shaderBlurV2;
+        shaderBlurV = 0;
     }
     }
 
 
     const int ALIGN_SIZE = 256;
     const int ALIGN_SIZE = 256;
@@ -331,13 +353,13 @@ namespace oxygine
     }
     }
 
 
 
 
-    void pass(spNativeTexture srcTexture, const Rect& srcRect, spNativeTexture destTexture, const Rect& destRect, const Color& color)
+    void pass(spNativeTexture srcTexture, const Rect& srcRect, spNativeTexture destTexture, const Rect& destRect, const Color& color, const Color& clearColor)
     {
     {
         IVideoDriver* driver = IVideoDriver::instance;
         IVideoDriver* driver = IVideoDriver::instance;
 
 
         const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(driver->getVertexDeclaration(vertexPCT2::FORMAT));
         const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(driver->getVertexDeclaration(vertexPCT2::FORMAT));
         driver->setRenderTarget(destTexture);
         driver->setRenderTarget(destTexture);
-        driver->clear(0);
+        driver->clear(clearColor);
 
 
         driver->setViewport(destRect);
         driver->setViewport(destRect);
 
 

+ 4 - 1
oxygine/src/oxygine/PostProcess.h

@@ -42,6 +42,9 @@ namespace oxygine
         static ShaderProgram* shaderBlurH;
         static ShaderProgram* shaderBlurH;
         static ShaderProgram* shaderBlit;
         static ShaderProgram* shaderBlit;
 
 
+        static ShaderProgram* shaderBlurV2;
+        static ShaderProgram* shaderBlurH2;
+
         static void initShaders();
         static void initShaders();
         static void freeShaders();
         static void freeShaders();
 
 
@@ -118,7 +121,7 @@ namespace oxygine
         free _free;
         free _free;
     };
     };
 
 
-    void pass(spNativeTexture srcTexture, const Rect& srcRect, spNativeTexture destTexture, const Rect& destRect, const Color& color = Color::White);
+    void pass(spNativeTexture srcTexture, const Rect& srcRect, spNativeTexture destTexture, const Rect& destRect, const Color& color = Color(Color::White), const Color& clearColor = Color(0));
 
 
     RenderTargetsManager& getRTManager();
     RenderTargetsManager& getRTManager();
 
 

File diff suppressed because it is too large
+ 0 - 1
oxygine/src/oxygine/core/system_data.cpp


+ 44 - 0
oxygine/system_data/original/system/pp_rast_fs2.glsl

@@ -0,0 +1,44 @@
+/* BlurFragmentShader.glsl */
+//precision mediump float;
+ 
+uniform lowp sampler2D s_texture;
+ 
+varying mediump vec4 v_color;
+varying mediump vec2 v_texCoord;
+varying mediump vec2 v_blurTexCoords0;
+varying mediump vec2 v_blurTexCoords1;
+varying mediump vec2 v_blurTexCoords2;
+varying mediump vec2 v_blurTexCoords3;
+varying mediump vec2 v_blurTexCoords4;
+varying mediump vec2 v_blurTexCoords5;
+varying mediump vec2 v_blurTexCoords6;
+varying mediump vec2 v_blurTexCoords7;
+varying mediump vec2 v_blurTexCoords8;
+varying mediump vec2 v_blurTexCoords9;
+varying mediump vec2 v_blurTexCoords10;
+varying mediump vec2 v_blurTexCoords11;
+varying mediump vec2 v_blurTexCoords12;
+varying mediump vec2 v_blurTexCoords13;
+ 
+ 
+ 
+void main()
+{
+    const mediump float M = 1.0;
+    gl_FragColor = vec4(0.0);
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords0)*0.0044299121055113265 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords1)*0.00895781211794 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords2)*0.0215963866053 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords3)*0.0443683338718 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords4)*0.0776744219933 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords5)*0.115876621105 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords6)*0.147308056121 * M;
+    gl_FragColor += texture2D(s_texture, v_texCoord      )*0.159576912161 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords7)*0.147308056121 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords8)*0.115876621105 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords9)*0.0776744219933 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords10)*0.0443683338718 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords11)*0.0215963866053 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords12)*0.00895781211794 * M;
+    gl_FragColor += texture2D(s_texture, v_blurTexCoords13)*0.0044299121055113265 * M;
+}

Some files were not shown because too many files changed in this diff