protected override void PrepareCore(RenderDrawContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { var uiProcessor = SceneInstance.GetProcessor <UIComponentProcessor>(); if (uiProcessor == null) { return; } foreach (var uiRoot in uiProcessor.UIRoots) { // Perform culling on group and accept if (!CurrentCullingMask.Contains(uiRoot.UIComponent.Entity.Group)) { continue; } // skips empty UI elements if (uiRoot.UIComponent.RootElement == null) { continue; } // Project the position // TODO: This code is duplicated from SpriteComponent -> unify it at higher level? var worldPosition = new Vector4(uiRoot.TransformComponent.WorldMatrix.TranslationVector, 1.0f); float projectedZ; if (uiRoot.UIComponent.IsFullScreen) { projectedZ = -uiRoot.TransformComponent.WorldMatrix.M43; } else { Vector4 projectedPosition; var cameraComponent = context.Tags.Get(CameraComponentRendererExtensions.Current); if (cameraComponent == null) { continue; } Vector4.Transform(ref worldPosition, ref cameraComponent.ViewProjectionMatrix, out projectedPosition); projectedZ = projectedPosition.Z / projectedPosition.W; } transparentList.Add(new RenderItem(this, uiRoot, projectedZ)); } }
protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { var backgroundProcessor = SceneInstance.GetProcessor <BackgroundComponentProcessor>(); if (backgroundProcessor == null) { return; } foreach (var backgroundComponent in backgroundProcessor.Backgrounds) { // Perform culling on group and accept if (!CurrentCullingMask.Contains(backgroundComponent.Entity.Group)) { continue; } opaqueList.Add(new RenderItem(this, backgroundComponent, float.NegativeInfinity)); // render background first so that it can replace a clear frame return; // draw only one background by group } }