Create wl_buffer

This commit is contained in:
2025-04-21 14:32:56 -07:00
parent 7369c5f813
commit ad72c2855e

View File

@@ -209,11 +209,11 @@ fn wl_shm_create_pool(wl_state: &mut WlState) -> Result<(), String> {
request.write_u32(&id, &mut offset); request.write_u32(&id, &mut offset);
request.write_u32(&(shm_size as u32), &mut offset); request.write_u32(&(shm_size as u32), &mut offset);
println!("{:?}", request);
let mut ancillary_buf = [0u8; 32]; let mut ancillary_buf = [0u8; 32];
let mut ancillary = SocketAncillary::new(&mut ancillary_buf[..]); let mut ancillary = SocketAncillary::new(&mut ancillary_buf[..]);
assert!(ancillary.add_fds(&fds[..])); if !ancillary.add_fds(&fds[..]) {
return Err("Error in wl_shm_create_pool: ancillary.add_fds failed".to_string());
}
match wl_state.socket.send_vectored_with_ancillary(&[std::io::IoSlice::new(&request)], &mut ancillary) { match wl_state.socket.send_vectored_with_ancillary(&[std::io::IoSlice::new(&request)], &mut ancillary) {
Ok(bytes) => { Ok(bytes) => {
@@ -227,10 +227,39 @@ fn wl_shm_create_pool(wl_state: &mut WlState) -> Result<(), String> {
Ok(()) Ok(())
} }
fn wl_shm_pool_resize(event: &Vec<u8>, wl_state: &mut WlState) -> std::io::Result<()> { fn wl_shm_pool_create_buffer(
wl_state: &mut WlState,
shm_offset: u32,
width: u32,
height: u32
) -> Result<(), Box<dyn Error>> {
let object: u32 = wl_state.shm_pool.as_ref().unwrap().id;
const REQ_SIZE: u16 = 32;
const OPCODE: u16 = 0;
let stride: u32 = width * 4;
wl_state.current_id += 1;
let id = wl_state.current_id;
let format = 0;
let mut offset: usize = 0; let mut offset: usize = 0;
let size = event.read_u32(&mut offset); let mut request = vec![0u8; REQ_SIZE as usize];
wl_state.shm_pool.as_mut().unwrap().resize(size as usize) request.write_u32(&object, &mut offset);
request.write_u16(&OPCODE, &mut offset);
request.write_u16(&REQ_SIZE, &mut offset);
request.write_u32(&id, &mut offset);
request.write_u32(&shm_offset, &mut offset);
request.write_u32(&width, &mut offset);
request.write_u32(&height, &mut offset);
request.write_u32(&stride, &mut offset);
request.write_u32(&format, &mut offset);
println!("Creating wl_buffer: {:?}", request);
wl_state.socket.write(&request)?;
Ok(())
} }
fn wl_registry_global(event: &Vec<u8>, wl_state: &mut WlState) -> Result<(), Box<dyn Error>> { fn wl_registry_global(event: &Vec<u8>, wl_state: &mut WlState) -> Result<(), Box<dyn Error>> {
@@ -257,14 +286,15 @@ fn wl_registry_global(event: &Vec<u8>, wl_state: &mut WlState) -> Result<(), Box
&wl_state.current_id.clone() &wl_state.current_id.clone()
)?; )?;
wl_state.shm_id = Some(wl_state.current_id); wl_state.shm_id = Some(wl_state.current_id);
wl_shm_create_pool(wl_state)?; wl_shm_create_pool(wl_state)?;
wl_shm_pool_create_buffer(wl_state, 0, 200, 200)?;
} }
Ok(()) Ok(())
} }
fn main() -> Result<(), Box<dyn Error>> { fn main() -> Result<(), Box<dyn Error>> {
let wl_sock = match wl_connect() { let wl_sock = match wl_connect() {
Ok(res) => res, Ok(res) => res,
Err(err) => { Err(err) => {
@@ -307,9 +337,6 @@ fn main() -> Result<(), Box<dyn Error>> {
else if wl_state.shm_id.is_some() && header.object == wl_state.shm_id.unwrap() && header.opcode == 0 { // wl_shm::format else if wl_state.shm_id.is_some() && header.object == wl_state.shm_id.unwrap() && header.opcode == 0 { // wl_shm::format
wl_shm_format(&event); wl_shm_format(&event);
} }
else if wl_state.shm_pool.is_some() && header.object == wl_state.shm_pool.as_ref().unwrap().id && header.opcode == 2 {
wl_shm_pool_resize(&event, &mut wl_state)?;
}
else { else {
println!( println!(
"Received event:\n\tObject: {}\n\tOpcode: {}\n\tSize: {}", "Received event:\n\tObject: {}\n\tOpcode: {}\n\tSize: {}",