|
@@ -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);
|
|
|
|
|
|