예제 #1
0
파일: DOF.cs 프로젝트: DavidMann10k/nyx
        /// <summary>
        /// Initializes a new instance of the <see cref="DOF" /> class.
        /// </summary>
        /// <param name="deferredRenderer">The deferred renderer which will be using the DOF effect.</param>
        public DOF(DeferredRenderer deferredRenderer)
        {
            this.deferredRenderer = deferredRenderer;

            // Sensible defaults
            this.FocalPlaneDistance = 42.0f;
            this.FocalRange = 50.0f;
            this.BlurDistance = 2.5f;
        }
예제 #2
0
        public void Should_Update_VisualNodes_When_Child_Moved_To_New_Parent()
        {
            using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
            {
                var dispatcher = new ImmediateDispatcher();
                var loop       = new Mock <IRenderLoop>();

                Decorator moveFrom;
                Decorator moveTo;
                Canvas    moveMe;

                var root = new TestRoot
                {
                    Child = new StackPanel
                    {
                        Children =
                        {
                            (moveFrom = new Decorator {
                                Child = moveMe = new Canvas(),
                            }),
                            (moveTo   = new Decorator()),
                        }
                    }
                };

                var sceneBuilder = new SceneBuilder();

                var target = new DeferredRenderer(
                    root,
                    loop.Object,
                    sceneBuilder: sceneBuilder,
                    dispatcher: dispatcher);

                root.Renderer = target;
                target.Start();
                RunFrame(target);

                moveFrom.Child = null;
                moveTo.Child   = moveMe;

                RunFrame(target);

                var scene        = target.UnitTestScene();
                var moveFromNode = (VisualNode)scene.FindNode(moveFrom);
                var moveToNode   = (VisualNode)scene.FindNode(moveTo);

                Assert.Empty(moveFromNode.Children);
                Assert.Equal(1, moveToNode.Children.Count);
                Assert.Same(moveMe, moveToNode.Children[0].Visual);
            }
        }
예제 #3
0
        public void Apply()
        {
            ShadowManager.Log("Applying to " + body);
            CelestialBody celestialBody = Tools.GetCelestialBody(body);

            Transform transform = Tools.GetScaledTransform(body);

            if (transform != null)
            {
                Renderer mr = transform.GetComponent <Renderer>();
                if (mr != null && hasSurface)
                {
                    shadowMat = new Material(ShadowShader);
                    GameObject go = new GameObject();
                    materialPQS    = go.AddComponent <MaterialPQS>();
                    localShadowMat = materialPQS.Apply(celestialBody, null, ShadowShader, false, true);

                    //shadowMaterial.ApplyMaterialProperties(shadowMat);
                    shadowMat.SetFloat(ShaderProperties._SunRadius_PROPERTY, (float)(ScaledSpace.InverseScaleFactor * Sun.Instance.sun.Radius));
                    localShadowMat.SetFloat(ShaderProperties._SunRadius_PROPERTY, (float)(Sun.Instance.sun.Radius));

                    shadowMat.name             = materialName;
                    localShadowMat.name        = materialName;
                    shadowMat.renderQueue      = (int)Tools.Queue.Geometry + 3;
                    localShadowMat.renderQueue = (int)Tools.Queue.Geometry + 3;
                    DeferredRenderer.Add(mr.gameObject, shadowMat);
                }

                ScaledShadowComponent sc  = transform.gameObject.AddComponent <ScaledShadowComponent>();
                LocalShadowComponent  lsc = FlightCamera.fetch.mainCamera.gameObject.AddComponent <LocalShadowComponent>();

                List <CelestialBody> casters = new List <CelestialBody>();
                if (caster != null)
                {
                    foreach (String b in caster)
                    {
                        casters.Add(Tools.GetCelestialBody(b));
                    }
                }
                sc.Apply(shadowMat, celestialBody, casters);
                lsc.Apply(localShadowMat, celestialBody, casters);
            }

            ApplyToMainMenu();

            GameEvents.onGameSceneLoadRequested.Add(SceneLoaded);
            if (HighLogic.LoadedScene == GameScenes.MAINMENU)
            {
                ApplyToMainMenu();
            }
        }
