BlendMode, Buffer, BufferDesc, BufferImageCopy, BufferUsageFlags, ClearValue, CompareOp,
CullingMode, Device, Extent2d, Extent3d, FrontFace, GraphicsPipelineDesc,
GraphicsPipelineLayout, Image, ImageAspectFlags, ImageBarrier, ImageDesc, ImageDimension,
- ImageFormat, ImageLayout, ImageSubresourceRange, ImageUsageFlags, IndexType, LoadOp,
- MemoryLocation, Offset2d, Offset3d, PolygonMode, RenderingAttachment, RenderingDesc,
- SamplerAddressMode, SamplerDesc, SamplerFilter, Scissor, ShaderDesc, ShaderStageFlags, StoreOp,
- ThreadToken, Topology, TypedBind, Viewport,
+ ImageFormat, ImageLayout, ImageUsageFlags, IndexType, LoadOp, MemoryLocation, Offset2d,
+ Offset3d, PolygonMode, RenderingAttachment, RenderingDesc, SamplerAddressMode, SamplerDesc,
+ SamplerFilter, Scissor, ShaderDesc, ShaderStageFlags, StoreOp, ThreadToken, Topology,
+ TypedBind, Viewport,
};
use narcissus_image as image;
use narcissus_maths::{
device.cmd_barrier(
&mut cmd_buffer,
None,
- &[ImageBarrier::with_access_optimal(
+ &[ImageBarrier::layout_optimal(
&[Access::None],
&[Access::TransferWrite],
image,
+ ImageAspectFlags::COLOR,
)],
);
device.cmd_barrier(
&mut cmd_buffer,
None,
- &[ImageBarrier::with_access_optimal(
+ &[ImageBarrier::layout_optimal(
&[Access::TransferWrite],
&[Access::FragmentShaderSampledImageRead],
image,
+ ImageAspectFlags::COLOR,
)],
);
}
};
- let frame_start = Instant::now() - start_time;
- let frame_start = frame_start.as_secs_f32() * 0.125;
-
- for (i, transform) in shark_transforms.iter_mut().enumerate() {
- let direction = if i & 1 == 0 { 1.0 } else { -1.0 };
- let (s, _) = sin_cos_pi_f32(frame_start + (i as f32) * 0.0125);
- transform.translate.y = s;
- transform.matrix *= Mat3::from_axis_rotation(Vec3::Y, HalfTurn::new(0.002 * direction))
- }
-
- transforms.write_slice(&shark_transforms);
-
- let (s, c) = sin_cos_pi_f32(frame_start * 0.2);
- let camera_height = c * 8.0;
- let camera_radius = 20.0;
- let eye = Point3::new(s * camera_radius, camera_height, c * camera_radius);
- let center = Point3::ZERO;
- let camera_from_model = Mat4::look_at(eye, center, Vec3::Y);
- let clip_from_camera =
- Mat4::perspective_rev_inf_zo(Deg::new(45.0).into(), width as f32 / height as f32, 0.01);
- let clip_from_model = clip_from_camera * camera_from_model;
-
- uniforms.write(Uniforms { clip_from_model });
+ let mut cmd_buffer = device.create_cmd_buffer(&frame, &thread_token);
if width != depth_width || height != depth_height {
device.destroy_image(&frame, depth_image);
mip_levels: 1,
});
- let mut cmd_buffer = device.create_cmd_buffer(&frame, &thread_token);
-
device.cmd_barrier(
&mut cmd_buffer,
None,
- &[ImageBarrier {
- prev_access: &[Access::None],
- next_access: &[Access::DepthStencilAttachmentWrite],
- prev_layout: ImageLayout::Optimal,
- next_layout: ImageLayout::Optimal,
- image: depth_image,
- subresource_range: ImageSubresourceRange {
- aspect: ImageAspectFlags::DEPTH,
- base_mip_level: 0,
- mip_level_count: 1,
- base_array_layer: 0,
- array_layer_count: 1,
- },
- }],
+ &[ImageBarrier::layout_optimal(
+ &[Access::None],
+ &[Access::DepthStencilAttachmentWrite],
+ depth_image,
+ ImageAspectFlags::DEPTH,
+ )],
);
- device.submit(&frame, cmd_buffer);
-
depth_width = width;
depth_height = height;
}
- let mut cmd_buffer = device.create_cmd_buffer(&frame, &thread_token);
+ let frame_start = Instant::now() - start_time;
+ let frame_start = frame_start.as_secs_f32() * 0.125;
+
+ for (i, transform) in shark_transforms.iter_mut().enumerate() {
+ let direction = if i & 1 == 0 { 1.0 } else { -1.0 };
+ let (s, _) = sin_cos_pi_f32(frame_start + (i as f32) * 0.0125);
+ transform.translate.y = s;
+ transform.matrix *= Mat3::from_axis_rotation(Vec3::Y, HalfTurn::new(0.002 * direction))
+ }
+
+ transforms.write_slice(&shark_transforms);
+
+ let (s, c) = sin_cos_pi_f32(frame_start * 0.2);
+ let camera_height = c * 8.0;
+ let camera_radius = 20.0;
+ let eye = Point3::new(s * camera_radius, camera_height, c * camera_radius);
+ let center = Point3::ZERO;
+ let camera_from_model = Mat4::look_at(eye, center, Vec3::Y);
+ let clip_from_camera =
+ Mat4::perspective_rev_inf_zo(Deg::new(45.0).into(), width as f32 / height as f32, 0.01);
+ let clip_from_model = clip_from_camera * camera_from_model;
+
+ uniforms.write(Uniforms { clip_from_model });
device.cmd_set_pipeline(&mut cmd_buffer, pipeline);