Struct DumbBuffer

Source
pub struct DumbBuffer { /* private fields */ }

Implementations§

Source§

impl DumbBuffer

Source

pub fn buffer(&self) -> &[u8]

Source

pub fn buffer_mut(&mut self) -> &mut [u8]

Examples found in repository?
examples/modesetting.rs (line 51)
36fn display_demo(card: &mut Card) -> Result<(), Error> {
37    let mut outputs = prepare_outputs(&card)?;
38    for output in &mut outputs {
39        println!("preparing output {output:#?}");
40        let conn = card.connector_state(output.conn_id)?;
41
42        let mode = &output.mode;
43        let mode_name = String::from_utf8_lossy(&mode.name);
44        println!(
45            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
46            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
47        );
48
49        let rows = output.db.height() as usize;
50        let pitch = output.db.pitch() as usize;
51        let data = output.db.buffer_mut();
52        for i in 0..rows {
53            if (i % 8) > 3 {
54                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
55                row.fill(0xff);
56            }
57        }
58
59        println!(
60            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connection {:?}",
61            output.crtc_id,
62            output.db.framebuffer_id(),
63            conn.id
64        );
65        card.set_crtc_dumb_buffer(output.crtc_id, &output.db, mode, &[output.conn_id])?;
66        card.crtc_page_flip_dumb_buffer(output.crtc_id, &output.db, PageFlipFlags::EVENT)?;
67    }
68
69    let mut evt_buf = vec![0_u8; 1024];
70    loop {
71        println!("waiting for events (send SIGINT to exit)");
72        for evt in card.read_events(&mut evt_buf)? {
73            println!("event {evt:?}");
74            match evt {
75                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
76                    // In a real program this would be a time place to draw the next frame
77                    // for the reported crtc.
78                }
79                _ => {
80                    // Ignore any unrecognized event types.
81                }
82            }
83        }
84    }
85}
More examples
Hide additional examples
examples/modesetting-atomic.rs (line 57)
40fn display_demo(card: &mut Card) -> Result<(), Error> {
41    let mut outputs = prepare_outputs(&card)?;
42    let mut req = linux_drm::modeset::AtomicRequest::new();
43
44    for output in &mut outputs {
45        println!("preparing output {output:#?}");
46        let conn = card.connector_state(output.conn_id)?;
47
48        let mode = &output.mode;
49        let mode_name = String::from_utf8_lossy(&mode.name);
50        println!(
51            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
52            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
53        );
54
55        let rows = output.db.height() as usize;
56        let pitch = output.db.pitch() as usize;
57        let data = output.db.buffer_mut();
58        for i in 0..rows {
59            if (i % 8) > 3 {
60                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
61                row.fill(0xff);
62            }
63        }
64
65        println!(
66            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connector {:?}",
67            output.crtc_id,
68            output.db.framebuffer_id(),
69            conn.id
70        );
71
72        req.set_property(
73            ObjectId::Connector(output.conn_id),
74            output.conn_prop_ids.crtc_id,
75            output.crtc_id,
76        );
77        req.set_property(
78            ObjectId::Crtc(output.crtc_id),
79            output.crtc_prop_ids.active,
80            true,
81        );
82        req.set_property(
83            ObjectId::Plane(output.plane_id),
84            output.plane_prop_ids.fb_id,
85            output.db.framebuffer_id(),
86        );
87        req.set_property(
88            ObjectId::Plane(output.plane_id),
89            output.plane_prop_ids.crtc_id,
90            output.crtc_id,
91        );
92        req.set_property(
93            ObjectId::Plane(output.plane_id),
94            output.plane_prop_ids.crtc_x,
95            0,
96        );
97        req.set_property(
98            ObjectId::Plane(output.plane_id),
99            output.plane_prop_ids.crtc_y,
100            0,
101        );
102        req.set_property(
103            ObjectId::Plane(output.plane_id),
104            output.plane_prop_ids.crtc_w,
105            output.db.width(),
106        );
107        req.set_property(
108            ObjectId::Plane(output.plane_id),
109            output.plane_prop_ids.crtc_h,
110            output.db.height(),
111        );
112        req.set_property(
113            ObjectId::Plane(output.plane_id),
114            output.plane_prop_ids.src_x,
115            0,
116        );
117        req.set_property(
118            ObjectId::Plane(output.plane_id),
119            output.plane_prop_ids.src_y,
120            0,
121        );
122        req.set_property(
123            ObjectId::Plane(output.plane_id),
124            output.plane_prop_ids.src_w,
125            (output.db.width() as u64) << 16,
126        );
127        req.set_property(
128            ObjectId::Plane(output.plane_id),
129            output.plane_prop_ids.src_h,
130            (output.db.height() as u64) << 16,
131        );
132    }
133
134    println!("atomic commit {req:#?}");
135    card.atomic_commit(
136        &req,
137        AtomicCommitFlags::ALLOW_MODESET | AtomicCommitFlags::PAGE_FLIP_EVENT,
138        0,
139    )?;
140
141    let mut evt_buf = vec![0_u8; 1024];
142    loop {
143        println!("waiting for events (send SIGINT to exit)");
144        for evt in card.read_events(&mut evt_buf)? {
145            println!("event {evt:?}");
146            match evt {
147                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
148                    // In a real program this would be a time place to draw the next frame
149                    // for the reported crtc.
150                }
151                _ => {
152                    // Ignore any unrecognized event types.
153                }
154            }
155        }
156    }
157}
Source

