public override void TickLogic(CGfxSceneView view, CRenderContext RHICtx) { if (mCaptureSV == null) { return; } var rc = EngineNS.CEngine.Instance.RenderContext; if (rc == null) { return; } mCaptureSV.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_Opaque, Camera, mCaptureSE, PrebuildPassIndex.PPI_SceneCapture); mCaptureSV.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_CustomOpaque, Camera, mCaptureSE, PrebuildPassIndex.PPI_SceneCapture); mCaptureSV.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_CustomTranslucent, Camera, mCaptureSE, PrebuildPassIndex.PPI_SceneCapture); mCaptureSV.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_Translucent, Camera, mCaptureSE, PrebuildPassIndex.PPI_SceneCapture); mCaptureSV.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_Gizmos, Camera, mCaptureSE, PrebuildPassIndex.PPI_SceneCapture); mCommandList_Final.BeginCommand(); mCommandList_Final.BeginRenderPass(mRenderPassDesc_SceneCapture, mCaptureSV.FrameBuffer); mCaptureSV.PushSpecRenderLayerDataToRHI(mCommandList_Final, ERenderLayer.RL_Opaque); mCaptureSV.PushSpecRenderLayerDataToRHI(mCommandList_Final, ERenderLayer.RL_CustomOpaque); mCaptureSV.PushSpecRenderLayerDataToRHI(mCommandList_Final, ERenderLayer.RL_CustomTranslucent); mCaptureSV.PushSpecRenderLayerDataToRHI(mCommandList_Final, ERenderLayer.RL_Translucent); mCaptureSV.PushSpecRenderLayerDataToRHI(mCommandList_Final, ERenderLayer.RL_Gizmos); mCommandList_Final.BuildRenderPass(int.MaxValue, false, true); mCommandList_Final.EndRenderPass(); mCommandList_Final.EndCommand(); }
public void OnResize(CRenderContext RHICtx, UInt32 width, UInt32 height, CGfxSceneView BaseSceneView) { if (RHICtx == null || mView_AoMask == null || mView_BlurH == null /*|| mView_BlurV == null*/) { System.Diagnostics.Debug.Assert(false); return; } UInt32 Width = Math.Max(width, 64); UInt32 Height = Math.Max(height, 64); UInt32 Width4 = Width / mRTCut; UInt32 Height4 = Height / mRTCut; mView_AoMask.OnResize(RHICtx, null, Width4, Height4); mView_BlurH.OnResize(RHICtx, null, Width4, Height4); //mView_BlurV.OnResize(RHICtx, null, Width4, Height4); //mSE_AoMask.mBaseSceneView = BaseSceneView.mFrameBuffer.GetSRV_RenderTarget(0); mSE_BlurH.mSRV_AoMask = mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0); //mSE_BlurV.mSRV_Src = mView_BlurH.FrameBuffer.GetSRV_RenderTarget(0); mViewportSizeAndRcp = new Vector4(Width4, Height4, 1.0f / Width4, 1.0f / Height4); mView_AoMask.ViewportSizeAndRcp = mViewportSizeAndRcp; mView_BlurH.ViewportSizeAndRcp = mViewportSizeAndRcp; //mView_BlurV.ViewportSizeAndRcp = ViewportSizeAndRcp; }
public override void TickLogic(CGfxSceneView view, CRenderContext rc) { if (BaseSceneView == null) { return; } Camera.PushVisibleSceneMesh2RenderLayer(); //int CurrDPNumber = 0; //opaque render pass; BaseSceneView.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_Opaque, Camera, mSnapshotSE, PrebuildPassIndex.PPI_Snapshot); //custom opaque render pass; BaseSceneView.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_CustomOpaque, Camera, mSnapshotSE, PrebuildPassIndex.PPI_Snapshot); //sky render pass; BaseSceneView.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_Sky, Camera, mSnapshotSE, PrebuildPassIndex.PPI_Snapshot); //custom translucent render pass; BaseSceneView.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_CustomTranslucent, Camera, mSnapshotSE, PrebuildPassIndex.PPI_Snapshot); //translucent render pass; BaseSceneView.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_Translucent, Camera, mSnapshotSE, PrebuildPassIndex.PPI_Snapshot); //gizmos render pass; BaseSceneView.CookSpecRenderLayerDataToPass(rc, ERenderLayer.RL_Gizmos, Camera, mSnapshotSE, PrebuildPassIndex.PPI_Snapshot); var CmdList = mCLDB_Snapshot[0]; BaseSceneView.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_Opaque); BaseSceneView.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_CustomOpaque); BaseSceneView.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_Sky); BaseSceneView.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_CustomTranslucent); BaseSceneView.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_Translucent); BaseSceneView.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_Gizmos); CmdList.BeginCommand(); CmdList.BeginRenderPass(mRenderPassDesc_Snapshot, BaseSceneView.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); if (OnAfterTickLogic != null) { OnAfterTickLogic(view, rc, CmdList, OnAfterTickLogicArgument); } CmdList.EndCommand(); CmdList = mCLDB_Copy[0]; if (mScreenAlignedTriangle != null) { mFinalView.CookViewportMeshToPass(rc, mCopySE, Camera, mScreenAlignedTriangle); mFinalView.PushPassToRHI(CmdList); this.RiseOnDrawUI(CmdList, mFinalView); } //CmdList.BeginCommand(); //CmdList.BeginRenderPass(mRenderPassDesc_Final, mFinalView.FrameBuffer); //LatestPass = CmdList.BuildRenderPass(int.MaxValue, GraphicsDebug); //CmdList.EndRenderPass(); //CmdList.EndCommand(); }
public override void TickLogic(CGfxSceneView view, CRenderContext RHICtx) { if (BaseSceneView == null) { return; } ScopeTickLogic.Begin(); int drawCall = 0; int drawTriangle = 0; UInt32 cmdCount = 0; Camera.PushVisibleSceneMesh2RenderLayer(); Vector3 DirLightDir = new Vector3(BaseSceneView.mDirLightDirection_Leak.X, BaseSceneView.mDirLightDirection_Leak.Y, BaseSceneView.mDirLightDirection_Leak.Z); mSSM.TickLogic(RHICtx, Camera, DirLightDir); BaseSceneView.mFadeParam = mSSM.mFadeParam; BaseSceneView.mShadowTransitionScale = mSSM.mShadowTransitionScale; BaseSceneView.mShadowMapSizeAndRcp = mSSM.mShadowMapSizeAndRcp; BaseSceneView.mViewer2ShadowMtx = mSSM.mViewer2ShadowMtx; BaseSceneView.mShadowDistance = mSSM.mShadowDistance; mForwardBasePass.TickLogic(Camera, view, RHICtx, DPLimitter, GraphicsDebug); drawCall += mForwardBasePass.CommitingCMDs.DrawCall; drawTriangle += mForwardBasePass.CommitingCMDs.DrawTriangle; cmdCount += mForwardBasePass.CommitingCMDs.CmdCount; //post effect; mMobileAO.TickLogic(RHICtx, Camera, BaseSceneView); mBloomMobile.TickLogic(RHICtx, Camera); mSunShaftMobile.TickLogic(RHICtx, Camera, DirLightDir, BaseSceneView); { mCopyPostprocessPass.mScreenView.SunPosNDC = mSunShaftMobile.mSunPosNdc; mCopyPostprocessPass.mScreenView.DirLightColor_Intensity = BaseSceneView.DirLightColor_Intensity; mCopyPostprocessPass.TickLogic(Camera, view, RHICtx); RiseOnDrawUI(mCopyPostprocessPass.CommitingCMDs, mCopyPostprocessPass.mScreenView); } //CmdList.BeginCommand(); //CmdList.BeginRenderPass(mRenderPassDesc_Final, mFinalView.FrameBuffer); //LatestPass = CmdList.BuildRenderPass(ref DPLimitter, GraphicsDebug); //CmdList.EndRenderPass(); //CmdList.EndCommand(); drawCall += mCopyPostprocessPass.CommitingCMDs.DrawCall; drawTriangle += mCopyPostprocessPass.CommitingCMDs.DrawTriangle; cmdCount += mCopyPostprocessPass.CommitingCMDs.CmdCount; DrawCall = drawCall; DrawTriangle = drawTriangle; CmdCount = cmdCount; ScopeTickLogic.End(); }
public void Cleanup() { mCLDB_HitProxy[0].Cleanup(); mCLDB_HitProxy[0] = null; mCLDB_HitProxy[1].Cleanup(); mCLDB_HitProxy[1] = null; mHitProxyView.Cleanup(); mHitProxyView = null; }
public void Cleanup() { mCmdListDB_Shadow[0].Cleanup(); mCmdListDB_Shadow[0] = null; mCmdListDB_Shadow[1].Cleanup(); mCmdListDB_Shadow[1] = null; mShadowMapView.Cleanup(); mShadowMapView = null; mShadowCamera.Cleanup(); mShadowCamera = null; }
public override void TickLogic(CGfxSceneView view, CRenderContext RHICtx) { if (BaseSceneView == null) { return; } Camera.PushVisibleSceneMesh2RenderLayer(); Vector3 DirLightDir = new Vector3(BaseSceneView.mDirLightDirection_Leak.X, BaseSceneView.mDirLightDirection_Leak.Y, BaseSceneView.mDirLightDirection_Leak.Z); mSSM.TickLogic(RHICtx, Camera, DirLightDir); BaseSceneView.mFadeParam = mSSM.mFadeParam; BaseSceneView.mShadowTransitionScale = mSSM.mShadowTransitionScale; BaseSceneView.mShadowMapSizeAndRcp = mSSM.mShadowMapSizeAndRcp; BaseSceneView.mViewer2ShadowMtx = mSSM.mViewer2ShadowMtx; BaseSceneView.mShadowDistance = mSSM.mShadowDistance; mForwardBasePass.TickLogic(Camera, view, RHICtx, DPLimitter, GraphicsDebug); //post effect; mMobileAO.TickLogic(RHICtx, Camera, BaseSceneView); if (CEngine.EnableBloom == true) { mBloomMobile.TickLogic(RHICtx, Camera); } mSunShaftMobile.TickLogic(RHICtx, Camera, DirLightDir, BaseSceneView); { mSunShaftMobile.mSunPosNdc.Z = 0.25f * mSunShaftMobile.mSunShaftAtten; if (mSunShaftMobile.mStopSunShaftUpdate == true) { //disable sun shaft; mSunShaftMobile.mSunPosNdc.W = 0.0f; } else { mSunShaftMobile.mSunPosNdc.W = 1.0f; } mCopyPostprocessPass.mScreenView.SunPosNDC = mSunShaftMobile.mSunPosNdc; mCopyPostprocessPass.mScreenView.DirLightColor_Intensity = BaseSceneView.DirLightColor_Intensity; mCopyPostprocessPass.TickLogic(Camera, view, RHICtx); this.RiseOnDrawUI(mCopyPostprocessPass.CommitingCMDs, mCopyPostprocessPass.mScreenView); } }
public void Cleanup() { mCLDB_Picked[0].Cleanup(); mCLDB_Picked[0] = null; mCLDB_Picked[1].Cleanup(); mCLDB_Picked[1] = null; mCLDB_DisableWarning[0].Cleanup(); mCLDB_DisableWarning[0] = null; mCLDB_DisableWarning[1].Cleanup(); mCLDB_DisableWarning[1] = null; mSV_PickedSetUp.Cleanup(); mSV_PickedSetUp = null; mSV_PickedBlurH = null; mSV_PickedBlurV = null; //mSV_PickedHollow = null; }
public void Cleanup() { for (UInt32 CmdIdx = 0; CmdIdx < 4; CmdIdx++) { mCmdListDB_Shadow[CmdIdx, 0].Cleanup(); mCmdListDB_Shadow[CmdIdx, 0] = null; mCmdListDB_Shadow[CmdIdx, 1].Cleanup(); mCmdListDB_Shadow[CmdIdx, 1] = null; } mShadowMapView.Cleanup(); mShadowMapView = null; for (UInt32 CamIdx = 0; CamIdx < 4; CamIdx++) { mShadowCameraArray[CamIdx].Cleanup(); mShadowCameraArray[CamIdx] = null; } }
public void SetSceneView(CRenderContext rc, CGfxSceneView vp) { mSceneView = vp; }
public bool Init(UInt32 width, UInt32 height, CGfxCamera camera) { var RHICtx = EngineNS.CEngine.Instance.RenderContext; mViewportSizeX = width; mViewportSizeY = height; //hit proxy view; CGfxSceneViewInfo HitProxyViewInfo = new CGfxSceneViewInfo(); HitProxyViewInfo.mUseDSV = true; HitProxyViewInfo.Width = width; HitProxyViewInfo.Height = height; HitProxyViewInfo.mDSVDesc.Init(); HitProxyViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT; HitProxyViewInfo.mDSVDesc.Width = width; HitProxyViewInfo.mDSVDesc.Height = height; CRenderTargetViewDesc rtDesc0 = new CRenderTargetViewDesc(); rtDesc0.Init(); rtDesc0.Format = EPixelFormat.PXF_R8G8B8A8_UNORM; rtDesc0.Width = width; rtDesc0.Height = height; HitProxyViewInfo.mRTVDescArray.Add(rtDesc0); mHitProxyView = new CGfxSceneView(); if (false == mHitProxyView.Init(RHICtx, null, HitProxyViewInfo)) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"HitProxyError!!!", ""); return(false); } mCamera = camera; mRenderPassDesc_HitProxy = new CRenderPassDesc(); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mRenderPassDesc_HitProxy.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_HitProxy.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_HitProxy.mFBClearColorRT0 = TempClearColor; mRenderPassDesc_HitProxy.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_HitProxy.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_HitProxy.mDepthClearValue = 1.0f; mRenderPassDesc_HitProxy.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_HitProxy.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_HitProxy.mStencilClearValue = 0u; if (mHitProxySE == null) { mHitProxySE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxHitProxySE>(); } if (mHitProxySE == null) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"HitProxyError!!!", ""); return(false); } if (mHitProxyAxisSE == null) { mHitProxyAxisSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxHitProxyAxisSE>(); } if (mHitProxyAxisSE == null) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"HitProxyError!!!", ""); return(false); } mHitProxyCPUTexture = new CBlobObject(); return(true); }
public async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx) { await Thread.AsyncDummyClass.DummyFunc(); if (mSE_SSM == null) { mSE_SSM = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxSE_SSM>(); } if (mSE_SSM == null) { return(false); } CGfxSceneViewInfo ShadowMapViewInfo = new CGfxSceneViewInfo(); ShadowMapViewInfo.mUseDSV = true; ShadowMapViewInfo.Width = mResolutionX; ShadowMapViewInfo.Height = mResolutionY; // TODO��OpenGL ES���ʹ�� D24S8��ʽ�� ����depth texture�Ľ����Զ��0�� D16��D32��ʽ����ȷ�ġ� ShadowMapViewInfo.mDSVDesc.Init(); ShadowMapViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D16_UNORM; //ShadowMapViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D32_FLOAT; //ShadowMapViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT; ShadowMapViewInfo.mDSVDesc.Width = mResolutionX; ShadowMapViewInfo.mDSVDesc.Height = mResolutionY; //CRenderTargetViewDesc rtDesc0 = new CRenderTargetViewDesc(); //rtDesc0.Init(); //rtDesc0.Format = EPixelFormat.PXF_R8G8B8A8_UNORM; //rtDesc0.Width = mResolutionX; //rtDesc0.Height = mResolutionY; //ShadowMapViewInfo.mRTVDescArray.Add(rtDesc0); mShadowMapView = new CGfxSceneView(); if (false == mShadowMapView.Init(RHICtx, null, ShadowMapViewInfo)) { return(false); } mRenderPassDesc_SSM = new CRenderPassDesc(); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 1.0f; TempClearColor.g = 1.0f; TempClearColor.b = 1.0f; TempClearColor.a = 1.0f; mRenderPassDesc_SSM.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_SSM.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_SSM.mFBClearColorRT0 = TempClearColor; mRenderPassDesc_SSM.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_SSM.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_SSM.mDepthClearValue = 1.0f; mRenderPassDesc_SSM.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_SSM.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_SSM.mStencilClearValue = 0u; mShadowCamera = new CGfxCamera(); if (mShadowCamera.Init(RHICtx, false) == false) { return(false); } //mShadowCamera.SetSceneView(RHICtx, mShadowMapView); mShadowMapView.ResizeViewport(mBorderSize, mBorderSize, mInnerResolutionY, mInnerResolutionY); mShadowMapSizeAndRcp.X = mResolutionX; mShadowMapSizeAndRcp.Y = mResolutionY; mShadowMapSizeAndRcp.Z = 1.0f / mResolutionX; mShadowMapSizeAndRcp.W = 1.0f / mResolutionY; //// OpenGL //mOrtho2UVMtx.M11 = 0.5f; //mOrtho2UVMtx.M22 = 0.5f; //mOrtho2UVMtx.M33 = 0.5f; //mOrtho2UVMtx.M41 = 0.5f; //mOrtho2UVMtx.M42 = 0.5f; //mOrtho2UVMtx.M43 = 0.5f; //mOrtho2UVMtx.M44 = 1.0f; if (CEngine.Instance.RenderSystem.RHIType == ERHIType.RHT_OGL) { //gles; mOrtho2UVMtx.M11 = 0.5f; mOrtho2UVMtx.M22 = 0.5f; mOrtho2UVMtx.M33 = 0.5f; mOrtho2UVMtx.M44 = 1.0f; mOrtho2UVMtx.M41 = 0.5f; mOrtho2UVMtx.M42 = 0.5f; mOrtho2UVMtx.M43 = 0.5f; } else { // D3D mOrtho2UVMtx.M11 = 0.5f; mOrtho2UVMtx.M22 = -0.5f; mOrtho2UVMtx.M33 = 1.0f; mOrtho2UVMtx.M44 = 1.0f; mOrtho2UVMtx.M41 = 0.5f; mOrtho2UVMtx.M42 = 0.5f; } return(true); }
public async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx) { await Thread.AsyncDummyClass.DummyFunc(); if (mSE_CSMMobile == null) { mSE_CSMMobile = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxSE_SSM>(); } if (mSE_CSMMobile == null) { return(false); } mWholeReslutionX = mResolutionX * mCsmNum; mWholeReslutionY = mResolutionY; CGfxSceneViewInfo ShadowMapViewInfo = new CGfxSceneViewInfo(); ShadowMapViewInfo.mUseDSV = true; ShadowMapViewInfo.Width = mWholeReslutionX; ShadowMapViewInfo.Height = mWholeReslutionY; ShadowMapViewInfo.mDSVDesc.Init(); ShadowMapViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D16_UNORM; ShadowMapViewInfo.mDSVDesc.Width = mWholeReslutionX; ShadowMapViewInfo.mDSVDesc.Height = mWholeReslutionY; mShadowMapView = new CGfxSceneView(); if (false == mShadowMapView.Init(RHICtx, null, ShadowMapViewInfo)) { return(false); } mRenderPassDesc_CSM = new CRenderPassDesc[4]; FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 1.0f; TempClearColor.g = 1.0f; TempClearColor.b = 1.0f; TempClearColor.a = 1.0f; mRenderPassDesc_CSM[0].mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_CSM[0].mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_CSM[0].mFBClearColorRT0 = TempClearColor; mRenderPassDesc_CSM[0].mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_CSM[0].mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_CSM[0].mDepthClearValue = 1.0f; mRenderPassDesc_CSM[0].mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mRenderPassDesc_CSM[0].mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_CSM[0].mStencilClearValue = 0u; for (UInt32 RPDIdx = 1; RPDIdx < 4; RPDIdx++) { mRenderPassDesc_CSM[RPDIdx].mFBLoadAction_Color = FrameBufferLoadAction.LoadActionLoad; mRenderPassDesc_CSM[RPDIdx].mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_CSM[RPDIdx].mFBClearColorRT0 = TempClearColor; mRenderPassDesc_CSM[RPDIdx].mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionLoad; mRenderPassDesc_CSM[RPDIdx].mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_CSM[RPDIdx].mDepthClearValue = 1.0f; mRenderPassDesc_CSM[RPDIdx].mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionLoad; mRenderPassDesc_CSM[RPDIdx].mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mRenderPassDesc_CSM[RPDIdx].mStencilClearValue = 0u; } mShadowCameraArray = new CGfxCamera[4]; for (UInt32 CamIdx = 0; CamIdx < 4; CamIdx++) { mShadowCameraArray[CamIdx] = new CGfxCamera(); if (mShadowCameraArray[CamIdx].Init(RHICtx, false) == false) { return(false); } } mShadowMapView.ResizeViewport(mBorderSize, mBorderSize, mInnerResolutionY, mInnerResolutionY); mShadowMapSizeAndRcp.X = mWholeReslutionX; mShadowMapSizeAndRcp.Y = mWholeReslutionY; mShadowMapSizeAndRcp.Z = 1.0f / mWholeReslutionX; mShadowMapSizeAndRcp.W = 1.0f / mWholeReslutionY; if (CEngine.Instance.RenderSystem.RHIType == ERHIType.RHT_OGL) { //gles; mOrtho2UVMtx.M11 = 0.5f; mOrtho2UVMtx.M22 = 0.5f; mOrtho2UVMtx.M33 = 0.5f; mOrtho2UVMtx.M44 = 1.0f; mOrtho2UVMtx.M41 = 0.5f; mOrtho2UVMtx.M42 = 0.5f; mOrtho2UVMtx.M43 = 0.5f; } else { // D3D mOrtho2UVMtx.M11 = 0.5f; mOrtho2UVMtx.M22 = -0.5f; mOrtho2UVMtx.M33 = 1.0f; mOrtho2UVMtx.M44 = 1.0f; mOrtho2UVMtx.M41 = 0.5f; mOrtho2UVMtx.M42 = 0.5f; } for (UInt32 UVAdjustIdx = 0; UVAdjustIdx < mCsmNum; UVAdjustIdx++) { mUVAdjustedMtxArray[UVAdjustIdx].M11 = (float)mInnerResolutionX / (float)mWholeReslutionX; mUVAdjustedMtxArray[UVAdjustIdx].M22 = (float)mInnerResolutionY / (float)mWholeReslutionY; mUVAdjustedMtxArray[UVAdjustIdx].M33 = 1.0f; mUVAdjustedMtxArray[UVAdjustIdx].M44 = 1.0f; mUVAdjustedMtxArray[UVAdjustIdx].M41 = (float)(mResolutionX * UVAdjustIdx + mBorderSize) / (float)mWholeReslutionX; mUVAdjustedMtxArray[UVAdjustIdx].M42 = (float)mBorderSize / (float)mWholeReslutionY; } mCsmDistanceArray[0] = mShadowDistance * 0.08f; mCsmDistanceArray[1] = mShadowDistance * 0.15f; mCsmDistanceArray[2] = mShadowDistance * 0.30f; mCsmDistanceArray[3] = mShadowDistance * 0.47f; mSumDistanceFarArray[0] = mCsmDistanceArray[0]; mSumDistanceFarArray[1] = mCsmDistanceArray[0] + mCsmDistanceArray[1]; mSumDistanceFarArray[2] = mCsmDistanceArray[0] + mCsmDistanceArray[1] + mCsmDistanceArray[2]; mSumDistanceFarArray[3] = mCsmDistanceArray[0] + mCsmDistanceArray[1] + mCsmDistanceArray[2] + mCsmDistanceArray[3]; mSumDistanceFarVec.X = mSumDistanceFarArray[0]; mSumDistanceFarVec.Y = mSumDistanceFarArray[1]; mSumDistanceFarVec.Z = mSumDistanceFarArray[2]; mSumDistanceFarVec.W = mSumDistanceFarArray[3]; return(true); }
public override async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx, UInt32 width, UInt32 height, CGfxCamera camera, IntPtr WinHandle) { if (RHICtx == null) { RHICtx = CEngine.Instance.RenderContext; } if (mOpaqueSE == null) { mOpaqueSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileOpaqueSE>(); } if (mCustomTranslucentSE == null) { mCustomTranslucentSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileCustomTranslucentSE>(); } if (mTranslucentSE == null) { mTranslucentSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileTranslucentSE>(); } if (mCopySE == null) { mCopySE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileCopySE>(); } if (mSE_MobileSky == null) { mSE_MobileSky = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxSE_MobileSky>(); } if (mOpaqueSE == null || mCustomTranslucentSE == null || mTranslucentSE == null || mCopySE == null || mSE_MobileSky == null) { return(false); } { //base scene view; CGfxSceneViewInfo BaseViewInfo = new CGfxSceneViewInfo(); BaseViewInfo.mUseDSV = true; BaseViewInfo.Width = width; BaseViewInfo.Height = height; BaseViewInfo.mDSVDesc.Init(); BaseViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT; BaseViewInfo.mDSVDesc.Width = width; BaseViewInfo.mDSVDesc.Height = height; CRenderTargetViewDesc rtDesc0 = new CRenderTargetViewDesc(); rtDesc0.Init(); if (RHICtx.ContextCaps.SupportHalfRT == 0) { CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <EnvShader.CGfxMobileOpaqueSE>().SetMacroDefineValue("ENV_DISABLE_AO", "1"); CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <EnvShader.CGfxMobileCopySE>().SetMacroDefineValue("ENV_DISABLE_AO", "1"); CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <Bricks.GpuDriven.GpuScene.CGfxMergeInstanceSE>().SetMacroDefineValue("ENV_DISABLE_AO", "1"); rtDesc0.Format = EPixelFormat.PXF_R8G8B8A8_UNORM; } else { CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <EnvShader.CGfxMobileOpaqueSE>().SetMacroDefineValue("ENV_DISABLE_AO", "0"); CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <EnvShader.CGfxMobileCopySE>().SetMacroDefineValue("ENV_DISABLE_AO", "0"); CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <Bricks.GpuDriven.GpuScene.CGfxMergeInstanceSE>().SetMacroDefineValue("ENV_DISABLE_AO", "0"); rtDesc0.Format = EPixelFormat.PXF_R16G16B16A16_FLOAT; } Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Graphics", $"MobileGame render texture format: {rtDesc0.Format}"); rtDesc0.Width = width; rtDesc0.Height = height; BaseViewInfo.mRTVDescArray.Add(rtDesc0); BaseSceneView = new CGfxSceneView(); if (false == BaseSceneView.Init(RHICtx, null, BaseViewInfo)) { return(false); } BaseSceneView.UIHost = await CEngine.Instance.UIManager.RegisterHost("Game"); BaseSceneView.UIHost.IsInputActive = true; BaseSceneView.UIHost.WindowSize = new SizeF(width, height); mForwardBasePass = new CGfxFramePass(RHICtx, "GameForwordBasePse"); mForwardBasePass.mBaseSceneView = BaseSceneView; mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Opaque, PrebuildPassIndex.PPI_OpaquePbr, mOpaqueSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_CustomOpaque, PrebuildPassIndex.PPI_OpaquePbr, mOpaqueSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Sky, PrebuildPassIndex.PPI_Sky, mSE_MobileSky); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_CustomTranslucent, PrebuildPassIndex.PPI_CustomTranslucentPbr, mCustomTranslucentSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Translucent, PrebuildPassIndex.PPI_TransparentPbr, mTranslucentSE); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 1.0f; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mFBClearColorRT0 = TempClearColor; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mDepthClearValue = 1.0f; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mStencilClearValue = 0u; } { EngineNS.CSwapChainDesc SwapChainDesc; SwapChainDesc.Format = EngineNS.EPixelFormat.PXF_R8G8B8A8_UNORM; SwapChainDesc.Width = width; SwapChainDesc.Height = height; SwapChainDesc.WindowHandle = WinHandle; SwapChainDesc.ColorSpace = EColorSpace.COLOR_SPACE_SRGB_NONLINEAR; SwapChain = RHICtx.CreateSwapChain(SwapChainDesc); //RHICtx.BindCurrentSwapChain(mSwapChain); //ufo scene view; CGfxScreenViewDesc UFOViewInfo = new CGfxScreenViewDesc(); UFOViewInfo.IsSwapChainBuffer = true; UFOViewInfo.UseDepthStencilView = false; UFOViewInfo.Width = width; UFOViewInfo.Height = height; var rtDesc1 = new CRenderTargetViewDesc(); rtDesc1.mCanBeSampled = vBOOL.FromBoolean(false); UFOViewInfo.mRTVDescArray.Add(rtDesc1); mCopyPostprocessPass = new CGfxPostprocessPass(); await mCopyPostprocessPass.Init(RHICtx, SwapChain, UFOViewInfo, mCopySE, RName.GetRName("Material/defaultmaterial.instmtl"), "GameCopyPost"); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mFBClearColorRT0 = TempClearColor; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mDepthClearValue = 1.0f; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mStencilClearValue = 0u; } Camera = camera; Camera.SetSceneView(RHICtx, BaseSceneView); //shadow ssm; bool IsReady = await mSSM.Init(RHICtx); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"SSM Error", ""); return(false); } //post effect; IsReady = await mBloomMobile.Init(RHICtx, width, height, BaseSceneView); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"BloomError", ""); return(false); } //sun shaft; IsReady = await mSunShaftMobile.Init(RHICtx, width, height); if (IsReady == false) { System.Diagnostics.Debug.Assert(false); return(false); } //mobile ao; IsReady = await mMobileAO.Init(RHICtx, width, height, BaseSceneView); if (IsReady == false) { System.Diagnostics.Debug.Assert(false); return(false); } // mOpaqueSE.mTex_ShadowMap = mSSM.mShadowMapView.FrameBuffer.GetSRV_DepthStencil(); mOpaqueSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mOpaqueSE.EyeEnvMapName = CEngine.Instance.Desc.DefaultEyeEnvMap; mCustomTranslucentSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mCustomTranslucentSE.mTex_ShadowMap = mSSM.mShadowMapView.FrameBuffer.GetSRV_DepthStencil(); mTranslucentSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mCopySE.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); if (CEngine.EnableBloom == true) { mCopySE.mBloomTex = mBloomMobile.mUSView8.FrameBuffer.GetSRV_RenderTarget(0); } else { mCopySE.mBloomTex = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); } mCopySE.VignetteTex = CEngine.Instance.Desc.DefaultVignette; mCopySE.mSunShaftTex = mSunShaftMobile.mView_Blur.FrameBuffer.GetSRV_RenderTarget(0); //mCopySE.mSRV_MobileAo = mMobileAO.mView_BlurV.FrameBuffer.GetSRV_RenderTarget(0); mCopySE.mSRV_MobileAo = mMobileAO.mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0); { var Tex2DDesc = mOpaqueSE.EnvMap.TxPicDesc; BaseSceneView.mEnvMapMipMaxLevel = Tex2DDesc.MipLevel - 1; Tex2DDesc = mOpaqueSE.EyeEnvMap.TxPicDesc; BaseSceneView.mEyeEnvMapMaxMipLevel = Tex2DDesc.MipLevel - 1; var ViewportSizeAndRcp = new Vector4(width, height, 1.0f / width, 1.0f / height); mCopyPostprocessPass.mScreenView.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); }
public void TickLogic(CRenderContext RHICtx, CGfxCamera camera, Vector3 SunDir, CGfxSceneView BaseSceneView) { TickLogic_Impl(RHICtx, camera, SunDir, BaseSceneView); mSunPosNdc.Z = 0.25f * mSunShaftAtten; if (mStopSunShaftUpdate == true) { //disable sun shaft; mSunPosNdc.W = 0.0f; } else { mSunPosNdc.W = 1.0f; } }
public void OnResize(CRenderContext RHICtx, UInt32 width, UInt32 height, CGfxSceneView BaseSceneView) { if (RHICtx == null || mView_BlurH8 == null || mView_BlurV8 == null || mDSView16 == null || mDSView32 == null || mDSView64 == null || mUSView32 == null || mUSView16 == null || mUSView8 == null) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"BloomError!!!", ""); return; } 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; mView_BlurH8.OnResize(RHICtx, null, Width8, Height8); mView_BlurV8.OnResize(RHICtx, null, Width8, Height8); //down mDSView16.OnResize(RHICtx, null, Width16, Height16); mDSView32.OnResize(RHICtx, null, Width32, Height32); mDSView64.OnResize(RHICtx, null, Width64, Height64); //up; mUSView32.OnResize(RHICtx, null, Width32, Height32); mUSView16.OnResize(RHICtx, null, Width16, Height16); mUSView8.OnResize(RHICtx, null, Width8, Height8); mSE_BlurH.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); mSE_BlurV.mSrcTex = mView_BlurH8.FrameBuffer.GetSRV_RenderTarget(0); //blur h { var ViewportSizeAndRcpBlurH = new Vector4(Width, Height, 1.0f / Width, 1.0f / Height); mView_BlurH8.ViewportSizeAndRcp = ViewportSizeAndRcpBlurH; } //blur v { var ViewportSizeAndRcpBlurV = new Vector4(Width8, Height8, 1.0f / Width8, 1.0f / Height8); mView_BlurV8.ViewportSizeAndRcp = ViewportSizeAndRcpBlurV; } { 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; } }
private void TickLogic_Impl(CRenderContext RHICtx, CGfxCamera camera, Vector3 SunDir, CGfxSceneView BaseSceneView) { if (CEngine.EnableSunShaft == false) { mStopSunShaftUpdate = true; return; } if (RHICtx == null) { return; } ScopeTickLogic.Begin(); mSunPosNdc.X = -SunDir.X * mSunDistance; mSunPosNdc.Y = -SunDir.Y * mSunDistance; mSunPosNdc.Z = -SunDir.Z * mSunDistance; mSunPosNdc.W = 1.0f; mSunPosNdc = Vector4.Transform(mSunPosNdc, camera.CameraData.ViewProjection); mSunPosNdc.X = Clamp(mSunPosNdc.X / mSunPosNdc.W, mSunPosNdcMin, mSunPosNdcMax); mSunPosNdc.Y = Clamp(mSunPosNdc.Y / mSunPosNdc.W, mSunPosNdcMin, mSunPosNdcMax); float AttenOffset = Clamp(Math.Abs(mSunPosNdc.X) - 1.0f, 0.0f, 0.5f) + Clamp(Math.Abs(mSunPosNdc.Y) - 1.0f, 0.0f, 0.5f); mSunShaftAtten = Clamp(Vector3.Dot(-1.0f * camera.CameraData.Direction, SunDir) * 2.0f - AttenOffset, 0.0f, 1.0f); if (mSunShaftAtten <= 0.0f) { mStopSunShaftUpdate = true; return; } else { mStopSunShaftUpdate = false; } if (CEngine.Instance.RenderSystem.RHIType != ERHIType.RHT_OGL) { mSunPosNdc.W = 1.0f; } else { mSunPosNdc.W = -1.0f; } var CmdList = mCLDB_SunShaft[0]; CmdList.BeginCommand(); //generate mask; mSE_Mask.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); mView_Mask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Mask, 0, camera, mViewportMesh); mView_Mask.PushPassToRHIInMultiPassMode(CmdList, 0); CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Mask.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); //blur0; mSunPosNdc.Z = 0.2f; mView_Blur.SunPosNDC = mSunPosNdc; mSE_Blur.mSunShaftMask = mView_Mask.FrameBuffer.GetSRV_RenderTarget(0); mView_Blur.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Blur, 0, camera, mViewportMesh); mView_Blur.PushPassToRHIInMultiPassMode(CmdList, 0); CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Blur.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); CmdList.EndCommand(); CmdList = mCLDB_DisableWarning0[0]; CmdList.BeginCommand(); //blur1; mSunPosNdc.Z = 0.4f; mView_Mask.SunPosNDC = mSunPosNdc; mSE_Blur.mSunShaftMask = mView_Blur.FrameBuffer.GetSRV_RenderTarget(0); mView_Mask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Blur, 1, camera, mViewportMesh); mView_Mask.PushPassToRHIInMultiPassMode(CmdList, 1); CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Mask.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); CmdList.EndCommand(); CmdList = mCLDB_DisableWarning1[0]; CmdList.BeginCommand(); //blur2; mSunPosNdc.Z = 0.7f; mView_Blur.SunPosNDC = mSunPosNdc; mSE_Blur.mSunShaftMask = mView_Mask.FrameBuffer.GetSRV_RenderTarget(0); mView_Blur.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Blur, 1, camera, mViewportMesh); mView_Blur.PushPassToRHIInMultiPassMode(CmdList, 1); CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Blur.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); CmdList.EndCommand(); ScopeTickLogic.End(); }
public virtual void TickLogic(CGfxSceneView view, CRenderContext RHICtx) { }
public void TickLogic(CRenderContext RHICtx, CGfxCamera camera, CGfxSceneView BaseSceneView) { if (RHICtx == null) { System.Diagnostics.Debug.Assert(false); return; } if (CEngine.EnableMobileAo == true) { mAoParam.X = mRadius; mAoParam.Z = mBias; //float temp0 = 1.0f / (mRadius * mRadius * mRadius); //mDarkness = temp0 * temp0 * mDarkness; mAoParam.W = mDarkness; if (CEngine.Instance.RenderSystem.RHIType != ERHIType.RHT_OGL) { mAoParam.Y = 1.0f; } else { mAoParam.Y = -1.0f; } //ao mask pass var CmdList = mCLDB_AoMask[0]; CmdList.BeginCommand(); mSE_AoMask.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); mView_AoMask.AoParam = mAoParam; mView_AoMask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_AoMask, 0, camera, mScreenAlignedTriangle); mView_AoMask.PushPassToRHIInMultiPassMode(CmdList, 0); CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_AoMask.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); CmdList.EndCommand(); //ao blur h; CmdList = mCLDB_BlurH[0]; CmdList.BeginCommand(); //mSE_BlurH.mSRV_AoMask = mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0); mView_BlurH.CookViewportMeshToPass(RHICtx, mSE_BlurH, camera, mScreenAlignedTriangle); mView_BlurH.PushPassToRHI(CmdList); CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_BlurH.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); CmdList.EndCommand(); //ao blur v; CmdList = mCLDB_BlurV[0]; CmdList.BeginCommand(); mSE_BlurV.mSRV_Src = mView_BlurH.FrameBuffer.GetSRV_RenderTarget(0); mView_AoMask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_BlurV, 1, camera, mScreenAlignedTriangle); mView_AoMask.PushPassToRHIInMultiPassMode(CmdList, 1); CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_AoMask.FrameBuffer); CmdList.BuildRenderPass(); CmdList.EndRenderPass(); CmdList.EndCommand(); //CmdList = mCLDB_BlurV[0]; //CmdList.BeginCommand(); //mView_BlurV.CookViewportMeshToPass(RHICtx, mSE_BlurV, camera, mScreenAlignedTriangle); //mView_BlurV.PushPassToRHI(CmdList); //CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_BlurV.FrameBuffer); //CmdList.BuildRenderPass(ref DPLimitter); //CmdList.EndRenderPass(); //CmdList.EndCommand(); } else { //ao blur v; var CmdList = mCLDB_BlurV[0]; CmdList.BeginCommand(); CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_AoMask.FrameBuffer); CmdList.EndRenderPass(); CmdList.EndCommand(); //var CmdList = mCLDB_BlurV[0]; //CmdList.BeginCommand(); //CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_BlurV.FrameBuffer); //CmdList.EndRenderPass(); //CmdList.EndCommand(); } }
public void SetPassData(CRenderContext rc, CGfxMesh mesh, UInt32 index, CGfxSceneView vp, CPass pass) { //OnEffectRefresh(rc); if (pass.RenderPipeline == null) { var rplDesc = new CRenderPipelineDesc(); pass.RenderPipeline = rc.CreateRenderPipeline(rplDesc); } pass.RenderPipeline.ShaderProgram = mEffect.ShaderProgram; pass.RenderPipeline.RasterizerState = mMaterial.RasterizerState; pass.RenderPipeline.DepthStencilState = mMaterial.DepthStencilState; pass.RenderPipeline.BlendState = mMaterial.BlendState; pass.GeometryMesh = mesh.MeshPrimitives.GeometryMesh; pass.BindCBuffer(mEffect.ShaderProgram, mEffect.PerInstanceId, CBuffer); pass.BindCBuffer(mEffect.ShaderProgram, mEffect.PerFrameId, CEngine.Instance.PerFrameCBuffer); if (vp != null) { pass.ViewPort = vp.Viewport; } var textures = new CShaderResources(); { Material.BindTextures(textures, mEffect.ShaderProgram); foreach (var i in Textures) { textures.PSBindTexture(i.Key, i.Value); } mesh.ShadingEnv.BindResources(mesh, CBuffer, textures, mEffect.ShaderProgram); } pass.ShaderResources = textures; CShaderSamplers samplers = new CShaderSamplers(); { CSamplerStateDesc sampDesc = new CSamplerStateDesc(); sampDesc.SetDefault(); sampDesc.Filter = ESamplerFilter.SPF_MIN_MAG_MIP_POINT; CSamplerState samp = CEngine.Instance.SamplerStateManager.GetSamplerState(rc, sampDesc); for (UInt32 i = 0; i < mEffect.ShaderProgram.SamplerNumber; i++) { CSamplerBindInfo info = new CSamplerBindInfo(); mEffect.ShaderProgram.GetSamplerBindInfo(i, ref info); samplers.PSBindSampler(info.PSBindPoint, samp); } } pass.ShaderSamplers = samplers; foreach (var i in mesh.MdfQueue.Modifiers) { i.OnSetPassData(pass); } CDrawPrimitiveDesc dpDesc = new CDrawPrimitiveDesc(); mesh.MeshPrimitives.GetAtom(index, 0, ref dpDesc); pass.BindDrawPrimitive(ref dpDesc); }
public override async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx, UInt32 width, UInt32 height, CGfxCamera camera, IntPtr WinHandle) { if (mOpaqueSE == null) { mOpaqueSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileOpaqueSE>(); } if (mCustomTranslucentSE == null) { mCustomTranslucentSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileCustomTranslucentSE>(); } if (mTranslucentSE == null) { mTranslucentSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileTranslucentSE>(); } if (mCopySE == null) { mCopySE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileCopySE>(); } if (mGizmosSE == null) { mGizmosSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxGizmosSE>(); } if (mSE_MobileSky == null) { mSE_MobileSky = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxSE_MobileSky>(); } if (mOpaqueSE == null || mCustomTranslucentSE == null || mTranslucentSE == null || mCopySE == null || mGizmosSE == null || mSE_MobileSky == null) { return(false); } { //base scene view; CGfxSceneViewInfo BaseViewInfo = new CGfxSceneViewInfo(); BaseViewInfo.mUseDSV = true; BaseViewInfo.Width = width; BaseViewInfo.Height = height; BaseViewInfo.mDSVDesc.Init(); BaseViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT; BaseViewInfo.mDSVDesc.Width = width; BaseViewInfo.mDSVDesc.Height = height; CRenderTargetViewDesc rtDesc0 = new CRenderTargetViewDesc(); rtDesc0.Init(); //rtDesc0.Format = EPixelFormat.PXF_R8G8B8A8_UNORM; rtDesc0.Format = EPixelFormat.PXF_R16G16B16A16_FLOAT; rtDesc0.Width = width; rtDesc0.Height = height; BaseViewInfo.mRTVDescArray.Add(rtDesc0); BaseSceneView = new CGfxSceneView(); if (false == BaseSceneView.Init(RHICtx, null, BaseViewInfo)) { return(false); } BaseSceneView.UIHost = new UISystem.UIHost(); await BaseSceneView.UIHost.Initialize(RHICtx, new UISystem.UIHostInitializer()); BaseSceneView.UIHost.WindowSize = new SizeF(width, height); mForwardBasePass = new CGfxFramePass(RHICtx, "OffSrcFWBasePass"); mForwardBasePass.mBaseSceneView = BaseSceneView; mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Opaque, PrebuildPassIndex.PPI_OpaquePbr, mOpaqueSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_CustomOpaque, PrebuildPassIndex.PPI_OpaquePbr, mOpaqueSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Sky, PrebuildPassIndex.PPI_Sky, mSE_MobileSky); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_CustomTranslucent, PrebuildPassIndex.PPI_CustomTranslucentPbr, mCustomTranslucentSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Translucent, PrebuildPassIndex.PPI_Gizmos, mTranslucentSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Gizmos, PrebuildPassIndex.PPI_TransparentPbr, mGizmosSE); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mFBClearColorRT0 = TempClearColor; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mDepthClearValue = 1.0f; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mStencilClearValue = 0u; } { //ufo scene view; CGfxScreenViewDesc 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); mCopyPostprocessPass = new CGfxPostprocessPass(); await mCopyPostprocessPass.Init(RHICtx, SwapChain, UFOViewInfo, mCopySE, RName.GetRName("Material/defaultmaterial.instmtl"), "OffSrcCopyPost"); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mFBClearColorRT0 = TempClearColor; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mDepthClearValue = 1.0f; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mStencilClearValue = 0u; } Camera = camera; Camera.SetSceneView(RHICtx, BaseSceneView); bool IsReady = await mSSM.Init(RHICtx); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"SSM Error", ""); return(false); } IsReady = await mBloomMobile.Init(RHICtx, width, height, BaseSceneView); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"BloomError", ""); return(false); } //sun shaft; IsReady = await mSunShaftMobile.Init(RHICtx, width, height); if (IsReady == false) { System.Diagnostics.Debug.Assert(false); return(false); } //mobile ao; IsReady = await mMobileAO.Init(RHICtx, width, height, BaseSceneView); if (IsReady == false) { System.Diagnostics.Debug.Assert(false); return(false); } // mOpaqueSE.mTex_ShadowMap = mSSM.mShadowMapView.FrameBuffer.GetSRV_DepthStencil(); mOpaqueSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mOpaqueSE.EyeEnvMapName = CEngine.Instance.Desc.DefaultEyeEnvMap; mCustomTranslucentSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mCustomTranslucentSE.mTex_ShadowMap = mSSM.mShadowMapView.FrameBuffer.GetSRV_DepthStencil(); mTranslucentSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mCopySE.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); if (CEngine.EnableBloom == true) { mCopySE.mBloomTex = mBloomMobile.mUSView8.FrameBuffer.GetSRV_RenderTarget(0); } else { mCopySE.mBloomTex = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); } mCopySE.VignetteTex = CEngine.Instance.Desc.DefaultVignette; mCopySE.mSunShaftTex = mSunShaftMobile.mView_Blur.FrameBuffer.GetSRV_RenderTarget(0); //mCopySE.mSRV_MobileAo = mMobileAO.mView_BlurV.FrameBuffer.GetSRV_RenderTarget(0); mCopySE.mSRV_MobileAo = mMobileAO.mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0); { var Tex2DDesc = mOpaqueSE.EnvMap.TxPicDesc; BaseSceneView.mEnvMapMipMaxLevel = Tex2DDesc.MipLevel - 1; Tex2DDesc = mOpaqueSE.EyeEnvMap.TxPicDesc; BaseSceneView.mEyeEnvMapMaxMipLevel = Tex2DDesc.MipLevel - 1; var ViewportSizeAndRcp = new Vector4(width, height, 1.0f / width, 1.0f / height); mCopyPostprocessPass.mScreenView.ViewportSizeAndRcp = ViewportSizeAndRcp; } 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 override void TickLogic(CGfxSceneView view, CRenderContext RHICtx) { if (BaseSceneView == null) { return; } ScopeTickLogic.Begin(); int drawCall = 0; int drawTriangle = 0; UInt32 cmdCount = 0; Camera.PushVisibleSceneMesh2RenderLayer(); Vector3 DirLightDirection = new Vector3(BaseSceneView.mDirLightDirection_Leak.X, BaseSceneView.mDirLightDirection_Leak.Y, BaseSceneView.mDirLightDirection_Leak.Z); mCSM.TickLogic(RHICtx, Camera, DirLightDirection); //hitproxy; mHitProxy.TickLogic(); //Picked Effect; mPickedEffect.TickLogic(); BaseSceneView.mFadeParam = mCSM.mFadeParam; BaseSceneView.ShadowTransitionScaleArrayEditor = mCSM.mShadowTransitionScaleVec; BaseSceneView.mShadowMapSizeAndRcp = mCSM.mShadowMapSizeAndRcp; BaseSceneView.Viewer2ShadowMtxArrayEditor0 = mCSM.mViewer2ShadowMtxArray[0]; BaseSceneView.Viewer2ShadowMtxArrayEditor1 = mCSM.mViewer2ShadowMtxArray[1]; BaseSceneView.Viewer2ShadowMtxArrayEditor2 = mCSM.mViewer2ShadowMtxArray[2]; BaseSceneView.Viewer2ShadowMtxArrayEditor3 = mCSM.mViewer2ShadowMtxArray[3]; BaseSceneView.CsmDistanceArray = mCSM.mSumDistanceFarVec; BaseSceneView.CsmNum = (int)mCSM.mCsmNum; mForwardBasePass.TickLogic(Camera, view, RHICtx, DPLimitter, GraphicsDebug); drawCall += mForwardBasePass.CommitingCMDs.DrawCall; drawTriangle += mForwardBasePass.CommitingCMDs.DrawTriangle; cmdCount += mForwardBasePass.CommitingCMDs.CmdCount; //post effect; mMobileAO.TickLogic(RHICtx, Camera, BaseSceneView); mBloomMobile.TickLogic(RHICtx, Camera); mSunShaftMobile.TickLogic(RHICtx, Camera, DirLightDirection, BaseSceneView); ////UInt32 ID = mHitProxy.GetHitProxyID(0, 0); { mCopyPostprocessPass.mScreenView.SunPosNDC = mSunShaftMobile.mSunPosNdc; mCopyPostprocessPass.mScreenView.DirLightColor_Intensity = BaseSceneView.DirLightColor_Intensity; mCopyPostprocessPass.TickLogic(Camera, view, RHICtx); ScopeDrawUI.Begin(); RiseOnDrawUI(mCopyPostprocessPass.CommitingCMDs, mCopyPostprocessPass.mScreenView); ScopeDrawUI.End(); } //CmdList.BeginCommand(); //CmdList.BeginRenderPass(mRenderPassDesc_Final, mFinalView.FrameBuffer); //LatestPass = CmdList.BuildRenderPass(ref DPLimitter, GraphicsDebug); //CmdList.EndRenderPass(); //CmdList.EndCommand(); drawCall += mCopyPostprocessPass.CommitingCMDs.DrawCall; drawTriangle += mCopyPostprocessPass.CommitingCMDs.DrawTriangle; cmdCount += mCopyPostprocessPass.CommitingCMDs.CmdCount; DrawCall = drawCall; DrawTriangle = drawTriangle; CmdCount = cmdCount; ScopeTickLogic.End(); }
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 override async System.Threading.Tasks.Task <bool> Init(CRenderContext rc, UInt32 width, UInt32 height, CGfxCamera camera, IntPtr WinHandle) { if (mOpaqueSE == null) { mOpaqueSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileOpaqueEditorSE>(); } if (mCustomTranslucentSE == null) { mCustomTranslucentSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileCustomTranslucentEditorSE>(); } if (mTranslucentSE == null) { mTranslucentSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileTranslucentSE>(); } if (mGizmosSE == null) { mGizmosSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxGizmosSE>(); } mCopyEditorSE = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMobileCopyEditorSE>(); if (mSE_MobileSky == null) { mSE_MobileSky = CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxSE_MobileSky>(); } if (mOpaqueSE == null || mCustomTranslucentSE == null || mTranslucentSE == null || mGizmosSE == null || mCopyEditorSE == null || mSE_MobileSky == null) { return(false); } //shadow csm; bool IsReady = await mCSM.Init(rc); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"SSM Error", ""); return(false); } //hitproxy; IsReady = mHitProxy.Init(width, height, camera); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"HitProxyError", ""); return(false); } //mHitProxy.mEnabled = true; IsReady = await mPickedEffect.Init(width, height, camera); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"PickedEffectError", ""); return(false); } { //base scene view; CGfxSceneViewInfo BaseViewInfo = new CGfxSceneViewInfo(); BaseViewInfo.mUseDSV = true; BaseViewInfo.Width = width; BaseViewInfo.Height = height; BaseViewInfo.mDSVDesc.Init(); BaseViewInfo.mDSVDesc.Format = EngineNS.EPixelFormat.PXF_D24_UNORM_S8_UINT; BaseViewInfo.mDSVDesc.Width = width; BaseViewInfo.mDSVDesc.Height = height; CRenderTargetViewDesc rtDesc0 = new CRenderTargetViewDesc(); rtDesc0.Init(); //rtDesc0.Format = EPixelFormat.PXF_R8G8B8A8_UNORM; rtDesc0.Format = EPixelFormat.PXF_R16G16B16A16_FLOAT; rtDesc0.Width = width; rtDesc0.Height = height; BaseViewInfo.mRTVDescArray.Add(rtDesc0); BaseSceneView = new CGfxSceneView(); if (false == BaseSceneView.Init(rc, null, BaseViewInfo)) { return(false); } BaseSceneView.UIHost = await CEngine.Instance.UIManager.RegisterHost("Editor"); //BaseSceneView.UIHost.IsInputActive = false; BaseSceneView.UIHost.WindowSize = new SizeF(width, height); mForwardBasePass = new CGfxFramePass(rc, "GameForwordBasePass"); mForwardBasePass.mBaseSceneView = BaseSceneView; mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Opaque, PrebuildPassIndex.PPI_OpaquePbrEditor, mOpaqueSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_CustomOpaque, PrebuildPassIndex.PPI_OpaquePbrEditor, mOpaqueSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Sky, PrebuildPassIndex.PPI_Sky, mSE_MobileSky); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_CustomTranslucent, PrebuildPassIndex.PPI_CustomTranslucentPbrEditor, mCustomTranslucentSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Translucent, PrebuildPassIndex.PPI_TransparentPbr, mTranslucentSE); mForwardBasePass.SetRLayerParameter(ERenderLayer.RL_Gizmos, PrebuildPassIndex.PPI_Gizmos, mGizmosSE); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 1.0f; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mFBClearColorRT0 = TempClearColor; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mDepthClearValue = 1.0f; mForwardBasePass.mRenderPassDesc.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mForwardBasePass.mRenderPassDesc.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mForwardBasePass.mRenderPassDesc.mStencilClearValue = 0u; } { EngineNS.CSwapChainDesc SwapChainDesc; SwapChainDesc.Format = EngineNS.EPixelFormat.PXF_R8G8B8A8_UNORM; SwapChainDesc.Width = width; SwapChainDesc.Height = height; SwapChainDesc.WindowHandle = WinHandle; SwapChainDesc.ColorSpace = EColorSpace.COLOR_SPACE_SRGB_NONLINEAR; SwapChain = rc.CreateSwapChain(SwapChainDesc); //RHICtx.BindCurrentSwapChain(mSwapChain); //final scene view; CGfxScreenViewDesc FinalViewInfo = new CGfxScreenViewDesc(); FinalViewInfo.IsSwapChainBuffer = true; FinalViewInfo.UseDepthStencilView = false; FinalViewInfo.Width = width; FinalViewInfo.Height = height; var rtvDesc1 = new CRenderTargetViewDesc(); rtvDesc1.mCanBeSampled = vBOOL.FromBoolean(false); rtvDesc1.Format = SwapChainDesc.Format; FinalViewInfo.mRTVDescArray.Add(rtvDesc1); mCopyPostprocessPass = new CGfxPostprocessPass(); await mCopyPostprocessPass.Init(rc, SwapChain, FinalViewInfo, mCopyEditorSE, RName.GetRName("Material/defaultmaterial.instmtl"), "EditorCopyPost"); FrameBufferClearColor TempClearColor = new FrameBufferClearColor(); TempClearColor.r = 0.0f; TempClearColor.g = 0.0f; TempClearColor.b = 0.0f; TempClearColor.a = 0.0f; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Color = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Color = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mFBClearColorRT0 = TempClearColor; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Depth = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Depth = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mDepthClearValue = 1.0f; mCopyPostprocessPass.mRenderPassDesc.mFBLoadAction_Stencil = FrameBufferLoadAction.LoadActionClear; mCopyPostprocessPass.mRenderPassDesc.mFBStoreAction_Stencil = FrameBufferStoreAction.StoreActionStore; mCopyPostprocessPass.mRenderPassDesc.mStencilClearValue = 0u; } Camera = camera; Camera.SetSceneView(rc, BaseSceneView); //post effect; IsReady = await mBloomMobile.Init(rc, width, height, BaseSceneView); if (IsReady == false) { Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"BloomError", ""); return(false); } //sun shaft; IsReady = await mSunShaftMobile.Init(rc, width, height); if (IsReady == false) { System.Diagnostics.Debug.Assert(false); return(false); } //mobile ao; IsReady = await mMobileAO.Init(rc, width, height, BaseSceneView); if (IsReady == false) { System.Diagnostics.Debug.Assert(false); return(false); } // mOpaqueSE.mTex_ShadowMap = mCSM.mShadowMapView.FrameBuffer.GetSRV_DepthStencil(); mOpaqueSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mOpaqueSE.EyeEnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mCustomTranslucentSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mCustomTranslucentSE.mTex_ShadowMap = mCSM.mShadowMapView.FrameBuffer.GetSRV_DepthStencil(); mTranslucentSE.EnvMapName = CEngine.Instance.Desc.DefaultEnvMap; mCopyEditorSE.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0); mCopyEditorSE.mBloomTex = mBloomMobile.mUSView8.FrameBuffer.GetSRV_RenderTarget(0); mCopyEditorSE.mPickedTex = mPickedEffect.mSV_PickedBlurH.FrameBuffer.GetSRV_RenderTarget(0); mCopyEditorSE.VignetteTex = CEngine.Instance.Desc.DefaultVignette; mCopyEditorSE.mSunShaftTex = mSunShaftMobile.mView_Blur.FrameBuffer.GetSRV_RenderTarget(0); //mCopyEditorSE.mSRV_MobileAo = mMobileAO.mView_BlurV.FrameBuffer.GetSRV_RenderTarget(0); mCopyEditorSE.mSRV_MobileAo = mMobileAO.mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0); { var DirLightColor = new Vector4(1.0f, 1.0f, 1.0f, 3.5f); var DirLightDirection = new Vector3(0.0f, -1.5f, 1.0f); DirLightDirection.Normalize(); var SkyLightColor = new Vector3(0.12f, 0.12f, 0.25f); BaseSceneView.mDirLightDirection_Leak = new Vector4(DirLightDirection, 0.05f); BaseSceneView.DirLightColor_Intensity = DirLightColor; BaseSceneView.mSkyLightColor = SkyLightColor; var Tex2DDesc = mOpaqueSE.EnvMap.TxPicDesc; BaseSceneView.mEnvMapMipMaxLevel = Tex2DDesc.MipLevel - 1; Tex2DDesc = mOpaqueSE.mEyeEnvMap.TxPicDesc; BaseSceneView.mEyeEnvMapMaxMipLevel = Tex2DDesc.MipLevel - 1; var ViewportSizeAndRcp = new Vector4(width, height, 1.0f / width, 1.0f / height); BaseSceneView.mViewportSizeAndRcp = ViewportSizeAndRcp; mCopyPostprocessPass.mScreenView.ViewportSizeAndRcp = ViewportSizeAndRcp; } this.OnDrawUI += (CCommandList cmd, Graphics.View.CGfxScreenView view) => { if (BaseSceneView.UIHost != null) { BaseSceneView.UIHost.Draw(CEngine.Instance.RenderContext, cmd, view); } }; #if Test_Snapshot await TestSnapRender(rc); #endif return(true); }