Thank you, really. I used the way with FrameBuffer and it helped me. But now I have 1 small problem.
A resolution of the new sprite with a shader is lower than window resolution. It is 200320, because 200320 - the virtual base resolution of our game. But it should be 400640, when еру game’s window is 400640.
It’s a part of my code from AppDelegate.cpp:
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if (!glview){
if (cocos2d::TargetPlatform::OS_ANDROID == cocos2d::Application::getTargetPlatform())
glview = GLViewImpl::createWithFullScreen("Game");
else {
glview = GLViewImpl::create("Game");
glview->setFrameSize(Settings::DesktopScreenWidth, Settings::DesktopScreenHeight);
}
director->setOpenGLView(glview);
}
glview->setDesignResolutionSize(Settings::VirtualScreenWidth, Settings::VirtualScreenHeight, ResolutionPolicy::FIXED_WIDTH);
director->setClearColor(BACKGROUND_COLOR);
director->setAnimationInterval(1.0 / 60.0);
It’s a part of my code from GameScene.cpp (the main scene):
const cocos2d::Size size = cocos2d::Size(Settings::VirtualScreenWidth, Settings::VirtualScreenHeight);
cocos2d::experimental::FrameBuffer* frameBuffer = cocos2d::experimental::FrameBuffer::create(1, size.width, size.height);
cocos2d::experimental::RenderTarget* renderTarget = cocos2d::experimental::RenderTarget::create(size.width, size.height);
cocos2d::Camera* defaultCamera = cocos2d::Camera::getDefaultCamera();
cocos2d::Camera* camera = cocos2d::Camera::create();
frameBuffer->attachRenderTarget(renderTarget);
camera->setFrameBufferObject(frameBuffer);
camera->setZOrder(15);
camera->setGlobalZOrder(15);
mainLayer_->addChild(camera);
cocos2d::Texture2D* texture = frameBuffer->getRenderTarget()->getTexture();
cocos2d::Sprite* sprite = cocos2d::Sprite::createWithTexture(texture);
sprite->setGLProgram(cocos2d::GLProgram::createWithFilenames("generic.vert", "color_transition.frag"));
sprite->setFlippedY(true);
sprite->setPosition(cocos2d::Vec2(Settings::VirtualScreenWidth*.5, Settings::VirtualScreenHeight*.5));
sprite->setZOrder(15);
sprite->setGlobalZOrder(15);
addChild(sprite);