makes geometry shader an option
This commit is contained in:
parent
5c971d0288
commit
a9d4aae1bc
10 changed files with 171 additions and 109 deletions
src
27
src/main.rs
27
src/main.rs
|
@ -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];
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue