| /* | |
| * Copyright 2024 Rive | |
| */ | |
| #include "gm.hpp" | |
| #include "gmutils.hpp" | |
| #include "rive/math/math_types.hpp" | |
| using namespace rivegm; | |
| namespace rive::gpu | |
| { | |
| // Draws non-overlapping clips, which will get reordered and batched together in | |
| // atomic and msaa modes. | |
| class ParallelClipsGM : public GM | |
| { | |
| public: | |
| ParallelClipsGM() : GM(850, 850) {} | |
| ColorInt clearColor() const override { return 0xff000000; } | |
| void onDraw(Renderer* renderer) override | |
| { | |
| for (uint32_t y = 0; y < 7; ++y) | |
| { | |
| renderer->save(); | |
| for (uint32_t x = 0; x < 7; ++x) | |
| { | |
| bool nested = (x ^ y) & 1; | |
| renderer->save(); | |
| { | |
| PathBuilder clip; | |
| clip.addRect({10, 10, 110, 110}, | |
| rivegm::PathDirection::counterclockwise); | |
| clip.moveTo(cos(math::PI / 2) * 30 + 60, | |
| sin(math::PI / 2) * 30 + 60) | |
| .lineTo(cos(2 * math::PI / 3 + math::PI / 2) * 30 + 60, | |
| sin(2 * math::PI / 3 + math::PI / 2) * 30 + 60) | |
| .lineTo(cos(4 * math::PI / 3 + math::PI / 2) * 30 + 60, | |
| sin(4 * math::PI / 3 + math::PI / 2) * 30 + 60); | |
| renderer->clipPath(clip.detach()); | |
| } | |
| if (nested) | |
| { | |
| PathBuilder clip; | |
| clip.addRect({10, 10, 110, 110}, | |
| rivegm::PathDirection::counterclockwise); | |
| clip.addRect({55, 10, 65, 110}, | |
| rivegm::PathDirection::clockwise); | |
| renderer->clipPath(clip.detach()); | |
| } | |
| if (nested) | |
| { | |
| PathBuilder clip; | |
| clip.addRect({10, 10, 110, 110}, | |
| rivegm::PathDirection::counterclockwise); | |
| clip.addRect({10, 55, 110, 65}, | |
| rivegm::PathDirection::clockwise); | |
| renderer->clipPath(clip.detach()); | |
| } | |
| renderer->drawPath( | |
| PathBuilder::Circle(60, 60, 50), | |
| Paint(((y * x + 123458383u) * 285018463u) | 0xff808080)); | |
| renderer->restore(); | |
| renderer->translate(120, 0); | |
| } | |
| renderer->restore(); | |
| renderer->translate(0, 120); | |
| } | |
| } | |
| }; | |
| GMREGISTER(parallelclips, return new ParallelClipsGM) | |
| } // namespace rive::gpu |