【问题标题】:Window resize "jitter" using wgpu-ris and winit使用 wgpu-ris 和 winit 调整窗口大小“抖动”
【发布时间】:2021-03-18 18:20:27
【问题描述】:

我正在尝试一些 rust 代码,这些代码是对 Learn WGPU tutorial 中所示代码的轻微重组,包括添加统一变换以在固定(像素)位置和大小处绘制对象。

我注意到,当我调整窗口大小时,我的框会大幅拉伸、挤压和抖动。

拉伸/变形遵循增量的大小和方向,一旦调整大小完成,框总是会固定在正确的位置和大小

GifCam 的帧差异视图显示移动期间的拉伸程度

为了排除我对教程代码所做的任何更改,我克隆了 repository,构建并运行了“tutorial6-uniforms”,它显示了与调整大小相同的行为,即在它们发生时拉伸和挤压形状。

在我的调整大小和渲染函数中添加 println(并在 MainEventsCleared 上禁用重绘)甚至会显示成对的调整大小事件和重绘

redraw called PhysicalSize { width: 800, height: 600 } // initial draw
resize called PhysicalSize { width: 799, height: 600 } // resize begins
redraw called PhysicalSize { width: 799, height: 600 }
resize called PhysicalSize { width: 774, height: 589 }
redraw called PhysicalSize { width: 774, height: 589 }

这一切都让我相信幕后发生了一些事情,也许在重绘完成之前首先拉伸框架以匹配窗口的新大小?有没有办法防止这种情况?当屏幕上有很多元素时,尤其是文本,这种效果会变得非常刺耳。更不用说大多数应用程序都不会受此影响,因此看起来不专业且丑陋。

这是我的事件循环,我省略了其他代码以减小帖子大小,但如果有助于解决问题,我会添加更多代码,或参考教程中的 code here

event_loop.run(move |event, _, control_flow| {
    match event {
        Event::WindowEvent {
            ref event,
            window_id,
        } if window_id  == window.id() => {
            match event {
                // ...
                WindowEvent::Resized(physical_size) => {
                    renderer.resize(*physical_size);
                },
                _ => {}
            }
        },
        Event::RedrawRequested(_) => {
            match renderer.render() {
                Ok(_) => {},
                Err(e) => eprintln!("{:?}", e),
            }
        },
        // no change in observed resizing behavior with or without
        /*Event::MainEventsCleared => {
            window.request_redraw();
        },*/
        // ...
        _ => {}
    }
})

【问题讨论】:

    标签: rust graphics resize wgpu-rs


    【解决方案1】:

    我相信这是一个winit issue,它既将视图设置为自动调整大小,也不给应用程序在操作系统重绘调整大小的窗口之前重绘的机会。我还没有找到好的解决方法,所以我想唯一的途径是让某人潜入 winit 代码。

    【讨论】:

    • 有趣的是,大多数 wgpu / winit 问题似乎首先在 macOS 上报告,但我在 Win10 上。无论哪种方式,每个人似乎都有一个类似的假设,即调整大小事件允许在允许应用程序代码响应之前以旧大小进行某种重绘。感谢您的领导。
    猜你喜欢
    • 2023-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多