Issues with Flatland
Okay so I'm having some issues with Flatland as I'm trying out Stardust on real hardware instead of flatscreen.
1. I launch monado-service -> stardust server -> flatland -> and then an app using the wayland env var. I'm on X11 but the application shows up as upside-down. Other, openxr apps that I use such as Stereokit and others, all have correct orientations.
2. How do I drag/move around a window opened using Flatland (I'm not using any controllers; I'm using Monado's Hand tracking)?
3. How is Flatland different from Orbit?
42 Replies
1. what's upside down? the app's panel or the entirety of stardust?
2. it borken, i gotta fix :/
3. orbit is only for dropping apps into panel shells, flatland lets you interact with them and drop them into panel shells
Just the apps
dmabufsssssssssssss
g ja;lsudijgn;ads
i have no idea, @i509VCB might know tho
on real hardware, is this presenting via a window or KMS?
If it's via KMS and you apply a 180 degree transform for windowing always, then it will obviously be upside down
Via the Monado window. This is gedit.
All the other OpenXR apps running in the correct orientation though.
it occurs to me i may not have implemented the viewporter ext
the viewporter seems unlikely as you can't flip the window via viewporter
is gedit sending the FLIPPED_Y attribute on the dmabuf it creates? Although most implementations don't do this anyone
and I think in v4 of the dmabuf protocol it became an error to set
Same with firefox too.
wait what
firefox works???
sounds like more of a firefox is broken
last time i checked it wouldn't even start
so this is an improvement
although firefox is an interesting case study since it abuses subsurfaces
Yeah I can launch firefox but for some reason the window is very small. Can't resize.
hmm i wouldn't say worked
...
that explains why it borken
stardust does not use subsurfaces
idk how to implement them
easy solution
use the window geometry
clip anything outside of the geometry that isn't a popup
i basically just need to get subsurface creation, destruction, and so on
hell, i'd like to use the surface tree but i need events
not the current state
just make sure you read up on sync and desync subsurfaces
on what
as commits can behave differently in both cases
augh the commit code is already complicated as it is
Wayland protocol | Wayland Explorer
A better way to read Wayland documentation
My bad it doesn't. I confused it with the output of something else.
does stardust handle wl_surface transforms?
uhhhh i don't think it does
because i have to basically transform things and send them to the stardust panel shells
so i need to simplify that API as much as possible
makes things a lot more tricky than a regular compositor
i need a lot of help on the wayland side to make it compliant to the spec
there is definitely a lot of moving parts
yea... and even more since XR
especially so since I went full async and wanted to avoid requring LocalSet, meaning I removed smithay from the crate graph in my compositor
(Still use wayland-server crate)
ayy same i go full async too
but i use smithay for surfaces
don't wanna have to worry about dmabuf shenanigans
Incredibly WIP if you are curious: https://codeberg.org/i509vcb/aerugo/src/branch/master/examples/mini-wm/src/main.rs
ooh i am
still needs a lot of work
namely figuring out how I'm going to manage the renderer, exposing outputs to the wayland frontend, having the wm describe a scene graph
oh wow so you have the same issues as stardust with this
the renderer is going to be a fun part since I want wgpu to be usable on the wm side
awesome
the one cost though is probably the 40kLOC of code I've not written yet
but it's probably worth the removal of 2 types of mpsc channel
and at some point try to make the WM work with accesskit
so, how do you get events on subsurface creation/destruction?
I implement
Dispatch<WlSubsurface, _>
myself
also you'll probably want map and unmap as well for eventsi don't get why there's map and unmap tbh
the subsurface could have a null buffer attached and then immediately reused
to the panel shell it'll be the surface's child being added and removed then