Наследование: Pokemon3D.Common.GameContextObject
Пример #1
0
        private void HandleCameraClearOrSkyPass(Camera camera)
        {
            var clearFlags = ClearOptions.DepthBuffer;

            if (camera.ClearColor.HasValue)
            {
                clearFlags |= ClearOptions.Target;
            }

            _device.Clear(clearFlags, camera.ClearColor.GetValueOrDefault(Color.Black), 1.0f, 0);

            var skybox = camera.Skybox;

            if (skybox != null)
            {
                skybox.Update(camera);

                _device.DepthStencilState = DepthStencilState.None;
                _device.BlendState        = BlendState.Opaque;

                _sceneEffect.ActivateLightingTechnique(LightTechniqueFlag.UseTexture | LightTechniqueFlag.LinearTextureSampling);
                RenderQueue.DrawElement(camera, skybox.DrawableElement, _sceneEffect, 0.0f);

                _device.DepthStencilState = DepthStencilState.Default;
            }
        }
Пример #2
0
        public ForwardSceneRenderer(GameContext context, SceneEffect effect, RenderSettings settings) : base(context)
        {
            _device                = context.GetService <GraphicsDevice>();
            _sceneEffect           = effect;
            RenderSettings         = settings;
            _allDrawables          = new List <DrawableElement>();
            _initializingDrawables = new List <DrawableElement>();
            _allCameras            = new List <Camera>();
            _allLights             = new List <Light>();

            _directionalLightShadowMap = new RenderTarget2D(_device, RenderSettings.ShadowMapSize, RenderSettings.ShadowMapSize, false, SurfaceFormat.Single, DepthFormat.Depth24);

            var width  = context.ScreenBounds.Width;
            var height = context.ScreenBounds.Height;

            _activeInputSource  = new RenderTarget2D(_device, width, height, false, SurfaceFormat.Color, DepthFormat.Depth24, 0, RenderTargetUsage.PlatformContents);
            _activeRenderTarget = new RenderTarget2D(_device, width, height, false, SurfaceFormat.Color, DepthFormat.Depth24, 0, RenderTargetUsage.PlatformContents);

            _shadowCasterQueueSolid = new RenderQueue(context, HandleShadowCasterObjects, GetShadowCasterSceneNodes, _sceneEffect)
            {
                BlendState           = BlendState.Opaque,
                DepthStencilState    = DepthStencilState.Default,
                RasterizerState      = RasterizerState.CullCounterClockwise,
                IsEnabled            = true,
                SortNodesBackToFront = false,
            };
            _shadowCasterQueueTransparent = new RenderQueue(context, HandleShadowCasterObjects, GetShadowCasterSceneNodesTransparent, _sceneEffect)
            {
                BlendState           = BlendState.AlphaBlend,
                DepthStencilState    = DepthStencilState.DepthRead,
                RasterizerState      = RasterizerState.CullCounterClockwise,
                IsEnabled            = true,
                SortNodesBackToFront = true,
            };

            _renderQueues = new List <RenderQueue>
            {
                new RenderQueue(context, HandleSolidObjects, GetSolidObjects, _sceneEffect)
                {
                    DepthStencilState = DepthStencilState.Default,
                    BlendState        = BlendState.Opaque,
                    RasterizerState   = RasterizerState.CullCounterClockwise,
                },
                new RenderQueue(context, HandleEffectTransparentObjects, GetTransparentObjects, _sceneEffect)
                {
                    DepthStencilState    = DepthStencilState.DepthRead,
                    BlendState           = BlendState.AlphaBlend,
                    RasterizerState      = RasterizerState.CullCounterClockwise,
                    SortNodesBackToFront = true
                }
            };
        }
Пример #3
0
        public ForwardSceneRenderer(GameContext context, SceneEffect effect, RenderSettings settings) : base(context)
        {
            _device = context.GetService<GraphicsDevice>();
            _sceneEffect = effect;
            RenderSettings = settings;
            _allDrawables = new List<DrawableElement>();
            _initializingDrawables = new List<DrawableElement>();
            _allCameras = new List<Camera>();
            _allLights = new List<Light>();

            _directionalLightShadowMap = new RenderTarget2D(_device, RenderSettings.ShadowMapSize, RenderSettings.ShadowMapSize, false, SurfaceFormat.Single, DepthFormat.Depth24);

            var width = context.ScreenBounds.Width;
            var height = context.ScreenBounds.Height;
            _activeInputSource = new RenderTarget2D(_device, width, height, false, SurfaceFormat.Color, DepthFormat.Depth24, 0, RenderTargetUsage.PlatformContents);
            _activeRenderTarget = new RenderTarget2D(_device, width, height, false, SurfaceFormat.Color, DepthFormat.Depth24, 0, RenderTargetUsage.PlatformContents);

            _shadowCasterQueueSolid = new RenderQueue(context, HandleShadowCasterObjects, GetShadowCasterSceneNodes, _sceneEffect)
            {
                BlendState = BlendState.Opaque,
                DepthStencilState = DepthStencilState.Default,
                RasterizerState = RasterizerState.CullCounterClockwise,
                IsEnabled = true,
                SortNodesBackToFront = false,
            };
            _shadowCasterQueueTransparent = new RenderQueue(context, HandleShadowCasterObjects, GetShadowCasterSceneNodesTransparent, _sceneEffect)
            {
                BlendState = BlendState.AlphaBlend,
                DepthStencilState = DepthStencilState.DepthRead,
                RasterizerState = RasterizerState.CullCounterClockwise,
                IsEnabled = true,
                SortNodesBackToFront = true,
            };

            _renderQueues = new List<RenderQueue>
            {
                new RenderQueue(context, HandleSolidObjects, GetSolidObjects, _sceneEffect)
                {
                    DepthStencilState = DepthStencilState.Default,
                    BlendState = BlendState.Opaque,
                    RasterizerState = RasterizerState.CullCounterClockwise,
                },
                new RenderQueue(context, HandleEffectTransparentObjects, GetTransparentObjects, _sceneEffect)
                {
                    DepthStencilState = DepthStencilState.DepthRead,
                    BlendState = BlendState.AlphaBlend,
                    RasterizerState = RasterizerState.CullCounterClockwise,
                    SortNodesBackToFront = true
                }
            };
        }