pub struct DumbBuffer { /* private fields */ }
Implementations§
Source§impl DumbBuffer
impl DumbBuffer
pub fn buffer(&self) -> &[u8] ⓘ
Sourcepub fn buffer_mut(&mut self) -> &mut [u8] ⓘ
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
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}
Sourcepub fn width(&self) -> u32
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}
Sourcepub fn height(&self) -> u32
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
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}
Sourcepub fn pitch(&self) -> u32
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
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}
pub fn bpp(&self) -> u32
Sourcepub fn framebuffer_id(&self) -> FramebufferId
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
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}
pub fn pixel_idx(&self, x: u32, y: u32) -> Option<usize>
pub fn clear_to_zero(&mut self)
Trait Implementations§
Source§impl Debug for DumbBuffer
impl Debug for DumbBuffer
Auto Trait Implementations§
impl Freeze for DumbBuffer
impl RefUnwindSafe for DumbBuffer
impl !Send for DumbBuffer
impl !Sync for DumbBuffer
impl Unpin for DumbBuffer
impl UnwindSafe for DumbBuffer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more