From fb045f210a31ec28ac502b54f736d1318f4d7432 Mon Sep 17 00:00:00 2001 From: Asuro Date: Sun, 15 Aug 2021 23:29:25 +0200 Subject: [PATCH] text almost works --- levels/test.lvl | 16 ++++++++-------- shaders/text.frag | 3 +-- shaders/text.frag.spv | Bin 1296 -> 1400 bytes shaders/text.vert | 9 ++++++++- shaders/text.vert.spv | Bin 1796 -> 2064 bytes src/game/level.rs | 7 ++++--- src/game/mod.rs | 3 ++- src/vulkan/dds.rs | 6 +++--- src/vulkan/mod.rs | 5 +++-- src/vulkan/pipelines.rs | 6 +----- 10 files changed, 30 insertions(+), 25 deletions(-) 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 95731df5fc6e7b15344850a29e8165abd829dc3e..53ed97bcb5b1d18314aa21d3f179c6a468f2148b 100644 GIT binary patch literal 1400 zcmZQ(Qf6mhU}WH8;9yW>fB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!NxG%g%D~D1GB>}pBtAJmC%=dRq=uD& zkAZ<9B{MCpv^X`sB(;J8qz+_vNoqxWa(;eM3fL?*1}O#xhJe!I4Cnm3;*!KXkQEGU z46I;rkehS!Q&MxlX0kBIFfcF_lon@z#90~G8RQrk82rHw3(d<+%P-1xNi0cZU;yg} z$$`|BWu}&cXf_5muzFDV6%^%ze3O}X;MCe zI|Bd@&G*fq_ASfrUYm0pb^s|Ku1T=>Q}K zGFzH~0h}H|`4VI{h!4tlApe5gA`A5!$nSCt9N>5a=>=hs8$t3g3^Gri0TRZb_yL&* z;)CJ?!@j?C-hL&OB44@K#fkA|U zfdQljBp%4X3XThL28cMw%m4;=>BAeg(<>Wng5mU|?hb0FrWT Aga7~l literal 1296 zcmZQ(Qf6mhU}WH8;9!tufB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!NxG%g%D~D1GB>}pBtAJmC%=dRq=t=w zmw|yHptLx{IX|zsBry-9m4S_c6)X;NOKyHjY7ST}3j;p`14BV+aRx}7m4Tf>kb!~0 zA8cW0US?W;QLam3Ng@LSSU*S(q^>M8wH!pVF|dKvgTketC?Dj?%=|orT9DsLGILWQ zY9VHWLMbORJ)QAaW_0MXAXk$;6!aqWqFX5EEoB#0*vj28QIs z+|;5(gdwa9%nZT|3=E}7`3#_N5ocgvNXbk~D=kiqFG;Nci-E$wB()+wIX}NBrI>-i zoq+`$esUlOGB7ZBFtEVG2xNx`QkW^j)gZzV6o&!~Aaj_(`au2#nE?wYm>DoWvKcTj zm>DpAps+;N2jYYDIe^{A3Jxcb7(yRJ3}iP*T?3LjP*{V+CLoD{!WbmB07(pFA4qHi z)Gr{nfy@Ji4=7BPpniw(6_NO$a7LB~@j>z+H-glI!Wal1Mxv&4H5>qPXcNl$b67`Nd}17AaRg-5FZp5AoI-_SixZr h3I~vWke_}qFfoAAfgJ-gI2=G>_?Ll^!GeL20Ra7HXwLuu 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 bf50b6d632a48384a38540e8ebb4207e7fb9f92b..b925dcd2f414a392ece6423522549773b8eafd47 100644 GIT binary patch literal 2064 zcmZQ(Qf6mhU}WH8;9#(2fB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!N(z+l0^z+lC|z+l6`z`)GF%)rFJz;K9>fq{jAlfm65 z-Z982zBsiYu_&=5HNH3_F(tJqK0hfdHMyjifq|8Qg#p=25FcbyW?orpQ3*(%jX{`! zfgwF7J|MLyEVZa4wE|=}8v{ff#0JUb7iX4a=I1f6GB7iM+yxS6WngEJWME+M2U`}J zmzkDdlOo;rP?QgHA;?I$T9Cg=GILWQY9VHW zLMSIQJ)u7nn_85J zFa+ceX$A&{(xiL_Rt7c(RR#uzfYRa&=ls0llEgev(1G0r5(l{_H$NpchXE8`EDY)l z3=9RO#Tg)RRt8pZ93fl>Qo{<4vy#+`_~iWjq7-mEFoWZ;v-0EN2})ZH+?B9ssED=f@GW`O((6xfv8*AayW1K>0=vq!?^J3phTI z`Jns+;)DDRasw!Df%qW(!VFB{Jf;ZFZ46+x7y~l{8v_G_0s{ksI0Fj<$X*a1=O5I#s;n}G$a7ZSG(_AovV)O|V(>|njT;Ie{&0VEE?FtvPOwGI1W zYWW!;>OkT!wJ3}OJMO=|`g1`r=q9)Qw?C<6JPd>ElVX5`KPdfx>;v&Z=?4@~F!N;?KqW6IZde#(q3S{Af!q#C6CgIo zEHwrO22KVBa9#(Q1>%G9GDr+0uK|^Zsn>y;3vv%gJ%|rVS0KNE)SE!V0u(l&G+_qy z8^~=Sd2^^dNF1ae#0Qn-ps)hTTSCo;$%FWybO|yaq#k4+C|!d1W(=(0bO=gcpx^|V z@q>Yh0hC8TYC(PgmFpn4*fB7JYZFj>Ix?_=!vvJJLE#1pD_dxKm1h9O0Rsa}4Jd7c z)PUj(rUsNRLE@7bSixx=ly5=$K;keppnM6k8>U8ufq?;}4kQjT8x*dZ3=H6M6WMGn z1_lO@I82{50|Ns{FGw6@HYnWnpmks%xRhpK&}U#^0EvOZ044^iOhICxaDs^$Le+ud zA^@7dj2IyLLFz&BptL`c0aS}IFc>p1Fo5g_sR6ke6t|`f4B)yBWnf^?XJBA3WME)mW?*JuVqjo6#K^$F!obPk?i24A z%D}>aY$huM8v_Re14DXFd_ZbZSZYy8 zY6ZwHHmEp=4U)?*&Me8y&tqU^V1~L3WEMLEKLZ1UKiKflyv(%xqFk56l0*gu1~vv( zupCH#S!QZEhz6MnQV$A)f}(toi$F%g)q?y{l9`(dQ428}6e2m9=@}*Q1u!QturY9f z%?9}cBA1d`l$s23Ut&&tQGQ7xhzW87#0*vj28QIs+|;5(gdre*2r@7*lqTgffWknM zfq@~Qv^c{#Kd-nXF%J|}V0VGULGH=TPf5*T0Qs4PL7IVqp`f%l10>GMz{&uM6NKwP zYFNQ>RFYZ|pPZjxlmZTSW^kO9mVxA1z;TzCUzD4e!@%IdzzU87ka^r7f`Ng-oq-uF z1_~1o1{Sb?K~f;UfYgJ+5yV#p5eyJBU}EeH3=9HbF^E1;cq8ir@j?0=z-l1z1QJ8& zgNT9b2B~X6QU{6;kk|wyF;F~!#1ii?R1tYA3}1_lO@{U9|UH-q9v ri-7@L-h 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,