Tuesday 15 January 2013

Is it possible to clip a Layer with a clipping box using cocos2d-x 3.2? -



Is it possible to clip a Layer with a clipping box using cocos2d-x 3.2? -

i need clip drawing area of custom layer draw within box instead of drawing whole window.

i've come solution, not working:

void gamelayer::visit(renderer* renderer, const mat4 &parenttransform, uint32_t parentflags) { auto director = director::getinstance(); director->pushmatrix(matrix_stack_type::matrix_stack_modelview); glenable(gl_scissor_test); static rect clippingregion = {0,0,200,200}; director->getopenglview()->setscissorinpoints( clippingregion.origin.x + origin.x, clippingregion.origin.y + origin.y, clippingregion.size.width, clippingregion.size.height); layer::visit(renderer, parenttransform, parentflags); gldisable(gl_scissor_test); director->popmatrix(matrix_stack_type::matrix_stack_modelview); }

the layer draw if code wasn't there. if remove gldisable(gl_scissor_test) whole window clipped {0,0,200,200} rect.

is possible clip layer using approach?

i've found solution problem looking @ how layout class in cocos2d-x implements clipping rect. have add together these 2 variables class:

customcommand _beforevisitcmdscissor; customcommand _aftervisitcmdscissor;

and can modify visit(...) method this:

void gamelayer::visit(renderer* renderer, const mat4 &parenttransform, uint32_t parentflags) { _beforevisitcmdscissor.init(_globalzorder); _beforevisitcmdscissor.func = cc_callback_0(gamelayer::onbeforevisitscissor, this); renderer->addcommand(&_beforevisitcmdscissor); layer::visit(renderer, parenttransform, parentflags); _aftervisitcmdscissor.init(_globalzorder); _aftervisitcmdscissor.func = cc_callback_0(gamelayer::onaftervisitscissor, this); renderer->addcommand(&_aftervisitcmdscissor); } void gamelayer::onbeforevisitscissor() { static float size = tile::size; static rect clippingregion = {0,0,200,200}; glenable(gl_scissor_test); director::getinstance()->getopenglview()->setscissorinpoints( clippingregion.origin.x + origin.x, clippingregion.origin.y + origin.y, clippingregion.size.width, clippingregion.size.height); } void gamelayer::onaftervisitscissor() { gldisable(gl_scissor_test); }

cocos2d-x clipping cocos2d-x-3.0

No comments:

Post a Comment