pub fn width(&self) -> u32

Examples found in repository?
examples/modesetting-atomic.rs (line 105)
40fn display_demo(card: &mut Card) -> Result<(), Error> {
41    let mut outputs = prepare_outputs(&card)?;
42    let mut req = linux_drm::modeset::AtomicRequest::new();
43
44    for output in &mut outputs {
45        println!("preparing output {output:#?}");
46        let conn = card.connector_state(output.conn_id)?;
47
48        let mode = &output.mode;
49        let mode_name = String::from_utf8_lossy(&mode.name);
50        println!(
51            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
52            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
53        );
54
55        let rows = output.db.height() as usize;
56        let pitch = output.db.pitch() as usize;
57        let data = output.db.buffer_mut();
58        for i in 0..rows {
59            if (i % 8) > 3 {
60                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
61                row.fill(0xff);
62            }
63        }
64
65        println!(
66            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connector {:?}",
67            output.crtc_id,
68            output.db.framebuffer_id(),
69            conn.id
70        );
71
72        req.set_property(
73            ObjectId::Connector(output.conn_id),
74            output.conn_prop_ids.crtc_id,
75            output.crtc_id,
76        );
77        req.set_property(
78            ObjectId::Crtc(output.crtc_id),
79            output.crtc_prop_ids.active,
80            true,
81        );
82        req.set_property(
83            ObjectId::Plane(output.plane_id),
84            output.plane_prop_ids.fb_id,
85            output.db.framebuffer_id(),
86        );
87        req.set_property(
88            ObjectId::Plane(output.plane_id),
89            output.plane_prop_ids.crtc_id,
90            output.crtc_id,
91        );
92        req.set_property(
93            ObjectId::Plane(output.plane_id),
94            output.plane_prop_ids.crtc_x,
95            0,
96        );
97        req.set_property(
98            ObjectId::Plane(output.plane_id),
99            output.plane_prop_ids.crtc_y,
100            0,
101        );
102        req.set_property(
103            ObjectId::Plane(output.plane_id),
104            output.plane_prop_ids.crtc_w,
105            output.db.width(),
106        );
107        req.set_property(
108            ObjectId::Plane(output.plane_id),
109            output.plane_prop_ids.crtc_h,
110            output.db.height(),
111        );
112        req.set_property(
113            ObjectId::Plane(output.plane_id),
114            output.plane_prop_ids.src_x,
115            0,
116        );
117        req.set_property(
118            ObjectId::Plane(output.plane_id),
119            output.plane_prop_ids.src_y,
120            0,
121        );
122        req.set_property(
123            ObjectId::Plane(output.plane_id),
124            output.plane_prop_ids.src_w,
125            (output.db.width() as u64) << 16,
126        );
127        req.set_property(
128            ObjectId::Plane(output.plane_id),
129            output.plane_prop_ids.src_h,
130            (output.db.height() as u64) << 16,
131        );
132    }
133
134    println!("atomic commit {req:#?}");
135    card.atomic_commit(
136        &req,
137        AtomicCommitFlags::ALLOW_MODESET | AtomicCommitFlags::PAGE_FLIP_EVENT,
138        0,
139    )?;
140
141    let mut evt_buf = vec![0_u8; 1024];
142    loop {
143        println!("waiting for events (send SIGINT to exit)");
144        for evt in card.read_events(&mut evt_buf)? {
145            println!("event {evt:?}");
146            match evt {
147                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
148                    // In a real program this would be a time place to draw the next frame
149                    // for the reported crtc.
150                }
151                _ => {
152                    // Ignore any unrecognized event types.
153                }
154            }
155        }
156    }
157}
Source

