|
|
|
@ -36,120 +36,118 @@ const MESH_SIZE: u64 = 36 * 2 * 4 * 4;
|
|
|
|
|
#[rustfmt::skip]
|
|
|
|
|
const POSITIONS: [f32; 36 * 2 * 4] = [
|
|
|
|
|
// BOTTOM
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
// TOP
|
|
|
|
|
0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
0.0, -1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
0.0, -1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
0.0, -1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
0.0, -1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
0.0, -1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
0.0, -1.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
// FRONT
|
|
|
|
|
-0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 0.0, -1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 0.0, -1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 0.0, -1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 0.0, -1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 0.0, -1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
0.0, 0.0, -1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
// BACK
|
|
|
|
|
0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 0.0, 1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 0.0, 1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 0.0, 1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 0.0, 1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 0.0, 1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
0.0, 0.0, 1.0, 0.0,
|
|
|
|
|
|
|
|
|
|
// LEFT
|
|
|
|
|
-0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
-1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
-1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
-1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
-1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
-0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
-1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
-0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
-0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
-1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
// RIGHT
|
|
|
|
|
0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, -0.5, 0.5, 1.0,
|
|
|
|
|
0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, 0.5, 1.0,
|
|
|
|
|
0.5, -0.5, 2.0, 1.0,
|
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, 0.5, -0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 2.0, 1.0,
|
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
0.5, -0.5, -0.5, 1.0,
|
|
|
|
|
0.5, 0.5, 1.0, 1.0,
|
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0.5, -0.5, 1.0, 1.0,
|
|
|
|
|
1.0, 0.0, 0.0, 0.0,
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
fn create_instance(window: &Window, entry: &Entry) -> Instance {
|
|
|
|
@ -568,6 +566,7 @@ fn setup_pipeline(
|
|
|
|
|
frag_shader: &vk::ShaderModule,
|
|
|
|
|
pass: &vk::RenderPass,
|
|
|
|
|
pipe_layout: &vk::PipelineLayout,
|
|
|
|
|
cull_mode: vk::CullModeFlags,
|
|
|
|
|
) -> vk::Pipeline {
|
|
|
|
|
let shader_stages = setup_shader_stage(&dev, *vert_shader, *frag_shader);
|
|
|
|
|
let vert_input = vk::PipelineVertexInputStateCreateInfo::default();
|
|
|
|
@ -575,7 +574,7 @@ fn setup_pipeline(
|
|
|
|
|
.topology(vk::PrimitiveTopology::TRIANGLE_LIST);
|
|
|
|
|
let rasterization = vk::PipelineRasterizationStateCreateInfo::default()
|
|
|
|
|
.polygon_mode(vk::PolygonMode::FILL)
|
|
|
|
|
.cull_mode(vk::CullModeFlags::NONE)
|
|
|
|
|
.cull_mode(cull_mode)
|
|
|
|
|
.front_face(vk::FrontFace::CLOCKWISE)
|
|
|
|
|
.line_width(1.0);
|
|
|
|
|
let multisample = vk::PipelineMultisampleStateCreateInfo::default()
|
|
|
|
@ -828,7 +827,7 @@ fn write_desc_sets(
|
|
|
|
|
desc_sets: &Vec<vk::DescriptorSet>,
|
|
|
|
|
mesh_buf: &vk::Buffer,
|
|
|
|
|
image_view: vk::ImageView,
|
|
|
|
|
skybox_sampler: vk::Sampler
|
|
|
|
|
skybox_sampler: vk::Sampler,
|
|
|
|
|
) {
|
|
|
|
|
let buf_info = vk::DescriptorBufferInfo::default()
|
|
|
|
|
.buffer(*mesh_buf)
|
|
|
|
@ -912,11 +911,9 @@ fn record_commands(
|
|
|
|
|
cmd_buf: &vk::CommandBuffer,
|
|
|
|
|
framebuf: &vk::Framebuffer,
|
|
|
|
|
pass: &vk::RenderPass,
|
|
|
|
|
layout: &vk::PipelineLayout,
|
|
|
|
|
width: u32,
|
|
|
|
|
height: u32,
|
|
|
|
|
pipe: &vk::Pipeline,
|
|
|
|
|
desc_sets: &Vec<vk::DescriptorSet>,
|
|
|
|
|
pipes: &[(vk::Pipeline, vk::PipelineLayout, &[vk::DescriptorSet])],
|
|
|
|
|
camera: &Camera,
|
|
|
|
|
skybox_buffer: &vk::Buffer,
|
|
|
|
|
skybox_image: &vk::Image,
|
|
|
|
@ -947,22 +944,22 @@ fn record_commands(
|
|
|
|
|
|
|
|
|
|
unsafe {
|
|
|
|
|
let regions = (0..6)
|
|
|
|
|
.map(|i| {
|
|
|
|
|
vk::BufferImageCopy::default()
|
|
|
|
|
.buffer_offset(3 * 2048 * 2048 * i)
|
|
|
|
|
.buffer_row_length(0)
|
|
|
|
|
.buffer_image_height(0)
|
|
|
|
|
.image_offset(vk::Offset3D::default())
|
|
|
|
|
.image_extent(vk::Extent3D::default().width(2048).height(2048).depth(1))
|
|
|
|
|
.image_subresource(
|
|
|
|
|
vk::ImageSubresourceLayers::default()
|
|
|
|
|
.aspect_mask(vk::ImageAspectFlags::COLOR)
|
|
|
|
|
.mip_level(0)
|
|
|
|
|
.layer_count(1)
|
|
|
|
|
.base_array_layer(i as u32),
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
.map(|i| {
|
|
|
|
|
vk::BufferImageCopy::default()
|
|
|
|
|
.buffer_offset(3 * 2048 * 2048 * i)
|
|
|
|
|
.buffer_row_length(0)
|
|
|
|
|
.buffer_image_height(0)
|
|
|
|
|
.image_offset(vk::Offset3D::default())
|
|
|
|
|
.image_extent(vk::Extent3D::default().width(2048).height(2048).depth(1))
|
|
|
|
|
.image_subresource(
|
|
|
|
|
vk::ImageSubresourceLayers::default()
|
|
|
|
|
.aspect_mask(vk::ImageAspectFlags::COLOR)
|
|
|
|
|
.mip_level(0)
|
|
|
|
|
.layer_count(1)
|
|
|
|
|
.base_array_layer(i as u32),
|
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
dev.cmd_copy_buffer_to_image(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
*skybox_buffer,
|
|
|
|
@ -971,25 +968,17 @@ fn record_commands(
|
|
|
|
|
®ions,
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_begin_render_pass(*cmd_buf, &render_pass_info, vk::SubpassContents::INLINE);
|
|
|
|
|
dev.cmd_bind_pipeline(*cmd_buf, vk::PipelineBindPoint::GRAPHICS, *pipe);
|
|
|
|
|
dev.cmd_bind_descriptor_sets(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
vk::PipelineBindPoint::GRAPHICS,
|
|
|
|
|
*layout,
|
|
|
|
|
0,
|
|
|
|
|
desc_sets.as_ref(),
|
|
|
|
|
&[],
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_set_viewport_with_count(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
&[vk::Viewport::default()
|
|
|
|
|
.width(width as f32)
|
|
|
|
|
.height(height as f32)],
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_set_scissor_with_count(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
&[vk::Rect2D::default().extent(vk::Extent2D { width, height })],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let screen_res: Vec<u8> = (Vec::<u32>::from([width, height]))
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|f| f.to_ne_bytes())
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_flattened();
|
|
|
|
|
let base_color: Vec<u8> = (Vec::<f32>::from([0.0, 1.0, 1.0, 1.0]))
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|f| f.to_ne_bytes())
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_flattened();
|
|
|
|
|
let cam_data: Vec<u8> = (Vec::<f32>::from([
|
|
|
|
|
camera.origin.x,
|
|
|
|
|
camera.origin.y,
|
|
|
|
@ -1004,42 +993,54 @@ fn record_commands(
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_flattened();
|
|
|
|
|
|
|
|
|
|
let screen_res: Vec<u8> = (Vec::<u32>::from([width, height]))
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|f| f.to_ne_bytes())
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_flattened();
|
|
|
|
|
let base_color: Vec<u8> = (Vec::<f32>::from([0.0, 1.0, 1.0, 1.0]))
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|f| f.to_ne_bytes())
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_flattened();
|
|
|
|
|
for (pipe, layout, desc_sets) in pipes {
|
|
|
|
|
dev.cmd_bind_pipeline(*cmd_buf, vk::PipelineBindPoint::GRAPHICS, *pipe);
|
|
|
|
|
|
|
|
|
|
dev.cmd_push_constants(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
*layout,
|
|
|
|
|
vk::ShaderStageFlags::VERTEX,
|
|
|
|
|
0,
|
|
|
|
|
cam_data.as_ref(),
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_push_constants(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
*layout,
|
|
|
|
|
vk::ShaderStageFlags::VERTEX,
|
|
|
|
|
32,
|
|
|
|
|
screen_res.as_ref(),
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_push_constants(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
*layout,
|
|
|
|
|
vk::ShaderStageFlags::FRAGMENT,
|
|
|
|
|
48,
|
|
|
|
|
base_color.as_ref(),
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_bind_descriptor_sets(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
vk::PipelineBindPoint::GRAPHICS,
|
|
|
|
|
*layout,
|
|
|
|
|
0,
|
|
|
|
|
desc_sets.as_ref(),
|
|
|
|
|
&[],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
dev.cmd_set_viewport_with_count(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
&[vk::Viewport::default()
|
|
|
|
|
.width(width as f32)
|
|
|
|
|
.height(height as f32)],
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_set_scissor_with_count(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
&[vk::Rect2D::default().extent(vk::Extent2D { width, height })],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
dev.cmd_push_constants(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
*layout,
|
|
|
|
|
vk::ShaderStageFlags::VERTEX,
|
|
|
|
|
0,
|
|
|
|
|
cam_data.as_ref(),
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_push_constants(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
*layout,
|
|
|
|
|
vk::ShaderStageFlags::VERTEX,
|
|
|
|
|
32,
|
|
|
|
|
screen_res.as_ref(),
|
|
|
|
|
);
|
|
|
|
|
dev.cmd_push_constants(
|
|
|
|
|
*cmd_buf,
|
|
|
|
|
*layout,
|
|
|
|
|
vk::ShaderStageFlags::FRAGMENT,
|
|
|
|
|
48,
|
|
|
|
|
base_color.as_ref(),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
dev.cmd_draw(*cmd_buf, 36, 1, 0, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dev.cmd_draw(*cmd_buf, 36, 1, 0, 0);
|
|
|
|
|
dev.cmd_end_render_pass(*cmd_buf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -1225,7 +1226,7 @@ fn main() {
|
|
|
|
|
unsafe {
|
|
|
|
|
std::ptr::copy(POSITIONS.as_ptr(), mesh_mem as *mut f32, POSITIONS.len());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let (skybox_image, skybox_image_view, skybox_sampler) = {
|
|
|
|
|
let qf_idxs = [rcs_queue_inx];
|
|
|
|
|
let create_info = vk::ImageCreateInfo::default()
|
|
|
|
@ -1243,11 +1244,13 @@ fn main() {
|
|
|
|
|
.queue_family_indices(&qf_idxs);
|
|
|
|
|
let image =
|
|
|
|
|
unsafe { dev.create_image(&create_info, None) }.expect("Failed to create image");
|
|
|
|
|
|
|
|
|
|
let skybox_mem_size: vk::MemoryRequirements = unsafe {dev.get_image_memory_requirements(image)};
|
|
|
|
|
|
|
|
|
|
let skybox_mem_size: vk::MemoryRequirements =
|
|
|
|
|
unsafe { dev.get_image_memory_requirements(image) };
|
|
|
|
|
let skybox_dev_mem = mem_alloc(&dev, host_invisible_inx, skybox_mem_size.size);
|
|
|
|
|
unsafe {
|
|
|
|
|
dev.bind_image_memory(image, skybox_dev_mem, 0).expect("Failed to bind image memory");
|
|
|
|
|
dev.bind_image_memory(image, skybox_dev_mem, 0)
|
|
|
|
|
.expect("Failed to bind image memory");
|
|
|
|
|
}
|
|
|
|
|
let create_info = vk::ImageViewCreateInfo::default()
|
|
|
|
|
.image(image)
|
|
|
|
@ -1277,7 +1280,6 @@ fn main() {
|
|
|
|
|
let sampler =
|
|
|
|
|
unsafe { dev.create_sampler(&create_info, None) }.expect("Failed to create sampler");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(image, image_view, sampler)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -1295,14 +1297,14 @@ fn main() {
|
|
|
|
|
std::ptr::copy(data.as_ptr(), skybox_ptr as *mut u8, data.len());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let vert_shader_bin = std::fs::read("shaders/vert.spv").unwrap();
|
|
|
|
|
let frag_shader_bin = std::fs::read("shaders/frag.spv").unwrap();
|
|
|
|
|
let skybox_vert_shader_bin = std::fs::read("shaders/skybox_vert.spv").unwrap();
|
|
|
|
|
let skybox_frag_shader_bin = std::fs::read("shaders/skybox_frag.spv").unwrap();
|
|
|
|
|
|
|
|
|
|
let vert_shader = unsafe {
|
|
|
|
|
let skybox_vert_shader = unsafe {
|
|
|
|
|
dev.create_shader_module(
|
|
|
|
|
&vk::ShaderModuleCreateInfo {
|
|
|
|
|
code_size: vert_shader_bin.len(),
|
|
|
|
|
p_code: vert_shader_bin.as_ptr() as *const u32,
|
|
|
|
|
code_size: skybox_vert_shader_bin.len(),
|
|
|
|
|
p_code: skybox_vert_shader_bin.as_ptr() as *const u32,
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
None,
|
|
|
|
@ -1310,11 +1312,38 @@ fn main() {
|
|
|
|
|
.expect("Failed to create vertex shader module")
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let frag_shader = unsafe {
|
|
|
|
|
let skybox_frag_shader = unsafe {
|
|
|
|
|
dev.create_shader_module(
|
|
|
|
|
&vk::ShaderModuleCreateInfo {
|
|
|
|
|
code_size: frag_shader_bin.len(),
|
|
|
|
|
p_code: frag_shader_bin.as_ptr() as *const u32,
|
|
|
|
|
code_size: skybox_frag_shader_bin.len(),
|
|
|
|
|
p_code: skybox_frag_shader_bin.as_ptr() as *const u32,
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
.expect("Failed to create fragment shader module")
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let cube_vert_shader_bin = std::fs::read("shaders/cube_vert.spv").unwrap();
|
|
|
|
|
let cube_frag_shader_bin = std::fs::read("shaders/cube_frag.spv").unwrap();
|
|
|
|
|
|
|
|
|
|
let cube_vert_shader = unsafe {
|
|
|
|
|
dev.create_shader_module(
|
|
|
|
|
&vk::ShaderModuleCreateInfo {
|
|
|
|
|
code_size: cube_vert_shader_bin.len(),
|
|
|
|
|
p_code: cube_vert_shader_bin.as_ptr() as *const u32,
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
None,
|
|
|
|
|
)
|
|
|
|
|
.expect("Failed to create vertex shader module")
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let cube_frag_shader = unsafe {
|
|
|
|
|
dev.create_shader_module(
|
|
|
|
|
&vk::ShaderModuleCreateInfo {
|
|
|
|
|
code_size: cube_frag_shader_bin.len(),
|
|
|
|
|
p_code: cube_frag_shader_bin.as_ptr() as *const u32,
|
|
|
|
|
..Default::default()
|
|
|
|
|
},
|
|
|
|
|
None,
|
|
|
|
@ -1325,7 +1354,22 @@ fn main() {
|
|
|
|
|
let pass = setup_render_pass(&dev);
|
|
|
|
|
|
|
|
|
|
let pipe_layout = setup_pipe_layout(&dev);
|
|
|
|
|
let pipe = setup_pipeline(&dev, &vert_shader, &frag_shader, &pass, &pipe_layout);
|
|
|
|
|
let skybox_pipe = setup_pipeline(
|
|
|
|
|
&dev,
|
|
|
|
|
&skybox_vert_shader,
|
|
|
|
|
&skybox_frag_shader,
|
|
|
|
|
&pass,
|
|
|
|
|
&pipe_layout,
|
|
|
|
|
vk::CullModeFlags::NONE,
|
|
|
|
|
);
|
|
|
|
|
let cube_pipe = setup_pipeline(
|
|
|
|
|
&dev,
|
|
|
|
|
&cube_vert_shader,
|
|
|
|
|
&cube_frag_shader,
|
|
|
|
|
&pass,
|
|
|
|
|
&pipe_layout,
|
|
|
|
|
vk::CullModeFlags::FRONT,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let surface_loader = surface::Instance::new(&entry, &instance);
|
|
|
|
|
let swapchain_loader = swapchain::Device::new(&instance, &dev);
|
|
|
|
@ -1341,8 +1385,6 @@ fn main() {
|
|
|
|
|
height,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let desc_pool = setup_desc_pool(&dev);
|
|
|
|
|
|
|
|
|
|
let mut swap_images = make_swap_images(&dev, &swapchain, &swapchain_loader);
|
|
|
|
|
|
|
|
|
|
let mut swap_views = make_swap_views(&dev, &swap_images, vk::Format::B8G8R8A8_UNORM);
|
|
|
|
@ -1351,9 +1393,17 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
let mut framebufs = make_framebufs(&dev, &swap_views, &depth_view, &pass, width, height);
|
|
|
|
|
|
|
|
|
|
let desc_pool = setup_desc_pool(&dev);
|
|
|
|
|
|
|
|
|
|
let desc_sets = make_desc_sets(&dev, &desc_pool);
|
|
|
|
|
|
|
|
|
|
write_desc_sets(&dev, &desc_sets, &mesh_buf, skybox_image_view, skybox_sampler);
|
|
|
|
|
write_desc_sets(
|
|
|
|
|
&dev,
|
|
|
|
|
&desc_sets,
|
|
|
|
|
&mesh_buf,
|
|
|
|
|
skybox_image_view,
|
|
|
|
|
skybox_sampler,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
let sem_avail = make_sem(&dev);
|
|
|
|
|
let sem_finish = make_sem(&dev);
|
|
|
|
@ -1463,11 +1513,12 @@ fn main() {
|
|
|
|
|
&cmd_buf,
|
|
|
|
|
&framebufs[img_inx as usize],
|
|
|
|
|
&pass,
|
|
|
|
|
&pipe_layout,
|
|
|
|
|
width,
|
|
|
|
|
height,
|
|
|
|
|
&pipe,
|
|
|
|
|
&desc_sets,
|
|
|
|
|
&[
|
|
|
|
|
(cube_pipe, pipe_layout, &desc_sets),
|
|
|
|
|
(skybox_pipe, pipe_layout, &desc_sets),
|
|
|
|
|
],
|
|
|
|
|
&camera,
|
|
|
|
|
&skybox_buf,
|
|
|
|
|
&skybox_image,
|
|
|
|
|