You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
905B

  1. #pragma once
  2. #include <widget/Widget.hpp>
  3. namespace rack {
  4. namespace widget {
  5. /** Caches a widget's draw() result to a framebuffer so it is called less frequently.
  6. When `dirty` is true, its children will be re-rendered on the next call to step().
  7. Events are not passed to the underlying scene.
  8. */
  9. struct FramebufferWidget : Widget {
  10. struct Internal;
  11. Internal* internal;
  12. /** Set this to true to re-render the children to the framebuffer the next time it is drawn */
  13. bool dirty = true;
  14. bool bypass = false;
  15. float oversample = 1.0;
  16. FramebufferWidget();
  17. ~FramebufferWidget();
  18. void onDirty(const event::Dirty& e) override;
  19. void step() override;
  20. void draw(const DrawArgs& args) override;
  21. virtual void drawFramebuffer();
  22. int getImageHandle();
  23. NVGLUframebuffer* getFramebuffer();
  24. math::Vec getFramebufferSize();
  25. void setScale(math::Vec scale);
  26. };
  27. } // namespace widget
  28. } // namespace rack