From 1ee485f3c534dfa9dd6735b88041b05ffacde11d Mon Sep 17 00:00:00 2001 From: UnderSampled Date: Mon, 18 Sep 2023 00:19:23 -0400 Subject: [PATCH] Move BufferInfo to (experimental) Core --- Cargo.lock | 13 ++++++-- Cargo.toml | 3 +- src/nodes/items/camera.rs | 69 +++++++++++++++++++-------------------- 3 files changed, 44 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eb75841..f2b17ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1130,6 +1130,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -2049,11 +2058,11 @@ dependencies = [ [[package]] name = "stardust-xr" version = "0.14.1" -source = "git+https://github.com/StardustXR/core.git#f19187dc1d0015b29e542010ad3e9dbd64d5645e" dependencies = [ "cluFlock", "color-rs", "dirs", + "drm-fourcc", "global_counter", "mint", "nix 0.26.4", @@ -2069,7 +2078,6 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git#f19187dc1d0015b29e542010ad3e9dbd64d5645e" dependencies = [ "flatbuffers", "flexbuffers", @@ -2092,7 +2100,6 @@ dependencies = [ "console-subscriber", "ctrlc", "directories", - "drm-fourcc", "glam 0.23.0", "global_counter", "input-event-codes", diff --git a/Cargo.toml b/Cargo.toml index ce1dde5..987415c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -58,9 +58,8 @@ tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } global_counter = "0.2.2" rand = "0.8.5" atty = "0.2.14" -xkbcommon = { version = "0.6.0", default-features = false, optional = true } -ctrlc = "3.4.1" libc = "0.2.148" +ctrlc = "3.4.1" input-event-codes = "5.16.8" drm-fourcc = { version = "2.2.0", features = ["serde"] } diff --git a/src/nodes/items/camera.rs b/src/nodes/items/camera.rs index e0d47b5..7b4b06c 100644 --- a/src/nodes/items/camera.rs +++ b/src/nodes/items/camera.rs @@ -1,9 +1,10 @@ use super::{Item, ItemType}; use crate::{ core::{ + buffers::BufferManager, client::{Client, INTERNAL_CLIENT}, registry::Registry, - scenegraph::MethodResponseSender, buffers::BufferManager, + scenegraph::MethodResponseSender, }, nodes::{ drawable::{model::ModelPart, shaders::UNLIT_SHADER_BYTES, Drawable}, @@ -19,24 +20,34 @@ use mint::{RowMatrix4, Vector2}; use nanoid::nanoid; use once_cell::sync::OnceCell; use parking_lot::Mutex; -use serde::{Deserialize, Serialize}; -use smithay::{backend::{renderer::ImportDma, allocator::{dmabuf::{Dmabuf, DmabufFlags}, Modifier, Fourcc, Buffer}}, utils::Size}; +use serde::Deserialize; +use smithay::{ + backend::{ + allocator::{ + dmabuf::{Dmabuf, DmabufFlags}, + Buffer, + }, + renderer::ImportDma, + }, + utils::Size, +}; use stardust_xr::{ scenegraph::ScenegraphError, schemas::flex::{deserialize, serialize}, - values::Transform, + values::{BufferInfo, Transform}, }; -use std::{sync::Arc, ffi::c_void}; +use std::{ffi::c_void, sync::Arc}; use stereokit::{ - Color128, Material, Rect, RenderLayer, StereoKitDraw, Tex, TextureType, Transparency, TextureFormat, + Color128, Material, Rect, RenderLayer, StereoKitDraw, Tex, TextureFormat, TextureType, + Transparency, }; use tokio::sync::{mpsc, oneshot}; lazy_static! { pub(super) static ref ITEM_TYPE_INFO_CAMERA: TypeInfo = TypeInfo { type_name: "camera", - aliased_local_signals: vec!["apply_preview_material", "frame"], - aliased_local_methods: vec![], + aliased_local_signals: vec!["apply_preview_material"], + aliased_local_methods: vec!["render"], aliased_remote_signals: vec![], ui: Default::default(), items: Registry::new(), @@ -49,22 +60,6 @@ struct FrameInfo { preview_size: Vector2, } -#[derive(Serialize, Deserialize)] -struct BufferPlaneInfo{ - idx: u32, - offset: u32, - stride: u32, - modifier: Modifier, -} - -#[derive(Serialize, Deserialize)] -struct BufferInfo { - size: (u32, u32), - fourcc: Fourcc, - flags: u32, - planes: Vec, -} - pub struct CameraItem { space: Arc, frame_info: Mutex, @@ -141,11 +136,13 @@ impl CameraItem { } let buffer_to_render = builder.build().unwrap(); - let _ = camera.render_requests_tx.try_send((buffer_to_render, rendered_tx)); - tokio::task::spawn(async move { - let _ = rendered_rx.await; - response.send(Ok(Vec::new().into())); - }); + let _ = camera + .render_requests_tx + .try_send((buffer_to_render, rendered_tx)); + tokio::task::spawn(async move { + let _ = rendered_rx.await; + response.send(Ok(Vec::new().into())); + }); } fn apply_preview_material_flex( @@ -219,16 +216,16 @@ impl CameraItem { let mut render_notifiers = self.rendered_notifiers.lock(); let mut render_requests_rx = self.render_requests_rx.lock(); while let Ok((buffer_to_render, rendered_tx)) = render_requests_rx.try_recv() { - let Ok(smithay_tex) = buffer_manager.renderer.import_dmabuf(&buffer_to_render, None) else { + let Ok(smithay_tex) = buffer_manager + .renderer + .import_dmabuf(&buffer_to_render, None) + else { // TODO: Failed to import the buffer somehow. This fails gracefully, but silently. render_notifiers.push(rendered_tx); continue; }; - let sk_tex = sk.tex_create( - TextureType::IMAGE_NO_MIPS, - TextureFormat::RGBA32, - ); + let sk_tex = sk.tex_create(TextureType::IMAGE_NO_MIPS, TextureFormat::RGBA32); unsafe { sk.tex_set_surface( &sk_tex, @@ -295,7 +292,7 @@ pub(super) fn create_camera_item_flex( parent_path: &'a str, transform: Transform, proj_matrix: RowMatrix4, - px_size: Vector2, + preview_size: Vector2, } let info: CreateCameraItemInfo = deserialize(message.as_ref())?; let parent_name = format!("/item/{}/item", ITEM_TYPE_INFO_CAMERA.type_name); @@ -305,7 +302,7 @@ pub(super) fn create_camera_item_flex( let node = Node::create(&INTERNAL_CLIENT, &parent_name, info.name, false).add_to_scenegraph()?; Spatial::add_to(&node, None, transform * space.global_transform(), false)?; - CameraItem::add_to(&node, info.proj_matrix.into(), info.px_size); + CameraItem::add_to(&node, info.proj_matrix.into(), info.preview_size); node.item .get() .unwrap()