Skip to content

Commit 76159b5

Browse files
WIP: View, globals individual shaders
Signed-off-by: Torstein Grindvik <[email protected]>
1 parent 1878b68 commit 76159b5

File tree

9 files changed

+38
-68
lines changed

9 files changed

+38
-68
lines changed

crates/bevy_pbr/src/render/mesh.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ pub const MESH_VERTEX_OUTPUT: HandleUntyped =
4747
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 2645551199423808407);
4848
pub const MESH_VIEW_TYPES_HANDLE: HandleUntyped =
4949
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 8140454348013264787);
50-
pub const GLOBALS_HANDLE: HandleUntyped =
51-
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 17924628719070609599);
5250
pub const MESH_VIEW_BINDINGS_HANDLE: HandleUntyped =
5351
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 9076678235888822571);
5452
pub const MESH_TYPES_HANDLE: HandleUntyped =
@@ -76,7 +74,6 @@ impl Plugin for MeshRenderPlugin {
7674
"mesh_view_types.wgsl",
7775
Shader::from_wgsl
7876
);
79-
load_internal_asset!(app, GLOBALS_HANDLE, "globals.wgsl", Shader::from_wgsl);
8077
load_internal_asset!(
8178
app,
8279
MESH_VIEW_BINDINGS_HANDLE,

crates/bevy_pbr/src/render/mesh_view_types.wgsl

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,7 @@
11
#define_import_path bevy_pbr::mesh_view_types
2-
#import bevy_pbr::globals
32

4-
struct View {
5-
view_proj: mat4x4<f32>,
6-
inverse_view_proj: mat4x4<f32>,
7-
view: mat4x4<f32>,
8-
inverse_view: mat4x4<f32>,
9-
projection: mat4x4<f32>,
10-
inverse_projection: mat4x4<f32>,
11-
world_position: vec3<f32>,
12-
// viewport(x_origin, y_origin, width, height)
13-
viewport: vec4<f32>,
14-
};
3+
#import bevy_render::view
4+
#import bevy_render::globals
155

166
struct PointLight {
177
// For point lights: the lower-right 2x2 values of the projection matrix [2][2] [2][3] [3][2] [3][3]

crates/bevy_render/src/globals.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
11
use crate::{
22
extract_resource::ExtractResource,
3+
prelude::Shader,
34
render_resource::{ShaderType, UniformBuffer},
45
renderer::{RenderDevice, RenderQueue},
56
Extract, RenderApp, RenderStage,
67
};
78
use bevy_app::{App, Plugin};
9+
use bevy_asset::{load_internal_asset, HandleUntyped};
810
use bevy_core::FrameCount;
911
use bevy_ecs::prelude::*;
10-
use bevy_reflect::Reflect;
12+
use bevy_reflect::{Reflect, TypeUuid};
1113
use bevy_time::Time;
1214

15+
pub const GLOBALS_TYPE_HANDLE: HandleUntyped =
16+
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 17924628719070609599);
17+
1318
pub struct GlobalsPlugin;
1419

1520
impl Plugin for GlobalsPlugin {
1621
fn build(&self, app: &mut App) {
22+
load_internal_asset!(app, GLOBALS_TYPE_HANDLE, "globals.wgsl", Shader::from_wgsl);
1723
app.register_type::<GlobalsUniform>();
24+
1825
if let Ok(render_app) = app.get_sub_app_mut(RenderApp) {
1926
render_app
2027
.init_resource::<GlobalsBuffer>()

crates/bevy_pbr/src/render/globals.wgsl renamed to crates/bevy_render/src/globals.wgsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#define_import_path bevy_pbr::globals
1+
#define_import_path bevy_render::globals
22

33
struct Globals {
44
// The time since startup in seconds
@@ -13,4 +13,4 @@ struct Globals {
1313
// WebGL2 structs must be 16 byte aligned.
1414
_wasm_padding: f32
1515
#endif
16-
}
16+
};

crates/bevy_render/src/view/mod.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
pub mod visibility;
22
pub mod window;
33

4+
use bevy_asset::{load_internal_asset, HandleUntyped};
45
pub use visibility::*;
56
pub use window::*;
67

78
use crate::{
89
camera::ExtractedCamera,
910
extract_resource::{ExtractResource, ExtractResourcePlugin},
10-
prelude::Image,
11+
prelude::{Image, Shader},
1112
render_asset::RenderAssets,
1213
render_phase::ViewRangefinder3d,
1314
render_resource::{DynamicUniformBuffer, ShaderType, Texture, TextureView},
@@ -18,7 +19,7 @@ use crate::{
1819
use bevy_app::{App, Plugin};
1920
use bevy_ecs::prelude::*;
2021
use bevy_math::{Mat4, UVec4, Vec3, Vec4};
21-
use bevy_reflect::Reflect;
22+
use bevy_reflect::{Reflect, TypeUuid};
2223
use bevy_transform::components::GlobalTransform;
2324
use bevy_utils::HashMap;
2425
use std::sync::atomic::{AtomicUsize, Ordering};
@@ -27,10 +28,15 @@ use wgpu::{
2728
TextureFormat, TextureUsages,
2829
};
2930

31+
pub const VIEW_TYPE_HANDLE: HandleUntyped =
32+
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 15421373904451797197);
33+
3034
pub struct ViewPlugin;
3135

3236
impl Plugin for ViewPlugin {
3337
fn build(&self, app: &mut App) {
38+
load_internal_asset!(app, VIEW_TYPE_HANDLE, "view.wgsl", Shader::from_wgsl);
39+
3440
app.register_type::<ComputedVisibility>()
3541
.register_type::<ComputedVisibilityFlags>()
3642
.register_type::<Msaa>()

crates/bevy_render/src/view/view.wgsl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#define_import_path bevy_render::view
2+
3+
struct View {
4+
view_proj: mat4x4<f32>,
5+
inverse_view_proj: mat4x4<f32>,
6+
view: mat4x4<f32>,
7+
inverse_view: mat4x4<f32>,
8+
projection: mat4x4<f32>,
9+
inverse_projection: mat4x4<f32>,
10+
world_position: vec3<f32>,
11+
// viewport(x_origin, y_origin, width, height)
12+
viewport: vec4<f32>,
13+
};
Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,4 @@
11
#define_import_path bevy_sprite::mesh2d_view_types
22

3-
struct View {
4-
view_proj: mat4x4<f32>,
5-
inverse_view_proj: mat4x4<f32>,
6-
view: mat4x4<f32>,
7-
inverse_view: mat4x4<f32>,
8-
projection: mat4x4<f32>,
9-
inverse_projection: mat4x4<f32>,
10-
world_position: vec3<f32>,
11-
// viewport(x_origin, y_origin, width, height)
12-
viewport: vec4<f32>,
13-
};
14-
15-
struct Globals {
16-
// The time since startup in seconds
17-
// Wraps to 0 after 1 hour.
18-
time: f32,
19-
// The delta time since the previous frame in seconds
20-
delta_time: f32,
21-
// Frame count since the start of the app.
22-
// It wraps to zero when it reaches the maximum value of a u32.
23-
frame_count: u32,
24-
#ifdef SIXTEEN_BYTE_ALIGNMENT
25-
// WebGL2 structs must be 16 byte aligned.
26-
_wasm_padding: f32
27-
#endif
28-
}
3+
#import bevy_render::view
4+
#import bevy_render::globals

crates/bevy_sprite/src/render/sprite.wgsl

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,7 @@
22
#import bevy_core_pipeline::tonemapping
33
#endif
44

5-
struct View {
6-
view_proj: mat4x4<f32>,
7-
inverse_view_proj: mat4x4<f32>,
8-
view: mat4x4<f32>,
9-
inverse_view: mat4x4<f32>,
10-
projection: mat4x4<f32>,
11-
inverse_projection: mat4x4<f32>,
12-
world_position: vec3<f32>,
13-
// viewport(x_origin, y_origin, width, height)
14-
viewport: vec4<f32>,
15-
};
5+
#import bevy_render::view
166
@group(0) @binding(0)
177
var<uniform> view: View;
188

crates/bevy_ui/src/render/ui.wgsl

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
1-
struct View {
2-
view_proj: mat4x4<f32>,
3-
inverse_view_proj: mat4x4<f32>,
4-
view: mat4x4<f32>,
5-
inverse_view: mat4x4<f32>,
6-
projection: mat4x4<f32>,
7-
inverse_projection: mat4x4<f32>,
8-
world_position: vec3<f32>,
9-
// viewport(x_origin, y_origin, width, height)
10-
viewport: vec4<f32>,
11-
};
1+
#import bevy_render::view
2+
123
@group(0) @binding(0)
134
var<uniform> view: View;
145

0 commit comments

Comments
 (0)