예제 #4
0
        public void Should_Update_VisualNode_Order_On_ZIndex_Change_With_Dirty_Ancestor()
        {
            using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
            {
                var dispatcher = new ImmediateDispatcher();
                var loop       = new Mock <IRenderLoop>();

                StackPanel stack;
                Canvas     canvas1;
                Canvas     canvas2;

                var root = new TestRoot
                {
                    Child = stack = new StackPanel
                    {
                        Children =
                        {
                            (canvas1   = new Canvas {
                                ZIndex =1
                            }), (canvas2= new Canvas {
                                ZIndex = 2
                            }),
                        }
                    }
                };

                var sceneBuilder = new SceneBuilder();

                var target = new DeferredRenderer(
                    root,
                    loop.Object,
                    sceneBuilder: sceneBuilder,
                    dispatcher: dispatcher);

                root.Renderer = target;
                target.Start();
                RunFrame(target);

                root.InvalidateVisual();
                canvas1.ZIndex = 3;

                RunFrame(target);

                var scene     = target.UnitTestScene();
                var stackNode = scene.FindNode(stack);

                Assert.Same(stackNode.Children[0].Visual, canvas2);
                Assert.Same(stackNode.Children[1].Visual, canvas1);
            }
        }
예제 #5
0
        public void Should_Add_Dirty_Rect_On_Child_Remove()
        {
            using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
            {
                var dispatcher = new ImmediateDispatcher();
                var loop       = new Mock <IRenderLoop>();

                Decorator decorator;
                Border    border;

                var root = new TestRoot
                {
                    Width  = 100,
                    Height = 100,
                    Child  = decorator = new Decorator
                    {
                        Child = border = new Border {
                            Width = 50, Height = 50, Background = Brushes.Red,
                        },
                    }
                };

                root.Measure(Size.Infinity);
                root.Arrange(new Rect(root.DesiredSize));

                var sceneBuilder = new SceneBuilder();

                var target = new DeferredRenderer(
                    root,
                    loop.Object,
                    sceneBuilder: sceneBuilder,
                    dispatcher: dispatcher);

                root.Renderer = target;
                target.Start();
                RunFrame(target);

                decorator.Child = null;

                RunFrame(target);

                var scene     = target.UnitTestScene();
                var stackNode = scene.FindNode(decorator);
                var dirty     = scene.Layers[0].Dirty.ToList();

                Assert.Equal(1, dirty.Count);
                Assert.Equal(new Rect(25, 25, 50, 50), dirty[0]);
            }
        }
        public static Renderable GetDefaultRenderable(DeferredRenderer renderer, DefaultMesh mesh)
        {
            IShaderProgram geometryShader  = renderer.GetShader(DeferredRenderer.DrawableType.deferredDefaultMesh);
            IShaderProgram lightViewShader = renderer.GetShader(DeferredRenderer.DrawableType.lightViewMesh);
            IShaderProgram shadowMapShader = renderer.GetShader(DeferredRenderer.DrawableType.shadowMapMesh);
            Renderable     renderable      = new Renderable();
            VAO            geometry        = renderer.GetDrawable(mesh, DeferredRenderer.DrawableType.deferredDefaultMesh);
            VAO            lightViewMesh   = renderer.GetDrawable(mesh, DeferredRenderer.DrawableType.lightViewMesh);
            VAO            shadowMapMesh   = renderer.GetDrawable(mesh, DeferredRenderer.DrawableType.shadowMapMesh);

            renderable.SetDeferredGeometryMesh(geometry, geometryShader);
            renderable.SetLightViewMesh(geometry, lightViewShader);
            renderable.SetShadowMapMesh(geometry, shadowMapShader);
            return(renderable);
        }
예제 #7
0
        public void Should_Update_Dirty_Controls_In_Order()
        {
            using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
            {
                var dispatcher = new ImmediateDispatcher();
                var loop       = new Mock <IRenderLoop>();

                Border    border;
                Decorator decorator;
                Canvas    canvas;

                var root = new TestRoot
                {
                    Child = decorator = new Decorator
                    {
                        Child = border = new Border {
                            Child = canvas = new Canvas()
                        }
                    }
                };

                var sceneBuilder = MockSceneBuilder(root);

                var target = new DeferredRenderer(
                    root,
                    loop.Object,
                    sceneBuilder: sceneBuilder.Object,
                    dispatcher: dispatcher);

                target.Start();
                IgnoreFirstFrame(target, sceneBuilder);
                target.AddDirty(border);
                target.AddDirty(canvas);
                target.AddDirty(root);
                target.AddDirty(decorator);

                var result = new List <IVisual>();

                sceneBuilder.Setup(x => x.Update(It.IsAny <Scene>(), It.IsAny <IVisual>()))
                .Callback <Scene, IVisual>((_, v) => result.Add(v));

                RunFrame(target);

                Assert.Equal(new List <IVisual> {
                    root, decorator, border, canvas
                }, result);
            }
        }
