Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 5
0
        public ISceneSnapshot ExportSnapshot()
        {
            if (!snapshotPool.TryDequeue(out var snapshot))
            {
                snapshot = new SceneSnapshot();
            }

            Trace.Assert(snapshot.HandleCount == 0);
            snapshot.HandleCount++;

            ExportSnapshot(snapshot);
            return(snapshot);
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
    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();
        }
    }
Ejemplo n.º 8
0
        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);
        }
    }
Ejemplo n.º 10
0
 private void RenderBatch_MaterialPerBatch(IDeviceContext context, SceneSnapshot scene, RenderJobBatch batch)
 {
     ref var material = ref scene.Materials.store[batch.MaterialResourcesIndexOverride];
Ejemplo n.º 11
0
 public D3DPerspMoveHandler(PerspectiveCameraComponent camera, SceneSnapshot snapshot, IContextState context) : base(camera, snapshot)
 {
     this.context = context;
 }
Ejemplo n.º 12
0
        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);
                }
            }
        }
Ejemplo n.º 13
0
 public FakeSceneUnderstander(SceneSnapshot fallbackScene)
 {
     this.fallbackScene = fallbackScene;
     this.resourcePath  = resourcePath;
 }
 public BuiltInSceneFetcher(Func <SceneSnapshot> getSceneSnapshot)
 {
     this.getSceneSnapshot = getSceneSnapshot;
     this.snapshot         = snapshot;
 }
Ejemplo n.º 15
0
 internal static void ReturnSnapshot(SceneSnapshot sceneSnapshot)
 {
     snapshotPool.Enqueue(sceneSnapshot);
 }
Ejemplo n.º 16
0
 public Handlers(GraphicEntity entity, SceneSnapshot snapshot, IContextState context)
 {
     this.emanager = context.GetEntityManager();
     this.entity   = entity;
     this.snapshot = snapshot;
 }
Ejemplo n.º 17
0
 protected virtual ICameraMovementComponentHandler CreateHandlerPerspectiveHandler(PerspectiveCameraComponent com, SceneSnapshot snapshot)
 {
     return(new PerspectiveCameraMoveHandler(com, snapshot));
 }
Ejemplo n.º 18
0
 protected override ICameraMovementComponentHandler CreateHandlerOrthographicHandler(OrthographicCameraComponent com, SceneSnapshot snapshot)
 {
     return(new D3DOrthoMoveHandler(com, snapshot));
 }
Ejemplo n.º 19
0
 public PerspectiveCameraMoveHandler(PerspectiveCameraComponent camera, SceneSnapshot snapshot)
 {
     this.camera   = camera;
     this.snapshot = snapshot;
 }
 private void OnDestroy()
 {
     currentScene = null;
 }
Ejemplo n.º 21
0
 public OrthographicCameraMoveHandler(OrthographicCameraComponent camera, SceneSnapshot snapshot)
 {
     this.camera   = camera;
     this.snapshot = snapshot;
 }
Ejemplo n.º 22
0
 public Colliding(SceneSnapshot snapshot, IContextState contextState)
 {
     this.snapshot     = snapshot;
     this.contextState = contextState;
 }
Ejemplo n.º 23
0
 protected override ICameraMovementComponentHandler CreateHandlerPerspectiveHandler(PerspectiveCameraComponent com, SceneSnapshot snapshot)
 {
     return(new D3DPerspMoveHandler(com, snapshot, ContextState));
 }
Ejemplo n.º 24
0
 public void Execute(SceneSnapshot snapshot)
 {
 }
 private void OnDisable()
 {
     currentScene = null;
 }
Ejemplo n.º 26
0
 protected virtual ICameraMovementComponentHandler CreateHandlerOrthographicHandler(OrthographicCameraComponent com, SceneSnapshot snapshot)
 {
     return(new OrthographicCameraMoveHandler(com, snapshot));
 }
Ejemplo n.º 27
0
 void Awake()
 {
     _sceneSnapShot = this;
 }
Ejemplo n.º 28
0
 public D3DOrthoMoveHandler(OrthographicCameraComponent camera, SceneSnapshot snapshot) : base(camera, snapshot)
 {
 }