diff --git a/crates/bevy_pbr/src/render/wireframe.wgsl b/crates/bevy_pbr/src/render/wireframe.wgsl index b1a39520d931c8..1ed01d23ef8908 100644 --- a/crates/bevy_pbr/src/render/wireframe.wgsl +++ b/crates/bevy_pbr/src/render/wireframe.wgsl @@ -1,6 +1,44 @@ +#import bevy_pbr::mesh_types +#import bevy_pbr::mesh_view_bindings + +@group(2) @binding(0) +var mesh: Mesh; + +#ifdef SKINNED +@group(2) @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, +}; + +@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; +} + @fragment -fn fragment( - #import bevy_pbr::mesh_vertex_output -) -> @location(0) vec4 { +fn fragment() -> @location(0) vec4 { return vec4(1.0, 1.0, 1.0, 1.0); } \ No newline at end of file diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index e1c6fc29d52a1b..170a58397abb2b 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -110,6 +110,10 @@ fn apply_global( struct WireframeMaterial {} impl Material for WireframeMaterial { + fn vertex_shader() -> ShaderRef { + WIREFRAME_SHADER_HANDLE.typed().into() + } + fn fragment_shader() -> ShaderRef { WIREFRAME_SHADER_HANDLE.typed().into() }