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); }
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_AoMask == null) { mSE_AoMask = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileAoMaskSE>(); } if (mSE_BlurH == null) { mSE_BlurH = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileAoBlurHSE>(); } if (mSE_BlurV == null) { mSE_BlurV = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileAoBlurVSE>(); } mMobileAoSEArrayMask.Add(mSE_AoMask); mMobileAoSEArrayMask.Add(mSE_BlurV); var ScreenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(RHICtx, CEngineDesc.ScreenAlignedTriangleName, true); var DefaultMtlInst = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(RHICtx, RName.GetRName("Material/defaultmaterial.instmtl")); mScreenAlignedTriangle = CEngine.Instance.MeshManager.CreateMesh(RHICtx, ScreenAlignedTriangle); mScreenAlignedTriangle.SetMaterialInstance(RHICtx, 0, DefaultMtlInst, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); UInt32 Width = Math.Max(width, 64); UInt32 Height = Math.Max(height, 64); UInt32 Width4 = Width / mRTCut; UInt32 Height4 = Height / mRTCut; //ao mask pass; { CGfxScreenViewDesc VI_AoMask = new CGfxScreenViewDesc(); VI_AoMask.UseDepthStencilView = false; VI_AoMask.Width = Width4; VI_AoMask.Height = Height4; CRenderTargetViewDesc RTVDesc0 = new CRenderTargetViewDesc(); RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true); RTVDesc0.Format = EPixelFormat.PXF_R8_UNORM; RTVDesc0.Width = Width4; RTVDesc0.Height = Width4; VI_AoMask.mRTVDescArray.Add(RTVDesc0); mView_AoMask = new CGfxScreenView(); if (await mView_AoMask.InitForMultiPassMode(RHICtx, VI_AoMask, mMobileAoSEArrayMask, DefaultMtlInst, mScreenAlignedTriangle) == false) { return(false); } //mSE_AoMask.mBaseSceneView = BaseSceneView.mFrameBuffer.GetSRV_RenderTarget(0); } //blur h pass; { CGfxScreenViewDesc VI_BlurH = new CGfxScreenViewDesc(); VI_BlurH.UseDepthStencilView = false; VI_BlurH.Width = Width4; VI_BlurH.Height = Height4; CRenderTargetViewDesc RTVDesc0 = new CRenderTargetViewDesc(); RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true); RTVDesc0.Format = EPixelFormat.PXF_R8_UNORM; RTVDesc0.Width = Width4; RTVDesc0.Height = Width4; VI_BlurH.mRTVDescArray.Add(RTVDesc0); mView_BlurH = new CGfxScreenView(); if (await mView_BlurH.Init(RHICtx, null, VI_BlurH, mSE_BlurH, DefaultMtlInst, mScreenAlignedTriangle) == false) { return(false); } mSE_BlurH.mSRV_AoMask = mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0); } ////blur v pass; //{ // CGfxScreenViewDesc VI_BlurV = new CGfxScreenViewDesc(); // VI_BlurV.UseDepthStencilView = false; // VI_BlurV.Width = Width4; // VI_BlurV.Height = Height4; // CRenderTargetViewDesc RTVDesc0 = new CRenderTargetViewDesc(); // RTVDesc0.mCanBeSampled = vBOOL.FromBoolean(true); // RTVDesc0.Format = EPixelFormat.PXF_R8_UNORM; // RTVDesc0.Width = Width4; // RTVDesc0.Height = Width4; // VI_BlurV.mRTVDescArray.Add(RTVDesc0); // mView_BlurV = new CGfxScreenView(); // if (await mView_BlurV.Init(RHICtx, null, VI_BlurV, mSE_BlurV, DefaultMtlInst, mScreenAlignedTriangle) == false) // { // return false; // } // mSE_BlurV.mSRV_Src = mView_BlurH.FrameBuffer.GetSRV_RenderTarget(0); //} mRenderPassDesc_Ao = new CRenderPassDesc(); FrameBufferClearColor TempClearColor0 = new FrameBufferClearColor(); TempClearColor0.r = 1.0f; TempClearColor0.g = 1.0f; TempClearColor0.b = 1.0f; TempClearColor0.a = 1.0f; mRenderPassDesc_Ao.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Ao.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Ao.mFBClearColorRT0 = TempClearColor0; mRenderPassDesc_Ao.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Ao.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Ao.mDepthClearValue = 1.0f; mRenderPassDesc_Ao.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Ao.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Ao.mStencilClearValue = 0u; mViewportSizeAndRcp = new Vector4(Width4, Height4, 1.0f / Width4, 1.0f / Height4); mView_AoMask.ViewportSizeAndRcp = mViewportSizeAndRcp; mView_BlurH.ViewportSizeAndRcp = mViewportSizeAndRcp; //mView_BlurV.ViewportSizeAndRcp = ViewportSizeAndRcp; return(true); }
public override async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx, UInt32 width, UInt32 height, CGfxCamera camera, IntPtr WinHandle) { CGfxSceneViewInfo SnapshotViewInfo = new CGfxSceneViewInfo(); SnapshotViewInfo.mUseDSV = true; SnapshotViewInfo.Width = width; SnapshotViewInfo.Height = height; SnapshotViewInfo.mDSVDesc.Init(); SnapshotViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT; SnapshotViewInfo.mDSVDesc.Width = width; SnapshotViewInfo.mDSVDesc.Height = height; CRenderTargetViewDesc rtDesc0 = new CRenderTargetViewDesc(); rtDesc0.Init(); rtDesc0.Format = EPixelFormat.PXF_R8G8B8A8_UNORM; rtDesc0.Width = width; rtDesc0.Height = height; SnapshotViewInfo.mRTVDescArray.Add(rtDesc0); BaseSceneView = new CGfxSceneView(); if (false == BaseSceneView.Init(RHICtx, null, SnapshotViewInfo)) { return(false); } Camera = camera; //mCamera.SetSceneView(RHICtx, mBaseSceneView); mRenderPassDesc_Snapshot = new CRenderPassDesc(); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mRenderPassDesc_Snapshot.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Snapshot.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Snapshot.mFBClearColorRT0 = TempClearColor; mRenderPassDesc_Snapshot.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Snapshot.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Snapshot.mDepthClearValue = 1.0f; mRenderPassDesc_Snapshot.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Snapshot.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Snapshot.mStencilClearValue = 0u; mRenderPassDesc_Final = new CRenderPassDesc(); TempClearColor.r = 0.0f; TempClearColor.g = 1.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mRenderPassDesc_Final.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Final.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Final.mFBClearColorRT0 = TempClearColor; mRenderPassDesc_Final.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Final.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Final.mDepthClearValue = 1.0f; mRenderPassDesc_Final.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Final.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Final.mStencilClearValue = 0u; if (mSnapshotSE == null) { mSnapshotSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxSnapshotSE>(); } if (mCopySE == null) { mCopySE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileCopySE>(); } var ufoViewInfo = new CGfxScreenViewDesc(); ufoViewInfo.IsSwapChainBuffer = false; ufoViewInfo.UseDepthStencilView = false; ufoViewInfo.Width = width; ufoViewInfo.Height = height; var rtDesc1 = new CRenderTargetViewDesc(); rtDesc1.Init(); rtDesc1.mCanBeSampled = vBOOL.FromBoolean(true); rtDesc1.Format = EPixelFormat.PXF_R8G8B8A8_UNORM; rtDesc1.Width = width; rtDesc1.Height = height; ufoViewInfo.mRTVDescArray.Add(rtDesc1); var screenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(RHICtx, CEngineDesc.ScreenAlignedTriangleName, true); mScreenAlignedTriangle = CEngine.Instance.MeshManager.CreateMesh(RHICtx, screenAlignedTriangle); var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(RHICtx, RName.GetRName("Material/defaultmaterial.instmtl")); mScreenAlignedTriangle.SetMaterialInstance(RHICtx, 0, mtl, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); //await mScreenAlignedTriangle.AwaitEffects(); mFinalView = new CGfxScreenView(); await mFinalView.Init(RHICtx, null, ufoViewInfo, mCopySE, mtl, mScreenAlignedTriangle); var viewportSizeAndRcp = new Vector4(width, height, 1.0f / width, 1.0f / height); mFinalView.ViewportSizeAndRcp = viewportSizeAndRcp; return(true); }
public async System.Threading.Tasks.Task <bool> Init(UInt32 width, UInt32 height, CGfxCamera camera) { CGfxSceneViewInfo VI_PickedSetUp = new CGfxSceneViewInfo(); VI_PickedSetUp.mUseDSV = true; UInt32 TempWidth = width; UInt32 TempHeight = height; VI_PickedSetUp.Width = TempWidth; VI_PickedSetUp.Height = TempHeight; VI_PickedSetUp.mDSVDesc.Init(); VI_PickedSetUp.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT; VI_PickedSetUp.mDSVDesc.Width = TempWidth; VI_PickedSetUp.mDSVDesc.Height = TempHeight; CRenderTargetViewDesc RTVDesc_PickeSetUp = new CRenderTargetViewDesc(); RTVDesc_PickeSetUp.Init(); RTVDesc_PickeSetUp.Format = EPixelFormat.PXF_R16G16_FLOAT; RTVDesc_PickeSetUp.Width = TempWidth; RTVDesc_PickeSetUp.Height = TempHeight; VI_PickedSetUp.mRTVDescArray.Add(RTVDesc_PickeSetUp); mSV_PickedSetUp = new CGfxSceneView(); if (false == mSV_PickedSetUp.Init(mRHICtx, null, VI_PickedSetUp)) { return(false); } mSE_PickedSetUp = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxPickedSetUpSE>(); mSE_PickedBlurH = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxPickedBlurHSE>(); mSE_PickedBlurV = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxPickedBlurVSE>(); mSE_PickedHollow = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxPickedHollowSE>(); mBlurAndHollowSEArray.Add(mSE_PickedBlurH); mBlurAndHollowSEArray.Add(mSE_PickedHollow); var ScreenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(mRHICtx, CEngineDesc.ScreenAlignedTriangleName, true); var DefaultMtlInst = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(mRHICtx, RName.GetRName("Material/defaultmaterial.instmtl")); mScreenAlignedTriangle = CEngine.Instance.MeshManager.CreateMesh(mRHICtx, ScreenAlignedTriangle); mScreenAlignedTriangle.SetMaterialInstance(mRHICtx, 0, DefaultMtlInst, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); //await mScreenAlignedTriangle.AwaitEffects(); //blur h and hollow; { CGfxScreenViewDesc VI_BlurH = new CGfxScreenViewDesc(); VI_BlurH.UseDepthStencilView = false; VI_BlurH.Width = TempWidth; VI_BlurH.Height = TempHeight; var RTVDesc_BlurH = new CRenderTargetViewDesc(); RTVDesc_BlurH.Init(); RTVDesc_BlurH.Format = EPixelFormat.PXF_R16G16_FLOAT; VI_BlurH.mRTVDescArray.Add(RTVDesc_BlurH); mSV_PickedBlurH = new CGfxScreenView(); if (await mSV_PickedBlurH.InitForMultiPassMode(mRHICtx, VI_BlurH, mBlurAndHollowSEArray, DefaultMtlInst, mScreenAlignedTriangle) == false) { return(false); } } //blur v; { CGfxScreenViewDesc VI_BlurV = new CGfxScreenViewDesc(); VI_BlurV.UseDepthStencilView = false; VI_BlurV.Width = TempWidth; VI_BlurV.Height = TempHeight; var RTVDesc_BlurV = new CRenderTargetViewDesc(); RTVDesc_BlurV.Init(); RTVDesc_BlurV.Format = EPixelFormat.PXF_R16G16_FLOAT; VI_BlurV.mRTVDescArray.Add(RTVDesc_BlurV); mSV_PickedBlurV = new CGfxScreenView(); if (await mSV_PickedBlurV.Init(mRHICtx, null, VI_BlurV, mSE_PickedBlurV, DefaultMtlInst, mScreenAlignedTriangle) == false) { return(false); } } mCamera = camera; mRenderPassDesc_Picked = new CRenderPassDesc(); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 1.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mRenderPassDesc_Picked.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Picked.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Picked.mFBClearColorRT0 = TempClearColor; mRenderPassDesc_Picked.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Picked.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Picked.mDepthClearValue = 1.0f; mRenderPassDesc_Picked.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_Picked.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_Picked.mStencilClearValue = 0u; mSE_PickedBlurH.mSRV_PickedSetUp = mSV_PickedSetUp.FrameBuffer.GetSRV_RenderTarget(0); mSE_PickedBlurV.mSRV_PickedBlurH = mSV_PickedBlurH.FrameBuffer.GetSRV_RenderTarget(0); mSE_PickedHollow.mSRV_PickedSetUp = mSV_PickedSetUp.FrameBuffer.GetSRV_RenderTarget(0); mSE_PickedHollow.mSRV_PickedBlur = mSV_PickedBlurV.FrameBuffer.GetSRV_RenderTarget(0); var ViewportSizeAndRcp = new Vector4(TempWidth, TempHeight, 1.0f / TempWidth, 1.0f / TempHeight); mSV_PickedBlurH.ViewportSizeAndRcp = ViewportSizeAndRcp; mSV_PickedBlurV.ViewportSizeAndRcp = ViewportSizeAndRcp; return(true); }