public SceneRenderer(IApplicationWindow window, IContentContainer content, ISceneAsset scene = null) { _content = content; _scene = scene ?? _content.Scenes.First(); Window = window; Window.GraphicsDeviceCreated += OnGraphicsDeviceCreated; Window.GraphicsDeviceDestroyed += OnGraphicsDeviceDestroyed; Window.Rendering += PreDraw; Window.Rendering += Draw; }
public virtual IEnumerable <ISceneAsset> Apply(ISceneAsset scene) { var transformedScene = new SceneAsset(scene.Id); foreach (var node in scene.ChildNodes) { NodeAsset parent = null; foreach (var transformedNode in Apply(null, node)) { transformedScene.Add(transformedNode); parent = transformedNode; } if (parent != null) { foreach (var childNode in node.ChildNodes) { ApplyOnSubtree(parent, childNode); } } } yield return(transformedScene); }
public static IContentContainer ToContentContainer(this ISceneAsset scene) { var content = new ContentContainer(); content.Scenes.Add(scene); var visitedCameras = new HashSet <ICameraAsset>(); var visitedLights = new HashSet <ILightAsset>(); var visitedMeshes = new HashSet <IMesh>(); var visitedMaterials = new HashSet <IMaterialAsset>(); var visitedImages = new HashSet <IImageAsset>(); foreach (var nodeAsset in scene.EnumerateNodesBreadthFirst()) { content.Nodes.Add(nodeAsset); if (nodeAsset.Camera != null) { if (visitedCameras.Add(nodeAsset.Camera)) { content.Cameras.Add(nodeAsset.Camera); } } if (nodeAsset.Light != null) { if (visitedLights.Add(nodeAsset.Light)) { content.Lights.Add(nodeAsset.Light); } } if (nodeAsset.Mesh != null) { if (nodeAsset.Mesh.Mesh != null) { if (visitedMeshes.Add(nodeAsset.Mesh.Mesh)) { content.Meshes.Add(nodeAsset.Mesh.Mesh); } } if (nodeAsset.Mesh.Materials != null) { foreach (var materialAsset in nodeAsset.Mesh.Materials) { if (visitedMaterials.Add(materialAsset)) { content.Materials.Add(materialAsset); if (materialAsset.Shader != null) { foreach (var parameter in materialAsset.Shader.Parameters) { if (parameter.ValueType == typeof(SamplerParameters)) { var samper = parameter as IShaderParameter <SamplerParameters>; if (samper?.Value.Image != null) { if (visitedImages.Add(samper.Value.Image)) { content.Images.Add(samper.Value.Image); } } } } } } } } } } return(content); }