void PostEffectNode::visit(cocos2d::Renderer *renderer, const cocos2d::Mat4& parentTransform, uint32_t parentFlags) {
if (!postEffectsEnabled || passes.empty() || _children.empty()) {
Node::visit(renderer, parentTransform, parentFlags);
return;
}
// quick return if not visible. children won't be drawn.
if (!_visible) {
return;
}
uint32_t flags = processParentFlags(parentTransform, parentFlags);
_director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
_director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewTransform);
bool visibleByCamera = isVisitableByVisitingCamera();
if (visibleByCamera) {
draw(renderer, _modelViewTransform, flags);
rtSprites.back()->visit(renderer, _modelViewTransform, parentFlags);
}
_director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
}
void PostEffectNode::draw(cocos2d::Renderer *renderer, const cocos2d::Mat4& transform, uint32_t flags) {
if (!postEffectsEnabled) {
Node::draw(renderer, transform, flags);
return;
}
if (!staticDrawing) {
redraw(renderer, flags);
} else if (shouldRedraw) {
redraw(renderer, flags);
shouldRedraw = false;
}
}
void PostEffectNode::redraw(Renderer *renderer, uint32_t flags) {
if (passes.empty() || _children.empty()) {
return;
}
if (dirty) {
checkRenderTextures();
dirty = false;
}
RenderTexture *firstPass = renderTextures.front();
firstPass->begin();
sortAllChildren();
for( int i = 0; i < _children.size(); i++ ) {
auto node = _children.at(i);
node->visit(renderer, _modelViewTransform, flags);
}
firstPass->end();
for (size_t i = 1; i < renderTextures.size(); ++i) {
Sprite *prevResult = rtSprites.at(i-1);
RenderTexture *rt = renderTextures.at(i);
rt->begin();
prevResult->visit(renderer, _modelViewTransform, flags);
rt->end();
}
}
I cannot move camera after using that node, what's wrong?