背景和头像缺失
This commit is contained in:
84
cocos2d/cocos/2d/CCClippingRectangleNode.cpp
Normal file
84
cocos2d/cocos/2d/CCClippingRectangleNode.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
|
||||
#include "CCClippingRectangleNode.h"
|
||||
#include "base/CCDirector.h"
|
||||
#include "renderer/CCRenderer.h"
|
||||
#include "math/Vec2.h"
|
||||
#include "CCGLView.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
ClippingRectangleNode* ClippingRectangleNode::create(const Rect& clippingRegion)
|
||||
{
|
||||
ClippingRectangleNode* node = new ClippingRectangleNode();
|
||||
if (node && node->init()) {
|
||||
node->setClippingRegion(clippingRegion);
|
||||
node->autorelease();
|
||||
} else {
|
||||
CC_SAFE_DELETE(node);
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
ClippingRectangleNode* ClippingRectangleNode::create()
|
||||
{
|
||||
ClippingRectangleNode* node = new ClippingRectangleNode();
|
||||
if (node && node->init()) {
|
||||
node->autorelease();
|
||||
} else {
|
||||
CC_SAFE_DELETE(node);
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
void ClippingRectangleNode::setClippingRegion(const Rect &clippingRegion)
|
||||
{
|
||||
_clippingRegion = clippingRegion;
|
||||
}
|
||||
|
||||
void ClippingRectangleNode::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,
|
||||
pos.y,
|
||||
_clippingRegion.size.width * scaleX,
|
||||
_clippingRegion.size.height * scaleY);
|
||||
}
|
||||
}
|
||||
|
||||
void ClippingRectangleNode::onAfterVisitScissor()
|
||||
{
|
||||
if (_clippingEnabled)
|
||||
{
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
}
|
||||
}
|
||||
|
||||
void ClippingRectangleNode::visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags)
|
||||
{
|
||||
_beforeVisitCmdScissor.init(_globalZOrder);
|
||||
_beforeVisitCmdScissor.func = CC_CALLBACK_0(ClippingRectangleNode::onBeforeVisitScissor, this);
|
||||
renderer->addCommand(&_beforeVisitCmdScissor);
|
||||
|
||||
Node::visit(renderer, parentTransform, parentFlags);
|
||||
|
||||
_afterVisitCmdScissor.init(_globalZOrder);
|
||||
_afterVisitCmdScissor.func = CC_CALLBACK_0(ClippingRectangleNode::onAfterVisitScissor, this);
|
||||
renderer->addCommand(&_afterVisitCmdScissor);
|
||||
}
|
||||
|
||||
NS_CC_END
|
||||
Reference in New Issue
Block a user