Remove Shader weak_handles from bevy_gizmos. (#19394)

# Objective

- Related to #19024

## Solution

- Use the new `load_shader_library` macro for the shader libraries and
`embedded_asset`/`load_embedded_asset` for the "shader binaries" in
`bevy_gizmos`.

## Testing

- `2d_gizmos` example still works.
- `3d_gizmos` example still works.

P.S. I don't think this needs a migration guide. Technically users could
be using the `pub` weak handles, but there's no actual good use for
them, so omitting it seems fine. Alternatively, we could mix this in
with the migration guide notes for #19137.
This commit is contained in:
andriyDev 2025-05-27 15:32:32 -07:00 committed by GitHub
parent 57588eb7eb
commit 846cec9ed2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 27 deletions

View File

@ -102,7 +102,7 @@ use crate::{config::ErasedGizmoConfigGroup, gizmos::GizmoBuffer};
#[cfg(feature = "bevy_render")] #[cfg(feature = "bevy_render")]
use { use {
crate::retained::extract_linegizmos, crate::retained::extract_linegizmos,
bevy_asset::{weak_handle, AssetId}, bevy_asset::AssetId,
bevy_ecs::{ bevy_ecs::{
component::Component, component::Component,
entity::Entity, entity::Entity,
@ -119,8 +119,8 @@ use {
render_phase::{PhaseItem, RenderCommand, RenderCommandResult, TrackedRenderPass}, render_phase::{PhaseItem, RenderCommand, RenderCommandResult, TrackedRenderPass},
render_resource::{ render_resource::{
binding_types::uniform_buffer, BindGroup, BindGroupEntries, BindGroupLayout, binding_types::uniform_buffer, BindGroup, BindGroupEntries, BindGroupLayout,
BindGroupLayoutEntries, Buffer, BufferInitDescriptor, BufferUsages, Shader, BindGroupLayoutEntries, Buffer, BufferInitDescriptor, BufferUsages, ShaderStages,
ShaderStages, ShaderType, VertexFormat, ShaderType, VertexFormat,
}, },
renderer::RenderDevice, renderer::RenderDevice,
sync_world::{MainEntity, TemporaryRenderEntity}, sync_world::{MainEntity, TemporaryRenderEntity},
@ -144,12 +144,6 @@ use gizmos::{GizmoStorage, Swap};
#[cfg(all(feature = "bevy_pbr", feature = "bevy_render"))] #[cfg(all(feature = "bevy_pbr", feature = "bevy_render"))]
use light::LightGizmoPlugin; use light::LightGizmoPlugin;
#[cfg(feature = "bevy_render")]
const LINE_SHADER_HANDLE: Handle<Shader> = weak_handle!("15dc5869-ad30-4664-b35a-4137cb8804a1");
#[cfg(feature = "bevy_render")]
const LINE_JOINT_SHADER_HANDLE: Handle<Shader> =
weak_handle!("7b5bdda5-df81-4711-a6cf-e587700de6f2");
/// A [`Plugin`] that provides an immediate mode drawing api for visual debugging. /// A [`Plugin`] that provides an immediate mode drawing api for visual debugging.
/// ///
/// Requires to be loaded after [`PbrPlugin`](bevy_pbr::PbrPlugin) or [`SpritePlugin`](bevy_sprite::SpritePlugin). /// Requires to be loaded after [`PbrPlugin`](bevy_pbr::PbrPlugin) or [`SpritePlugin`](bevy_sprite::SpritePlugin).
@ -160,14 +154,9 @@ impl Plugin for GizmoPlugin {
fn build(&self, app: &mut App) { fn build(&self, app: &mut App) {
#[cfg(feature = "bevy_render")] #[cfg(feature = "bevy_render")]
{ {
use bevy_asset::load_internal_asset; use bevy_asset::embedded_asset;
load_internal_asset!(app, LINE_SHADER_HANDLE, "lines.wgsl", Shader::from_wgsl); embedded_asset!(app, "lines.wgsl");
load_internal_asset!( embedded_asset!(app, "line_joints.wgsl");
app,
LINE_JOINT_SHADER_HANDLE,
"line_joints.wgsl",
Shader::from_wgsl
);
} }
app.register_type::<GizmoConfig>() app.register_type::<GizmoConfig>()

View File

@ -2,9 +2,10 @@ use crate::{
config::{GizmoLineJoint, GizmoLineStyle, GizmoMeshConfig}, config::{GizmoLineJoint, GizmoLineStyle, GizmoMeshConfig},
line_gizmo_vertex_buffer_layouts, line_joint_gizmo_vertex_buffer_layouts, DrawLineGizmo, line_gizmo_vertex_buffer_layouts, line_joint_gizmo_vertex_buffer_layouts, DrawLineGizmo,
DrawLineJointGizmo, GizmoRenderSystems, GpuLineGizmo, LineGizmoUniformBindgroupLayout, DrawLineJointGizmo, GizmoRenderSystems, GpuLineGizmo, LineGizmoUniformBindgroupLayout,
SetLineGizmoBindGroup, LINE_JOINT_SHADER_HANDLE, LINE_SHADER_HANDLE, SetLineGizmoBindGroup,
}; };
use bevy_app::{App, Plugin}; use bevy_app::{App, Plugin};
use bevy_asset::{load_embedded_asset, Handle};
use bevy_core_pipeline::core_2d::{Transparent2d, CORE_2D_DEPTH_FORMAT}; use bevy_core_pipeline::core_2d::{Transparent2d, CORE_2D_DEPTH_FORMAT};
use bevy_ecs::{ use bevy_ecs::{
@ -75,6 +76,7 @@ impl Plugin for LineGizmo2dPlugin {
struct LineGizmoPipeline { struct LineGizmoPipeline {
mesh_pipeline: Mesh2dPipeline, mesh_pipeline: Mesh2dPipeline,
uniform_layout: BindGroupLayout, uniform_layout: BindGroupLayout,
shader: Handle<Shader>,
} }
impl FromWorld for LineGizmoPipeline { impl FromWorld for LineGizmoPipeline {
@ -85,6 +87,7 @@ impl FromWorld for LineGizmoPipeline {
.resource::<LineGizmoUniformBindgroupLayout>() .resource::<LineGizmoUniformBindgroupLayout>()
.layout .layout
.clone(), .clone(),
shader: load_embedded_asset!(render_world, "lines.wgsl"),
} }
} }
} }
@ -124,13 +127,13 @@ impl SpecializedRenderPipeline for LineGizmoPipeline {
RenderPipelineDescriptor { RenderPipelineDescriptor {
vertex: VertexState { vertex: VertexState {
shader: LINE_SHADER_HANDLE, shader: self.shader.clone(),
entry_point: "vertex".into(), entry_point: "vertex".into(),
shader_defs: shader_defs.clone(), shader_defs: shader_defs.clone(),
buffers: line_gizmo_vertex_buffer_layouts(key.strip), buffers: line_gizmo_vertex_buffer_layouts(key.strip),
}, },
fragment: Some(FragmentState { fragment: Some(FragmentState {
shader: LINE_SHADER_HANDLE, shader: self.shader.clone(),
shader_defs, shader_defs,
entry_point: fragment_entry_point.into(), entry_point: fragment_entry_point.into(),
targets: vec![Some(ColorTargetState { targets: vec![Some(ColorTargetState {
@ -173,6 +176,7 @@ impl SpecializedRenderPipeline for LineGizmoPipeline {
struct LineJointGizmoPipeline { struct LineJointGizmoPipeline {
mesh_pipeline: Mesh2dPipeline, mesh_pipeline: Mesh2dPipeline,
uniform_layout: BindGroupLayout, uniform_layout: BindGroupLayout,
shader: Handle<Shader>,
} }
impl FromWorld for LineJointGizmoPipeline { impl FromWorld for LineJointGizmoPipeline {
@ -183,6 +187,7 @@ impl FromWorld for LineJointGizmoPipeline {
.resource::<LineGizmoUniformBindgroupLayout>() .resource::<LineGizmoUniformBindgroupLayout>()
.layout .layout
.clone(), .clone(),
shader: load_embedded_asset!(render_world, "line_joints.wgsl"),
} }
} }
} }
@ -225,13 +230,13 @@ impl SpecializedRenderPipeline for LineJointGizmoPipeline {
RenderPipelineDescriptor { RenderPipelineDescriptor {
vertex: VertexState { vertex: VertexState {
shader: LINE_JOINT_SHADER_HANDLE, shader: self.shader.clone(),
entry_point: entry_point.into(), entry_point: entry_point.into(),
shader_defs: shader_defs.clone(), shader_defs: shader_defs.clone(),
buffers: line_joint_gizmo_vertex_buffer_layouts(), buffers: line_joint_gizmo_vertex_buffer_layouts(),
}, },
fragment: Some(FragmentState { fragment: Some(FragmentState {
shader: LINE_JOINT_SHADER_HANDLE, shader: self.shader.clone(),
shader_defs, shader_defs,
entry_point: "fragment".into(), entry_point: "fragment".into(),
targets: vec![Some(ColorTargetState { targets: vec![Some(ColorTargetState {

View File

@ -2,9 +2,10 @@ use crate::{
config::{GizmoLineJoint, GizmoLineStyle, GizmoMeshConfig}, config::{GizmoLineJoint, GizmoLineStyle, GizmoMeshConfig},
line_gizmo_vertex_buffer_layouts, line_joint_gizmo_vertex_buffer_layouts, DrawLineGizmo, line_gizmo_vertex_buffer_layouts, line_joint_gizmo_vertex_buffer_layouts, DrawLineGizmo,
DrawLineJointGizmo, GizmoRenderSystems, GpuLineGizmo, LineGizmoUniformBindgroupLayout, DrawLineJointGizmo, GizmoRenderSystems, GpuLineGizmo, LineGizmoUniformBindgroupLayout,
SetLineGizmoBindGroup, LINE_JOINT_SHADER_HANDLE, LINE_SHADER_HANDLE, SetLineGizmoBindGroup,
}; };
use bevy_app::{App, Plugin}; use bevy_app::{App, Plugin};
use bevy_asset::{load_embedded_asset, Handle};
use bevy_core_pipeline::{ use bevy_core_pipeline::{
core_3d::{Transparent3d, CORE_3D_DEPTH_FORMAT}, core_3d::{Transparent3d, CORE_3D_DEPTH_FORMAT},
oit::OrderIndependentTransparencySettings, oit::OrderIndependentTransparencySettings,
@ -75,6 +76,7 @@ impl Plugin for LineGizmo3dPlugin {
struct LineGizmoPipeline { struct LineGizmoPipeline {
mesh_pipeline: MeshPipeline, mesh_pipeline: MeshPipeline,
uniform_layout: BindGroupLayout, uniform_layout: BindGroupLayout,
shader: Handle<Shader>,
} }
impl FromWorld for LineGizmoPipeline { impl FromWorld for LineGizmoPipeline {
@ -85,6 +87,7 @@ impl FromWorld for LineGizmoPipeline {
.resource::<LineGizmoUniformBindgroupLayout>() .resource::<LineGizmoUniformBindgroupLayout>()
.layout .layout
.clone(), .clone(),
shader: load_embedded_asset!(render_world, "lines.wgsl"),
} }
} }
} }
@ -131,13 +134,13 @@ impl SpecializedRenderPipeline for LineGizmoPipeline {
RenderPipelineDescriptor { RenderPipelineDescriptor {
vertex: VertexState { vertex: VertexState {
shader: LINE_SHADER_HANDLE, shader: self.shader.clone(),
entry_point: "vertex".into(), entry_point: "vertex".into(),
shader_defs: shader_defs.clone(), shader_defs: shader_defs.clone(),
buffers: line_gizmo_vertex_buffer_layouts(key.strip), buffers: line_gizmo_vertex_buffer_layouts(key.strip),
}, },
fragment: Some(FragmentState { fragment: Some(FragmentState {
shader: LINE_SHADER_HANDLE, shader: self.shader.clone(),
shader_defs, shader_defs,
entry_point: fragment_entry_point.into(), entry_point: fragment_entry_point.into(),
targets: vec![Some(ColorTargetState { targets: vec![Some(ColorTargetState {
@ -171,6 +174,7 @@ impl SpecializedRenderPipeline for LineGizmoPipeline {
struct LineJointGizmoPipeline { struct LineJointGizmoPipeline {
mesh_pipeline: MeshPipeline, mesh_pipeline: MeshPipeline,
uniform_layout: BindGroupLayout, uniform_layout: BindGroupLayout,
shader: Handle<Shader>,
} }
impl FromWorld for LineJointGizmoPipeline { impl FromWorld for LineJointGizmoPipeline {
@ -181,6 +185,7 @@ impl FromWorld for LineJointGizmoPipeline {
.resource::<LineGizmoUniformBindgroupLayout>() .resource::<LineGizmoUniformBindgroupLayout>()
.layout .layout
.clone(), .clone(),
shader: load_embedded_asset!(render_world, "line_joints.wgsl"),
} }
} }
} }
@ -230,13 +235,13 @@ impl SpecializedRenderPipeline for LineJointGizmoPipeline {
RenderPipelineDescriptor { RenderPipelineDescriptor {
vertex: VertexState { vertex: VertexState {
shader: LINE_JOINT_SHADER_HANDLE, shader: self.shader.clone(),
entry_point: entry_point.into(), entry_point: entry_point.into(),
shader_defs: shader_defs.clone(), shader_defs: shader_defs.clone(),
buffers: line_joint_gizmo_vertex_buffer_layouts(), buffers: line_joint_gizmo_vertex_buffer_layouts(),
}, },
fragment: Some(FragmentState { fragment: Some(FragmentState {
shader: LINE_JOINT_SHADER_HANDLE, shader: self.shader.clone(),
shader_defs, shader_defs,
entry_point: "fragment".into(), entry_point: "fragment".into(),
targets: vec![Some(ColorTargetState { targets: vec![Some(ColorTargetState {