public override void SetParameter(BillboardRenderParameter p) { var param = p as ToneMappingRenderParameter; if (param == null) { return; } RenderParam = param; }
void InitRender() { RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.ShadowMap0, GameProperty.resolutionWidth, GameProperty.resolutionHeight, SurfaceType.R32F, true, true); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.DiffuseLightMap, GameProperty.resolutionWidth, GameProperty.resolutionHeight, SurfaceType.A8R8G8B8, true, true); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.SpecularLightMap, GameProperty.resolutionWidth, GameProperty.resolutionHeight, SurfaceType.A8R8G8B8, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.GBuffer0, GameProperty.resolutionWidth, GameProperty.resolutionHeight, SurfaceType.A8R8G8B8, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.GBuffer1, GameProperty.resolutionWidth, GameProperty.resolutionHeight, SurfaceType.R32F, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.HDRBuffer, GameProperty.resolutionWidth, GameProperty.resolutionHeight, SurfaceType.A8R8G8B8, true, true); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.ScaledBuffer, GameProperty.resolutionWidth / 4, GameProperty.resolutionHeight / 4, SurfaceType.A8R8G8B8, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.LuminanceBuffer64, 64, 64, SurfaceType.R16F, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.LuminanceBuffer16, 16, 16, SurfaceType.R16F, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.LuminanceBuffer4, 4, 4, SurfaceType.R16F, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.LuminanceBuffer1, 1, 1, SurfaceType.R16F, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.AdaptedLuminanceBuffer0, 1, 1, SurfaceType.R16F, false, false); RenderTargetManager.Instance.AddRenderTarget( (int)RenderTargetType.AdaptedLuminanceBuffer1, 1, 1, SurfaceType.R16F, false, false); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.SHADOW, new ShadowMapRenderPath() { //Enabled = false, Name = "ShadowMap", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.ShadowMap0, }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.GBUFFER, new GBufferRenderPath() { //Enabled = false, Name = "GBuffer", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndices = new int[] { (int)RenderTargetType.DiffuseLightMap, (int)RenderTargetType.GBuffer0, (int)RenderTargetType.GBuffer1, } }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.LIGHTBUFFER, new LightBufferRenderPath() { //Enabled = false, Name = "LightBuffer", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndices = new int[] { (int)RenderTargetType.DiffuseLightMap, (int)RenderTargetType.SpecularLightMap, }, SphereModel = ModelFactory.Instance.Create("PointLightSphere"), Billboard = BillboardFactory.Instance.Create(), NormalMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.GBuffer0), DepthMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.GBuffer1), //ClearColor = Color.Gray, }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.DEFERRED, new DeferredRenderPath() { Enabled = false, Name = "Deferred", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.BackBuffer, Billboard = BillboardFactory.Instance.Create(), AlbedoMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.GBuffer0), PositionMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.GBuffer1), NormalDepthMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.GBuffer2), ClearColor = Color.Gray, }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.OPAQUE, new OpaqueRenderPath() { //Enabled = false, Name = "Opaque", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.HDRBuffer, ShadowMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.ShadowMap0), DiffuseLightMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.DiffuseLightMap), SpecularLightMap = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.SpecularLightMap), }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.DEBUG, new DebugRenderPath() { //Enabled = false, Name = "Debug", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.HDRBuffer, }); ToneMappingRenderParameter = new ToneMappingRenderParameter() { HDRScene = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.HDRBuffer), ScaledBufferIndex = (int)RenderTargetType.ScaledBuffer, ScaledBuffer = TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.ScaledBuffer), LuminanceBufferIndices = new int[] { (int)RenderTargetType.LuminanceBuffer64, (int)RenderTargetType.LuminanceBuffer16, (int)RenderTargetType.LuminanceBuffer4, (int)RenderTargetType.LuminanceBuffer1, }, LuminanceBuffers = new ITexture[] { TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.LuminanceBuffer64), TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.LuminanceBuffer16), TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.LuminanceBuffer4), TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.LuminanceBuffer1), }, AdaptedLuminanceBufferIndices = new int[] { (int)RenderTargetType.AdaptedLuminanceBuffer0, (int)RenderTargetType.AdaptedLuminanceBuffer1, }, AdaptedLuminanceBuffers = new ITexture[] { TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.AdaptedLuminanceBuffer0), TextureFactory.Instance.CreateRenderTarget((int)RenderTargetType.AdaptedLuminanceBuffer1), }, RenderTargetIndex = (int)RenderTargetType.BackBuffer, Exposure = 0.8f, }; RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.TONEMAPPING, new ToneMappingRenderPath() { //Enabled = false, Name = "ToneMapping", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.BackBuffer, Billboard = BillboardFactory.Instance.Create(), RenderParam = ToneMappingRenderParameter, }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.TRANSLUCENT, new TranslucentRenderPath() { //Enabled = false, Name = "Translucent", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.BackBuffer, }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.HUD, new HudRenderPath() { //Enabled = false, Name = "HUD", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.BackBuffer, }); RenderManagerAccessor.Instance.AddPath( (int)RenderPathType.DEBUGFONT, new FontRenderPath() { //Enabled = false, Name = "DebugFont", RenderDevice = RenderDeviceFactory.Instance.Create(), RenderTargetIndex = (int)RenderTargetType.BackBuffer, }); FrameCacheData.Create(); }