Compare commits
3 commits
c6ee60de02
...
9b5a011afc
Author | SHA1 | Date | |
---|---|---|---|
9b5a011afc | |||
25b80b0d6d | |||
bf1fc24011 |
1 changed files with 32 additions and 15 deletions
47
src/main.rs
47
src/main.rs
|
@ -3,6 +3,8 @@ mod math3d;
|
||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::ffi::{c_void, CStr, CString};
|
use std::ffi::{c_void, CStr, CString};
|
||||||
|
use std::ops::Deref;
|
||||||
|
use std::pin::Pin;
|
||||||
|
|
||||||
use math3d::Vertex;
|
use math3d::Vertex;
|
||||||
|
|
||||||
|
@ -949,19 +951,8 @@ impl VulkanApp {
|
||||||
let shader_stages: [ffi::VkPipelineShaderStageCreateInfo; 2] =
|
let shader_stages: [ffi::VkPipelineShaderStageCreateInfo; 2] =
|
||||||
[vert_shader_stage_info, frag_shader_stage_info];
|
[vert_shader_stage_info, frag_shader_stage_info];
|
||||||
|
|
||||||
let mut vertex_input_info: ffi::VkPipelineVertexInputStateCreateInfo =
|
let (vertex_input_info, _bind_desc, _attr_descs) =
|
||||||
unsafe { std::mem::zeroed() };
|
Self::create_vertex_input_state_info_struct()?;
|
||||||
vertex_input_info.sType =
|
|
||||||
ffi::VkStructureType_VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
|
|
||||||
|
|
||||||
let bind_desc = Vertex::get_binding_description();
|
|
||||||
let attr_descs = Vertex::get_attribute_descriptions();
|
|
||||||
|
|
||||||
vertex_input_info.vertexBindingDescriptionCount = 1;
|
|
||||||
vertex_input_info.vertexAttributeDescriptionCount = attr_descs.len() as u32;
|
|
||||||
|
|
||||||
vertex_input_info.pVertexBindingDescriptions = std::ptr::addr_of!(bind_desc);
|
|
||||||
vertex_input_info.pVertexAttributeDescriptions = attr_descs.as_ptr();
|
|
||||||
|
|
||||||
let mut input_assembly: ffi::VkPipelineInputAssemblyStateCreateInfo =
|
let mut input_assembly: ffi::VkPipelineInputAssemblyStateCreateInfo =
|
||||||
unsafe { std::mem::zeroed() };
|
unsafe { std::mem::zeroed() };
|
||||||
|
@ -1688,8 +1679,8 @@ impl VulkanApp {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
unsafe {
|
||||||
let data_ptr_vertices: &mut [Vertex; 3] = unsafe { std::mem::transmute(data_ptr) };
|
let data_ptr_vertices: *mut [Vertex; 3] = std::mem::transmute(data_ptr);
|
||||||
*data_ptr_vertices = VERTICES;
|
*data_ptr_vertices = VERTICES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1729,6 +1720,32 @@ impl VulkanApp {
|
||||||
|
|
||||||
Err(String::from("Failed to find suitable memory type!"))
|
Err(String::from("Failed to find suitable memory type!"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::type_complexity)]
|
||||||
|
fn create_vertex_input_state_info_struct() -> Result<
|
||||||
|
(
|
||||||
|
ffi::VkPipelineVertexInputStateCreateInfo,
|
||||||
|
Pin<Box<ffi::VkVertexInputBindingDescription>>,
|
||||||
|
Pin<Box<[ffi::VkVertexInputAttributeDescription; 2]>>,
|
||||||
|
),
|
||||||
|
String,
|
||||||
|
> {
|
||||||
|
let mut vertex_input_info: ffi::VkPipelineVertexInputStateCreateInfo =
|
||||||
|
unsafe { std::mem::zeroed() };
|
||||||
|
vertex_input_info.sType =
|
||||||
|
ffi::VkStructureType_VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
|
||||||
|
|
||||||
|
let bind_desc = Box::pin(Vertex::get_binding_description());
|
||||||
|
let attr_descs = Box::pin(Vertex::get_attribute_descriptions());
|
||||||
|
|
||||||
|
vertex_input_info.vertexBindingDescriptionCount = 1;
|
||||||
|
vertex_input_info.vertexAttributeDescriptionCount = attr_descs.len() as u32;
|
||||||
|
|
||||||
|
vertex_input_info.pVertexBindingDescriptions = bind_desc.deref();
|
||||||
|
vertex_input_info.pVertexAttributeDescriptions = attr_descs.as_ptr();
|
||||||
|
|
||||||
|
Ok((vertex_input_info, bind_desc, attr_descs))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for VulkanApp {
|
impl Drop for VulkanApp {
|
||||||
|
|
Loading…
Reference in a new issue