Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Examples don't build in a separate repo #174

Closed
ianh opened this issue Nov 9, 2023 · 2 comments
Closed

Examples don't build in a separate repo #174

ianh opened this issue Nov 9, 2023 · 2 comments

Comments

@ianh
Copy link

ianh commented Nov 9, 2023

The examples build and run from the softbuffer repository, but fail to build in a separate test repo. I tested with the following Cargo.toml and src/main.rs (copied from softbuffer examples/winit.rs):

Cargo.toml:

[package]
name = "softbuffer-test"
version = "0.1.0"
edition = "2021"

[dependencies]
softbuffer = "0.3.3"
winit = "0.29.3"

src/main.rs:

use std::num::NonZeroU32;
use std::rc::Rc;
use winit::event::{Event, KeyEvent, WindowEvent};
use winit::event_loop::{ControlFlow, EventLoop};
use winit::keyboard::{Key, NamedKey};
use winit::window::WindowBuilder;

fn main() {
    let event_loop = EventLoop::new().unwrap();
    let window = Rc::new(WindowBuilder::new().build(&event_loop).unwrap());

    #[cfg(target_arch = "wasm32")]
    {
        use winit::platform::web::WindowExtWebSys;

        web_sys::window()
            .unwrap()
            .document()
            .unwrap()
            .body()
            .unwrap()
            .append_child(&window.canvas().unwrap())
            .unwrap();
    }

    let context = softbuffer::Context::new(window.clone()).unwrap();
    let mut surface = softbuffer::Surface::new(&context, window.clone()).unwrap();

    event_loop
        .run(move |event, elwt| {
            elwt.set_control_flow(ControlFlow::Wait);

            match event {
                Event::WindowEvent {
                    window_id,
                    event: WindowEvent::RedrawRequested,
                } if window_id == window.id() => {
                    if let (Some(width), Some(height)) = {
                        let size = window.inner_size();
                        (NonZeroU32::new(size.width), NonZeroU32::new(size.height))
                    } {
                        surface.resize(width, height).unwrap();

                        let mut buffer = surface.buffer_mut().unwrap();
                        for y in 0..height.get() {
                            for x in 0..width.get() {
                                let red = x % 255;
                                let green = y % 255;
                                let blue = (x * y) % 255;
                                let index = y as usize * width.get() as usize + x as usize;
                                buffer[index] = blue | (green << 8) | (red << 16);
                            }
                        }

                        buffer.present().unwrap();
                    }
                }
                Event::WindowEvent {
                    event:
                        WindowEvent::CloseRequested
                        | WindowEvent::KeyboardInput {
                            event:
                                KeyEvent {
                                    logical_key: Key::Named(NamedKey::Escape),
                                    ..
                                },
                            ..
                        },
                    window_id,
                } if window_id == window.id() => {
                    elwt.exit();
                }
                _ => {}
            }
        })
        .unwrap();
}

cargo run output:

   Compiling softbuffer-test v0.1.0 (/Users/ianh/Desktop/softbuffer-test)
error[E0308]: mismatched types
   --> src/main.rs:26:44
    |
26  |     let context = softbuffer::Context::new(window.clone()).unwrap();
    |                   ------------------------ ^^^^^^^^^^^^^^ expected `&_`, found `Rc<Window>`
    |                   |
    |                   arguments to this function are incorrect
    |
    = note: expected reference `&_`
                  found struct `Rc<Window>`
note: associated function defined here
   --> /Users/ianh/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.3.3/src/lib.rs:198:19
    |
198 |     pub unsafe fn new<D: HasRawDisplayHandle>(display: &D) -> Result<Self, SoftBufferError> {
    |                   ^^^
help: consider borrowing here
    |
26  |     let context = softbuffer::Context::new(&window.clone()).unwrap();
    |                                            +

error[E0308]: mismatched types
   --> src/main.rs:27:58
    |
27  |     let mut surface = softbuffer::Surface::new(&context, window.clone()).unwrap();
    |                       ------------------------           ^^^^^^^^^^^^^^ expected `&_`, found `Rc<Window>`
    |                       |
    |                       arguments to this function are incorrect
    |
    = note: expected reference `&_`
                  found struct `Rc<Window>`
note: associated function defined here
   --> /Users/ianh/.cargo/registry/src/index.crates.io-6f17d22bba15001f/softbuffer-0.3.3/src/lib.rs:277:19
    |
277 |     pub unsafe fn new<W: HasRawWindowHandle>(
    |                   ^^^
help: consider borrowing here
    |
27  |     let mut surface = softbuffer::Surface::new(&context, &window.clone()).unwrap();
    |                                                          +

For more information about this error, try `rustc --explain E0308`.
error: could not compile `softbuffer-test` (bin "softbuffer-test") due to 2 previous errors

rustc --version: rustc 1.73.0 (cc66ad468 2023-10-03)

cargo --version: cargo 1.73.0 (9c4383fb5 2023-08-26)

uname -a: Darwin imhmba.local 21.6.0 Darwin Kernel Version 21.6.0: Wed Oct 4 23:54:48 PDT 2023; root:xnu-8020.240.18.704.15~1/RELEASE_ARM64_T8101 arm64

@ids1024
Copy link
Member

ids1024 commented Nov 9, 2023

#132 introduced a breaking API change, but hasn't been released yet, so it's expected that the examples from master won't build with the released version of Softbuffer.

@ianh
Copy link
Author

ianh commented Nov 9, 2023

Makes sense, thanks. I got a working example by looking at the code in the v0.3.3 tag and downgrading winit in my Cargo.toml to 0.28.1.

@ianh ianh closed this as completed Nov 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants