Example #1
0
        bool InitD3DEnviroment()
        {
            if (mInitialized)
            {
                return(true);
            }
            mInitialized = true;
            var rc = EngineNS.CEngine.Instance.RenderContext;

            EngineNS.CSwapChainDesc desc;
            desc.Format       = EngineNS.EPixelFormat.PXF_R8G8B8A8_UNORM;
            desc.Width        = (UInt32)DrawPanel.Width;
            desc.Height       = (UInt32)DrawPanel.Height;
            desc.WindowHandle = DrawPanel.Handle;
            SwapChain         = rc.CreateSwapChain(desc);

            var evpDesc = new EngineNS.Graphics.CGfxViewPortDesc();

            evpDesc.IsDefault           = true;
            evpDesc.Width               = desc.Width;
            evpDesc.Height              = desc.Height;
            evpDesc.DepthStencil.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT;
            evpDesc.DepthStencil.Width  = desc.Width;
            evpDesc.DepthStencil.Height = desc.Height;
            var rtDesc = new EngineNS.CRenderTargetViewDesc();

            rtDesc.CreateSRV = 0;
            evpDesc.RenderTargets.Add(rtDesc);
            EditorViewPort = new EngineNS.Graphics.CGfxViewPort();
            EditorViewPort.Init(rc, SwapChain, evpDesc);

            return(true);
        }
