X11Output.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #pragma once
  2. #include <glm/vec4.hpp>
  3. #include <map>
  4. #include <string>
  5. #include <X11/Xlib.h>
  6. #include <X11/extensions/Xrandr.h>
  7. #include "Output.h"
  8. #include "WallpaperEngine/Render/Drivers/VideoDriver.h"
  9. namespace WallpaperEngine::Render::Drivers::Output {
  10. class X11Output final : public Output {
  11. public:
  12. X11Output (ApplicationContext& context, VideoDriver& driver);
  13. ~X11Output () override;
  14. void reset () override;
  15. bool renderVFlip () const override;
  16. bool renderMultiple () const override;
  17. bool haveImageBuffer () const override;
  18. void* getImageBuffer () const override;
  19. uint32_t getImageBufferSize () const override;
  20. void updateRender () const override;
  21. private:
  22. void loadScreenInfo ();
  23. void discoverOutputs (XRRScreenResources* screenResources);
  24. void validateOutputs () const;
  25. void initX11Background ();
  26. void free ();
  27. Display* m_display = nullptr;
  28. Pixmap m_pixmap;
  29. Window m_root;
  30. GC m_gc;
  31. char* m_imageData = nullptr;
  32. uint32_t m_imageSize = 0;
  33. XImage* m_image = nullptr;
  34. std::vector<OutputViewport*> m_screens = {};
  35. };
  36. } // namespace WallpaperEngine::Render::Drivers::Output