diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..617ca91 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,45 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug executable 'rust-engine'", + "cargo": { + "args": [ + "build", + "--bin=rust-engine", + "--package=rust-engine" + ], + "filter": { + "name": "rust-engine", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + }, + { + "type": "lldb", + "request": "launch", + "name": "Debug unit tests in executable 'rust-engine'", + "cargo": { + "args": [ + "test", + "--no-run", + "--bin=rust-engine", + "--package=rust-engine" + ], + "filter": { + "name": "rust-engine", + "kind": "bin" + } + }, + "args": [], + "cwd": "${workspaceFolder}" + } + ] +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 08a1f05..d029117 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,6 +24,23 @@ struct TestGame { texture_index_counter: usize, last_time: f32, components: Vec>, + show_grid: bool, +} + +impl TestGame { + fn new(toml_path: &str, log_config: LogConfig) -> TestGame { + TestGame { + input: InputState::new(toml_path, log_config), + player: Player::new(), + meshes: vec![], + game_objects: vec![], + log_config, + texture_index_counter: 1, + last_time: 0.0, + components: vec![], + show_grid: false, + } + } } impl Game for TestGame { @@ -50,7 +67,7 @@ impl Game for TestGame { } if self.input.button_just_released("test") { - println!("{:?}", self.game_objects[0].get_game_object(renderer).unwrap().position); + renderer.game_data.use_line_pipeline = !renderer.game_data.use_line_pipeline; } if self.input.button_just_pressed("reload_shaders") { @@ -138,16 +155,7 @@ impl TestGame { fn main() { let log_config = LogConfig::from_file("config/log.toml"); - let mut game = TestGame { - input: InputState::new("config/input.toml", log_config), - player: Player::new(), - meshes: vec![], - game_objects: vec![], - log_config, - texture_index_counter: 1, - last_time: 0.0, - components: vec![], - }; + let mut game = TestGame::new("config/input.toml", log_config); let line_count = 30; let (mut renderer, event_loop) = VulkanRenderer::init( diff --git a/src/vulkan.rs b/src/vulkan.rs index 2d9529c..1f5df37 100644 --- a/src/vulkan.rs +++ b/src/vulkan.rs @@ -78,6 +78,7 @@ pub struct GameData { pub game_objects: Vec, pub meshes: Vec, pub textures: Vec>>, + pub use_line_pipeline: bool, } type RendererDescriptorSets = dyn DescriptorSet + Send + Sync; @@ -121,6 +122,7 @@ impl VulkanRenderer { meshes: vec![], game_objects: vec![], textures: vec![], + use_line_pipeline: true, }; if enable_validation_layers { @@ -325,10 +327,12 @@ impl VulkanRenderer { } fn create_command_buffer(self: &mut Self, fb_index: usize, uniform_buffer_data: vs::ty::ObjectUniformData) -> Arc { + // General setup let mut builder = AutoCommandBufferBuilder::primary_simultaneous_use(self.device.clone(), self.queue.family()).unwrap(); builder.update_buffer(self.uniform_buffers[fb_index].clone(), uniform_buffer_data).unwrap(); builder.begin_render_pass(self.framebuffers[fb_index].clone(), false, vec![ClearValue::Float([0.0, 0.0, 0.0, 1.0]), ClearValue::Depth(1.0)]).unwrap(); + // Load and draw meshes etc. for i in 0..self.game_data.game_objects.len() { let game_object = &self.game_data.game_objects[i]; let mesh = &self.game_data.meshes[game_object.mesh_index]; @@ -343,9 +347,13 @@ impl VulkanRenderer { self.game_data.push_constants.clone()).unwrap(); } - builder.draw(self.line_pipeline.clone(), &self.dynamic_state, vec![self.line_vertex_buffer.clone()], (), self.game_data.line_push_constants.clone()).unwrap() - .end_render_pass().unwrap(); + // Draw line grid + if self.game_data.use_line_pipeline { + builder.draw(self.line_pipeline.clone(), &self.dynamic_state, vec![self.line_vertex_buffer.clone()], (), self.game_data.line_push_constants.clone()).unwrap(); + } + // General cleanup + builder.end_render_pass().unwrap(); Arc::new(builder.build().unwrap()) }