First I would suggest to go with sctk (or smithay client-toolkit) to avoid doing everything yourself: https://github.com/Smithay/client-toolkit/tree/master It has examples for xdg-shell and layer-shell. The implementation of the layer-shell api is pretty small and probably a good reference to figure out, which traits to implement to get your own shell. Should be straight-forward, but there are people in our matrix-channel knowing more, if you need help. Secondly iced actually has a "integration_opengl"-example: https://github.com/iced-rs/iced/blob/master/examples/integration_opengl/src/main.rs That shows how to manually drive iced with a glutin window. But that shows how to integrate iced into an opengl rendering loop and how to feed it input. (That said iced wants to move to wgpu exclusively - which would require vulkan - or softbuffer, which is software rendering, but that should be easy to integrate with wl_shm. GL will likely vanish though over time.) Whats missing is how to go from a wl_surface to a GL surface. I would suggest to study winit/glutin source for that, but that should be relatively straight forward. "kchibisov" maintains both of them and hangs around in our matrix channel most of the time as well, if you need help.