11use bevy_app:: { App , Plugin } ;
2- use bevy_asset:: { Asset , AssetId , Handle , load_internal_asset, weak_handle} ;
2+ use bevy_asset:: { Asset , AssetId , Handle , RenderAssetUsages , load_internal_asset, uuid_handle} ;
3+ use bevy_camera:: visibility:: RenderLayers ;
34use bevy_core_pipeline:: core_3d:: { CORE_3D_DEPTH_FORMAT , Transparent3d } ;
45use bevy_core_pipeline:: prepass:: {
56 DeferredPrepass , DepthPrepass , MotionVectorPrepass , NormalPrepass ,
@@ -10,15 +11,14 @@ use bevy_ecs::query::ROQueryItem;
1011use bevy_ecs:: system:: SystemParamItem ;
1112use bevy_ecs:: system:: lifetimeless:: { Read , SRes } ;
1213use bevy_image:: BevyDefault as _;
14+ use bevy_mesh:: { PrimitiveTopology , VertexBufferLayout } ;
1315use bevy_pbr:: { MeshPipeline , MeshPipelineKey , SetMeshViewBindGroup } ;
1416use bevy_platform:: collections:: { HashMap , HashSet } ;
1517use bevy_reflect:: { Reflect , TypePath } ;
1618use bevy_render:: extract_component:: ExtractComponent ;
17- use bevy_render:: mesh:: PrimitiveTopology ;
1819use bevy_render:: prelude:: * ;
1920use bevy_render:: render_asset:: {
20- PrepareAssetError , RenderAsset , RenderAssetPlugin , RenderAssetUsages , RenderAssets ,
21- prepare_assets,
21+ PrepareAssetError , RenderAsset , RenderAssetPlugin , RenderAssets , prepare_assets,
2222} ;
2323use bevy_render:: render_phase:: {
2424 AddRenderCommand , DrawFunctions , PhaseItem , PhaseItemExtraIndex , RenderCommand ,
@@ -29,18 +29,19 @@ use bevy_render::render_resource::{
2929 CompareFunction , DepthBiasState , DepthStencilState , FragmentState , IndexFormat ,
3030 MultisampleState , PipelineCache , PrimitiveState , RenderPipelineDescriptor ,
3131 SpecializedRenderPipeline , SpecializedRenderPipelines , StencilState , TextureFormat ,
32- VertexAttribute , VertexBufferLayout , VertexFormat , VertexState , VertexStepMode ,
32+ VertexAttribute , VertexFormat , VertexState , VertexStepMode ,
3333} ;
3434use bevy_render:: renderer:: RenderDevice ;
3535use bevy_render:: sync_world:: TemporaryRenderEntity ;
36- use bevy_render:: view:: { ExtractedView , RenderLayers , ViewTarget } ;
37- use bevy_render:: { Extract , Render , RenderApp , RenderSet } ;
36+ use bevy_render:: view:: { ExtractedView , ViewTarget } ;
37+ use bevy_render:: { Extract , Render , RenderApp , RenderSystems } ;
38+ use bevy_shader:: Shader ;
3839use bytemuck:: cast_slice;
3940use uuid:: Uuid ;
4041
4142use crate :: GizmoCamera ;
4243
43- const GIZMO_SHADER_HANDLE : Handle < Shader > = weak_handle ! ( "e44be110-cb2b-4a8d-9c0c-965424e6a633" ) ;
44+ const GIZMO_SHADER_HANDLE : Handle < Shader > = uuid_handle ! ( "e44be110-cb2b-4a8d-9c0c-965424e6a633" ) ;
4445
4546pub ( crate ) struct TransformGizmoRenderPlugin ;
4647
@@ -62,7 +63,7 @@ impl Plugin for TransformGizmoRenderPlugin {
6263 . add_systems (
6364 Render ,
6465 queue_transform_gizmos
65- . in_set ( RenderSet :: Queue )
66+ . in_set ( RenderSystems :: Queue )
6667 . after ( prepare_assets :: < GizmoBuffers > ) ,
6768 ) ;
6869 }
@@ -85,7 +86,17 @@ pub(crate) struct DrawDataHandles {
8586}
8687
8788#[ derive(
88- Component , Default , Clone , Debug , Deref , DerefMut , Reflect , PartialEq , Eq , ExtractComponent ,
89+ Component ,
90+ Default ,
91+ Clone ,
92+ Debug ,
93+ Deref ,
94+ DerefMut ,
95+ Reflect ,
96+ PartialEq ,
97+ Eq ,
98+ ExtractComponent ,
99+ Hash ,
89100) ]
90101#[ reflect( Component ) ]
91102pub ( crate ) struct GizmoDrawDataHandle ( pub ( crate ) Handle < GizmoDrawData > ) ;
@@ -108,14 +119,14 @@ impl From<&GizmoDrawDataHandle> for AssetId<GizmoDrawData> {
108119}
109120
110121fn extract_gizmo_data ( mut commands : Commands , handles : Extract < Res < DrawDataHandles > > ) {
111- let handle_weak_refs = handles
122+ let handle_refs = handles
112123 . handles
113124 . values ( )
114- . map ( |handle| handle. clone_weak ( ) )
125+ . map ( |handle| handle. clone ( ) )
115126 . collect :: < HashSet < _ > > ( ) ;
116127
117- for handle in handle_weak_refs {
118- commands. spawn ( ( GizmoDrawDataHandle ( handle) , TemporaryRenderEntity ) ) ;
128+ for handle in handle_refs {
129+ commands. spawn ( ( handle, TemporaryRenderEntity ) ) ;
119130 }
120131}
121132
@@ -142,6 +153,7 @@ impl RenderAsset for GizmoBuffers {
142153 source_asset : Self :: SourceAsset ,
143154 _: AssetId < Self :: SourceAsset > ,
144155 render_device : & mut SystemParamItem < Self :: Param > ,
156+ _: Option < & Self > ,
145157 ) -> std:: result:: Result < Self , PrepareAssetError < Self :: SourceAsset > > {
146158 let position_buffer_data = cast_slice ( & source_asset. 0 . vertices ) ;
147159 let position_buffer = render_device. create_buffer_with_data ( & BufferInitDescriptor {
@@ -183,8 +195,8 @@ impl<P: PhaseItem> RenderCommand<P> for DrawTransformGizmo {
183195 #[ inline]
184196 fn render < ' w > (
185197 _item : & P ,
186- _view : ROQueryItem < ' w , Self :: ViewQuery > ,
187- handle : Option < ROQueryItem < ' w , Self :: ItemQuery > > ,
198+ _view : ROQueryItem < ' w , ' _ , Self :: ViewQuery > ,
199+ handle : Option < ROQueryItem < ' w , ' _ , Self :: ItemQuery > > ,
188200 gizmos : SystemParamItem < ' w , ' _ , Self :: Param > ,
189201 pass : & mut TrackedRenderPass < ' w > ,
190202 ) -> RenderCommandResult {
@@ -251,13 +263,14 @@ impl SpecializedRenderPipeline for TransformGizmoPipeline {
251263 . mesh_pipeline
252264 . get_view_layout ( key. view_key . into ( ) )
253265 . clone ( ) ;
266+ let layout = vec ! [ view_layout. main_layout. clone( ) ] ;
254267
255268 RenderPipelineDescriptor {
256269 label : Some ( "TransformGizmo Pipeline" . into ( ) ) ,
257270 zero_initialize_workgroup_memory : true , // ?
258271 vertex : VertexState {
259272 shader : GIZMO_SHADER_HANDLE ,
260- entry_point : "vertex" . into ( ) ,
273+ entry_point : Some ( "vertex" . into ( ) ) ,
261274 shader_defs : shader_defs. clone ( ) ,
262275 buffers : vec ! [
263276 VertexBufferLayout {
@@ -283,14 +296,14 @@ impl SpecializedRenderPipeline for TransformGizmoPipeline {
283296 fragment : Some ( FragmentState {
284297 shader : GIZMO_SHADER_HANDLE ,
285298 shader_defs,
286- entry_point : "fragment" . into ( ) ,
299+ entry_point : Some ( "fragment" . into ( ) ) ,
287300 targets : vec ! [ Some ( ColorTargetState {
288301 format,
289302 blend: Some ( BlendState :: PREMULTIPLIED_ALPHA_BLENDING ) ,
290303 write_mask: ColorWrites :: ALL ,
291304 } ) ] ,
292305 } ) ,
293- layout : vec ! [ view_layout ] ,
306+ layout,
294307 primitive : PrimitiveState {
295308 topology : PrimitiveTopology :: TriangleList ,
296309 cull_mode : None ,
0 commit comments