diff --git a/levels/test.lvl b/levels/test.lvl index 275c1c4..3d65a6c 100644 --- a/levels/test.lvl +++ b/levels/test.lvl @@ -30,7 +30,7 @@ { "mesh_index": 1, "position": [ - 0.0, + -2.0, 0.0, 0.0 ], @@ -50,15 +50,15 @@ "player": { "mesh_index": null, "position": [ - 0, - 1.0, - 5.0 + 3.735453, + -0.27469593, + -7.2023296 ], "rotation": [ - 1, - 0, - 0, - 0 + 0.106049195, + 0.0023422977, + -0.99411577, + -0.021956932 ], "scale": [ 1.0, diff --git a/shaders/text.frag b/shaders/text.frag index 5b9db36..06185fb 100644 --- a/shaders/text.frag +++ b/shaders/text.frag @@ -21,6 +21,5 @@ layout(location = 0) in vec2 tex_coords; layout(location = 0) out vec4 out_color; void main() { - out_color = vec4(1., 1., 1., 1.); - // out_color = vec4(1., 1., 1., texture(diffuse_tex, tex_coords).r); + out_color = vec4(1., 1., 1., texture(diffuse_tex, tex_coords).r); } \ No newline at end of file diff --git a/shaders/text.frag.spv b/shaders/text.frag.spv index 95731df..53ed97b 100644 Binary files a/shaders/text.frag.spv and b/shaders/text.frag.spv differ diff --git a/shaders/text.vert b/shaders/text.vert index e934562..f358b1b 100644 --- a/shaders/text.vert +++ b/shaders/text.vert @@ -25,8 +25,15 @@ out gl_PerVertex { }; void main() { + mat4 invert = mat4( + 1., 0., 0., 0., + 0., -1., 0., 0., + 0., 0., 1., 0., + 0., 0., 0., 1. + ); + // Vertex position in camera - gl_Position = ubo.projection * ubo.view * push.model * vec4(position, 1.0); + gl_Position = ubo.projection * ubo.view * invert * push.model * vec4(position, 1.0); // Just interpolate UV coords, no transformation needed tex_coords = uv; diff --git a/shaders/text.vert.spv b/shaders/text.vert.spv index bf50b6d..b925dcd 100644 Binary files a/shaders/text.vert.spv and b/shaders/text.vert.spv differ diff --git a/src/game/level.rs b/src/game/level.rs index f0a8644..3b9948b 100644 --- a/src/game/level.rs +++ b/src/game/level.rs @@ -60,14 +60,15 @@ pub fn save_level(path: &str, game: &mut TestGame, renderer: &mut VulkanRenderer } }).collect(); - let objects = game.game_objects.iter().map(|game_object_handle| { + let objects = game.game_objects.iter().filter_map(|game_object_handle| { let game_object = game_object_handle.get_game_object(renderer).unwrap(); - ObjectJson { + if game_object.pipeline_index != 0 { return None; } + Some(ObjectJson { mesh_index: Some(game_object_handle.object_index), position: game_object.position.into(), rotation: game_object.rotation.into(), scale: game_object.scale.into() - } + }) }).collect(); let player = ObjectJson { diff --git a/src/game/mod.rs b/src/game/mod.rs index 8b089e8..9aa664b 100644 --- a/src/game/mod.rs +++ b/src/game/mod.rs @@ -3,6 +3,7 @@ use cgmath::{Deg, Euler, Quaternion, vec3}; use glyph_brush::{BrushAction, BrushError, GlyphBrushBuilder, Section, Text}; use glyph_brush::ab_glyph::FontArc; use vulkano::format::Format; +use vulkano::sampler::Filter; use winit::event::Event; use level::{load_level, save_level}; @@ -121,7 +122,7 @@ impl TestGame { let mut glyph_brush = GlyphBrushBuilder::using_font(font).build(); glyph_brush.queue(Section::default().add_text(Text::new("penis lol"))); match glyph_brush.process_queued(|rect, text_data| { - renderer.upload_texture(text_data, rect.width(), rect.height(), Format::R8Unorm, renderer.device.clone()); + renderer.upload_texture(text_data, rect.width(), rect.height(), Format::R8Unorm, Filter::Nearest, renderer.device.clone()); self.texture_index_counter += 1; }, |vertex_data| { println!("vd: {:?}", vertex_data); diff --git a/src/vulkan/dds.rs b/src/vulkan/dds.rs index 3f745a9..4354483 100644 --- a/src/vulkan/dds.rs +++ b/src/vulkan/dds.rs @@ -1,6 +1,6 @@ use std::{convert::TryInto, io::Read}; -use vulkano::format::Format; +use vulkano::{format::Format, sampler::Filter}; use super::VulkanRenderer; @@ -26,14 +26,14 @@ pub fn upload_texture_from_file(path: &str, renderer: &mut VulkanRenderer) -> Re if is_dxt1 { - renderer.upload_texture(&tex_bytes[128..], tex_width, tex_height, Format::BC1_RGBUnormBlock, renderer.device.clone()); + renderer.upload_texture(&tex_bytes[128..], tex_width, tex_height, Format::BC1_RGBUnormBlock, Filter::Linear, renderer.device.clone()); } if is_dx10 { let dxgi_type = u32::from_ne_bytes(tex_bytes[128..132].try_into()?); assert!(dxgi_type == 83); // BC5 Unorm Typeless - renderer.upload_texture(&tex_bytes[128+20..], tex_width, tex_height, Format::BC5UnormBlock, renderer.device.clone()); + renderer.upload_texture(&tex_bytes[128+20..], tex_width, tex_height, Format::BC5UnormBlock, Filter::Linear, renderer.device.clone()); } Ok(()) diff --git a/src/vulkan/mod.rs b/src/vulkan/mod.rs index 611ce65..32d213f 100644 --- a/src/vulkan/mod.rs +++ b/src/vulkan/mod.rs @@ -155,6 +155,7 @@ impl VulkanRenderer { ext_debug_utils: true, ..vulkano_win::required_extensions() }; + println!("Using extensions: {:?}", extensions); let app_info = ApplicationInfo { application_name: Some("Asuro's Editor".into()), @@ -454,7 +455,7 @@ impl VulkanRenderer { } } - pub fn upload_texture(self: &mut Self, bytes: &[u8], width: u32, height: u32, format: Format, device: Arc) { + pub fn upload_texture(self: &mut Self, bytes: &[u8], width: u32, height: u32, format: Format, filter: Filter, device: Arc) { let dimensions = Dimensions::Dim2d { width, height }; let usage = ImageUsage { @@ -538,7 +539,7 @@ impl VulkanRenderer { future.flush().unwrap(); - let sampler = Sampler::new(device.clone(), Filter::Linear, Filter::Linear, + let sampler = Sampler::new(device.clone(), filter, filter, MipmapMode::Linear, SamplerAddressMode::Repeat, SamplerAddressMode::Repeat, SamplerAddressMode::Repeat, 0.0, 1.0, 0.0, (image_view.mipmap_levels() - 1) as f32).unwrap(); diff --git a/src/vulkan/pipelines.rs b/src/vulkan/pipelines.rs index 94b4878..66fb3f0 100644 --- a/src/vulkan/pipelines.rs +++ b/src/vulkan/pipelines.rs @@ -142,8 +142,6 @@ impl Drawcall for DefaultShader { let mesh = &game_data.meshes[game_object.mesh_index]; let push_constants = game_object.get_push_constants(); - println!("default: {:?}", game_object.mesh_index); - builder.draw_indexed( self.pipeline.clone(), dynamic_state, @@ -328,11 +326,9 @@ impl Drawcall for TextShader { fn draw(self: &Self, builder: &mut AutoCommandBufferBuilder, fb_index: usize, game_objects: Vec<&GameObject>, game_data: &GameData, dynamic_state: &DynamicState) { for i in 0..game_objects.len() { let game_object = &game_objects[i]; - let mesh = &game_data.meshes[game_object.mesh_index]; + let mesh = &game_data.meshes_text[game_object.mesh_index]; let push_constants = game_object.get_push_constants(); - println!("text: {:?}", game_object.mesh_index); - builder.draw_indexed( self.pipeline.clone(), dynamic_state,