从计算着色器访问Framebuffers



我有一个呈现图像的计算着色器。图像基本上是成品框架。

我想在屏幕上渲染上述图像。做到这一点的最明显方法是直接渲染到Frambuffer而不是渲染此图像。但是,我被告知,这需要在机器上设置storage位,这不是我的机器。

下一个最好的事情是将图像复制到Framebuffer。这需要在帧缓冲映像上设置target位,幸运的是,这是我的机器上的情况。

但是,当我尝试将其复制到Framebuffer中时,Vulkan给出了访问错误,称Framebuffer未经初始化。

AccessError {
    error: ImageNotInitialized { requested: PresentSrc },
    command_name: "vkCmdCopyImage",
    command_param: "destination", command_offset: 4
}

如果重要的话,我正在使用与Vulkan的Rust Bindings。代码非常笨重,整个内容都可以在GitLab上找到。命令缓冲区的创建如下:

let command_buffer = AutoCommandBufferBuilder::new(queue.device().clone(), queue.family())?
    .clear_color_image(image.clone(), ClearValue::Float([1.0, 0.0, 0.0, 1.0]))?
    .dispatch(
    [(WIDTH / 16) as u32, (HEIGHT / 16) as u32, 1],
    compute_pipeline.clone(),
    set.clone(),
    (),
    )?
    .copy_image(
    image.clone(),
    [0, 0, 0],
    0,
    0,
    render_manager.images[next_image_index].clone(),
    [0, 0, 0],
    0,
    0,
    [WIDTH as u32, HEIGHT as u32, 1],
    1,
    )?
    .build()?;

我知道我可以在图像上渲染四分之一,这是我现在正在做的事情,但是这是很多笨重的代码,这些代码却没有太大的作用。

Doc说有关ImageNotInitialized

尝试使用图像而不从"未定义"或"原始化"布局过渡。

相关内容

  • 没有找到相关文章