Example #2
0
        public async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx, UInt32 width, UInt32 height, CGfxSceneView BaseSceneView)
        {
            if (RHICtx == null || BaseSceneView == null)
            {
                return(false);
            }

            if (mSE_BlurH == null)
            {
                mSE_BlurH = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileBloomBlurHSE>();
            }
            if (mSE_BlurV == null)
            {
                mSE_BlurV = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileBloomBlurVSE>();
            }

            if (mDownSampSE == null)
            {
                mDownSampSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileBloomDSSE>();
            }

            if (mUpSampSE == null)
            {
                mUpSampSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileBloomUSSE>();
            }

            var ScreenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(RHICtx, CEngineDesc.ScreenAlignedTriangleName, true);
            var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(RHICtx, RName.GetRName("Material/defaultmaterial.instmtl"));

            mScreenAlignedTriangle = CEngine.Instance.MeshManager.CreateMesh(RHICtx, ScreenAlignedTriangle);
            mScreenAlignedTriangle.SetMaterialInstance(RHICtx, 0, mtl, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs);
            //await mScreenAlignedTriangle.AwaitEffects();

            UInt32 Width  = Math.Max(width, 64);
            UInt32 Height = Math.Max(height, 64);

            UInt32 Width8  = Width / 8;
            UInt32 Height8 = Height / 8;

            UInt32 Width16  = Width / 16;
            UInt32 Height16 = Height / 16;

            UInt32 Width32  = Width / 32;
            UInt32 Height32 = Height / 32;

            UInt32 Width64  = Width / 64;
            UInt32 Height64 = Height / 64;

            EPixelFormat chooseFormat = EPixelFormat.PXF_R8G8B8A8_UNORM; //EPixelFormat.PXF_R11G11B10_FLOAT;

            if (RHICtx.ContextCaps.SupportHalfRT == 0)
            {
                chooseFormat = EPixelFormat.PXF_R8G8B8A8_UNORM;
            }
            else
            {
                chooseFormat = EPixelFormat.PXF_R16G16B16A16_FLOAT;
            }
            Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Graphics", $"MobileBloom render texture format: {chooseFormat}");
            //blur h pass;
            {
                CGfxScreenViewDesc VI_BlurH = new CGfxScreenViewDesc();
                VI_BlurH.UseDepthStencilView = false;
                VI_BlurH.Width  = Width8;
                VI_BlurH.Height = Height8;

                CRenderTargetViewDesc RTVDesc0 = new CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width8;
                RTVDesc0.Height        = Height8;
                VI_BlurH.mRTVDescArray.Add(RTVDesc0);

                mView_BlurH8 = new CGfxScreenView();
                if (await mView_BlurH8.Init(RHICtx, null, VI_BlurH, mSE_BlurH, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
                mSE_BlurH.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0);
            }

            //blur v pass;
            {
                CGfxScreenViewDesc VI_BlurV = new CGfxScreenViewDesc();
                VI_BlurV.UseDepthStencilView = false;
                VI_BlurV.Width  = Width8;
                VI_BlurV.Height = Height8;

                var RTVDesc0 = new EngineNS.CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width8;
                RTVDesc0.Height        = Height8;
                VI_BlurV.mRTVDescArray.Add(RTVDesc0);

                mView_BlurV8 = new CGfxScreenView();
                if (await mView_BlurV8.Init(RHICtx, null, VI_BlurV, mSE_BlurV, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
                mSE_BlurV.mSrcTex = mView_BlurH8.FrameBuffer.GetSRV_RenderTarget(0);
            }

            //ds16;
            {
                CGfxScreenViewDesc DSViewInfo16 = new CGfxScreenViewDesc();
                DSViewInfo16.UseDepthStencilView = false;
                DSViewInfo16.Width  = Width16;
                DSViewInfo16.Height = Height16;

                var RTVDesc0 = new EngineNS.CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width16;
                RTVDesc0.Height        = Height16;
                DSViewInfo16.mRTVDescArray.Add(RTVDesc0);

                mDSView16 = new CGfxScreenView();
                if (await mDSView16.Init(RHICtx, null, DSViewInfo16, mDownSampSE, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
            }

            //ds32;
            {
                CGfxScreenViewDesc DSViewInfo32 = new CGfxScreenViewDesc();
                DSViewInfo32.UseDepthStencilView = false;
                DSViewInfo32.Width  = Width32;
                DSViewInfo32.Height = Height32;

                var RTVDesc0 = new EngineNS.CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width32;
                RTVDesc0.Height        = Height32;
                DSViewInfo32.mRTVDescArray.Add(RTVDesc0);

                mDSView32 = new CGfxScreenView();
                if (await mDSView32.Init(RHICtx, null, DSViewInfo32, mDownSampSE, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
            }

            //ds64;
            {
                CGfxScreenViewDesc DSViewInfo64 = new CGfxScreenViewDesc();
                DSViewInfo64.UseDepthStencilView = false;
                DSViewInfo64.Width  = Width64;
                DSViewInfo64.Height = Height64;

                var RTVDesc0 = new EngineNS.CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width64;
                RTVDesc0.Height        = Height64;
                DSViewInfo64.mRTVDescArray.Add(RTVDesc0);

                mDSView64 = new CGfxScreenView();
                if (await mDSView64.Init(RHICtx, null, DSViewInfo64, mDownSampSE, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
            }

            //us32;
            {
                CGfxScreenViewDesc USViewInfo32 = new CGfxScreenViewDesc();
                USViewInfo32.UseDepthStencilView = false;
                USViewInfo32.Width  = Width32;
                USViewInfo32.Height = Height32;

                var RTVDesc0 = new CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width32;
                RTVDesc0.Height        = Height32;
                USViewInfo32.mRTVDescArray.Add(RTVDesc0);

                mUSView32 = new CGfxScreenView();
                if (await mUSView32.Init(RHICtx, null, USViewInfo32, mUpSampSE, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
            }

            //us16;
            {
                CGfxScreenViewDesc USViewInfo16 = new CGfxScreenViewDesc();
                USViewInfo16.UseDepthStencilView = false;
                USViewInfo16.Width  = Width16;
                USViewInfo16.Height = Height16;

                var RTVDesc0 = new CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width16;
                RTVDesc0.Height        = Height16;
                USViewInfo16.mRTVDescArray.Add(RTVDesc0);

                mUSView16 = new CGfxScreenView();
                if (await mUSView16.Init(RHICtx, null, USViewInfo16, mUpSampSE, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
            }

            //us8;
            {
                CGfxScreenViewDesc USViewInfo8 = new CGfxScreenViewDesc();
                USViewInfo8.UseDepthStencilView = false;
                USViewInfo8.Width  = Width8;
                USViewInfo8.Height = Height8;

                var RTVDesc0 = new CRenderTargetViewDesc();
                RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true);
                RTVDesc0.Format        = chooseFormat;
                RTVDesc0.Width         = Width8;
                RTVDesc0.Height        = Height8;
                USViewInfo8.mRTVDescArray.Add(RTVDesc0);

                mUSView8 = new CGfxScreenView();
                if (await mUSView8.Init(RHICtx, null, USViewInfo8, mUpSampSE, mtl, mScreenAlignedTriangle) == false)
                {
                    return(false);
                }
            }

            mRenderPassDesc_Bloom = new CRenderPassDesc();
            FrameBufferClearColor TempClearColor0 = new FrameBufferClearColor();

            TempClearColor0.r = 0.0f;
            TempClearColor0.g = 0.0f;
            TempClearColor0.b = 0.0f;
            TempClearColor0.a = 0.0f;

            mRenderPassDesc_Bloom.mFBLoadAction_Color    = FrameBufferLoadAction.LoadActionClear;
            mRenderPassDesc_Bloom.mFBStoreAction_Color   = FrameBufferStoreAction.StoreActionStore;
            mRenderPassDesc_Bloom.mFBClearColorRT0       = TempClearColor0;
            mRenderPassDesc_Bloom.mFBLoadAction_Depth    = FrameBufferLoadAction.LoadActionClear;
            mRenderPassDesc_Bloom.mFBStoreAction_Depth   = FrameBufferStoreAction.StoreActionStore;
            mRenderPassDesc_Bloom.mDepthClearValue       = 1.0f;
            mRenderPassDesc_Bloom.mFBLoadAction_Stencil  = FrameBufferLoadAction.LoadActionClear;
            mRenderPassDesc_Bloom.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore;
            mRenderPassDesc_Bloom.mStencilClearValue     = 0u;

            {
                var ViewportSizeAndRcpBlurH = new Vector4(width, height, 1.0f / width, 1.0f / height);
                mView_BlurH8.ViewportSizeAndRcp = ViewportSizeAndRcpBlurH;
            }
            {
                var ViewportSizeAndRcpBlurV = new Vector4(Width8, Height8, 1.0f / Width8, 1.0f / Height8);
                mView_BlurV8.ViewportSizeAndRcp = ViewportSizeAndRcpBlurV;
            }
            //down
            {
                var ViewportSizeAndRcpD16 = new Vector4(Width8, Height8, 1.0f / Width8, 1.0f / Height8);
                mDSView16.ViewportSizeAndRcp = ViewportSizeAndRcpD16;
            }
            {
                var ViewportSizeAndRcpD32 = new Vector4(Width16, Height16, 1.0f / Width16, 1.0f / Height16);
                mDSView32.ViewportSizeAndRcp = ViewportSizeAndRcpD32;
            }
            {
                var ViewportSizeAndRcpD64 = new Vector4(Width32, Height32, 1.0f / Width32, 1.0f / Height32);
                mDSView64.ViewportSizeAndRcp = ViewportSizeAndRcpD64;
            }
            //up
            {
                var ViewportRcpU32 = new Vector4(1.0f / Width32, 1.0f / Height32, 1.0f / Width64, 1.0f / Height64);
                mUSView32.ViewportSizeAndRcp = ViewportRcpU32;
            }
            {
                var ViewportRcpU16 = new Vector4(1.0f / Width16, 1.0f / Height16, 1.0f / Width32, 1.0f / Height32);
                mUSView16.ViewportSizeAndRcp = ViewportRcpU16;
            }
            {
                var ViewportRcpU8 = new Vector4(1.0f / Width8, 1.0f / Height8, 1.0f / Width16, 1.0f / Height16);
                mUSView8.ViewportSizeAndRcp = ViewportRcpU8;
            }

            return(true);
        }