Draft: Introduce the GL integration crate
Introduce the GL integration crate: a crate that retrieves gst_gl::GLContext
and gst_gl::GLDisplay
from "common" sources in the Rust ecosystem: a RawWindowHandle
, and as bonus also from glutin::WindowedContext
.
This substitutes the matching logic that was originally in the glupload
example to be expandable and reusable by other crates, similar to how the ash-window
crate exists for ash
(turns RawWindowHandle
s into Vulkan Surface
).
Since a GLDisplay
acquired from a RawWindowHandle
is only half the info we need and has an incomplete implementation currently (no support for Android or Windows), a second function retrieves GLContext
from glutin
together with display fallbacks for EGL
-based windows.
Most interesting is probably to find a public crate or two using these bindings, and see if we can migrate them over to this crate as a final review of the API and versatility. At the same time they might support more platforms too. So far crates.io
shows only a single crate, supporting Wgl
and Glx
: https://github.com/marek-g/rust-media/blob/master/media_gstreamer/src/pipeline_factory.rs.
Remaining tasks
-
TODO
comments in code; -
Deal with Wgl
handles to support Windows; -
XCB
constructor in gstreamer-base (backported, or with a fallback written in pure Rust); -
Returning Result
/Option
instead of panicking; -
Move code out of cfg_if
to:- Have
rustfmt
work on the contents; - Get rid of some unexpected clippy warnings related to
use
items after statements (despite supposedly sitting at the top of a#[cfg]
block - and#[allow]
not being allowed inside thecfg_if
block either); - Reduce indentation and make it more readable overall;
- Have
-
Documentation, readme, etc.