Move BufferInfo to (experimental) Core

This commit is contained in:
UnderSampled
2023-09-18 00:19:23 -04:00
committed by Nova
parent 9c62f4fd24
commit 1ee485f3c5
3 changed files with 44 additions and 41 deletions

13
Cargo.lock generated
View File

@@ -1130,6 +1130,15 @@ dependencies = [
"either", "either",
] ]
[[package]]
name = "itertools"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.9" version = "1.0.9"
@@ -2049,11 +2058,11 @@ dependencies = [
[[package]] [[package]]
name = "stardust-xr" name = "stardust-xr"
version = "0.14.1" version = "0.14.1"
source = "git+https://github.com/StardustXR/core.git#f19187dc1d0015b29e542010ad3e9dbd64d5645e"
dependencies = [ dependencies = [
"cluFlock", "cluFlock",
"color-rs", "color-rs",
"dirs", "dirs",
"drm-fourcc",
"global_counter", "global_counter",
"mint", "mint",
"nix 0.26.4", "nix 0.26.4",
@@ -2069,7 +2078,6 @@ dependencies = [
[[package]] [[package]]
name = "stardust-xr-schemas" name = "stardust-xr-schemas"
version = "1.5.3" version = "1.5.3"
source = "git+https://github.com/StardustXR/core.git#f19187dc1d0015b29e542010ad3e9dbd64d5645e"
dependencies = [ dependencies = [
"flatbuffers", "flatbuffers",
"flexbuffers", "flexbuffers",
@@ -2092,7 +2100,6 @@ dependencies = [
"console-subscriber", "console-subscriber",
"ctrlc", "ctrlc",
"directories", "directories",
"drm-fourcc",
"glam 0.23.0", "glam 0.23.0",
"global_counter", "global_counter",
"input-event-codes", "input-event-codes",

View File

@@ -58,9 +58,8 @@ tracing-subscriber = { version = "0.3.17", features = ["env-filter"] }
global_counter = "0.2.2" global_counter = "0.2.2"
rand = "0.8.5" rand = "0.8.5"
atty = "0.2.14" atty = "0.2.14"
xkbcommon = { version = "0.6.0", default-features = false, optional = true }
ctrlc = "3.4.1"
libc = "0.2.148" libc = "0.2.148"
ctrlc = "3.4.1"
input-event-codes = "5.16.8" input-event-codes = "5.16.8"
drm-fourcc = { version = "2.2.0", features = ["serde"] } drm-fourcc = { version = "2.2.0", features = ["serde"] }

View File

@@ -1,9 +1,10 @@
use super::{Item, ItemType}; use super::{Item, ItemType};
use crate::{ use crate::{
core::{ core::{
buffers::BufferManager,
client::{Client, INTERNAL_CLIENT}, client::{Client, INTERNAL_CLIENT},
registry::Registry, registry::Registry,
scenegraph::MethodResponseSender, buffers::BufferManager, scenegraph::MethodResponseSender,
}, },
nodes::{ nodes::{
drawable::{model::ModelPart, shaders::UNLIT_SHADER_BYTES, Drawable}, drawable::{model::ModelPart, shaders::UNLIT_SHADER_BYTES, Drawable},
@@ -19,24 +20,34 @@ use mint::{RowMatrix4, Vector2};
use nanoid::nanoid; use nanoid::nanoid;
use once_cell::sync::OnceCell; use once_cell::sync::OnceCell;
use parking_lot::Mutex; use parking_lot::Mutex;
use serde::{Deserialize, Serialize}; use serde::Deserialize;
use smithay::{backend::{renderer::ImportDma, allocator::{dmabuf::{Dmabuf, DmabufFlags}, Modifier, Fourcc, Buffer}}, utils::Size}; use smithay::{
backend::{
allocator::{
dmabuf::{Dmabuf, DmabufFlags},
Buffer,
},
renderer::ImportDma,
},
utils::Size,
};
use stardust_xr::{ use stardust_xr::{
scenegraph::ScenegraphError, scenegraph::ScenegraphError,
schemas::flex::{deserialize, serialize}, 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::{ 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}; use tokio::sync::{mpsc, oneshot};
lazy_static! { lazy_static! {
pub(super) static ref ITEM_TYPE_INFO_CAMERA: TypeInfo = TypeInfo { pub(super) static ref ITEM_TYPE_INFO_CAMERA: TypeInfo = TypeInfo {
type_name: "camera", type_name: "camera",
aliased_local_signals: vec!["apply_preview_material", "frame"], aliased_local_signals: vec!["apply_preview_material"],
aliased_local_methods: vec![], aliased_local_methods: vec!["render"],
aliased_remote_signals: vec![], aliased_remote_signals: vec![],
ui: Default::default(), ui: Default::default(),
items: Registry::new(), items: Registry::new(),
@@ -49,22 +60,6 @@ struct FrameInfo {
preview_size: Vector2<u32>, preview_size: Vector2<u32>,
} }
#[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<BufferPlaneInfo>,
}
pub struct CameraItem { pub struct CameraItem {
space: Arc<Spatial>, space: Arc<Spatial>,
frame_info: Mutex<FrameInfo>, frame_info: Mutex<FrameInfo>,
@@ -141,11 +136,13 @@ impl CameraItem {
} }
let buffer_to_render = builder.build().unwrap(); let buffer_to_render = builder.build().unwrap();
let _ = camera.render_requests_tx.try_send((buffer_to_render, rendered_tx)); let _ = camera
tokio::task::spawn(async move { .render_requests_tx
let _ = rendered_rx.await; .try_send((buffer_to_render, rendered_tx));
response.send(Ok(Vec::new().into())); tokio::task::spawn(async move {
}); let _ = rendered_rx.await;
response.send(Ok(Vec::new().into()));
});
} }
fn apply_preview_material_flex( fn apply_preview_material_flex(
@@ -219,16 +216,16 @@ impl CameraItem {
let mut render_notifiers = self.rendered_notifiers.lock(); let mut render_notifiers = self.rendered_notifiers.lock();
let mut render_requests_rx = self.render_requests_rx.lock(); let mut render_requests_rx = self.render_requests_rx.lock();
while let Ok((buffer_to_render, rendered_tx)) = render_requests_rx.try_recv() { 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. // TODO: Failed to import the buffer somehow. This fails gracefully, but silently.
render_notifiers.push(rendered_tx); render_notifiers.push(rendered_tx);
continue; continue;
}; };
let sk_tex = sk.tex_create( let sk_tex = sk.tex_create(TextureType::IMAGE_NO_MIPS, TextureFormat::RGBA32);
TextureType::IMAGE_NO_MIPS,
TextureFormat::RGBA32,
);
unsafe { unsafe {
sk.tex_set_surface( sk.tex_set_surface(
&sk_tex, &sk_tex,
@@ -295,7 +292,7 @@ pub(super) fn create_camera_item_flex(
parent_path: &'a str, parent_path: &'a str,
transform: Transform, transform: Transform,
proj_matrix: RowMatrix4<f32>, proj_matrix: RowMatrix4<f32>,
px_size: Vector2<u32>, preview_size: Vector2<u32>,
} }
let info: CreateCameraItemInfo = deserialize(message.as_ref())?; let info: CreateCameraItemInfo = deserialize(message.as_ref())?;
let parent_name = format!("/item/{}/item", ITEM_TYPE_INFO_CAMERA.type_name); 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 = let node =
Node::create(&INTERNAL_CLIENT, &parent_name, info.name, false).add_to_scenegraph()?; Node::create(&INTERNAL_CLIENT, &parent_name, info.name, false).add_to_scenegraph()?;
Spatial::add_to(&node, None, transform * space.global_transform(), false)?; 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 node.item
.get() .get()
.unwrap() .unwrap()