public async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx, UInt32 width, UInt32 height) { if (RHICtx == null) { return(false); } if (mSE_Mask == null) { mSE_Mask = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileSunShaftMaskSE>(); } if (mSE_Blur == null) { mSE_Blur = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileSunShaftBlurSE>(); } mSunShaftSEArrayMask.Add(mSE_Mask); mSunShaftSEArrayMask.Add(mSE_Blur); mSunShaftSEArrayBlur.Add(mSE_Blur); mSunShaftSEArrayBlur.Add(mSE_Blur); var ScreenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(RHICtx, CEngineDesc.ScreenAlignedTriangleName, true); var DefaultMtlInst = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(RHICtx, RName.GetRName("Material/defaultmaterial.instmtl")); mViewportMesh = CEngine.Instance.MeshManager.CreateMesh(RHICtx, ScreenAlignedTriangle); mViewportMesh.SetMaterialInstance(RHICtx, 0, DefaultMtlInst, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); //await mViewportMesh.AwaitEffects(); UInt32 Width = Math.Max(width, 4); UInt32 Height = Math.Max(height, 4); UInt32 Width4 = Width / 4; UInt32 Height4 = Height / 4; //mask view { CGfxScreenViewDesc VD_Mask = new CGfxScreenViewDesc(); VD_Mask.UseDepthStencilView = false; VD_Mask.Width = Width4; VD_Mask.Height = Height4; CRenderTargetViewDesc RTVDesc_Mask = new CRenderTargetViewDesc(); RTVDesc_Mask.mCanBeSampled = vBOOL.FromBoolean(true); RTVDesc_Mask.Format = EPixelFormat.PXF_R8G8_UNORM; RTVDesc_Mask.Width = Width4; RTVDesc_Mask.Height = Height4; VD_Mask.mRTVDescArray.Add(RTVDesc_Mask); mView_Mask = new CGfxScreenView(); if (await mView_Mask.InitForMultiPassMode(RHICtx, VD_Mask, mSunShaftSEArrayMask, DefaultMtlInst, mViewportMesh) == false) { System.Diagnostics.Debug.Assert(false); return(false); } } //blur0 view { CGfxScreenViewDesc VD_Blur = new CGfxScreenViewDesc(); VD_Blur.UseDepthStencilView = false; VD_Blur.Width = Width4; VD_Blur.Height = Height4; CRenderTargetViewDesc RTVDesc_Blur = new CRenderTargetViewDesc(); RTVDesc_Blur.mCanBeSampled = vBOOL.FromBoolean(true); RTVDesc_Blur.Format = EPixelFormat.PXF_R8G8_UNORM; RTVDesc_Blur.Width = Width4; RTVDesc_Blur.Height = Height4; VD_Blur.mRTVDescArray.Add(RTVDesc_Blur); mView_Blur = new CGfxScreenView(); if (await mView_Blur.InitForMultiPassMode(RHICtx, VD_Blur, mSunShaftSEArrayBlur, DefaultMtlInst, mViewportMesh) == false) { System.Diagnostics.Debug.Assert(false); return(false); } } mRenderPassDesc_SunShaft = new CRenderPassDesc(); FrameBufferClearColor TempClearColor0 = new FrameBufferClearColor(); TempClearColor0.r = 0.0f; TempClearColor0.g = 0.0f; TempClearColor0.b = 0.0f; TempClearColor0.a = 0.0f; mRenderPassDesc_SunShaft.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_SunShaft.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_SunShaft.mFBClearColorRT0 = TempClearColor0; mRenderPassDesc_SunShaft.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_SunShaft.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_SunShaft.mDepthClearValue = 1.0f; mRenderPassDesc_SunShaft.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_SunShaft.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_SunShaft.mStencilClearValue = 0u; 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 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); }