From a8f385630ddfd0f78b55c1a484250713db80b424 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Sat, 6 Apr 2024 00:14:00 -0400 Subject: [PATCH] shader testing --- engine/world_generation/src/mesh_generator.rs | 15 ++------ game/main/assets/textures/world/stack.png | Bin 0 -> 3431 bytes game/main/src/phos.rs | 33 +++++++++++++----- 3 files changed, 28 insertions(+), 20 deletions(-) create mode 100644 game/main/assets/textures/world/stack.png diff --git a/engine/world_generation/src/mesh_generator.rs b/engine/world_generation/src/mesh_generator.rs index 5daa750..310d8dd 100644 --- a/engine/world_generation/src/mesh_generator.rs +++ b/engine/world_generation/src/mesh_generator.rs @@ -74,7 +74,7 @@ fn create_tile( let y_min = tex_y as f32 / 8.; const TX_UNIT: Vec2 = Vec2::new(1. / 11., 1. / 8.); - let uv_offset = Vec2::new(x_min + TX_UNIT.x / 2., y_min + TX_UNIT.y / 2.); + let uv_offset = Vec2::splat(0.5); let idx = verts.len() as u32; uvs.push(uv_offset); @@ -82,7 +82,7 @@ fn create_tile( for i in 0..6 { let p = pos + HEX_CORNERS[i]; verts.push(p); - let uv = (HEX_CORNERS[i].xz() * TX_UNIT / 2.) + uv_offset; + let uv = (HEX_CORNERS[i].xz() / 2.) + uv_offset; uvs.push(uv); indices.push(idx); indices.push(idx + 1 + i as u32); @@ -94,16 +94,7 @@ fn create_tile( match cur_n { Some(n_height) => { if n_height < pos.y { - create_tile_wall( - pos, - i, - n_height, - verts, - uvs, - indices, - Vec2::new(x_min, y_min), - Vec2::new(x_min + TX_UNIT.x, y_min + TX_UNIT.y), - ); + create_tile_wall(pos, i, n_height, verts, uvs, indices, Vec2::ZERO, Vec2::ONE); } } _ => {} diff --git a/game/main/assets/textures/world/stack.png b/game/main/assets/textures/world/stack.png new file mode 100644 index 0000000000000000000000000000000000000000..daf958915fd168053a232a2105fa226a87653ca6 GIT binary patch literal 3431 zcmbVP30M=?7LM>Jo5g2^szuru#DZk95kfMRJ*zg|)&-QiuUcTg;JNN$god2BjpYwgm z4-XA^-Qq0^8jbdPP@p)1d~#^CN#SNjkt9N^ac7WJM`MsHC(J6;V|gMo#?C~PY%YrfVxoW;I)PJaRjHJ73}xe~ zxExn#)FhTWfmNmu8bX~y{DJ9-<6k)-b1RWd`1oBea`}V{wZ<=<3}Y-Izl&B!WhrrX z1g<8uDirriCu!P)Xq2$83P&`ADvBUd$14>+PMOZ*vG{by1u_LjWT>59xqyoi4erh$ zt47v~{BomsE-;@g9G85BIh;|bgurCdtlvOgqqstt$A|g9hLW1W5DoH|U<`$&gi4N( z0n6k_GR{^ik{R@gG{U|_Dxo4Blk8kx-4F8h4ObCTSt@y;jtKCf2l@F5xFUf7;<30C zU5Nw^Qm8eE0>y*G?hGlq3+2 z-xm|87DxcxA8iMWKuH__r6=OKa#21Pfp~Zl21%uS9)uuCE|8SV6A4@eLY#aVw-%<7 zksXPozG@Y)!bporZd^AvDUSmQ5d?z}4qpI?a90fCp&X%5m?RXq;jTdTl#<{;nVPI| z)>tD&;%Q^6R2iKT4~(FoDcl(-Py>!J#;|kKWiX7ACH#4|2nyGD&*gGn-ygxyb690kqj{F6-fn_Hg zp9W}_q?UPYIF{sOoq80jvb34%blk?TZ?5eS%f#(g^4*R?#wxSwJ>hjWA4hPT1On^G zd902jg&k`b0)6w}$VR-Rlh=dLw@Oqflu7NI}TO7ePYy-Gg6Pt_ z`TNr@Pc3DyOKhkdiTe8Gp|^c^|C5YxNfkbt+-0UU+v294c8qCm zIhF4Og8iBK)l7$~X8YLCe z=uOy1tB$=7*#h4W<9a^Y$Jb2$+4T0CK!|%D@BD|ric;E*vWz*!$NI}>SiiVdcz#Y# zcLBTOok4xxP7I}Fc6)otp@2&}JSyU!|CskvnzHwz@#@Dulk2h#=PJLX5LWM$x4u?U zRJNgJfQ==m2M4ol6ko;W4fu)@yZzT@e4o*x04Ekay_dWBOeP|dbvLZ1MATup^kHdy zL@4Co?Bqw!xia-C>TP`hfUnH+kG4`a z*eFf0sks;RzFXdn7ySX#deM>y&lW-O%E|tXktakTCndwY=gk+5geHbAcwohJkig-X z=x^vIMNod;70}0lt1*)UnkB9)le3)V{yU@Ng7`&4gKs(>bnFA2bo-E;P|22OCx<_6 zZLgi<-`6&WY1jgetV2%@FB6!(H?^oecll8>suq`;_9WixJe*c19QuHVKWEwIL=N;( zIeOM@Y2~kLEV!_DKvV_fcFUlvGcXM=q3i;nN-Y$*NocNX2nHG&Y<%(E#oFq9QBmAh zZP(~t&SIk$t2iHN?XH}&h2Tbi&3A-VX~Bi*l`+vrg1SxDQsQP6;8nG&k3H4JT;4FE z+TJ>)FG{~KU_(Bo+mNE5-P?x4)4p3A_PjYEM?WF#wF{~nj>;zJ<< zNqZ^Vvg_a@N*36MvWMDJM%^|JAb}kQ4>flAX7Pf@=bG{>rnF`G>tU+6ZdW5h7y4h_ z>db3iwd9A(PF=YwQpHC$OWr3VIc(*1cG;sdci~(RJl2YTd?B#&E6}c0&8pb<&qh$o!E=qf z3;rc>V4647$L9feB=^9uqQ#cZvd8zHtJ6AH#7;Bwb6snM+oiG$y3(8?U1@Nb9~iA$ zigcf8V_ZMp1%!~(6MVLQR$=hsXw4u{WJ^?+vuIDp2C)NG(Wd%FMTp(jR&NUf_$w6T7b-sBlep?X)Rkwq literal 0 HcmV?d00001 diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index f871d4b..f1422c0 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -1,4 +1,4 @@ -use bevy::pbr::MaterialExtension; +use bevy::pbr::{ExtendedMaterial, MaterialExtension}; use bevy::render::render_resource::{AsBindGroup, ShaderRef}; use bevy::{pbr::CascadeShadowConfig, prelude::*}; use camera_system::PhosCameraPlugin; @@ -47,11 +47,22 @@ fn init_game(mut commands: Commands) { }); } -fn load_textures(mut commands: Commands, asset_server: Res) { - let main_tex = asset_server.load("textures/world/test2.png"); +fn load_textures( + mut commands: Commands, + asset_server: Res, + mut images: ResMut>, +) { + let main_tex = asset_server.load("textures/world/stack.png"); commands.insert_resource(ChunkAtlas { handle: main_tex.clone(), }); + + //todo: wait for texture to load + let image = images.get_mut(&main_tex).unwrap(); + + // Create a new array texture asset from the loaded texture. + let array_layers = 7; + image.reinterpret_stacked_2d_as_array(array_layers); } fn draw_gizmos(mut gizmos: Gizmos, hm: Res) { @@ -84,9 +95,10 @@ fn draw_gizmos(mut gizmos: Gizmos, hm: Res) { } } +//todo: run after textures are ready fn create_map( mut commands: Commands, - mut materials: ResMut>, + mut materials: ResMut>>, mut meshes: ResMut>, atlas: Res, ) { @@ -150,15 +162,20 @@ fn create_map( 2, ); - let chunk_material = materials.add(StandardMaterial { - base_color_texture: Some(atlas.handle.clone()), - ..default() + let chunk_material = materials.add(ExtendedMaterial { + base: StandardMaterial { + base_color: Color::WHITE, + ..default() + }, + extension: ChunkMaterial { + array_texture: atlas.handle.clone(), + }, }); for chunk in &heightmap.chunks { let mesh = generate_chunk_mesh(&chunk, &heightmap); let pos = offset_to_world(chunk.chunk_offset * Chunk::SIZE as i32, 0.); - commands.spawn(PbrBundle { + commands.spawn(MaterialMeshBundle { mesh: meshes.add(mesh), material: chunk_material.clone(), transform: Transform::from_translation(pos),