Adds new `EntityRenderCommand`, `EntityPhaseItem`, and `CachedPipelinePhaseItem` traits to make it possible to reuse RenderCommands across phases. This should be helpful for features like #3072 . It also makes the trait impls slightly less generic-ey in the common cases. This also fixes the custom shader examples to account for the recent Frustum Culling and MSAA changes (the UX for these things will be improved later).
47 lines
944 B
WebGPU Shading Language
47 lines
944 B
WebGPU Shading Language
[[block]]
|
|
struct View {
|
|
view_proj: mat4x4<f32>;
|
|
projection: mat4x4<f32>;
|
|
world_position: vec3<f32>;
|
|
};
|
|
[[group(0), binding(0)]]
|
|
var<uniform> view: View;
|
|
|
|
[[block]]
|
|
struct Mesh {
|
|
transform: mat4x4<f32>;
|
|
};
|
|
[[group(1), binding(0)]]
|
|
var<uniform> mesh: Mesh;
|
|
|
|
struct Vertex {
|
|
[[location(0)]] position: vec3<f32>;
|
|
[[location(1)]] normal: vec3<f32>;
|
|
[[location(2)]] uv: vec2<f32>;
|
|
};
|
|
|
|
struct VertexOutput {
|
|
[[builtin(position)]] clip_position: vec4<f32>;
|
|
};
|
|
|
|
[[stage(vertex)]]
|
|
fn vertex(vertex: Vertex) -> VertexOutput {
|
|
let world_position = mesh.transform * vec4<f32>(vertex.position, 1.0);
|
|
|
|
var out: VertexOutput;
|
|
out.clip_position = view.view_proj * world_position;
|
|
return out;
|
|
}
|
|
|
|
[[block]]
|
|
struct CustomMaterial {
|
|
color: vec4<f32>;
|
|
};
|
|
[[group(2), binding(0)]]
|
|
var<uniform> material: CustomMaterial;
|
|
|
|
[[stage(fragment)]]
|
|
fn fragment() -> [[location(0)]] vec4<f32> {
|
|
return material.color;
|
|
}
|