pub struct Buffer { /* private fields */ }Implementations§
Source§impl Buffer
impl Buffer
Sourcepub fn new(
device: &Device,
allocator: &mut Allocator,
location: MemoryLocation,
size: DeviceSize,
buffer_usage_flags: BufferUsageFlags,
) -> Buffer
pub fn new( device: &Device, allocator: &mut Allocator, location: MemoryLocation, size: DeviceSize, buffer_usage_flags: BufferUsageFlags, ) -> Buffer
Examples found in repository?
examples/buffer/main.rs (lines 19-25)
17 fn new(ctx: &mut InitContext) -> Self {
18 // Image
19 let buffer = Buffer::new(
20 &ctx.device,
21 &mut ctx.allocator,
22 MemoryLocation::CpuToGpu,
23 2000 * 2000 * 4,
24 BufferUsageFlags::TRANSFER_SRC
25 );
26
27 {
28 let mut mem = buffer.mapped().unwrap();
29 for i in mem.as_mut_slice() {
30 *i = 255u8;
31 }
32 }
33
34 Self {
35 buffer
36 }
37 }
38}
39
40impl RenderComponent for ComputeRender {
41
42 fn render(&mut self, ctx: &mut RenderContext) {
43
44 if self.buffer.size() != (ctx.swapchain_image.width() * ctx.swapchain_image.height() * 4) as u64 {
45 // Recreate image
46 self.buffer = Buffer::new(
47 &ctx.device,
48 &mut ctx.allocator,
49 MemoryLocation::CpuToGpu,
50 (ctx.swapchain_image.width() * ctx.swapchain_image.height() * 4) as DeviceSize,
51 BufferUsageFlags::TRANSFER_SRC
52 );
53
54 {
55 let mut mem = self.buffer.mapped().unwrap();
56 for i in mem.as_mut_slice() {
57 *i = 255u8;
58 }
59 }
60 }
61
62 // Transition the swapchain image
63 ctx.command_buffer.image_barrier(
64 ctx.swapchain_image,
65 vk::ImageLayout::PRESENT_SRC_KHR,
66 vk::ImageLayout::TRANSFER_DST_OPTIMAL,
67 vk::PipelineStageFlags::TOP_OF_PIPE,
68 vk::PipelineStageFlags::TRANSFER,
69 vk::AccessFlags::NONE,
70 vk::AccessFlags::TRANSFER_WRITE
71 );
72
73 // Copy to the swapchain
74 ctx.command_buffer.clear_color_image(
75 ctx.swapchain_image,
76 ImageLayout::TRANSFER_DST_OPTIMAL,
77 [1.0, 0.0, 0.0, 1.0]
78 );
79
80 ctx.command_buffer.copy_buffer_to_image(
81 &self.buffer,
82 ctx.swapchain_image,
83 ImageLayout::TRANSFER_DST_OPTIMAL,
84 &[
85 BufferImageCopy::default()
86 .buffer_image_height(0)
87 .buffer_row_length(0)
88 .buffer_offset(0)
89 .image_extent(
90 Extent3D::default()
91 .width(ctx.swapchain_image.width())
92 .height(ctx.swapchain_image.height())
93 .depth(1)
94 )
95 .image_subresource(
96 ImageSubresourceLayers::default()
97 .aspect_mask(vk::ImageAspectFlags::COLOR)
98 .base_array_layer(0)
99 .layer_count(1)
100 .mip_level(0)
101 )
102 ]
103 );
104
105 // Transfer back to default states
106 ctx.command_buffer.image_barrier(
107 ctx.swapchain_image,
108 vk::ImageLayout::TRANSFER_DST_OPTIMAL,
109 vk::ImageLayout::PRESENT_SRC_KHR,
110 vk::PipelineStageFlags::TRANSFER,
111 vk::PipelineStageFlags::BOTTOM_OF_PIPE,
112 vk::AccessFlags::TRANSFER_WRITE,
113 vk::AccessFlags::NONE
114 );
115
116 }Sourcepub fn mapped(&self) -> Result<MappedBufferGuard<'_>, BufferError>
pub fn mapped(&self) -> Result<MappedBufferGuard<'_>, BufferError>
Examples found in repository?
examples/buffer/main.rs (line 28)
17 fn new(ctx: &mut InitContext) -> Self {
18 // Image
19 let buffer = Buffer::new(
20 &ctx.device,
21 &mut ctx.allocator,
22 MemoryLocation::CpuToGpu,
23 2000 * 2000 * 4,
24 BufferUsageFlags::TRANSFER_SRC
25 );
26
27 {
28 let mut mem = buffer.mapped().unwrap();
29 for i in mem.as_mut_slice() {
30 *i = 255u8;
31 }
32 }
33
34 Self {
35 buffer
36 }
37 }
38}
39
40impl RenderComponent for ComputeRender {
41
42 fn render(&mut self, ctx: &mut RenderContext) {
43
44 if self.buffer.size() != (ctx.swapchain_image.width() * ctx.swapchain_image.height() * 4) as u64 {
45 // Recreate image
46 self.buffer = Buffer::new(
47 &ctx.device,
48 &mut ctx.allocator,
49 MemoryLocation::CpuToGpu,
50 (ctx.swapchain_image.width() * ctx.swapchain_image.height() * 4) as DeviceSize,
51 BufferUsageFlags::TRANSFER_SRC
52 );
53
54 {
55 let mut mem = self.buffer.mapped().unwrap();
56 for i in mem.as_mut_slice() {
57 *i = 255u8;
58 }
59 }
60 }
61
62 // Transition the swapchain image
63 ctx.command_buffer.image_barrier(
64 ctx.swapchain_image,
65 vk::ImageLayout::PRESENT_SRC_KHR,
66 vk::ImageLayout::TRANSFER_DST_OPTIMAL,
67 vk::PipelineStageFlags::TOP_OF_PIPE,
68 vk::PipelineStageFlags::TRANSFER,
69 vk::AccessFlags::NONE,
70 vk::AccessFlags::TRANSFER_WRITE
71 );
72
73 // Copy to the swapchain
74 ctx.command_buffer.clear_color_image(
75 ctx.swapchain_image,
76 ImageLayout::TRANSFER_DST_OPTIMAL,
77 [1.0, 0.0, 0.0, 1.0]
78 );
79
80 ctx.command_buffer.copy_buffer_to_image(
81 &self.buffer,
82 ctx.swapchain_image,
83 ImageLayout::TRANSFER_DST_OPTIMAL,
84 &[
85 BufferImageCopy::default()
86 .buffer_image_height(0)
87 .buffer_row_length(0)
88 .buffer_offset(0)
89 .image_extent(
90 Extent3D::default()
91 .width(ctx.swapchain_image.width())
92 .height(ctx.swapchain_image.height())
93 .depth(1)
94 )
95 .image_subresource(
96 ImageSubresourceLayers::default()
97 .aspect_mask(vk::ImageAspectFlags::COLOR)
98 .base_array_layer(0)
99 .layer_count(1)
100 .mip_level(0)
101 )
102 ]
103 );
104
105 // Transfer back to default states
106 ctx.command_buffer.image_barrier(
107 ctx.swapchain_image,
108 vk::ImageLayout::TRANSFER_DST_OPTIMAL,
109 vk::ImageLayout::PRESENT_SRC_KHR,
110 vk::PipelineStageFlags::TRANSFER,
111 vk::PipelineStageFlags::BOTTOM_OF_PIPE,
112 vk::AccessFlags::TRANSFER_WRITE,
113 vk::AccessFlags::NONE
114 );
115
116 }pub fn binding(&self) -> DescriptorBufferInfo
pub fn handle(&self) -> &Buffer
Sourcepub fn size(&self) -> DeviceSize
pub fn size(&self) -> DeviceSize
Examples found in repository?
examples/buffer/main.rs (line 44)
42 fn render(&mut self, ctx: &mut RenderContext) {
43
44 if self.buffer.size() != (ctx.swapchain_image.width() * ctx.swapchain_image.height() * 4) as u64 {
45 // Recreate image
46 self.buffer = Buffer::new(
47 &ctx.device,
48 &mut ctx.allocator,
49 MemoryLocation::CpuToGpu,
50 (ctx.swapchain_image.width() * ctx.swapchain_image.height() * 4) as DeviceSize,
51 BufferUsageFlags::TRANSFER_SRC
52 );
53
54 {
55 let mut mem = self.buffer.mapped().unwrap();
56 for i in mem.as_mut_slice() {
57 *i = 255u8;
58 }
59 }
60 }
61
62 // Transition the swapchain image
63 ctx.command_buffer.image_barrier(
64 ctx.swapchain_image,
65 vk::ImageLayout::PRESENT_SRC_KHR,
66 vk::ImageLayout::TRANSFER_DST_OPTIMAL,
67 vk::PipelineStageFlags::TOP_OF_PIPE,
68 vk::PipelineStageFlags::TRANSFER,
69 vk::AccessFlags::NONE,
70 vk::AccessFlags::TRANSFER_WRITE
71 );
72
73 // Copy to the swapchain
74 ctx.command_buffer.clear_color_image(
75 ctx.swapchain_image,
76 ImageLayout::TRANSFER_DST_OPTIMAL,
77 [1.0, 0.0, 0.0, 1.0]
78 );
79
80 ctx.command_buffer.copy_buffer_to_image(
81 &self.buffer,
82 ctx.swapchain_image,
83 ImageLayout::TRANSFER_DST_OPTIMAL,
84 &[
85 BufferImageCopy::default()
86 .buffer_image_height(0)
87 .buffer_row_length(0)
88 .buffer_offset(0)
89 .image_extent(
90 Extent3D::default()
91 .width(ctx.swapchain_image.width())
92 .height(ctx.swapchain_image.height())
93 .depth(1)
94 )
95 .image_subresource(
96 ImageSubresourceLayers::default()
97 .aspect_mask(vk::ImageAspectFlags::COLOR)
98 .base_array_layer(0)
99 .layer_count(1)
100 .mip_level(0)
101 )
102 ]
103 );
104
105 // Transfer back to default states
106 ctx.command_buffer.image_barrier(
107 ctx.swapchain_image,
108 vk::ImageLayout::TRANSFER_DST_OPTIMAL,
109 vk::ImageLayout::PRESENT_SRC_KHR,
110 vk::PipelineStageFlags::TRANSFER,
111 vk::PipelineStageFlags::BOTTOM_OF_PIPE,
112 vk::AccessFlags::TRANSFER_WRITE,
113 vk::AccessFlags::NONE
114 );
115
116 }Auto Trait Implementations§
impl Freeze for Buffer
impl RefUnwindSafe for Buffer
impl Send for Buffer
impl Sync for Buffer
impl Unpin for Buffer
impl UnsafeUnpin for Buffer
impl UnwindSafe for Buffer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.