public GlowingManager(int width, int height) { // On Initialise le transform, puisqu'on se trouve en dehors de la scène transform_ = new Transform(); transform_.SetScale(Screen.Instance.Width, Screen.Instance.Height, 1.0f); transform_.Translate(0.0f, 0.0f, 0.5f); // Initialisation du material servant à dessiner le quad final m_DrawingMaterial = new MaterialDX11("vDefault.cso", "pUnlit.cso", "gDefault.cso"); // Initialisation du Quad que l'on utilise pour dessiner modelrenderer = new MeshRenderer(m_DrawingMaterial, Quad.GetMesh()); PostProcessingView = new View(new Transform(), new OrthoProjection(Screen.Instance.Width, Screen.Instance.Height, 0.1f, 100.0f)); Quaternion xquat = Quaternion.RotationAxis(new Vector3(1.0f, 0.0f, 0.0f), 0 * 0.01f); Quaternion yquat = Quaternion.RotationAxis(new Vector3(0.0f, 1.0f, 0.0f), 0 * 0.01f); Quaternion rotQuat = Quaternion.Multiply(xquat, yquat); Matrix mview = Matrix.AffineTransformation(1.0f, rotQuat, new Vector3(00.0f, 0.0f, 10.0f)); Instance = this; MaterialDX11 HBlurMaterial = new MaterialDX11("vDefault.cso", "pHBlur.cso", "gDefault.cso"); HBlurMaterial.AddConstantBuffer <HBlurDesc>(new HBlurDesc(width / 2, 50)); MaterialDX11 VBlurMaterial = new MaterialDX11("vDefault.cso", "pVBlur.cso", "gDefault.cso"); VBlurMaterial.AddConstantBuffer <VBlurDesc>(new VBlurDesc(height / 2, 50)); m_Material = new MaterialDX11("vDefault.cso", "pGlow.cso", "gDefault.cso"); m_Material.AddConstantBuffer <GlowDesc>(new GlowDesc(false, false, new Vector4(0.0f, 0.0f, 0.0f, 1.0f))); m_RenderTexture = new RenderTexture(width, height); m_ImageProcessing = new ImageProcessing(width, height, m_RenderTexture.SRV); m_ImageProcessing.AddPasse(HBlurMaterial); m_ImageProcessing.AddPasse(HBlurMaterial); m_ImageProcessing.AddPasse(VBlurMaterial); m_ImageProcessing.AddPasse(VBlurMaterial); // Additive Blending RenderTargetBlendDescription renderdesc = new RenderTargetBlendDescription() { BlendOperation = BlendOperation.Add, AlphaBlendOperation = BlendOperation.Add, SourceAlphaBlend = BlendOption.Zero, DestinationAlphaBlend = BlendOption.Zero, SourceBlend = BlendOption.One, DestinationBlend = BlendOption.One, IsBlendEnabled = true, RenderTargetWriteMask = ColorWriteMaskFlags.All }; BlendStateDescription blendStateDesc2 = new BlendStateDescription() { IndependentBlendEnable = false, // DirectX peut utiliser 8 RenderTarget simultanément, chauqe renderTarget // peut être lié à un RenderTargetBlendDescription différent AlphaToCoverageEnable = false }; blendStateDesc2.RenderTarget[0] = renderdesc; glowingBlending = new BlendState(ApplicationDX11.Instance.Device, blendStateDesc2); }
private void Initialize(IntPtr handle) { m_SwapChainHelper = new SwapChainHelper(handle); Device = m_SwapChainHelper.CreateDeviceWithSwapChain(DeviceCreationFlags.Debug); DeviceContext = Device.ImmediateContext; MainRenderTarget = new RenderTarget ( m_SwapChainHelper.GetRenderTargetView(), Screen.Instance.Width, Screen.Instance.Height ); scene_ = new Scene(new Color4(0.0f, 0.2f, 0.7f, 1.0f)); // On récupère le RenderTargetView généré par notre swapchain représentant // le backBuffer new LightManager(); new ProjectorManager(); new CollisionManager(); new TimeHelper(); new LayerManager(); // Initialisation de la transparence RenderTargetBlendDescription desc = new RenderTargetBlendDescription() { AlphaBlendOperation = BlendOperation.Add, BlendOperation = BlendOperation.Add, SourceAlphaBlend = BlendOption.SourceAlpha, DestinationAlphaBlend = BlendOption.One, SourceBlend = BlendOption.SourceAlpha, DestinationBlend = BlendOption.InverseSourceAlpha, IsBlendEnabled = true, RenderTargetWriteMask = ColorWriteMaskFlags.All }; BlendStateDescription blendStateDesc = new BlendStateDescription() { IndependentBlendEnable = false, // DirectX peut utiliser 8 RenderTarget simultanément, chauqe renderTarget // peut être lié à un RenderTargetBlendDescription différent AlphaToCoverageEnable = false }; blendStateDesc.RenderTarget[0] = desc; mainBlend = new BlendState(Device, blendStateDesc); DeviceContext.OutputMerger.BlendState = mainBlend; // Fin Transparence InitializeRasterState(); new GlowingManager(Screen.Instance.Width, Screen.Instance.Height); m_ApplicationInformation = new ApplicationInformation(); renderTex = new RenderTexture(Screen.Instance.Width, Screen.Instance.Height); imageProcessing = new ImageProcessing(Screen.Instance.Width, Screen.Instance.Height, renderTex.SRV); //renderTarget.DepthStencil.SetDepthComparison( Comparison.LessEqual ); MainRenderTarget.DepthStencil.SetDepthComparison(Comparison.LessEqual); new InputManager(m_renderForm); }