pub fn height(&self) -> u32

Examples found in repository?
examples/modesetting.rs (line 49)
36fn display_demo(card: &mut Card) -> Result<(), Error> {
37    let mut outputs = prepare_outputs(&card)?;
38    for output in &mut outputs {
39        println!("preparing output {output:#?}");
40        let conn = card.connector_state(output.conn_id)?;
41
42        let mode = &output.mode;
43        let mode_name = String::from_utf8_lossy(&mode.name);
44        println!(
45            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
46            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
47        );
48
49        let rows = output.db.height() as usize;
50        let pitch = output.db.pitch() as usize;
51        let data = output.db.buffer_mut();
52        for i in 0..rows {
53            if (i % 8) > 3 {
54                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
55                row.fill(0xff);
56            }
57        }
58
59        println!(
60            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connection {:?}",
61            output.crtc_id,
62            output.db.framebuffer_id(),
63            conn.id
64        );
65        card.set_crtc_dumb_buffer(output.crtc_id, &output.db, mode, &[output.conn_id])?;
66        card.crtc_page_flip_dumb_buffer(output.crtc_id, &output.db, PageFlipFlags::EVENT)?;
67    }
68
69    let mut evt_buf = vec![0_u8; 1024];
70    loop {
71        println!("waiting for events (send SIGINT to exit)");
72        for evt in card.read_events(&mut evt_buf)? {
73            println!("event {evt:?}");
74            match evt {
75                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
76                    // In a real program this would be a time place to draw the next frame
77                    // for the reported crtc.
78                }
79                _ => {
80                    // Ignore any unrecognized event types.
81                }
82            }
83        }
84    }
85}
More examples
Hide additional examples
examples/modesetting-atomic.rs (line 55)
40fn display_demo(card: &mut Card) -> Result<(), Error> {
41    let mut outputs = prepare_outputs(&card)?;
42    let mut req = linux_drm::modeset::AtomicRequest::new();
43
44    for output in &mut outputs {
45        println!("preparing output {output:#?}");
46        let conn = card.connector_state(output.conn_id)?;
47
48        let mode = &output.mode;
49        let mode_name = String::from_utf8_lossy(&mode.name);
50        println!(
51            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
52            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
53        );
54
55        let rows = output.db.height() as usize;
56        let pitch = output.db.pitch() as usize;
57        let data = output.db.buffer_mut();
58        for i in 0..rows {
59            if (i % 8) > 3 {
60                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
61                row.fill(0xff);
62            }
63        }
64
65        println!(
66            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connector {:?}",
67            output.crtc_id,
68            output.db.framebuffer_id(),
69            conn.id
70        );
71
72        req.set_property(
73            ObjectId::Connector(output.conn_id),
74            output.conn_prop_ids.crtc_id,
75            output.crtc_id,
76        );
77        req.set_property(
78            ObjectId::Crtc(output.crtc_id),
79            output.crtc_prop_ids.active,
80            true,
81        );
82        req.set_property(
83            ObjectId::Plane(output.plane_id),
84            output.plane_prop_ids.fb_id,
85            output.db.framebuffer_id(),
86        );
87        req.set_property(
88            ObjectId::Plane(output.plane_id),
89            output.plane_prop_ids.crtc_id,
90            output.crtc_id,
91        );
92        req.set_property(
93            ObjectId::Plane(output.plane_id),
94            output.plane_prop_ids.crtc_x,
95            0,
96        );
97        req.set_property(
98            ObjectId::Plane(output.plane_id),
99            output.plane_prop_ids.crtc_y,
100            0,
101        );
102        req.set_property(
103            ObjectId::Plane(output.plane_id),
104            output.plane_prop_ids.crtc_w,
105            output.db.width(),
106        );
107        req.set_property(
108            ObjectId::Plane(output.plane_id),
109            output.plane_prop_ids.crtc_h,
110            output.db.height(),
111        );
112        req.set_property(
113            ObjectId::Plane(output.plane_id),
114            output.plane_prop_ids.src_x,
115            0,
116        );
117        req.set_property(
118            ObjectId::Plane(output.plane_id),
119            output.plane_prop_ids.src_y,
120            0,
121        );
122        req.set_property(
123            ObjectId::Plane(output.plane_id),
124            output.plane_prop_ids.src_w,
125            (output.db.width() as u64) << 16,
126        );
127        req.set_property(
128            ObjectId::Plane(output.plane_id),
129            output.plane_prop_ids.src_h,
130            (output.db.height() as u64) << 16,
131        );
132    }
133
134    println!("atomic commit {req:#?}");
135    card.atomic_commit(
136        &req,
137        AtomicCommitFlags::ALLOW_MODESET | AtomicCommitFlags::PAGE_FLIP_EVENT,
138        0,
139    )?;
140
141    let mut evt_buf = vec![0_u8; 1024];
142    loop {
143        println!("waiting for events (send SIGINT to exit)");
144        for evt in card.read_events(&mut evt_buf)? {
145            println!("event {evt:?}");
146            match evt {
147                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
148                    // In a real program this would be a time place to draw the next frame
149                    // for the reported crtc.
150                }
151                _ => {
152                    // Ignore any unrecognized event types.
153                }
154            }
155        }
156    }
157}
Source

