makes geometry shader an option

This commit is contained in:
zomseffen 2024-06-02 15:25:11 +02:00
parent 5c971d0288
commit a9d4aae1bc
10 changed files with 171 additions and 109 deletions

View file

@ -45,6 +45,7 @@ pub mod command_buffer;
pub mod depth_buffer;
pub mod load_model;
pub mod scene;
pub mod primitives;
const PORTABILITY_MACOS_VERSION: Version = Version::new(1, 3, 216);
const VALIDATION_ENABLED: bool =
@ -70,6 +71,7 @@ fn main() -> Result<()> {
.build(&event_loop)?;
//window.set_cursor_visible(false);
// event_loop.set_control_flow(winit::event_loop::ControlFlow::Poll);
// App
let mut app = unsafe { App::create(&window)? };
@ -160,6 +162,7 @@ impl App {
let loader = LibloadingLoader::new(LIBRARY)?;
let entry = Entry::new(loader).map_err(|b| anyhow!("{}", b))?;
let mut data = app_data::AppData::default();
data.use_geometry_shader = false;
let mut scene_handler = scene::Scene::default();
//load_model::load_model(&mut data)?;
@ -201,7 +204,7 @@ impl App {
last_pos: LogicalPosition::new(-1 as f32, -1 as f32),
view_direction: vertex::Vec3::new(0.0, 0.0, 0.0),
cur_pos: cgmath::point3(0.0, 0.0, 0.0),
scene_handler,
scene_handler
})
}
@ -393,7 +396,8 @@ impl App {
10000.0,
);
let ubo = buffer::UniformBufferObject { model, geom_rot: rot_mat4, view, proj };
let ubo = buffer::UniformBufferObject { model, geom_rot: rot_mat4, view, proj,
use_geom_shader: [self.data.use_geometry_shader, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]};
let memory = self.device.map_memory(
self.data.uniform_buffers_memory[image_index],
@ -668,8 +672,13 @@ unsafe fn create_pipeline(device: &Device, data: &mut app_data::AppData) -> Resu
.vertex_binding_descriptions(binding_descriptions)
.vertex_attribute_descriptions(&attribute_descriptions);
let mut topology = vk::PrimitiveTopology::TRIANGLE_LIST;
if data.use_geometry_shader {
topology = vk::PrimitiveTopology::POINT_LIST;
}
let input_assembly_state = vk::PipelineInputAssemblyStateCreateInfo::builder()
.topology(vk::PrimitiveTopology::TRIANGLE_LIST)
.topology(topology)
.primitive_restart_enable(false);
let viewport = vk::Viewport::builder()
@ -736,8 +745,9 @@ unsafe fn create_pipeline(device: &Device, data: &mut app_data::AppData) -> Resu
data.pipeline_layout = device.create_pipeline_layout(&layout_info, None)?;
let stages = &[vert_stage, frag_stage];
let info = vk::GraphicsPipelineCreateInfo::builder()
.stages(stages)
let stages_geom = &[vert_stage, geo_stage,frag_stage];
let mut info = vk::GraphicsPipelineCreateInfo::builder()
.vertex_input_state(&vertex_input_state)
.input_assembly_state(&input_assembly_state)
.viewport_state(&viewport_state)
@ -749,6 +759,13 @@ unsafe fn create_pipeline(device: &Device, data: &mut app_data::AppData) -> Resu
.render_pass(data.render_pass)
.subpass(0);
if data.use_geometry_shader {
info = info.stages(stages_geom);
}
else {
info = info.stages(stages);
}
data.pipeline = device.create_graphics_pipelines(
vk::PipelineCache::null(), &[info], None)?.0[0];