examples(shaders/glsl): Update GLSL Shader Example Camera View uniform (#15865)

# Objective
The Custom Material GLSL shader example has an old version of the camera
view uniform structure.
This PR updates the example GLSL custom material shader to have the
latest structure.


## Solution

I was running into issues using the camera world position (it wasn't
changing) and someone in discord pointed me to the source of truth.
  `crates/bevy_render/src/view/view.wgsl`

After using this latest uniform structure in my project I'm now able to
work with the camera position in my shader.

## Testing
I tested this change by running the example with:
```bash
cargo run --features shader_format_glsl --example shader_material_glsl
```
<img width="1392" alt="image"
src="https://github.com/user-attachments/assets/39fc82ec-ff3b-4864-ad73-05f3a25db483">

---------

Co-authored-by: Carter Anderson <mcanders1@gmail.com>
This commit is contained in:
Jake Swenson 2024-10-18 18:08:55 -07:00 committed by GitHub
parent c65f2920bb
commit 16b39c2b36
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -7,14 +7,16 @@ layout(location = 2) in vec2 Vertex_Uv;
layout(location = 0) out vec2 v_Uv; layout(location = 0) out vec2 v_Uv;
layout(set = 0, binding = 0) uniform CameraViewProj { layout(set = 0, binding = 0) uniform CameraViewProj {
mat4 ViewProj; mat4 clip_from_world;
mat4 View; // Other attributes exist that can be described here.
mat4 InverseView; // See full definition in: crates/bevy_render/src/view/view.wgsl
mat4 Projection; // Attributes added here must be in the same order as they are defined
vec3 WorldPosition; // in view.wgsl, and they must be contiguous starting from the top to
float width; // ensure they have the same layout.
float height; //
}; // Needing to maintain this mapping yourself is one of the harder parts of using
// GLSL with Bevy. WGSL provides a much better user experience!
} camera_view;
struct Mesh { struct Mesh {
mat3x4 Model; mat3x4 Model;
@ -41,7 +43,7 @@ mat4 affine_to_square(mat3x4 affine) {
void main() { void main() {
v_Uv = Vertex_Uv; v_Uv = Vertex_Uv;
gl_Position = ViewProj gl_Position = camera_view.clip_from_world
* affine_to_square(Meshes[gl_InstanceIndex].Model) * affine_to_square(Meshes[gl_InstanceIndex].Model)
* vec4(Vertex_Position, 1.0); * vec4(Vertex_Position, 1.0);
} }