mirror of https://github.com/axmolengine/axmol.git
added ClippingRegionNode
This commit is contained in:
parent
c4fac7b37d
commit
e0b9878e58
|
@ -0,0 +1,84 @@
|
||||||
|
|
||||||
|
#include "CCClippingRegionNode.h"
|
||||||
|
#include "base/CCDirector.h"
|
||||||
|
#include "renderer/CCRenderer.h"
|
||||||
|
#include "math/Vec2.h"
|
||||||
|
#include "CCGLView.h"
|
||||||
|
|
||||||
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
ClippingRegionNode* ClippingRegionNode::create(const Rect& clippingRegion)
|
||||||
|
{
|
||||||
|
ClippingRegionNode* node = new ClippingRegionNode();
|
||||||
|
if (node && node->init()) {
|
||||||
|
node->setClippingRegion(clippingRegion);
|
||||||
|
node->autorelease();
|
||||||
|
} else {
|
||||||
|
CC_SAFE_DELETE(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
ClippingRegionNode* ClippingRegionNode::create(void)
|
||||||
|
{
|
||||||
|
ClippingRegionNode* node = new ClippingRegionNode();
|
||||||
|
if (node && node->init()) {
|
||||||
|
node->autorelease();
|
||||||
|
} else {
|
||||||
|
CC_SAFE_DELETE(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClippingRegionNode::setClippingRegion(const Rect &clippingRegion)
|
||||||
|
{
|
||||||
|
_clippingRegion = clippingRegion;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClippingRegionNode::onBeforeVisitScissor()
|
||||||
|
{
|
||||||
|
if (_clippingEnabled) {
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
|
||||||
|
float scaleX = _scaleX;
|
||||||
|
float scaleY = _scaleY;
|
||||||
|
Node *parent = this->getParent();
|
||||||
|
while (parent) {
|
||||||
|
scaleX *= parent->getScaleX();
|
||||||
|
scaleY *= parent->getScaleY();
|
||||||
|
parent = parent->getParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
const Point pos = convertToWorldSpace(Point(_clippingRegion.origin.x, _clippingRegion.origin.y));
|
||||||
|
GLView* glView = Director::getInstance()->getOpenGLView();
|
||||||
|
glView->setScissorInPoints(pos.x * scaleX,
|
||||||
|
pos.y * scaleY,
|
||||||
|
_clippingRegion.size.width * scaleX,
|
||||||
|
_clippingRegion.size.height * scaleY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClippingRegionNode::onAfterVisitScissor()
|
||||||
|
{
|
||||||
|
if (_clippingEnabled)
|
||||||
|
{
|
||||||
|
glDisable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClippingRegionNode::visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags)
|
||||||
|
{
|
||||||
|
_beforeVisitCmdScissor.init(_globalZOrder);
|
||||||
|
_beforeVisitCmdScissor.func = CC_CALLBACK_0(ClippingRegionNode::onBeforeVisitScissor, this);
|
||||||
|
renderer->addCommand(&_beforeVisitCmdScissor);
|
||||||
|
|
||||||
|
Node::visit(renderer, parentTransform, parentFlags);
|
||||||
|
|
||||||
|
_afterVisitCmdScissor.init(_globalZOrder);
|
||||||
|
_afterVisitCmdScissor.func = CC_CALLBACK_0(ClippingRegionNode::onAfterVisitScissor, this);
|
||||||
|
renderer->addCommand(&_afterVisitCmdScissor);
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_CC_END
|
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
* cocos2d for iPhone: http://www.cocos2d-iphone.org
|
||||||
|
* cocos2d-x: http://www.cocos2d-x.org
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Pierre-David Bélanger
|
||||||
|
* Copyright (c) 2012 cocos2d-x.org
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __MISCNODE_CCCLIPPING_REGION_NODE_H__
|
||||||
|
#define __MISCNODE_CCCLIPPING_REGION_NODE_H__
|
||||||
|
|
||||||
|
#include "2d/CCNode.h"
|
||||||
|
#include "renderer/CCCustomCommand.h"
|
||||||
|
#include "platform/CCGL.h"
|
||||||
|
|
||||||
|
NS_CC_BEGIN
|
||||||
|
|
||||||
|
class CC_DLL ClippingRegionNode : public Node
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static ClippingRegionNode* create(const Rect& clippingRegion);
|
||||||
|
static ClippingRegionNode* create(void);
|
||||||
|
|
||||||
|
const Rect getClippingRegion(void) {
|
||||||
|
return _clippingRegion;
|
||||||
|
}
|
||||||
|
void setClippingRegion(const Rect& clippingRegion);
|
||||||
|
|
||||||
|
bool isClippingEnabled(void) {
|
||||||
|
return _clippingEnabled;
|
||||||
|
}
|
||||||
|
void setClippingEnabled(bool enabled) {
|
||||||
|
_clippingEnabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
//virtual void draw(Renderer* renderer, const Mat4 &transform, uint32_t flags) override;
|
||||||
|
virtual void visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
ClippingRegionNode(void)
|
||||||
|
: _clippingEnabled(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void onBeforeVisitScissor();
|
||||||
|
void onAfterVisitScissor();
|
||||||
|
|
||||||
|
Rect _clippingRegion;
|
||||||
|
bool _clippingEnabled;
|
||||||
|
|
||||||
|
CustomCommand _beforeVisitCmdScissor;
|
||||||
|
CustomCommand _afterVisitCmdScissor;
|
||||||
|
};
|
||||||
|
|
||||||
|
NS_CC_END
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -125,6 +125,7 @@ THE SOFTWARE.
|
||||||
#include "2d/CCMenu.h"
|
#include "2d/CCMenu.h"
|
||||||
#include "2d/CCMenuItem.h"
|
#include "2d/CCMenuItem.h"
|
||||||
#include "2d/CCClippingNode.h"
|
#include "2d/CCClippingNode.h"
|
||||||
|
#include "2d/CCClippingRegionNode.h"
|
||||||
#include "2d/CCMotionStreak.h"
|
#include "2d/CCMotionStreak.h"
|
||||||
#include "2d/CCProgressTimer.h"
|
#include "2d/CCProgressTimer.h"
|
||||||
#include "2d/CCRenderTexture.h"
|
#include "2d/CCRenderTexture.h"
|
||||||
|
|
|
@ -26,7 +26,7 @@ headers = %(cocosdir)s/cocos/cocos2d.h %(cocosdir)s/cocos/2d/CCProtectedNode.h
|
||||||
|
|
||||||
# what classes to produce code for. You can use regular expressions here. When testing the regular
|
# what classes to produce code for. You can use regular expressions here. When testing the regular
|
||||||
# expression, it will be enclosed in "^$", like this: "^Menu*$".
|
# expression, it will be enclosed in "^$", like this: "^Menu*$".
|
||||||
classes = New.* Sprite.* Scene Node.* Director Layer.* Menu.* Touch .*Action.* Move.* Rotate.* Blink.* Tint.* Sequence Repeat.* Fade.* Ease.* Scale.* Transition.* Spawn Animat.* Flip.* Delay.* Skew.* Jump.* Place.* Show.* Progress.* PointArray ToggleVisibility.* RemoveSelf Hide Particle.* Label.* Atlas.* TextureCache.* Texture2D Cardinal.* CatmullRom.* ParallaxNode TileMap.* .*TMX.* CallFunc RenderTexture GridAction Grid3DAction GridBase$ .+Grid Shaky3D Waves3D FlipX3D FlipY3D Speed ActionManager Set Scheduler Timer Orbit.* Follow.* Bezier.* CardinalSpline.* Camera.* DrawNode .*3D$ Liquid$ Waves$ ShuffleTiles$ TurnOffTiles$ Split.* Twirl$ FileUtils$ GLProgram ShaderCache Application ClippingNode MotionStreak ^Ref$ UserDefault GLViewImpl GLView Image Event(?!.*(Physics).*).* Component ProtectedNode Console GLProgramCache GLProgramState Camera Device
|
classes = New.* Sprite.* Scene Node.* Director Layer.* Menu.* Touch .*Action.* Move.* Rotate.* Blink.* Tint.* Sequence Repeat.* Fade.* Ease.* Scale.* Transition.* Spawn Animat.* Flip.* Delay.* Skew.* Jump.* Place.* Show.* Progress.* PointArray ToggleVisibility.* RemoveSelf Hide Particle.* Label.* Atlas.* TextureCache.* Texture2D Cardinal.* CatmullRom.* ParallaxNode TileMap.* .*TMX.* CallFunc RenderTexture GridAction Grid3DAction GridBase$ .+Grid Shaky3D Waves3D FlipX3D FlipY3D Speed ActionManager Set Scheduler Timer Orbit.* Follow.* Bezier.* CardinalSpline.* Camera.* DrawNode .*3D$ Liquid$ Waves$ ShuffleTiles$ TurnOffTiles$ Split.* Twirl$ FileUtils$ GLProgram ShaderCache Application ClippingNode ClippingRegionNode MotionStreak ^Ref$ UserDefault GLViewImpl GLView Image Event(?!.*(Physics).*).* Component ProtectedNode Console GLProgramCache GLProgramState Camera Device
|
||||||
|
|
||||||
# what should we skip? in the format ClassName::[function function]
|
# what should we skip? in the format ClassName::[function function]
|
||||||
# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also
|
# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also
|
||||||
|
|
Loading…
Reference in New Issue