void Rendering(IEntityManager emanager, IInputManager imanager, double millisec) { var ishapshot = imanager.GetInputSnapshot(); //if (!ishapshot.Events.Any() && !emanager.HasChanges) {//no input/changes no rendering // return; //} var id = Thread.CurrentThread.ManagedThreadId; Octree.Synchronize(id); //Octree.Draw(Context.GetEntityManager()); emanager.Synchronize(id); var snapshot = new SceneSnapshot(Window, notificator, viewport, Octree, ishapshot, TimeSpan.FromMilliseconds(millisec)); foreach (var sys in Context.GetSystemManager().GetSystems()) { try { sys.Execute(snapshot); //run synchronization after each exetuted system, to synchronize state for the next system emanager.FrameSynchronize(id); } catch (Exception ex) { ex.ToString(); #if !DEBUG throw ex; #endif } } }
void OnEnable() { Clear(); sceneObjects = new Dictionary <Guid, GameObject>(); sceneGeometries = new Dictionary <Guid, GameObject>(); currentScene = null; }
private void OnEnable() { var sceneFetcher = SceneObserver.IsSupported() ? (ISceneFetcher) new SceneFetcher() : new BuiltInSceneFetcher(() => fallbackScene.sceneSnapshot); sceneManager = new SceneManager(sceneFetcher); sceneManager.onScene.AddListener(() => drawer.DrawScene(SceneSnapshot.Create(sceneManager.Scene))); }
public override void OnImportAsset(AssetImportContext ctx) { var bytes = File.ReadAllBytes(ctx.assetPath); var sceneSnapshot = SceneSnapshot.Deserialize(bytes); var wrapper = ScriptableObject.CreateInstance <SceneSnapshotWrapper>(); wrapper.sceneSnapshot = sceneSnapshot; ctx.AddObjectToAsset("Scene", wrapper); ctx.SetMainObject(wrapper); }
public ISceneSnapshot ExportSnapshot() { if (!snapshotPool.TryDequeue(out var snapshot)) { snapshot = new SceneSnapshot(); } Trace.Assert(snapshot.HandleCount == 0); snapshot.HandleCount++; ExportSnapshot(snapshot); return(snapshot); }
private void RenderBatch(IDeviceContext context, SceneSnapshot scene, RenderJobBatch batch) { context.SetRasterizerConfiguration(batch.Wireframe ? RasterizerConfiguration.WireFrontBack : RasterizerConfiguration.FillFrontBack); if (batch.MaterialResourcesIndexOverride != -1) { RenderBatch_MaterialPerBatch(context, scene, batch); } else { RenderBatch_MaterialPerInstance(context, scene, batch); } }
public override void OnInspectorGUI() { base.OnInspectorGUI(); SceneSnapshot sceneSnapshot = (SceneSnapshot)target; if (GUILayout.Button("Show/Hide Current Asset")) { } if (GUILayout.Button("Save (" + sceneSnapshot.assets.Length + ") Snapshots")) { sceneSnapshot.Snapshot(); } }
public void Execute(SceneSnapshot snapshot) { IEntityManager emanager = snapshot.State.GetEntityManager(); Standard.Engine.Core.InputSnapshot input = snapshot.Snapshot; using (var _cl = factory.CreateCommandList()) { _cl.Begin(); var state = new RenderState() { factory = factory, gd = gd, window = window, Commands = _cl, Ticks = (float)snapshot.FrameRateTime.TotalMilliseconds }; var renderables = new List <IRenderableComponent>(); _cl.SetFramebuffer(gd.SwapchainFramebuffer); _cl.SetFullViewports(); _cl.ClearColorTarget(0, RgbaFloat.Black); _cl.ClearDepthStencil(1f); foreach (var entity in emanager.GetEntities().OrderBy(x => x.GetOrderIndex <VeldridRenderSystem>())) { entity.GetComponents <IRenderableComponent>() .DoFirst(x => { x.Update(state); renderables.Add(x); }); } foreach (var renderable in renderables) { renderable.Render(state); } _cl.End(); gd.SubmitCommands(_cl); gd.SwapBuffers(); } }
public void DrawScene(SceneSnapshot scene) { currentScene = scene; var sceneToWorld = scene.originMatrix; var scenePosition = sceneToWorld.GetColumn(3); var sceneRotation = sceneToWorld.rotation; transform.SetPositionAndRotation(scenePosition, sceneRotation); var foundSceneObjects = new HashSet <Guid>(); var foundSceneGeometries = new HashSet <Guid>(); var sceneObjectKinds = new[] { SceneObjectKind.Floor, SceneObjectKind.Wall, SceneObjectKind.Ceiling, SceneObjectKind.Platform }; foreach (var sceneObject in scene.Scene.SceneObjects.Where(o => o.Quads.Any() && sceneObjectKinds.Contains(o.Kind))) { foundSceneObjects.Add(sceneObject.Id); var componentTransform = CreateOrUpdateSceneObject(sceneObject); foreach (var quad in sceneObject.Quads) { foundSceneGeometries.Add(quad.Id); CreateOrUpdateQuad(componentTransform.transform, quad); } SetMaterials(componentTransform, sceneObject); } foreach (var id in sceneObjects.Keys.Where(id => !foundSceneObjects.Contains(id)).ToArray()) { Destroy(sceneObjects[id]); sceneObjects.Remove(id); } foreach (var id in sceneGeometries.Keys.Where(id => !foundSceneGeometries.Contains(id)).ToArray()) { Destroy(sceneGeometries[id]); sceneGeometries.Remove(id); } }
private void RenderBatch_MaterialPerBatch(IDeviceContext context, SceneSnapshot scene, RenderJobBatch batch) { ref var material = ref scene.Materials.store[batch.MaterialResourcesIndexOverride];
public D3DPerspMoveHandler(PerspectiveCameraComponent camera, SceneSnapshot snapshot, IContextState context) : base(camera, snapshot) { this.context = context; }
private void RenderScene_Forward(IDeviceContext context, SceneSnapshot scene, IDepthStencilView backBufferDepthStencilView, IRenderTargetView backBufferRenderTargetView) { RenderShadowMaps(context, scene); // Restore backbuffer rendertarget + scene constant buffer + srvs. context.SetRenderTargets(backBufferDepthStencilView, backBufferRenderTargetView); context.SetViewportRect(new RectangleF(0, 0, backBufferRenderTargetView.Resolution.Width, backBufferRenderTargetView.Resolution.Height)); UpdateSceneConstantBuffer(context, new Vector4(scene.CameraEye, 1.0f), scene.ProjView, scene.ProjViewInv, scene.ProjView, scene.ProjViewInv, true, true, scene.SpotlightInfos.Count, scene.Time); // Clear render/depth, bind srvs after setrendertargets context.ClearRenderTarget(Color.Gray); context.ClearDepthBuffer(1.0f); BindCommonShaderResourceViews(context); // Atmosphere if (false) { _techniques.ForwardSkyFromAtmosphere.BeginPass(context, 0); context.SetDepthConfiguration(DepthConfiguration.Disabled); var(orthoProj, world) = ComputeSceneQuadProjWorld(backBufferRenderTargetView.Resolution, 0, 0, backBufferRenderTargetView.Resolution.Width, backBufferRenderTargetView.Resolution.Height); UpdateSceneConstantBuffer(context, new Vector4(scene.CameraEye, 1), orthoProj, MatrixCM.Invert(orthoProj), scene.ProjView, MatrixCM.Invert(scene.ProjView), false, false, scene.SpotlightInfos.Count, scene.Time); UpdateBatchConstantBuffer(context, Matrix.Identity, DiffuseTextureSamplingMode.FlatUV, 0); DrawScreenQuad(context, world, null); context.SetDepthConfiguration(DepthConfiguration.Enabled); { var projViewInv = MatrixCM.Invert(scene.ProjView); projViewInv.Transpose(); var a = Vector4.Transform(new Vector4(0, 0, 1, 1), projViewInv); a /= a.W; var av = (Vector3)a; av.Normalize(); var b = Vector4.Transform(new Vector4(1, 0, 1, 1), projViewInv); b /= b.W; var bv = (Vector3)b; bv.Normalize(); var c = Vector4.Transform(new Vector4(0, 1, 1, 1), projViewInv); c /= c.W; var cv = (Vector3)c; cv.Normalize(); Console.WriteLine(av + " " + bv + " " + cv); } } // Water if (false) { var pv = scene.ProjView; pv.Transpose(); Console.WriteLine("!!!!!" + Vector3.Transform(new Vector3(-5.00f, -2.18557e-07f, -5.00f), pv)); _techniques.ForwardWater.BeginPass(context, 0); UpdateSceneConstantBuffer(context, new Vector4(scene.CameraEye, 1), scene.ProjView, scene.ProjViewInv, scene.ProjView, scene.ProjViewInv, false, false, scene.SpotlightInfos.Count, scene.Time); UpdateBatchConstantBuffer(context, Matrix.Identity, DiffuseTextureSamplingMode.FlatUV, 0); var instancingBuffer = PickInstancingBuffer(8192); context.SetVertexBuffer(1, instancingBuffer); int n = 40; using (var updater = context.TakeUpdater(instancingBuffer)) { for (var y = -n; y <= n; y++) { for (var x = -n; x <= n; x++) { updater.Write(new RenderJobDescription { WorldTransform = MatrixCM.Scaling(10) * MatrixCM.Translation(x, 0, y) * MatrixCM.RotationX(-(float)Math.PI / 2.0f) * MatrixCM.Translation(-0.5f, -0.5f, 0), MaterialProperties = { Metallic = 0.0f, Roughness = 1.0f }, MaterialResourcesIndex = -1, Color = Color.White, }); } } } context.SetShaderResource(30, _graphicsFacade.Presets.SolidTextures[Color4.White], RenderStage.Pixel); var mrbu = context.TakeUpdater(_materialResourcesBuffer); mrbu.Write(new InternalMaterialResourcesDescription() { BaseColor = Color4.White }.Resolve(30)); mrbu.UpdateCloseAndDispose(); water.Render(context, (2 * n + 1) * (2 * n + 1)); } // Forward render pass for (var pass = 0; pass < _techniques.Forward.Passes; pass++) { _techniques.Forward.BeginPass(context, pass); foreach (var batch in scene.RenderJobBatches) { RenderBatch(context, scene, batch); } } }
public FakeSceneUnderstander(SceneSnapshot fallbackScene) { this.fallbackScene = fallbackScene; this.resourcePath = resourcePath; }
public BuiltInSceneFetcher(Func <SceneSnapshot> getSceneSnapshot) { this.getSceneSnapshot = getSceneSnapshot; this.snapshot = snapshot; }
internal static void ReturnSnapshot(SceneSnapshot sceneSnapshot) { snapshotPool.Enqueue(sceneSnapshot); }
public Handlers(GraphicEntity entity, SceneSnapshot snapshot, IContextState context) { this.emanager = context.GetEntityManager(); this.entity = entity; this.snapshot = snapshot; }
protected virtual ICameraMovementComponentHandler CreateHandlerPerspectiveHandler(PerspectiveCameraComponent com, SceneSnapshot snapshot) { return(new PerspectiveCameraMoveHandler(com, snapshot)); }
protected override ICameraMovementComponentHandler CreateHandlerOrthographicHandler(OrthographicCameraComponent com, SceneSnapshot snapshot) { return(new D3DOrthoMoveHandler(com, snapshot)); }
public PerspectiveCameraMoveHandler(PerspectiveCameraComponent camera, SceneSnapshot snapshot) { this.camera = camera; this.snapshot = snapshot; }
private void OnDestroy() { currentScene = null; }
public OrthographicCameraMoveHandler(OrthographicCameraComponent camera, SceneSnapshot snapshot) { this.camera = camera; this.snapshot = snapshot; }
public Colliding(SceneSnapshot snapshot, IContextState contextState) { this.snapshot = snapshot; this.contextState = contextState; }
protected override ICameraMovementComponentHandler CreateHandlerPerspectiveHandler(PerspectiveCameraComponent com, SceneSnapshot snapshot) { return(new D3DPerspMoveHandler(com, snapshot, ContextState)); }
public void Execute(SceneSnapshot snapshot) { }
private void OnDisable() { currentScene = null; }
protected virtual ICameraMovementComponentHandler CreateHandlerOrthographicHandler(OrthographicCameraComponent com, SceneSnapshot snapshot) { return(new OrthographicCameraMoveHandler(com, snapshot)); }
void Awake() { _sceneSnapShot = this; }
public D3DOrthoMoveHandler(OrthographicCameraComponent camera, SceneSnapshot snapshot) : base(camera, snapshot) { }