// .cpp
void ScissorLayer::visit(cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t flags)
{
// シザー開始
_beforeVisitCmdScissor.init(_globalZOrder);
_beforeVisitCmdScissor.func = [this](){
glEnable(GL_SCISSOR_TEST);
const cocos2d::Rect clippingRect(
convertToWorldSpace(cocos2d::Vec2::ZERO), getContentSize());
_director->getOpenGLView()->setScissorInPoints(
clippingRect.origin.x, clippingRect.origin.y,
clippingRect.size.width, clippingRect.size.height
);
};
renderer->addCommand(&_beforeVisitCmdScissor);
// シーングラフ処理
cocos2d::Layer::visit(renderer, transform, flags);
// シザー終了
_afterVisitCmdScissor.init(_globalZOrder);
_afterVisitCmdScissor.func = [](){ glDisable(GL_SCISSOR_TEST); };
renderer->addCommand(&_afterVisitCmdScissor);
}