pub fn pitch(&self) -> u32

Examples found in repository?
examples/modesetting.rs (line 50)
36fn display_demo(card: &mut Card) -> Result<(), Error> {
37    let mut outputs = prepare_outputs(&card)?;
38    for output in &mut outputs {
39        println!("preparing output {output:#?}");
40        let conn = card.connector_state(output.conn_id)?;
41
42        let mode = &output.mode;
43        let mode_name = String::from_utf8_lossy(&mode.name);
44        println!(
45            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
46            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
47        );
48
49        let rows = output.db.height() as usize;
50        let pitch = output.db.pitch() as usize;
51        let data = output.db.buffer_mut();
52        for i in 0..rows {
53            if (i % 8) > 3 {
54                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
55                row.fill(0xff);
56            }
57        }
58
59        println!(
60            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connection {:?}",
61            output.crtc_id,
62            output.db.framebuffer_id(),
63            conn.id
64        );
65        card.set_crtc_dumb_buffer(output.crtc_id, &output.db, mode, &[output.conn_id])?;
66        card.crtc_page_flip_dumb_buffer(output.crtc_id, &output.db, PageFlipFlags::EVENT)?;
67    }
68
69    let mut evt_buf = vec![0_u8; 1024];
70    loop {
71        println!("waiting for events (send SIGINT to exit)");
72        for evt in card.read_events(&mut evt_buf)? {
73            println!("event {evt:?}");
74            match evt {
75                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
76                    // In a real program this would be a time place to draw the next frame
77                    // for the reported crtc.
78                }
79                _ => {
80                    // Ignore any unrecognized event types.
81                }
82            }
83        }
84    }
85}
More examples
Hide additional examples
examples/modesetting-atomic.rs (line 56)
40fn display_demo(card: &mut Card) -> Result<(), Error> {
41    let mut outputs = prepare_outputs(&card)?;
42    let mut req = linux_drm::modeset::AtomicRequest::new();
43
44    for output in &mut outputs {
45        println!("preparing output {output:#?}");
46        let conn = card.connector_state(output.conn_id)?;
47
48        let mode = &output.mode;
49        let mode_name = String::from_utf8_lossy(&mode.name);
50        println!(
51            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
52            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
53        );
54
55        let rows = output.db.height() as usize;
56        let pitch = output.db.pitch() as usize;
57        let data = output.db.buffer_mut();
58        for i in 0..rows {
59            if (i % 8) > 3 {
60                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
61                row.fill(0xff);
62            }
63        }
64
65        println!(
66            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connector {:?}",
67            output.crtc_id,
68            output.db.framebuffer_id(),
69            conn.id
70        );
71
72        req.set_property(
73            ObjectId::Connector(output.conn_id),
74            output.conn_prop_ids.crtc_id,
75            output.crtc_id,
76        );
77        req.set_property(
78            ObjectId::Crtc(output.crtc_id),
79            output.crtc_prop_ids.active,
80            true,
81        );
82        req.set_property(
83            ObjectId::Plane(output.plane_id),
84            output.plane_prop_ids.fb_id,
85            output.db.framebuffer_id(),
86        );
87        req.set_property(
88            ObjectId::Plane(output.plane_id),
89            output.plane_prop_ids.crtc_id,
90            output.crtc_id,
91        );
92        req.set_property(
93            ObjectId::Plane(output.plane_id),
94            output.plane_prop_ids.crtc_x,
95            0,
96        );
97        req.set_property(
98            ObjectId::Plane(output.plane_id),
99            output.plane_prop_ids.crtc_y,
100            0,
101        );
102        req.set_property(
103            ObjectId::Plane(output.plane_id),
104            output.plane_prop_ids.crtc_w,
105            output.db.width(),
106        );
107        req.set_property(
108            ObjectId::Plane(output.plane_id),
109            output.plane_prop_ids.crtc_h,
110            output.db.height(),
111        );
112        req.set_property(
113            ObjectId::Plane(output.plane_id),
114            output.plane_prop_ids.src_x,
115            0,
116        );
117        req.set_property(
118            ObjectId::Plane(output.plane_id),
119            output.plane_prop_ids.src_y,
120            0,
121        );
122        req.set_property(
123            ObjectId::Plane(output.plane_id),
124            output.plane_prop_ids.src_w,
125            (output.db.width() as u64) << 16,
126        );
127        req.set_property(
128            ObjectId::Plane(output.plane_id),
129            output.plane_prop_ids.src_h,
130            (output.db.height() as u64) << 16,
131        );
132    }
133
134    println!("atomic commit {req:#?}");
135    card.atomic_commit(
136        &req,
137        AtomicCommitFlags::ALLOW_MODESET | AtomicCommitFlags::PAGE_FLIP_EVENT,
138        0,
139    )?;
140
141    let mut evt_buf = vec![0_u8; 1024];
142    loop {
143        println!("waiting for events (send SIGINT to exit)");
144        for evt in card.read_events(&mut evt_buf)? {
145            println!("event {evt:?}");
146            match evt {
147                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
148                    // In a real program this would be a time place to draw the next frame
149                    // for the reported crtc.
150                }
151                _ => {
152                    // Ignore any unrecognized event types.
153                }
154            }
155        }
156    }
157}
Source

