| 609 | } |
| 610 | |
| 611 | void RawStencilBufferTest::draw(Renderer* renderer, const Mat4& transform, uint32_t flags) |
| 612 | { |
| 613 | auto winPoint = Vec2(Director::getInstance()->getWinSize()); |
| 614 | auto planeSize = winPoint * (1.0 / _planeCount); |
| 615 | |
| 616 | renderer->addCallbackCommand([=]() { renderer->setStencilTest(true); }, _globalZOrder); |
| 617 | |
| 618 | for (int i = 0, cmdIndex = 0; i < _planeCount; i++) |
| 619 | { |
| 620 | auto spritePoint = planeSize * i; |
| 621 | spritePoint.x += planeSize.x / 2; |
| 622 | spritePoint.y = 0; |
| 623 | _sprites.at(i)->setPosition(spritePoint); |
| 624 | _spritesStencil.at(i)->setPosition(spritePoint); |
| 625 | |
| 626 | renderer->clear(ClearFlag::STENCIL, Color4F::BLACK, 0.f, 0x0, _globalZOrder); |
| 627 | |
| 628 | renderer->addCommand(&_renderCmds[cmdIndex]); |
| 629 | cmdIndex++; |
| 630 | |
| 631 | Director* director = Director::getInstance(); |
| 632 | AXASSERT(nullptr != director, "Director is null when setting matrix stack"); |
| 633 | director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); |
| 634 | |
| 635 | _modelViewTransform = this->transform(transform); |
| 636 | _spritesStencil.at(i)->visit(renderer, _modelViewTransform, flags); |
| 637 | director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); |
| 638 | |
| 639 | renderer->addCommand(&_renderCmds[cmdIndex]); |
| 640 | cmdIndex++; |
| 641 | |
| 642 | director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); |
| 643 | _modelViewTransform = this->transform(transform); |
| 644 | _sprites.at(i)->visit(renderer, _modelViewTransform, flags); |
| 645 | director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); |
| 646 | } |
| 647 | |
| 648 | renderer->addCallbackCommand([=]() { renderer->setStencilTest(false); }, _globalZOrder); |
| 649 | } |
| 650 | |
| 651 | void RawStencilBufferTest::onBeforeDrawClip(int planeIndex) |
| 652 | { |
nothing calls this directly
no test coverage detected