public void LoadContent(IContentManager manager, Engine.GraphicInfo ginfo, Engine.GraphicFactory factory, bool cullPointLight, bool useFloatingBufferForLightning) { _lightAddBlendState = new BlendState() { AlphaSourceBlend = Blend.One, ColorSourceBlend = Blend.One, AlphaDestinationBlend = Blend.One, ColorDestinationBlend = Blend.One, }; this.ginfo = ginfo; shadow = new DirectionalShadowRenderer(); shadow.ShadowFilteringType = filteringType; shadow.ShadowMapSize = shadowMapSize; shadow.SplitConstant = splitConstant; shadownBufferSize = ginfo.BackBufferWidth; shadowRT = factory.CreateRenderTarget(shadownBufferSize, shadownBufferSize, SurfaceFormat.Single, ginfo.UseMipMap, DepthFormat.Depth24Stencil8, ginfo.MultiSample); if (useFloatingBufferForLightning) { lightRT = factory.CreateRenderTarget(ginfo.BackBufferWidth, ginfo.BackBufferHeight, SurfaceFormat.HdrBlendable, ginfo.UseMipMap, DepthFormat.None, ginfo.MultiSample, RenderTargetUsage.PreserveContents); } else { lightRT = factory.CreateRenderTarget(ginfo.BackBufferWidth, ginfo.BackBufferHeight, SurfaceFormat.Color, ginfo.UseMipMap, DepthFormat.None, ginfo.MultiSample, RenderTargetUsage.PreserveContents); } pointLightEffect = factory.GetEffect("PointLight", false, true); directionalLightEffect = factory.GetEffect("ShadowDirectionalCascade", false, true); spotLightEffect = factory.GetEffect("ShadowSpot", false, true); sphereModel = new SimpleModel(factory, "Dsphere", true); blank = factory.CreateTexture2DColor(1, 1, Color.White); rt = factory.CreateRenderTarget(ginfo.BackBufferWidth, ginfo.BackBufferHeight, SurfaceFormat.Color, ginfo.UseMipMap, DepthFormat.Depth24Stencil8, ginfo.MultiSample); deferredRT = factory.CreateRenderTarget(shadownBufferSize, shadownBufferSize, SurfaceFormat.Single, ginfo.UseMipMap, DepthFormat.Depth24Stencil8, ginfo.MultiSample); shadow.Load(factory, ginfo); switch (shadowFilterSpot) { case ShadowFilter.NONE: spotLightEffect.CurrentTechnique = spotLightEffect.Techniques["Technique1"]; break; case ShadowFilter.PCF3x3: spotLightEffect.CurrentTechnique = spotLightEffect.Techniques["Technique2"]; break; case ShadowFilter.PCF7x7SOFT: spotLightEffect.CurrentTechnique = spotLightEffect.Techniques["Technique3"]; break; default: break; } }
public void LoadContent(IContentManager manager, Engine.GraphicInfo ginfo, Engine.GraphicFactory factory, bool cullPointLight, bool useFloatingBufferForLightning) { _lightAddBlendState = new BlendState() { AlphaSourceBlend = Blend.One, ColorSourceBlend = Blend.One, AlphaDestinationBlend = Blend.One, ColorDestinationBlend = Blend.One, }; this.ginfo = ginfo; shadow = new DirectionalShadowRenderer(); shadow.ShadowFilteringType = filteringType; shadow.ShadowMapSize = shadowMapSize; shadow.SplitConstant = splitConstant; shadownBufferSize = ginfo.BackBufferWidth; shadowRT = factory.CreateRenderTarget(shadownBufferSize, shadownBufferSize, SurfaceFormat.Single, ginfo.UseMipMap,DepthFormat.Depth24Stencil8,ginfo.MultiSample); if (useFloatingBufferForLightning) lightRT = factory.CreateRenderTarget(ginfo.BackBufferWidth, ginfo.BackBufferHeight, SurfaceFormat.HdrBlendable, ginfo.UseMipMap, DepthFormat.None, ginfo.MultiSample, RenderTargetUsage.PreserveContents); else lightRT = factory.CreateRenderTarget(ginfo.BackBufferWidth, ginfo.BackBufferHeight, SurfaceFormat.Color, ginfo.UseMipMap, DepthFormat.None, ginfo.MultiSample, RenderTargetUsage.PreserveContents); pointLightEffect = factory.GetEffect("PointLight",false,true); directionalLightEffect = factory.GetEffect("ShadowDirectionalCascade",false,true); spotLightEffect = factory.GetEffect("ShadowSpot",false,true); sphereModel = new SimpleModel(factory, "Dsphere", true); blank = factory.CreateTexture2DColor(1, 1, Color.White); rt = factory.CreateRenderTarget(ginfo.BackBufferWidth, ginfo.BackBufferHeight,SurfaceFormat.Color,ginfo.UseMipMap,DepthFormat.Depth24Stencil8,ginfo.MultiSample); deferredRT = factory.CreateRenderTarget(shadownBufferSize, shadownBufferSize, SurfaceFormat.Single,ginfo.UseMipMap, DepthFormat.Depth24Stencil8, ginfo.MultiSample); shadow.Load(factory,ginfo); switch (shadowFilterSpot) { case ShadowFilter.NONE: spotLightEffect.CurrentTechnique = spotLightEffect.Techniques["Technique1"]; break; case ShadowFilter.PCF3x3: spotLightEffect.CurrentTechnique = spotLightEffect.Techniques["Technique2"]; break; case ShadowFilter.PCF7x7SOFT: spotLightEffect.CurrentTechnique = spotLightEffect.Techniques["Technique3"]; break; default: break; } }