예제 #8
0
        public void First_Frame_Calls_SceneBuilder_UpdateAll()
        {
            var loop         = new Mock <IRenderLoop>();
            var root         = new TestRoot();
            var sceneBuilder = MockSceneBuilder(root);
            var dispatcher   = new ImmediateDispatcher();
            var target       = new DeferredRenderer(
                root,
                loop.Object,
                sceneBuilder: sceneBuilder.Object,
                dispatcher: dispatcher);

            target.Start();
            RunFrame(loop);

            sceneBuilder.Verify(x => x.UpdateAll(It.IsAny <Scene>()));
        }
예제 #9
0
        public virtual void Enter(StateManager man, IState prev)
        {
            WorldManager = man;

            if (LightManager == null)
            {
                LightManager = new LightManager(maxLights, maxLights, maxLights);
            }

            if (Renderer == null)
            {
                Renderer = new DeferredRenderer(Engine.Framebuffers, LightManager);
            }
            Engine.DeferredRenderer = Renderer;

            Initializer?.Invoke();
        }
예제 #10
0
        public void Frame_Does_Not_Call_SceneBuilder_If_No_Dirty_Controls()
        {
            var loop         = new Mock <IRenderLoop>();
            var root         = new TestRoot();
            var sceneBuilder = MockSceneBuilder(root);
            var target       = new DeferredRenderer(
                root,
                loop.Object,
                sceneBuilder: sceneBuilder.Object);

            target.Start();
            IgnoreFirstFrame(loop, sceneBuilder);
            RunFrame(loop);

            sceneBuilder.Verify(x => x.UpdateAll(It.IsAny <Scene>()), Times.Never);
            sceneBuilder.Verify(x => x.Update(It.IsAny <Scene>(), It.IsAny <Visual>()), Times.Never);
        }
예제 #11
0
        public static void Render(Control target, SKCanvas canvas, double dpi = 96, bool useDeferredRenderer = false)
        {
            var renderTarget = new CanvasRenderTarget(canvas, dpi);

            if (useDeferredRenderer)
            {
                using var renderer = new DeferredRenderer(target, renderTarget);
                renderer.Start();
                var renderLoopTask = renderer as IRenderLoopTask;
                renderLoopTask.Update(TimeSpan.Zero);
                renderLoopTask.Render();
            }
            else
            {
                ImmediateRenderer.Render(target, renderTarget);
            }
        }
        private void ApplyToMainMenu()
        {
            if (HighLogic.LoadedScene == GameScenes.MAINMENU)
            {
                GameObject go = Tools.GetMainMenuObject(body);

                if (go != mainMenuBody && go != null)
                {
                    mainMenuBody = go;
                    Renderer r = mainMenuBody.GetComponent <Renderer>();
                    if (r != null)
                    {
                        scaledMat.SetTexture("_MainTex", r.material.GetTexture("_MainTex"));
                        Light sunlight = GameObject.FindObjectsOfType <Light>().Last(l => l.isActiveAndEnabled);
                        DeferredRenderer.Add(r.gameObject, scaledMat);

                        if (mainMenuBody.name.EndsWith("(Clone)"))
                        {
                            // There is a race condition with Kopernicus. Sometimes, it
                            // will have cloned a body that already had clouds. Hide old clouds.
                            for (var c = 0; c < mainMenuBody.transform.childCount; ++c)
                            {
                                var child = mainMenuBody.transform.GetChild(c).gameObject;
                                if (child.name.StartsWith("EVE City Lights") && child.name.EndsWith("(Clone)"))
                                {
                                    child.SetActive(false);
                                }
                            }
                        }

                        ScaledCityComponent sc = r.gameObject.AddComponent <ScaledCityComponent>();
                        sc.Apply(scaledMat, sunlight);

                        CityLightsManager.Log("Applied to main Menu");
                    }
                }
                else if (go == null)
                {
                    CityLightsManager.Log("Cannot Find to apply to main Menu!");
                }
                else if (mainMenuBody == go)
                {
                    CityLightsManager.Log("Already Applied to main Menu!");
                }
            }
        }
예제 #13
0
 public Game(IContentLoader contentLoader, IRenderState renderState)
 {
     ui = new IslandUI(contentLoader);
     this.renderState   = renderState;
     this.contentLoader = contentLoader;
     renderer           = new DeferredRenderer(contentLoader, renderState);
     uiRenderer         = new UIRenderer(contentLoader, renderState);
     activeScene        = new IslandScene(contentLoader, renderer);
     waterEntity        = activeScene.GetEntityByName("water");
     if (waterEntity != null)
     {
         waterEntity.renderable.heightScaleFactor = 0.03f;
     }
     renderer.SetPointLights(activeScene.getPointLights());
     activeCam = new FirstPersonCamera(campos, camrot.X, camrot.Y, Camera.ProjectionType.Perspective, fov: 1f, width: 20, height: 20, zPlaneFar: 100f);
     startTime = DateTime.Now;
     water     = new Water(this.contentLoader);
 }
예제 #14
0
        public VoxelCustomRenderer(DX11Game game, DeferredRenderer dRenderer, DualContouringMeshBuilder dcMeshBuilder, DualContouringAlgorithm dcAlgo, MeshRenderDataFactory renderDataFactory)
        {
            this.game              = game;
            this.dRenderer         = dRenderer;
            this.dcMeshBuilder     = dcMeshBuilder;
            this.dcAlgo            = dcAlgo;
            this.renderDataFactory = renderDataFactory;


            var tex = new RAMTexture();

            defaultMaterial = new DCVoxelMaterial()
            {
                Texture = DCFiles.UVCheckerMap11_512
            };

            objectBuffer = DeferredMaterial.CreatePerObjectCB(game);
        }
예제 #15
0
        private DeferredRenderer CreateTargetAndRunFrame(
            TestRoot root,
            Mock <IRenderLoop> loop    = null,
            ISceneBuilder sceneBuilder = null,
            IDispatcher dispatcher     = null)
        {
            loop = loop ?? new Mock <IRenderLoop>();
            var target = new DeferredRenderer(
                root,
                loop.Object,
                sceneBuilder: sceneBuilder,
                dispatcher: dispatcher ?? new ImmediateDispatcher());

            root.Renderer = target;
            target.Start();
            RunFrame(loop);
            return(target);
        }
예제 #16
0
        private DeferredRenderer CreateTargetAndRunFrame(
            TestRoot root,
            Mock <IRenderTimer> timer  = null,
            ISceneBuilder sceneBuilder = null,
            IDispatcher dispatcher     = null)
        {
            timer      = timer ?? new Mock <IRenderTimer>();
            dispatcher = dispatcher ?? new ImmediateDispatcher();
            var target = new DeferredRenderer(
                root,
                new RenderLoop(timer.Object, dispatcher),
                sceneBuilder: sceneBuilder,
                dispatcher: dispatcher);

            root.Renderer = target;
            target.Start();
            RunFrame(target);
            return(target);
        }
예제 #17
0
        protected override void Dispose(bool disposing)
        {
            //GameWorld.Dispose(disposing);

            try
            {
                Game.Device.ClearState();
            }
            catch { }
            KeyboardInput.ReleaseDevice();
            MouseInput.ReleaseDevice();
            PrintText.Dispose();
            EffectManager.Dispose();
            SpriteDrawer.Dispose();
            DeferredRenderer.Dispose();
            SkyDome.Dispose();
            TextureLoader.Dispose();
            PhysicsEngine.Dispose();
        }
예제 #18
0
        public void Should_Update_VisualNode_Order_On_Child_Remove_Insert()
        {
            var dispatcher = new ImmediateDispatcher();
            var loop       = new Mock <IRenderLoop>();

            StackPanel stack;
            Canvas     canvas1;
            Canvas     canvas2;
            var        root = new TestRoot
            {
                Child = stack = new StackPanel
                {
                    Children =
                    {
                        (canvas1 = new Canvas()),
                        (canvas2 = new Canvas()),
                    }
                }
            };

            var sceneBuilder = new SceneBuilder();
            var target       = new DeferredRenderer(
                root,
                loop.Object,
                sceneBuilder: sceneBuilder,
                dispatcher: dispatcher);

            root.Renderer = target;
            target.Start();
            RunFrame(target);

            stack.Children.Remove(canvas2);
            stack.Children.Insert(0, canvas2);

            RunFrame(target);

            var scene     = target.UnitTestScene();
            var stackNode = scene.FindNode(stack);

            Assert.Same(stackNode.Children[0].Visual, canvas2);
            Assert.Same(stackNode.Children[1].Visual, canvas1);
        }
        public ParticleSystem(DeferredRenderer renderer, IContentLoader contentLoader)
        {
            random = new Random();
            //Rendering
            this.renderer      = renderer;
            deferredRenderable = new Renderable();
            var            plane    = Meshes.CreatePlane(1, 1, 1, 1).Transform(Transformation.Rotation(-90, Axis.X));
            IShaderProgram shader   = renderer.GetShader(DeferredRenderer.DrawableType.particleMesh);
            VAO            planeVao = renderer.GetDrawable(plane, DeferredRenderer.DrawableType.particleMesh);

            deferredRenderable.SetDeferredGeometryMesh(planeVao, shader);
            ITexture2D defaultAlpha = contentLoader.Load <ITexture2D>("particleDefault.png");

            deferredRenderable.SetAlbedoTexture(defaultAlpha);
            deferredRenderable.SetAlphaMap(defaultAlpha);
            deferredRenderable.faceCullingMode = FaceCullingMode.NONE;
            VAO            shadowPlaneVao = renderer.GetDrawable(plane, DeferredRenderer.DrawableType.particleShadowLightView);
            IShaderProgram shadowShader   = renderer.GetShader(DeferredRenderer.DrawableType.particleShadowLightView);

            shadowRenderable = new Renderable();
            shadowRenderable.SetDeferredGeometryMesh(shadowPlaneVao, shadowShader);
            shadowRenderable.SetAlbedoTexture(defaultAlpha);
            shadowRenderable.SetAlphaMap(defaultAlpha);
            shadowRenderable.faceCullingMode = FaceCullingMode.NONE;
            //ParticleSystemSetup
            globalModules       = new List <ParticleModule>();
            perParticleModules  = new List <ParticleModule>();
            particleColor       = new Range3D(new Vector3(1, 1, 1));
            keepScaleRatio      = true;
            scaleAspect         = new AspectRatio3D(AspectRatio3D.Axis.XAxis, 1);
            particlePoolList    = new List <Particle>();
            spawnedParticleList = new List <Particle>();
            particleRemoveList  = new List <Particle>();
            SetMaxParticles(100);
            spawnArea           = new Range3D(new Vector3(-0.1f, 0, -0.1f), new Vector3(0.1f, 0, 0.1f));
            spawnScale          = new Range3D(new Vector3(0f, 0f, 0f), new Vector3(1f, 1f, 1f));
            spawnAcceleration   = new Range3D(new Vector3(0, 0.1f, 0), new Vector3(0, 5f, 0));
            spawnIntervallRange = new Range(0f, 1f);
            spawnIntervall      = spawnIntervallRange.GetRandomValue(random);
            spawnRate           = new Range(1, 1);
            lifeTimeRange       = new Range(10.0f);
        }
예제 #20
0
        private void Initialize()
        {
            _camera          = new Camera2D(this);
            _camera.NearClip = -1000;
            _camera.FarClip  = 1000;
            _camera.Position = new Vector2(1496, 1624);

            _inputService            = (IInputService)Services.GetService(typeof(IInputService));
            _inputService.MouseMove += _inputService_MouseMove;
            _inputService.KeyDown   += _inputService_KeyDown;

            _textureFactory = new TextureFactory(this);
            _maps           = new Maps(this);

            _shader   = new DiffuseShader(this);
            _renderer = new DeferredRenderer(this);

            Tracer.Info("Loading Content...");
            LoadContent();
        }
