Move BufferInfo to (experimental) Core
This commit is contained in:
13
Cargo.lock
generated
13
Cargo.lock
generated
@@ -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",
|
||||||
|
|||||||
@@ -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"] }
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user