cocos2d-x Getting Screenshot with Blur
Utilize cocos2d-x ShaderTest under cpp-tests.
Using SpriteBlur class in the test, following code will add a screenshot with blur effect:
void GameLayer::screenshotBlur(float blurRadius, float blurSampleNum, int repeat)
{
    Size winSize= Director::getInstance()->getWinSize();
    // screenshot
    auto rt1= RenderTexture::create(winSize.width, winSize.height, Texture2D::PixelFormat::RGBA8888);
    rt1->begin();
    this->visit();
    rt1->end();
    
    RenderTexture* rt= rt1;
    for (int i= 0; i < repeat; i++)
    {
        // SpriteBlur
        auto sp1= SpriteBlur::create(rt->getSprite()->getTexture(), Rect(Vec2::ZERO, winSize));
        sp1->setAnchorPoint(Vec2::ZERO);
        sp1->setPosition(Vec2::ZERO);
        sp1->setFlippedY(true);
        sp1->setBlurRadius(blurRadius);
        sp1->setBlurSampleNum(blurSampleNum);
        
        // render blurred sprite
        rt= RenderTexture::create(winSize.width, winSize.height, Texture2D::PixelFormat::RGBA8888);
        rt->begin();
        sp1->visit();
        rt->end();
    }
    
    // final sprite
    auto sp2= Sprite::createWithTexture(rt->getSprite()->getTexture());
    sp2->setFlippedY(true);
    sp2->setPosition(winSize/2);
    sp2->setColor(Color3B(0x88, 0x88, 0x88));
    
    this->addChild(sp2);
}
The basic idea is as following:
- Using RenderTexture , get current scene’s screenshot
- With SpriteBlur , apply blur effect on the screenshot
- Render the SpriteBlur to make a normal Texture
- Repeat
- Create a sprite with the texture of RenderTexture
- Add on the scene