예제 #21
0
        public void TestDeferredRendererLineElement()
        {
            var game = new DX11Game();

            game.InitDirectX();

            var renderer = new DeferredRenderer(game);

            var el = renderer.CreateLinesElement();

            el.Lines.AddBox(new BoundingBox(Vector3.Zero, MathHelper.One), new Color4(1, 0, 0));


            game.GameLoopEvent += delegate
            {
                renderer.Draw();
            };

            game.Run();
        }
        private void Window_Initialized(object sender, EventArgs e)
        {
            MainPlayer.Initialize();
            float aspectRatio = (float)view1.Width / (float)view1.Height;

            Camera.CurrentBehavior = Behavior.Spectator;
            //Camera.Perspective((float)Math.PI / 4.0f, aspectRatio, 1.0f, 1000000.0f);
            Camera.Perspective((float)Math.PI / 4.0f, aspectRatio, 1.0f, 4000.0f);
            Camera.Position      = new Vector3(0, 0, 0);
            Camera.Velocity      = new Vector3(40.0f, 40.0f, 40.0f);
            Camera.RotationSpeed = 0.25f;
            WorldTime.Speed      = 0;

            //compile shaders
            List <BaseGameObject> shaders = WorldData.GetObjectsByType(typeof(Shader));

            foreach (Shader s in shaders)
            {
                s.Recompile();
            }



            SpriteDrawer.Initialize();
            DeferredRenderer.Initialize((int)view1.Width, (int)view1.Height);
            DeferredRenderer.RenderHeight = (int)view1.Height;
            DeferredRenderer.RenderWidth  = (int)view1.Width;
            SkyDome.Initialize();
            Rendering.Grid.Initialize();

            view1.OnRenderView += new EventHandler(view1_OnRender);
            view1.D3DScene      = new CellViewer((int)view1.Width, (int)view1.Height);
            view1.OnRenderView += new EventHandler(view1_OnRender);

            this.WindowState = System.Windows.WindowState.Maximized;


            GameData.LoadGameData();
            PhysicsEngine.Initialize();
            ScriptManager.Initialize();
        }
예제 #23
0
        public override void OnGUI(GUI ui)
        {
            base.OnGUI(ui);

            if (m_renderer == null)
            {
                m_renderer = Application.Engine.Renderer as DeferredRenderer;
                if (m_renderer == null)
                {
                    return;
                }
            }

            var width  = 320;
            var height = 200;

            ui.DrawTexture(new Rectangle(0, 0, width, height), m_renderer.ColorBuffer);
            ui.DrawTexture(new Rectangle(0, height, width, height), m_renderer.NormalMap);
            ui.DrawTexture(new Rectangle(0, height * 2, width, height), m_renderer.DepthBuffer);
            ui.DrawTexture(new Rectangle(0, height * 3, width, height), m_renderer.LightMap);
        }
        private void btnOk_Click(object sender, RoutedEventArgs e)
        {
            lblErrMsg.Text = "";
            if (objectToEdit == null)
            {
                objectToEdit = new Shader();
            }

            Shader obj = objectToEdit as Shader;

            obj.BaseObjectId   = txtBaseObjectId.Text;
            obj.BaseObjectName = txtBaseObjectName.Text;
            obj.ShaderString   = shaderCode.Text;

            string err = obj.Recompile();

            if (!string.IsNullOrEmpty(err))
            {
                lblErrMsg.Text = err;
                return;
            }
            else
            {
                lblErrMsg.Text = "";
                DeferredRenderer.InitializeShaderMaterials();
            }

            obj.Category = objCategory;
            bool success = isEditingObj ? WorldData.UpdateObject(obj) : WorldData.AddObject(obj);

            if (!success)
            {
                MessageBox.Show(Application.Current.MainWindow, "ID already exists", "AddObject Failure", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.Cancel);
            }
            else
            {
                //this.Close();
                //if (parentWindow != null) parentWindow.Refresh();
            }
        }
