#import bevy_pbr::mesh_types #import bevy_pbr::mesh_view_bindings [[group(1), binding(0)]] var mesh: Mesh; #ifdef SKINNED [[group(1), binding(1)]] var joint_matrices: SkinnedMesh; #import bevy_pbr::skinning #endif // NOTE: Bindings must come before functions that use them! #import bevy_pbr::mesh_functions struct Vertex { [[location(0)]] position: vec3; #ifdef SKINNED [[location(4)]] joint_indexes: vec4; [[location(5)]] joint_weights: vec4; #endif }; struct VertexOutput { [[builtin(position)]] clip_position: vec4; }; [[stage(vertex)]] fn vertex(vertex: Vertex) -> VertexOutput { #ifdef SKINNED let model = skin_model(vertex.joint_indexes, vertex.joint_weights); #else let model = mesh.model; #endif var out: VertexOutput; out.clip_position = mesh_position_local_to_clip(model, vec4(vertex.position, 1.0)); return out; } [[stage(fragment)]] fn fragment() -> [[location(0)]] vec4 { return vec4(1.0, 1.0, 1.0, 1.0); }