pub struct Image {
pub info: ImageInfo,
pub name: Option<String>,
/* private fields */
}Expand description
Smart pointer handle to an image object.
Also contains information about the object.
§Deref behavior
Image automatically dereferences to vk::Image (via the Deref trait), so you can
call vk::Image’s methods on a value of type Image. To avoid name clashes with vk::Image’s
methods, the methods of Image itself are associated functions, called using
fully qualified syntax:
let prev = Image::access(&my_image, AccessType::AnyShaderWrite, my_subresource_range);Fields§
§info: ImageInfoInformation used to create this object.
name: Option<String>A name for debugging purposes.
Implementations§
Source§impl Image
impl Image
Sourcepub fn create(
device: &Arc<Device>,
info: impl Into<ImageInfo>,
) -> Result<Self, DriverError>
pub fn create( device: &Arc<Device>, info: impl Into<ImageInfo>, ) -> Result<Self, DriverError>
Creates a new image on the given device.
§Examples
Basic usage:
let info = ImageInfo::image_2d(32, 32, vk::Format::R8G8B8A8_UNORM, vk::ImageUsageFlags::SAMPLED);
let image = Image::create(&device, info)?;
assert_ne!(*image, vk::Image::null());
assert_eq!(image.info.width, 32);
assert_eq!(image.info.height, 32);Sourcepub fn access(
this: &Self,
access: AccessType,
access_range: ImageSubresourceRange,
) -> impl Iterator<Item = (AccessType, ImageSubresourceRange)> + '_
pub fn access( this: &Self, access: AccessType, access_range: ImageSubresourceRange, ) -> impl Iterator<Item = (AccessType, ImageSubresourceRange)> + '_
Keeps track of some next access which affects a range this image.
Returns the previous access for which a pipeline barrier should be used to prevent data corruption.
§Note
Used to maintain object state when passing a Screen 13-created vk::Image handle to
external code such as Ash or Erupt bindings.
§Examples
Basic usage:
// Initially we want to "Read Other"
let next = AccessType::AnyShaderReadOther;
let mut prev = Image::access(&my_image, next, my_subresource_range);
assert_eq!(prev.next().unwrap().0, AccessType::Nothing);
// External code may now "Read Other"; no barrier required
// Subsequently we want to "Write"
let next = AccessType::FragmentShaderWrite;
let mut prev = Image::access(&my_image, next, my_subresource_range);
assert_eq!(prev.next().unwrap().0, AccessType::AnyShaderReadOther);
// A barrier on "Read Other" before "Write" is required!