예제 #25
0
        public WorldRenderingSimulator()
        {
            deferred = TW.Graphics.AcquireRenderer();

            //deferred.SSAO.MRadiusMultiplier = 10;
            //deferred.SSAO.MNumDirs = 8;
            //deferred.SSAO.MNumSteps = 2;
            //deferred.SSAO.MContrast = 2;
            deferred.SSAO.MRadiusMultiplier = 0.5f;
            deferred.PointLightRenderer.ShadowUpdateInterval = 240;

            var data = TW.Data.GetSingleton <Data>();

            {
                var light = deferred.CreateDirectionalLight();
                light.LightDirection = Vector3.Normalize(new Vector3(1, -1, 1));
                light.ShadowsEnabled = true;
                data.LightCreated    = true;

                //var light = deferred.CreateSpotLight();
                //light.LightPosition = new Vector3(-1,1,-1) *30;
                //light.LightIntensity = 0.1f;
                //if (data.SunEnabled)
                //  light.LightIntensity = 1;
                //light.LightRadius = 400;
                //light.SpotDirection = Vector3.Normalize(-light.LightPosition);
                //light.ShadowsEnabled = true;
            }



            info = TW.Data.GetSingleton <CameraInfo>();



            entitySimulator     = new EntitySimulator();
            wireframeSimulator  = new WireframeBoxSimulator();
            pointLightSimulator = new PointLightSimulator();
        }
예제 #26
0
        public void TestShowcaseSingleFrame()
        {
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
            var game = createGame();

            game.SpectaterCamera = loadCamera(ShowcaseCamera);
            game.Camera          = game.SpectaterCamera;

            var renderer = new DeferredRenderer(game);

            var showcase = new ShowcaseSceneBuilder();

            showcase.CreateScene(renderer);

            game.GameLoopEvent += delegate
            {
                renderer.Draw();
                game.Exit();
            };

            game.Run();
        }
예제 #27
0
        public void Frame_Does_Not_Call_SceneBuilder_If_No_Dirty_Controls()
        {
            using (UnitTestApplication.Start(TestServices.MockPlatformRenderInterface))
            {
                var dispatcher   = new ImmediateDispatcher();
                var loop         = new Mock <IRenderLoop>();
                var root         = new TestRoot();
                var sceneBuilder = MockSceneBuilder(root);

                var target = new DeferredRenderer(
                    root,
                    loop.Object,
                    sceneBuilder: sceneBuilder.Object);

                target.Start();
                IgnoreFirstFrame(target, sceneBuilder);
                RunFrame(target);

                sceneBuilder.Verify(x => x.UpdateAll(It.IsAny <Scene>()), Times.Never);
                sceneBuilder.Verify(x => x.Update(It.IsAny <Scene>(), It.IsAny <Visual>()), Times.Never);
            }
        }
