1 #pragma once
3 #include <vector>
5 #include "drmpropobject.h"
7 namespace kms
8 {
10 struct CrtcPriv;
12 class Crtc : public DrmPropObject
13 {
14 friend class Card;
15 friend class Connector;
16 public:
17 void refresh();
19 const std::vector<Plane*>& get_possible_planes() const { return m_possible_planes; }
21 int set_mode(Connector* conn, const Videomode& mode);
22 int set_mode(Connector* conn, Framebuffer& fb, const Videomode& mode);
24 int set_plane(Plane *plane, Framebuffer &fb,
25 int32_t dst_x, int32_t dst_y, uint32_t dst_w, uint32_t dst_h,
26 float src_x, float src_y, float src_w, float src_h);
27 int disable_mode();
29 int disable_plane(Plane* plane);
31 Plane* get_primary_plane();
33 int page_flip(Framebuffer& fb, void *data);
35 uint32_t buffer_id() const;
36 uint32_t x() const;
37 uint32_t y() const;
38 uint32_t width() const;
39 uint32_t height() const;
40 int mode_valid() const;
41 Videomode mode() const;
42 int gamma_size() const;
43 private:
44 Crtc(Card& card, uint32_t id, uint32_t idx);
45 ~Crtc();
47 void setup();
48 void restore_mode(Connector *conn);
50 CrtcPriv* m_priv;
52 std::vector<Plane*> m_possible_planes;
53 };
54 }