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; } }
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 } }; }
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 } }; }