rust 使用nannou.rs,如何为load_from_image_buffer方法提供正确的参数?

jm81lzqq  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(239)

我生成了一个Luma8图像(对应于一个Perlin高度图),并尝试使用函数load_from_image_buffer在应用窗口中显示它,该函数由模型函数中的nannou::wgpu::Texture实现,如下所示:

fn model(app: &App) -> Model {
    let img_buf = NoiseBuilder::generate_image(256, 8, 8, None);

    let texture = wgpu::Texture::load_from_image_buffer(device, queue, usage, &img_buf).unwrap();
    
    Model { texture }
}

正如您所看到的,在这个代码片段中,我没有定义设备、队列和使用参数,我尝试了很多方法,但都没有效果,而且在线资源相当稀缺。
我的问题是如何提供这些参数?
我先试用了from_image函数,它工作正常,但是当我试图学习如何使用这个库时,我对这个特定函数的使用很感兴趣。另外,许多其他方法都需要这个参数,无论如何我都需要理解它。

  • 上面代码片段中导入的wgpu模块是nannou::wgpu,而不是直接的wgpu机箱。
  • NoiseBuilder::生成图像返回一个ImageBuffer<Luma<u8>, Vec<u8>>变量。
qzlgjiam

qzlgjiam1#

您可以使用trait方法with_device_queue_pair,它在trait WithDeviceQueuePair中定义,并为AppWindow实现。
用法只是正常的wgpu::TextureUsages
因此,如果你想模仿纹理的from_path功能,你可以这样做(未经测试):

fn model(app: &App) -> Model {
    let img_buf = NoiseBuilder::generate_image(256, 8, 8, None);

    let usage = nannou::wgpu::TextureUsages::COPY_SRC |
                nannou::wgpu::TextureUsages::COPY_DST |
                nannou::wgpu::TextureUsages::RENDER_ATTACHMENT;
    
    src.with_device_queue_pair(|device, queue| {
        let texture = wgpu::Texture::load_from_image_buffer(device, queue, usage, &img_buf).unwrap();

        Model { texture }
    })
}

相关问题