예제 #28
0
        private void initializeTW()
        {
            game             = TW.Graphics;
            deferredRenderer = TW.Graphics.AcquireRenderer();

            var boxRenderer = BoxRenderer.Instance;

            throw new NotImplementedException();
            //boxRenderer.SetGame(game);

            if (hideAxes)
            {
                //Hide axes, ugly hack
                PropertyInfo prop = game.GetType().GetProperty("RenderAxis", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                prop.SetValue(game, false, null);
            }

            cameraLight             = deferredRenderer.CreatePointLight();
            cameraLight.LightRadius = 75;

            extraLight                = deferredRenderer.CreatePointLight();
            extraLight.LightRadius    = 100f;
            extraLight.ShadowsEnabled = true;
            extraLight.Color          = new Vector3(1, 1, 0.85f);
            extraLight.LightPosition  = new Vector3(1000, 1000, 1000);

            sun             = deferredRenderer.CreatePointLight();
            sun.LightRadius = 1000;
            float intensity = 1.25f;

            sun.Color          = new Vector3(0.75f * intensity, 0.75f * intensity, 0.5f * intensity);
            sun.ShadowsEnabled = true;
            sun.LightPosition  = new Vector3(-5, 30, 10);

            seedDisplay  = new TextTexture(game, 500, 50);
            batchDisplay = new TextTexture(game, 500, 50);
            infoDisplay  = new TextTexture(game, 500, 50);
        }
        public void Remove()
        {
            CelestialBody celestialBody = Tools.GetCelestialBody(body);

            ShadowManager.Log("Removing Shadow obj");
            Transform transform = Tools.GetScaledTransform(body);

            if (transform != null)
            {
                GameObject.DestroyImmediate(transform.gameObject.GetComponents <ScaledShadowComponent>().First(sc => sc.GUID == materialName));

                LocalShadowComponent lc = FlightCamera.fetch.mainCamera.gameObject.GetComponents <LocalShadowComponent>().FirstOrDefault(sc => sc.GUID == materialName);
                if (lc != null)
                {
                    GameObject.DestroyImmediate(lc);
                }

                DeferredRenderer.Remove(transform.gameObject, shadowMat);
            }
            materialPQS.Remove();
            GameObject.DestroyImmediate(materialPQS);
            GameEvents.onGameSceneLoadRequested.Remove(SceneLoaded);
        }
        public static void ShowVoxelGrid(VoxelGrid grid)
        {
            var game = new DX11Game();

            game.InitDirectX();
            var renderer = new DeferredRenderer(game);

            var light = renderer.CreateDirectionalLight();

            var ret = grid;

            IMesh voxelMesh = Voxelizer.CreateVoxelMesh(ret);

            var voxel = renderer.CreateMeshElement(voxelMesh);

            voxel.WorldMatrix = Matrix.Translation(0, 0, 0);

            game.GameLoopEvent += delegate
            {
                renderer.Draw();
            };
            game.Run();
        }
예제 #31
0
        /// <summary>
        ///
        /// </summary>
        private void StartD3D()
        {
            if (EffectsManager == null || RenderTechniquesManager == null)
            {
                // Make sure both are null
                RenderTechniquesManager = null;
                EffectsManager          = null;
                RenderTechniquesManager = new DefaultRenderTechniquesManager();
                EffectsManager          = new DefaultEffectsManager(RenderTechniquesManager);
                return; // StardD3D() is called from DP changed handler
            }

            surfaceD3D = new DX11ImageSource(EffectsManager.AdapterIndex);
            surfaceD3D.IsFrontBufferAvailableChanged += OnIsFrontBufferAvailableChanged;
            device           = EffectsManager.Device;
            deferredRenderer = new DeferredRenderer();
            renderRenderable.DeferredRenderer = deferredRenderer;

            CreateAndBindTargets();
            SetDefaultRenderTargets();
            Source = surfaceD3D;
            InvalidateRender();
        }
예제 #32
0
        /// <summary>
        /// 
        /// </summary>
        private void StartD3D()
        {
            this.surfaceD3D = new DX11ImageSource();
            this.surfaceD3D.IsFrontBufferAvailableChanged += this.OnIsFrontBufferAvailableChanged;
            this.device = EffectsManager.Device;
            this.deferredRenderer = new DeferredRenderer();
            this.renderRenderable.DeferredRenderer = this.deferredRenderer;

            this.CreateAndBindTargets();
            this.SetDefaultRenderTargets();
            this.Source = this.surfaceD3D;
        }
예제 #33
0
        /// <summary>
        /// 
        /// </summary>
        private void StartD3D()
        {
            if (EffectsManager == null || RenderTechniquesManager == null)
            {
                // Make sure both are null
                RenderTechniquesManager = null;
                EffectsManager = null;
                RenderTechniquesManager = new DefaultRenderTechniquesManager();
                EffectsManager = new DefaultEffectsManager(RenderTechniquesManager);
                return; // StardD3D() is called from DP changed handler
            }

            surfaceD3D = new DX11ImageSource(EffectsManager.AdapterIndex);
            surfaceD3D.IsFrontBufferAvailableChanged += OnIsFrontBufferAvailableChanged;
            device = EffectsManager.Device;
            deferredRenderer = new DeferredRenderer();
            renderRenderable.DeferredRenderer = deferredRenderer;

            CreateAndBindTargets();
            SetDefaultRenderTargets();
            Source = surfaceD3D;
            InvalidateRender();
        }
예제 #34
0
        /// <summary>
        /// 
        /// </summary>
        private void StartD3D()
        {
            surfaceD3D = new DX11ImageSource();
            surfaceD3D.IsFrontBufferAvailableChanged += OnIsFrontBufferAvailableChanged;
            device = EffectsManager.Device;
            deferredRenderer = new DeferredRenderer();
            renderRenderable.DeferredRenderer = deferredRenderer;

            CreateAndBindTargets();
            SetDefaultRenderTargets();
            Source = surfaceD3D;
            InvalidateRender();
        }
예제 #35
0
파일: SSAO.cs 프로젝트: DavidMann10k/nyx
 /// <summary>
 /// Initializes a new instance of the <see cref="SSAO" /> class.
 /// </summary>
 /// <param name="deferredRenderer">The deferred renderer which will be using the SSAO effect.</param>
 public SSAO(DeferredRenderer deferredRenderer)
 {
     this.deferredRenderer = deferredRenderer;
 }