@@ -138,10 +138,6 @@ void CanvasRenderer::Update(f32 deltaTime)
138138 {
139139 auto & panel = uiRegistry->get <Panel>(entity);
140140 auto & panelTemplate = uiRegistry->get <PanelTemplate>(entity);
141- if (widget.worldTransformIndex != -1 )
142- {
143- volatile int asd = 123 ;
144- }
145141
146142 // In pixel units
147143 vec2 panelPos = transform.GetWorldPosition ();
@@ -150,7 +146,7 @@ void CanvasRenderer::Update(f32 deltaTime)
150146 // Convert to clip space units
151147 panelSize = PixelSizeToNDC (panelSize, size);
152148
153- if (widget.worldTransformIndex != - 1 )
149+ if (widget.worldTransformIndex != std::numeric_limits< u32 >(). max () )
154150 {
155151 panelPos = (panelPos / refSize) * 2 .0f ;
156152 }
@@ -239,6 +235,22 @@ void CanvasRenderer::Update(f32 deltaTime)
239235 uiRegistry->clear <DirtyClipper>();
240236}
241237
238+ u32 CanvasRenderer::ReserveWorldTransform ()
239+ {
240+ return _widgetWorldPositions.Add ();
241+ }
242+
243+ void CanvasRenderer::ReleaseWorldTransform (u32 index)
244+ {
245+ _widgetWorldPositions.Remove (index);
246+ }
247+
248+ void CanvasRenderer::UpdateWorldTransform (u32 index, const vec3& position)
249+ {
250+ _widgetWorldPositions[index] = vec4 (position, 1.0 );
251+ _widgetWorldPositions.SetDirtyElement (index);
252+ }
253+
242254void CanvasRenderer::AddCanvasPass (Renderer::RenderGraph* renderGraph, RenderResources& resources, u8 frameIndex)
243255{
244256 struct Data
@@ -471,7 +483,7 @@ void CanvasRenderer::CreatePermanentResources()
471483 _widgetWorldPositions.SetUsage (Renderer::BufferUsage::STORAGE_BUFFER);
472484
473485 // Push a debug position
474- _widgetWorldPositions.Add (vec3 (0 , 0 , 0 ));
486+ _widgetWorldPositions.Add (vec4 (0 , 0 , 0 , 1 ));
475487
476488 // Create pipelines
477489 Renderer::ImageFormat renderTargetFormat = _renderer->GetSwapChainImageFormat ();
@@ -698,7 +710,7 @@ void CanvasRenderer::UpdateTextVertices(ECS::Components::UI::Widget& widget, ECS
698710
699711 vec2 planeMin;
700712 vec2 planeMax;
701- if (widget.worldTransformIndex != - 1 )
713+ if (widget.worldTransformIndex != std::numeric_limits< u32 >(). max () )
702714 {
703715 planeMin = (vec2 (planeLeft, planeBottom) / refSize) * 2 .0f ;
704716 planeMax = (vec2 (planeRight, planeTop) / refSize) * 2 .0f ;
@@ -791,8 +803,8 @@ void CanvasRenderer::UpdatePanelData(entt::entity entity, ECS::Components::Trans
791803 BoundingRect* boundingRect = ®istry->get <BoundingRect>(entity);
792804
793805 vec2 referenceSize = vec2 (Renderer::Settings::UI_REFERENCE_WIDTH, Renderer::Settings::UI_REFERENCE_HEIGHT);
794- vec2 clipRegionMin = vec2 ( 0 . 0f , 0 . 0f ) ;
795- vec2 clipRegionMax = vec2 ( 1 . 0f , 1 . 0f ) ;
806+ vec2 clipRegionMin = clipper-> clipRegionMin ;
807+ vec2 clipRegionMax = clipper-> clipRegionMax ;
796808
797809 if (clipper->clipRegionOverrideEntity != entt::null)
798810 {
0 commit comments