pub fn bpp(&self) -> u32

Source

pub fn framebuffer_id(&self) -> FramebufferId

Examples found in repository?
examples/modesetting.rs (line 62)
36fn display_demo(card: &mut Card) -> Result<(), Error> {
37    let mut outputs = prepare_outputs(&card)?;
38    for output in &mut outputs {
39        println!("preparing output {output:#?}");
40        let conn = card.connector_state(output.conn_id)?;
41
42        let mode = &output.mode;
43        let mode_name = String::from_utf8_lossy(&mode.name);
44        println!(
45            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
46            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
47        );
48
49        let rows = output.db.height() as usize;
50        let pitch = output.db.pitch() as usize;
51        let data = output.db.buffer_mut();
52        for i in 0..rows {
53            if (i % 8) > 3 {
54                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
55                row.fill(0xff);
56            }
57        }
58
59        println!(
60            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connection {:?}",
61            output.crtc_id,
62            output.db.framebuffer_id(),
63            conn.id
64        );
65        card.set_crtc_dumb_buffer(output.crtc_id, &output.db, mode, &[output.conn_id])?;
66        card.crtc_page_flip_dumb_buffer(output.crtc_id, &output.db, PageFlipFlags::EVENT)?;
67    }
68
69    let mut evt_buf = vec![0_u8; 1024];
70    loop {
71        println!("waiting for events (send SIGINT to exit)");
72        for evt in card.read_events(&mut evt_buf)? {
73            println!("event {evt:?}");
74            match evt {
75                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
76                    // In a real program this would be a time place to draw the next frame
77                    // for the reported crtc.
78                }
79                _ => {
80                    // Ignore any unrecognized event types.
81                }
82            }
83        }
84    }
85}
More examples
Hide additional examples
examples/modesetting-atomic.rs (line 68)
40fn display_demo(card: &mut Card) -> Result<(), Error> {
41    let mut outputs = prepare_outputs(&card)?;
42    let mut req = linux_drm::modeset::AtomicRequest::new();
43
44    for output in &mut outputs {
45        println!("preparing output {output:#?}");
46        let conn = card.connector_state(output.conn_id)?;
47
48        let mode = &output.mode;
49        let mode_name = String::from_utf8_lossy(&mode.name);
50        println!(
51            "{:?} connector uses {mode_name} ({}x{}@{}Hz)",
52            conn.connector_type, mode.hdisplay, mode.vdisplay, mode.vrefresh,
53        );
54
55        let rows = output.db.height() as usize;
56        let pitch = output.db.pitch() as usize;
57        let data = output.db.buffer_mut();
58        for i in 0..rows {
59            if (i % 8) > 3 {
60                let row = &mut data[(i * pitch)..(i * pitch) + pitch];
61                row.fill(0xff);
62            }
63        }
64
65        println!(
66            "configuring CRTC {:?} for framebuffer {:?} and mode {mode_name} on connector {:?}",
67            output.crtc_id,
68            output.db.framebuffer_id(),
69            conn.id
70        );
71
72        req.set_property(
73            ObjectId::Connector(output.conn_id),
74            output.conn_prop_ids.crtc_id,
75            output.crtc_id,
76        );
77        req.set_property(
78            ObjectId::Crtc(output.crtc_id),
79            output.crtc_prop_ids.active,
80            true,
81        );
82        req.set_property(
83            ObjectId::Plane(output.plane_id),
84            output.plane_prop_ids.fb_id,
85            output.db.framebuffer_id(),
86        );
87        req.set_property(
88            ObjectId::Plane(output.plane_id),
89            output.plane_prop_ids.crtc_id,
90            output.crtc_id,
91        );
92        req.set_property(
93            ObjectId::Plane(output.plane_id),
94            output.plane_prop_ids.crtc_x,
95            0,
96        );
97        req.set_property(
98            ObjectId::Plane(output.plane_id),
99            output.plane_prop_ids.crtc_y,
100            0,
101        );
102        req.set_property(
103            ObjectId::Plane(output.plane_id),
104            output.plane_prop_ids.crtc_w,
105            output.db.width(),
106        );
107        req.set_property(
108            ObjectId::Plane(output.plane_id),
109            output.plane_prop_ids.crtc_h,
110            output.db.height(),
111        );
112        req.set_property(
113            ObjectId::Plane(output.plane_id),
114            output.plane_prop_ids.src_x,
115            0,
116        );
117        req.set_property(
118            ObjectId::Plane(output.plane_id),
119            output.plane_prop_ids.src_y,
120            0,
121        );
122        req.set_property(
123            ObjectId::Plane(output.plane_id),
124            output.plane_prop_ids.src_w,
125            (output.db.width() as u64) << 16,
126        );
127        req.set_property(
128            ObjectId::Plane(output.plane_id),
129            output.plane_prop_ids.src_h,
130            (output.db.height() as u64) << 16,
131        );
132    }
133
134    println!("atomic commit {req:#?}");
135    card.atomic_commit(
136        &req,
137        AtomicCommitFlags::ALLOW_MODESET | AtomicCommitFlags::PAGE_FLIP_EVENT,
138        0,
139    )?;
140
141    let mut evt_buf = vec![0_u8; 1024];
142    loop {
143        println!("waiting for events (send SIGINT to exit)");
144        for evt in card.read_events(&mut evt_buf)? {
145            println!("event {evt:?}");
146            match evt {
147                DrmEvent::Generic(GenericDrmEvent::FlipComplete(_)) => {
148                    // In a real program this would be a time place to draw the next frame
149                    // for the reported crtc.
150                }
151                _ => {
152                    // Ignore any unrecognized event types.
153                }
154            }
155        }
156    }
157}
Source

pub fn pixel_idx(&self, x: u32, y: u32) -> Option<usize>

Source

pub fn clear_to_zero(&mut self)

Trait Implementations§

Source§

impl Debug for DumbBuffer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for DumbBuffer

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.