protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { var cameraState = context.GetCurrentCamera(); if (cameraState == null) return; UpdateParameters(context, cameraState); }
protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { var cameraState = context.GetCurrentCamera(); if (cameraState == null) { return; } UpdateParameters(context, cameraState); }
protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { spriteProcessor = SceneInstance.GetProcessor <SpriteProcessor>(); if (spriteProcessor == null) { return; } // If no camera, early exit var camera = context.GetCurrentCamera(); if (camera == null) { return; } var viewProjectionMatrix = camera.ViewProjectionMatrix; foreach (var spriteState in spriteProcessor.Sprites) { var sprite = spriteState.SpriteComponent.CurrentSprite; if (sprite == null || sprite.Texture == null || sprite.Region.Width <= 0 || sprite.Region.Height <= 0f) { continue; } // Perform culling on group and accept if (!CurrentCullingMask.Contains(spriteState.SpriteComponent.Entity.Group)) { continue; } // Project the position // TODO: This could be done in a SIMD batch, but we need to figure-out how to plugin in with RenderMesh object var worldPosition = new Vector4(spriteState.TransformComponent.WorldMatrix.TranslationVector, 1.0f); Vector4 projectedPosition; Vector4.Transform(ref worldPosition, ref viewProjectionMatrix, out projectedPosition); var projectedZ = projectedPosition.Z / projectedPosition.W; var list = sprite.IsTransparent ? transparentList : opaqueList; list.Add(new RenderItem(this, spriteState, projectedZ)); } }
protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { spriteProcessor = SceneInstance.GetProcessor<SpriteProcessor>(); if (spriteProcessor == null) { return; } // If no camera, early exit var camera = context.GetCurrentCamera(); if (camera == null) { return; } var viewProjectionMatrix = camera.ViewProjectionMatrix; foreach (var spriteState in spriteProcessor.Sprites) { var sprite = spriteState.SpriteComponent.CurrentSprite; if(sprite == null || sprite.Texture == null || sprite.Region.Width <= 0 || sprite.Region.Height <= 0f) continue; // Perform culling on group and accept if (!CurrentCullingMask.Contains(spriteState.SpriteComponent.Entity.Group)) continue; // Project the position // TODO: This could be done in a SIMD batch, but we need to figure-out how to plugin in with RenderMesh object var worldPosition = new Vector4(spriteState.TransformComponent.WorldMatrix.TranslationVector, 1.0f); Vector4 projectedPosition; Vector4.Transform(ref worldPosition, ref viewProjectionMatrix, out projectedPosition); var projectedZ = projectedPosition.Z / projectedPosition.W; var list = sprite.IsTransparent ? transparentList : opaqueList; list.Add(new RenderItem(this, spriteState, projectedZ)); } }
protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { // If no camera, early exit var camera = context.GetCurrentCamera(); if (camera == null) { return; } // Copy the ViewProjectionMatrix from the camera as it is not automatically picked up by the ModelComponentRenderer modelRenderer.ViewProjectionMatrix = camera.ViewProjectionMatrix; var sceneCameraRenderer = context.Tags.Get(SceneCameraRenderer.Current); var cameraRenderMode = sceneCameraRenderer != null ? sceneCameraRenderer.Mode : null; if (cameraRenderMode != null) { modelRenderer.RasterizerState = cameraRenderMode.GetDefaultRasterizerState(false); modelRenderer.RasterizerStateForInvertedGeometry = cameraRenderMode.GetDefaultRasterizerState(true); } modelRenderer.Prepare(context, opaqueList, transparentList); }
protected override void PrepareCore(RenderContext context, RenderItemCollection opaqueList, RenderItemCollection transparentList) { spriteProcessor = SceneInstance.GetProcessor<SpriteStudioProcessor>(); if (spriteProcessor == null) { return; } // If no camera, early exit var camera = context.GetCurrentCamera(); if (camera == null) { return; } var viewProjectionMatrix = camera.ViewProjectionMatrix; foreach (var spriteState in spriteProcessor.Sprites) { var worldMatrix = spriteState.TransformComponent.WorldMatrix; var worldPosition = new Vector4(worldMatrix.TranslationVector, 1.0f); Vector4 projectedPosition; Vector4.Transform(ref worldPosition, ref viewProjectionMatrix, out projectedPosition); var projectedZ = projectedPosition.Z / projectedPosition.W; transparentList.Add(new RenderItem(this, spriteState, projectedZ)); //for (var index = 0; index < ssSheet.Sheet.NodesInfo.Count; index++) //{ // var node = ssSheet.Sheet.NodesInfo[index]; // var sprite = ssSheet.Sheet.SpriteSheet.Sprites[index]; // if (sprite?.Texture == null || sprite.Region.Width <= 0 || sprite.Region.Height <= 0f) // continue; // // Perform culling on group and accept // if (!CurrentCullingMask.Contains(spriteState.SpriteStudioComponent.Entity.Group)) // continue; // var worldMatrix = node.WorldTransform * spriteState.TransformComponent.WorldMatrix; // // Project the position // // TODO: This could be done in a SIMD batch, but we need to figure-out how to plugin in with RenderMesh object // var worldPosition = new Vector4(worldMatrix.TranslationVector, 1.0f); // Vector4 projectedPosition; // Vector4.Transform(ref worldPosition, ref viewProjectionMatrix, out projectedPosition); // var projectedZ = projectedPosition.Z / projectedPosition.W; // var list = sprite.IsTransparent ? transparentList : opaqueList; // list.Add(new RenderItem(this, new SpriteItem // { // Sprite = sprite, // Data = spriteState, // Node = node // }, projectedZ)); //} } }