rust-windowing / rust-windowing/softbuffer

Allow using X11 / Wayland on platforms that have another standard backend (macOS, Android)

Open
#211 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

DS - Android NDK DS - CoreGraphics DS - Wayland DS - X11 enhancement
Dominant language
Rust
Stars
506
Forks
85
PR merge metrics
No merged PRs in 30d

Description

Partially related to #44 I am trying to compile some rust application targeting termux (x11) and am getting the below errors. I have tried both compiling within termux, as well as on my desktop

command: cargo build --target x86_64-linux-android

Error log
error[E0392]: parameter `D` is never used
  --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:33:20
   |
33 | pub struct Context<D> {
   |                    ^ unused parameter
   |
   = help: consider removing `D`, referring to it in a field, or using a marker such as `PhantomData`
   = help: if you intended `D` to be a const parameter, use `const D: usize` instead

error[E0392]: parameter `D` is never used
  --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:74:20
   |
74 | pub struct Surface<D, W> {
   |                    ^ unused parameter
   |
   = help: consider removing `D`, referring to it in a field, or using a marker such as `PhantomData`
   = help: if you intended `D` to be a const parameter, use `const D: usize` instead

error[E0392]: parameter `W` is never used
  --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:74:23
   |
74 | pub struct Surface<D, W> {
   |                       ^ unused parameter
   |
   = help: consider removing `W`, referring to it in a field, or using a marker such as `PhantomData`
   = help: if you intended `W` to be a const parameter, use `const W: usize` instead

error[E0392]: parameter `'a` is never used
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:197:19
    |
197 | pub struct Buffer<'a, D, W> {
    |                   ^^ unused parameter
    |
    = help: consider removing `'a`, referring to it in a field, or using a marker such as `PhantomData`

error[E0392]: parameter `D` is never used
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:197:23
    |
197 | pub struct Buffer<'a, D, W> {
    |                       ^ unused parameter
    |
    = help: consider removing `D`, referring to it in a field, or using a marker such as `PhantomData`
    = help: if you intended `D` to be a const parameter, use `const D: usize` instead

error[E0392]: parameter `W` is never used
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:197:26
    |
197 | pub struct Buffer<'a, D, W> {
    |                          ^ unused parameter
    |
    = help: consider removing `W`, referring to it in a field, or using a marker such as `PhantomData`
    = help: if you intended `W` to be a const parameter, use `const W: usize` instead

error[E0392]: parameter `D` is never used
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/backend_dispatch.rs:180:6
    |
180 |     <D, W> =>
    |      ^ unused parameter
    |
    = help: consider removing `D`, referring to it in a field, or using a marker such as `PhantomData`
    = help: if you intended `D` to be a const parameter, use `const D: usize` instead

error[E0392]: parameter `W` is never used
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/backend_dispatch.rs:180:9
    |
180 |     <D, W> =>
    |         ^ unused parameter
    |
    = help: consider removing `W`, referring to it in a field, or using a marker such as `PhantomData`
    = help: if you intended `W` to be a const parameter, use `const W: usize` instead

error[E0392]: parameter `'a` is never used
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/backend_dispatch.rs:119:40
    |
119 |           pub(crate) enum BufferDispatch<'a, $dgen, $wgen> {
    |                                          ^^ unused parameter
...
179 | / make_dispatch! {
180 | |     <D, W> =>
181 | |     #[cfg(x11_platform)]
182 | |     X11(Rc<backends::x11::X11DisplayImpl<D>>, backends::x11::X11Impl<D, W>, backends::x11::BufferImpl<'a, D, W>),
...   |
194 | |     Orbital(D, backends::orbital::OrbitalImpl<D, W>, backends::orbital::BufferImpl<'a, D, W>),
195 | | }
    | |_- in this macro invocation
    |
    = help: consider removing `'a`, referring to it in a field, or using a marker such as `PhantomData`
    = note: this error originates in the macro `make_dispatch` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0283]: type annotations needed
  --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:83:15
   |
83 |         match SurfaceDispatch::new(window, &context.context_impl) {
   |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for type parameter `D` declared on the trait `SurfaceInterface`
   |
   = note: cannot satisfy `_: HasDisplayHandle`
   = help: the following types implement trait `HasDisplayHandle`:
             NoDisplayHandle
             Box<H>
             DisplayHandle<'a>
             Rc<H>
             Arc<H>
             &H
             &mut H
note: required by a bound in `backend_interface::SurfaceInterface::new`
  --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/backend_interface.rs:15:38
   |
15 | pub(crate) trait SurfaceInterface<D: HasDisplayHandle + ?Sized, W: HasWindowHandle + ?Sized> {
   |                                      ^^^^^^^^^^^^^^^^ required by this bound in `SurfaceInterface::new`
...
21 |     fn new(window: W, context: &Self::Context) -> Result<Self, InitError<W>>
   |        --- required by a bound in this associated function

error[E0282]: type annotations needed
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:137:12
    |
137 |           Ok(Buffer {
    |  ____________^
138 | |             buffer_impl: self.surface_impl.buffer_mut()?,
139 | |             _marker: PhantomData,
140 | |         })
    | |_________^ cannot infer type of the type parameter `D` declared on the struct `Buffer`
    |
help: consider specifying the generic arguments
    |
137 |         Ok(Buffer::<D, W> {
    |                  ++++++++

error[E0283]: type annotations needed
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:147:14
    |
147 |         self.window()
    |              ^^^^^^ cannot infer type for type parameter `D`
    |
    = note: cannot satisfy `_: HasDisplayHandle`
    = help: the following types implement trait `HasDisplayHandle`:
              NoDisplayHandle
              Box<H>
              DisplayHandle<'a>
              Rc<H>
              Arc<H>
              &H
              &mut H
note: required by a bound in `Surface::<D, W>::window`
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:80:9
    |
80  | impl<D: HasDisplayHandle, W: HasWindowHandle> Surface<D, W> {
    |         ^^^^^^^^^^^^^^^^ required by this bound in `Surface::<D, W>::window`
...
101 |     pub fn window(&self) -> &W {
    |            ------ required by a bound in this associated function

error[E0282]: type annotations needed
   --> /home/quack/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.4.2/src/lib.rs:156:23
    |
156 |         self.window().window_handle()
    |                       ^^^^^^^^^^^^^ cannot infer type for type parameter `W`

Some errors have detailed explanations: E0282, E0283, E0392.
For more information about an error, try `rustc --explain E0282`.
error: could not compile `softbuffer` (lib) due to 13 previous errors
warning: build failed, waiting for other jobs to finish...

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the reported cargo build --target x86_64-linux-android failure, then inspect src/lib.rs, src/backend_dispatch.rs, and src/backend_interface.rs, especially the generic backend dispatch and handle bounds. Determine how X11 or Wayland should be selected on platforms with another standard backend. Done means the relevant target builds without the reported generic-parameter and type-inference errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, linux, macos, rust
Domain
computer-graphics, operating-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.