fix clippingNodeTest

This commit is contained in:
Huabing.Xu 2013-12-26 15:30:13 +08:00
parent 3cdc20612b
commit c28f3fb0e9
2 changed files with 54 additions and 11 deletions

View File

@ -7,6 +7,8 @@
#include "ClippingNodeTest.h"
#include "../testResource.h"
#include "renderer/CCRenderer.h"
#include "renderer/CCCustomCommand.h"
enum {
kTagTitleLabel = 1,
@ -596,8 +598,14 @@ void RawStencilBufferTest::draw()
auto planeSize = winPoint * (1.0 / _planeCount);
glEnable(GL_STENCIL_TEST);
CHECK_GL_ERROR_DEBUG();
Renderer *renderer = Director::getInstance()->getRenderer();
CustomCommand *cmd = CustomCommand::getCommandPool().generateCommand();
cmd->init(0, _vertexZ);
cmd->func = CC_CALLBACK_0(RawStencilBufferTest::onEnableStencil, this);
renderer->addCommand(cmd);
for (int i = 0; i < _planeCount; i++) {
@ -608,21 +616,21 @@ void RawStencilBufferTest::draw()
spritePoint.x += planeSize.x / 2;
spritePoint.y = 0;
_sprite->setPosition( spritePoint );
this->setupStencilForClippingOnPlane(i);
CHECK_GL_ERROR_DEBUG();
DrawPrimitives::drawSolidRect(Point::ZERO, stencilPoint, Color4F(1, 1, 1, 1));
cmd = CustomCommand::getCommandPool().generateCommand();
cmd->init(0, _vertexZ);
cmd->func = CC_CALLBACK_0(RawStencilBufferTest::onBeforeDrawClip, this, i, stencilPoint);
renderer->addCommand(cmd);
kmGLPushMatrix();
this->transform();
_sprite->visit();
kmGLPopMatrix();
this->setupStencilForDrawingOnPlane(i);
CHECK_GL_ERROR_DEBUG();
DrawPrimitives::drawSolidRect(Point::ZERO, winPoint, _planeColor[i]);
cmd = CustomCommand::getCommandPool().generateCommand();
cmd->init(0, _vertexZ);
cmd->func = CC_CALLBACK_0(RawStencilBufferTest::onBeforeDrawSprite, this, i, winPoint);
renderer->addCommand(cmd);
kmGLPushMatrix();
this->transform();
@ -630,10 +638,40 @@ void RawStencilBufferTest::draw()
kmGLPopMatrix();
}
cmd = CustomCommand::getCommandPool().generateCommand();
cmd->init(0, _vertexZ);
cmd->func = CC_CALLBACK_0(RawStencilBufferTest::onDisableStencil, this);
renderer->addCommand(cmd);
}
void RawStencilBufferTest::onEnableStencil()
{
glEnable(GL_STENCIL_TEST);
CHECK_GL_ERROR_DEBUG();
}
void RawStencilBufferTest::onDisableStencil()
{
glDisable(GL_STENCIL_TEST);
CHECK_GL_ERROR_DEBUG();
}
void RawStencilBufferTest::onBeforeDrawClip(int planeIndex, const Point& pt)
{
this->setupStencilForClippingOnPlane(planeIndex);
CHECK_GL_ERROR_DEBUG();
DrawPrimitives::drawSolidRect(Point::ZERO, pt, Color4F(1, 1, 1, 1));
}
void RawStencilBufferTest::onBeforeDrawSprite(int planeIndex, const Point& pt)
{
this->setupStencilForDrawingOnPlane(planeIndex);
CHECK_GL_ERROR_DEBUG();
DrawPrimitives::drawSolidRect(Point::ZERO, pt, _planeColor[planeIndex]);
}
void RawStencilBufferTest::setupStencilForClippingOnPlane(GLint plane)
{
GLint planeMask = 0x1 << plane;

View File

@ -156,6 +156,11 @@ public:
virtual void setupStencilForClippingOnPlane(GLint plane);
virtual void setupStencilForDrawingOnPlane(GLint plane);
public:
void onEnableStencil();
void onDisableStencil();
void onBeforeDrawClip(int planeIndex, const Point& pt);
void onBeforeDrawSprite(int planeIndex, const Point& pt);
protected:
Sprite* _sprite;
};