From c619f945a3c857c46f2d55da36fab03c2ea35db2 Mon Sep 17 00:00:00 2001 From: Asuro Date: Wed, 11 Aug 2021 20:00:46 +0200 Subject: [PATCH] idk wip --- Cargo.toml | 1 + config/log.toml | 4 +-- models/OverpassRegular.ttf | Bin 0 -> 107060 bytes src/game/level.rs | 4 +-- src/game/mod.rs | 65 ++++++++++++++++++++++++++++++++----- src/game/player.rs | 4 +-- src/vulkan/gameobject.rs | 2 +- src/vulkan/mod.rs | 51 +++++++++++++++++------------ src/vulkan/pipelines.rs | 2 +- 9 files changed, 96 insertions(+), 37 deletions(-) create mode 100644 models/OverpassRegular.ttf diff --git a/Cargo.toml b/Cargo.toml index 409ed65..690cfb0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,7 @@ serde_derive = "1.0.114" toml = "0.5.6" gilrs = "0.7.4" gltf = "0.15.2" +glyph_brush = "0.7" [[bin]] name = "converter" diff --git a/config/log.toml b/config/log.toml index ff52a44..e28c9f3 100644 --- a/config/log.toml +++ b/config/log.toml @@ -1,5 +1,5 @@ -vulkan_validation_layers = false -mesh_load_info = false +vulkan_validation_layers = true +mesh_load_info = true [input] mouse_motion = false diff --git a/models/OverpassRegular.ttf b/models/OverpassRegular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..43169d20cccdd00f91e18259ae79f6ba8bdb878d GIT binary patch literal 107060 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 Result<(), Box> { - let meshes = renderer.game_data.meshes.iter().map(|mesh| { + let meshes = renderer.game_data.meshes.iter().filter(|m| m.original_path.is_some()).map(|mesh| { MeshJson { - path: mesh.original_path.to_string() + path: mesh.original_path.clone().unwrap() } }).collect(); diff --git a/src/game/mod.rs b/src/game/mod.rs index ba1719d..5b9f868 100644 --- a/src/game/mod.rs +++ b/src/game/mod.rs @@ -1,7 +1,8 @@ - use std::time::SystemTime; - 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 winit::event::Event; use level::{load_level, save_level}; @@ -9,9 +10,9 @@ use player::Player; use crate::{config::LogConfig, vulkan}; use crate::input::InputState; -use crate::vulkan::{Game, MeshHandle, VulkanRenderer}; +use crate::vulkan::{Game, MeshHandle, TextureHandle, Vertex, VulkanRenderer}; use crate::vulkan::gameobject::{GameObject, GameObjectHandle, Updatable}; -use crate::vulkan::mesh; +use crate::vulkan::mesh::{self, CPUMesh}; use crate::vulkan::pipelines::vs::ty::ObjectUniformData; pub mod player; @@ -79,7 +80,6 @@ impl Game for TestGame { if !self.paused { self.player.update(frame_time, &self.input, renderer); } - // self.game_objects[1].get_game_object_mut(renderer).unwrap().rotation = Quaternion::from_angle_y(Deg(time * -20.)).normalize(); // End frame self.last_time = time; @@ -116,6 +116,55 @@ impl TestGame { pub fn game_start(self: &mut Self, renderer: &mut VulkanRenderer) { load_level("levels/test.lvl", self, renderer).unwrap(); println!("Game loaded!"); + + let font = FontArc::try_from_slice(include_bytes!("../../models/OverpassRegular.ttf")).unwrap(); + let mut glyph_brush = GlyphBrushBuilder::using_font(font).build(); + glyph_brush.queue(Section::default().add_text(Text::new("rRRRRRRRRRRRRRr"))); + match glyph_brush.process_queued(|rect, text_data| { + renderer.upload_texture(text_data, rect.width(), rect.height(), Format::R8Srgb, renderer.device.clone()); + self.texture_index_counter += 1; + }, |vertex_data| { + vec![ + Vertex { position: [vertex_data.pixel_coords.min.x, vertex_data.pixel_coords.min.y, 0.], uv: [vertex_data.tex_coords.min.x, vertex_data.tex_coords.min.y], normal: [0., 0., 1.], ..Default::default() }, + Vertex { position: [vertex_data.pixel_coords.min.x, vertex_data.pixel_coords.max.y, 0.], uv: [vertex_data.tex_coords.min.x, vertex_data.tex_coords.max.y], normal: [0., 0., 1.], ..Default::default() }, + ] + }) { + Ok(BrushAction::Draw(quads)) => { + let mut final_vertices = vec![]; + let mut final_indices = vec![]; + let mut height = 0.2; + let mut index_offset = 2; + final_vertices.push(Vertex { position: [0., 0., 0.], uv: [0., 0.], normal: [0., 0., 1.], ..Default::default() }); + final_vertices.push(Vertex { position: [0., height, 0.], uv: [0., 1.], normal: [0., 0., 1.], ..Default::default() }); + for quad in quads { + final_vertices.append(&mut quad.clone()); + final_indices.append(&mut [0, 2, 3, 0, 3, 1].iter().map(|x| *x + index_offset - 2).collect()); + index_offset += quad.len() as u32; + } + println!("v: {:?}", final_vertices); + println!("i: {:?}", final_indices); + let mesh = CPUMesh { + vertices: final_vertices, + indices: final_indices, + local_texture_index: Some(self.texture_index_counter - 1), + local_normal_map_index: None, + name: Some("font_texture".to_string()), + }; + let mesh_index = renderer.upload_mesh(mesh, None); + let mesh_handle = MeshHandle { + index: mesh_index, + diffuse_handle: self.texture_index_counter - 1, + normal_handle: None, + original_path: None, + }; + let mut game_object_handle = self.add_game_object(renderer, mesh_handle); + game_object_handle.get_game_object_mut(renderer).unwrap().scale = vec3(10., 10., 10.); + self.game_objects.push(game_object_handle); + }, + Ok(BrushAction::ReDraw) => {}, + Err(BrushError::TextureTooSmall { suggested: _ }) => { println!("texture too small!"); }, + } + } pub fn offset_texture_id(&mut self, local_tex_id: Option) -> usize { @@ -137,12 +186,12 @@ impl TestGame { let normal_id = self.offset_texture_id(cpu_mesh.local_normal_map_index); // Upload mesh - let mesh_id = renderer.upload_mesh(cpu_mesh, gltf_path.to_string()); + let mesh_id = renderer.upload_mesh(cpu_mesh, Some(gltf_path.to_string())); let mesh_handle = MeshHandle { index: mesh_id, diffuse_handle: diffuse_id, - normal_handle: normal_id, - original_path: gltf_path.to_string() + normal_handle: Some(normal_id), + original_path: Some(gltf_path.to_string()) }; mesh_handles.push(mesh_handle); } diff --git a/src/game/player.rs b/src/game/player.rs index 217a3dd..87ea9e1 100644 --- a/src/game/player.rs +++ b/src/game/player.rs @@ -83,7 +83,7 @@ impl Camera { self.rotation.invert().rotate_vector(vec) } - pub fn world_to_local(&self, vec:Vector3) -> Vector3 { + pub fn _world_to_local(&self, vec:Vector3) -> Vector3 { self.rotation.rotate_vector(vec) } } @@ -185,7 +185,7 @@ impl Updatable for Player { let ray_direction = self.camera.viewport_pos_to_ray_direction(input.mouse_position, renderer.game_data.dimensions).unwrap(); for game_object in &mut renderer.game_data.game_objects { let mesh = &renderer.game_data.meshes[game_object.mesh_index]; - if let Some(dist) = intersection_distance(self.camera.position, ray_direction, mesh, game_object) { + if let Some(_) = intersection_distance(self.camera.position, ray_direction, mesh, game_object) { game_object.is_selected = !game_object.is_selected; } } diff --git a/src/vulkan/gameobject.rs b/src/vulkan/gameobject.rs index e90d061..77b21c0 100644 --- a/src/vulkan/gameobject.rs +++ b/src/vulkan/gameobject.rs @@ -23,7 +23,7 @@ pub struct GameObject { impl GameObject { pub fn new(mesh: MeshHandle) -> GameObject { - GameObject { mesh_index: mesh.index, texture_index: mesh.diffuse_handle, normal_map_index: mesh.normal_handle, position: Vector3::new(0.0, 0.0, 0.0), + GameObject { mesh_index: mesh.index, texture_index: mesh.diffuse_handle, normal_map_index: mesh.normal_handle.unwrap_or(0), position: Vector3::new(0.0, 0.0, 0.0), rotation: Quaternion::new(1.0, 0.0, 0.0, 0.0), scale: Vector3::new(1.0, 1.0, 1.0), children: vec![], descriptor_sets: vec![], is_selected: false } } diff --git a/src/vulkan/mod.rs b/src/vulkan/mod.rs index d522e46..003d2ec 100644 --- a/src/vulkan/mod.rs +++ b/src/vulkan/mod.rs @@ -3,7 +3,7 @@ use std::time::SystemTime; use cgmath::{Matrix4, SquareMatrix}; use dds::get_block_size; -use vulkano::{buffer::{BufferUsage, CpuAccessibleBuffer}, command_buffer::{CommandBuffer, SubpassContents}, image::{ImageLayout, ImageUsage, MipmapsCount, immutable::SubImage}}; +use vulkano::{buffer::{BufferUsage, CpuAccessibleBuffer}, command_buffer::{CommandBuffer, SubpassContents}, image::{ImageAccess, ImageLayout, ImageUsage, MipmapsCount, immutable::SubImage}}; use vulkano::command_buffer::{AutoCommandBuffer, AutoCommandBufferBuilder, DynamicState}; use vulkano::descriptor::DescriptorSet; use vulkano::device::{Device, DeviceExtensions, Queue}; @@ -23,7 +23,7 @@ use winit::event_loop::{ControlFlow, EventLoop}; use winit::window::{Window, WindowBuilder}; use mesh::CPUMesh; -use pipelines::{Drawcall, LineShader}; +use pipelines::{Drawcall}; use pipelines::line_vs::ty::LinePushConstants; use pipelines::DefaultShader; use pipelines::vs; @@ -69,15 +69,15 @@ pub trait Game { pub struct Mesh { pub vertex_buffer: Arc>, pub index_buffer: Arc>, - pub original_path: String, + pub original_path: Option, } #[derive(Debug, Clone)] pub struct MeshHandle { pub index: usize, pub diffuse_handle: TextureHandle, - pub normal_handle: TextureHandle, - pub original_path: String + pub normal_handle: Option, + pub original_path: Option } pub(crate) type TextureHandle = usize; @@ -411,7 +411,7 @@ impl VulkanRenderer { }; } - pub fn upload_mesh(self: &mut Self, mesh: CPUMesh, original_path: String) -> usize { + pub fn upload_mesh(self: &mut Self, mesh: CPUMesh, original_path: Option) -> usize { // let mut collision_mesh = mgf::Mesh::new(); // mesh.vertices.iter().for_each(|v| { // collision_mesh.push_vert(v.position.into()); @@ -438,12 +438,13 @@ impl VulkanRenderer { }; let layout = ImageLayout::ShaderReadOnlyOptimal; + let mip_maps = if format == Format::R8Srgb { MipmapsCount::One } else { MipmapsCount::Log2 }; let (image_view, initializer) = ImmutableImage::uninitialized( device.clone(), dimensions, format, - MipmapsCount::Log2, + mip_maps, usage, layout, device.active_queue_families(), @@ -462,21 +463,14 @@ impl VulkanRenderer { let mut offset = 0; - let block_bytes = get_block_size(format).expect(&format!("Unknown texture format {:?}!", format)); - - for i in 0..image_view.mipmap_levels() { - let mip_size = dimensions.to_image_dimensions().mipmap_dimensions(i).unwrap().width_height_depth(); - - let mip_byte_size = ( - (u32::max(4, mip_size[0]) / 4) - * (u32::max(4, mip_size[1]) / 4) - * block_bytes) as usize; + let block_bytes = get_block_size(format); + let mut upload_bytes = |data: &[u8], mip_index: u32, mip_size: [u32; 3]| { let source = CpuAccessibleBuffer::from_iter( device.clone(), BufferUsage::transfer_source(), false, - bytes[offset..(offset + mip_byte_size)].iter().cloned(), + data.iter().cloned(), ).unwrap(); cbb.copy_buffer_to_image_dimensions( @@ -486,11 +480,26 @@ impl VulkanRenderer { mip_size, 0, dimensions.array_layers_with_cube(), - i, - ) - .unwrap(); + mip_index, + ).unwrap(); + }; - offset += mip_byte_size; + if let Some(block_byte_size) = block_bytes { + for i in 0..image_view.mipmap_levels() { + + let mip_size = dimensions.to_image_dimensions().mipmap_dimensions(i).unwrap().width_height_depth(); + + let mip_byte_size = ( + (u32::max(4, mip_size[0]) / 4) + * (u32::max(4, mip_size[1]) / 4) + * block_byte_size) as usize; + + let data = &bytes[offset..(offset + mip_byte_size)]; + upload_bytes(data, i, mip_size); + offset += mip_byte_size; + } + } else { + upload_bytes(bytes, 0, dimensions.to_image_dimensions().width_height_depth()); } let cb = cbb.build().unwrap(); diff --git a/src/vulkan/pipelines.rs b/src/vulkan/pipelines.rs index c9628ab..0271aeb 100644 --- a/src/vulkan/pipelines.rs +++ b/src/vulkan/pipelines.rs @@ -204,7 +204,7 @@ pub struct LineShader { } impl LineShader { - pub fn new(device: Arc, render_pass: RP, vertex_buffer: Arc>) -> Self { + pub fn _new(device: Arc, render_pass: RP, vertex_buffer: Arc>) -> Self { LineShader { pipeline: Self::create_pipeline(device, render_pass), vertex_buffer