public override void OnResize(CRenderContext RHICtx, CSwapChain SwapChain, UInt32 width, UInt32 height) { Camera.PerspectiveFovLH(Camera.mDefaultFoV, (float)width, (float)height); mCopyPostprocessPass.mScreenView.OnResize(RHICtx, SwapChain, width, height); BaseSceneView.OnResize(RHICtx, null, width, height); //post effect; mMobileAO.OnResize(RHICtx, width, height, BaseSceneView); mBloomMobile.OnResize(RHICtx, width, height, BaseSceneView); mSunShaftMobile.OnResize(RHICtx, width, height); 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.mSunShaftTex = mSunShaftMobile.mView_Blur.FrameBuffer.GetSRV_RenderTarget(0); mCopySE.mSRV_MobileAo = mMobileAO.mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0); var ViewportSizeAndRcp = new Vector4(width, height, 1.0f / width, 1.0f / height); mCopyPostprocessPass.mScreenView.ViewportSizeAndRcp = ViewportSizeAndRcp; }
public bool Init(CRenderContext rc, CSwapChain swapChain, CGfxSceneViewInfo ViewInfo) { _mViewInfo = ViewInfo; mCoreObject = NewNativeObjectByName <NativePointer>($"{CEngine.NativeNS}::GfxSceneView"); if (SDK_GfxSceneView_Init(mCoreObject, rc.CoreObject, ViewInfo.Width, ViewInfo.Height) == false) { return(false); } var shaderProgram = CEngine.Instance.EffectManager.DefaultEffect.ShaderProgram; mSceneViewCB = rc.CreateConstantBuffer(shaderProgram, CEngine.Instance.EffectManager.DefaultEffect.CacheData.CBID_View); if (mSceneViewCB == null) { return(false); } SDK_GfxSceneView_BindConstBuffer(CoreObject, mSceneViewCB.CoreObject); mViewport = new CViewport(); mViewport.Width = ViewInfo.Width; mViewport.Height = ViewInfo.Height; SDK_GfxSceneView_SetViewport(CoreObject, mViewport.CoreObject); //code which is deprecated and will be delete someday; { DirLightSpecularIntensityId = mSceneViewCB.FindVar("mDirLightSpecularIntensity"); DirLightingAmbientId = mSceneViewCB.FindVar("mDirLightingAmbient"); DirLightingDiffuseId = mSceneViewCB.FindVar("mDirLightingDiffuse"); DirLightingSpecularId = mSceneViewCB.FindVar("mDirLightingSpecular"); DirLightShadingSSSId = mSceneViewCB.FindVar("mDirLightShadingSSS"); } mIDDirLightColor_Intensity = mSceneViewCB.FindVar("gDirLightColor_Intensity"); mIDDirLightDirection_Leak = mSceneViewCB.FindVar("gDirLightDirection_Leak"); mIDSkyLightColor = mSceneViewCB.FindVar("mSkyLightColor"); mID_GroundLightColor = mSceneViewCB.FindVar("mGroundLightColor"); mIDViewportSizeAndRcp = mSceneViewCB.FindVar("gViewportSizeAndRcp"); mIDEnvMapMipMaxLevel = mSceneViewCB.FindVar("gEnvMapMaxMipLevel"); mIDEyeEnvMapMipMaxLevel = mSceneViewCB.FindVar("gEyeEnvMapMaxMipLevel"); mID_DepthBiasAndZFarRcp = mSceneViewCB.FindVar("gDepthBiasAndZFarRcp"); mID_FadeParam = mSceneViewCB.FindVar("gFadeParam"); mID_ShadowTransitionScale = mSceneViewCB.FindVar("gShadowTransitionScale"); mID_ShadowMapSizeAndRcp = mSceneViewCB.FindVar("gShadowMapSizeAndRcp"); mID_Viewer2ShadowMtx = mSceneViewCB.FindVar("gViewer2ShadowMtx"); mID_ShadowDistance = mSceneViewCB.FindVar("gShadowDistance"); mID_ShadowTransitionScaleArrayEditor = mSceneViewCB.FindVar("gShadowTransitionScaleArrayEditor"); mID_CsmNum = mSceneViewCB.FindVar("gCsmNum"); mID_Viewer2ShadowMtxArrayEditor = mSceneViewCB.FindVar("gViewer2ShadowMtxArrayEditor"); mID_CsmDistanceArray = mSceneViewCB.FindVar("gCsmDistanceArray"); mID_PointLightPos_RadiusInv = mSceneViewCB.FindVar("PointLightPos_RadiusInv"); mID_PointLightColor_Intensity = mSceneViewCB.FindVar("PointLightColor_Intensity"); return(OnResize(rc, swapChain, ViewInfo.Width, ViewInfo.Height)); }
public async System.Threading.Tasks.Task <bool> Init(CRenderContext rc, CSwapChain SwapChain, View.CGfxScreenViewDesc ViewInfo, CGfxShadingEnv ShadingEnv, RName MtlInst, string debugName) { mCmdList = new CCommandList[2]; EngineNS.CCommandListDesc CmdListDesc = new EngineNS.CCommandListDesc(); mCmdList[0] = rc.CreateCommandList(CmdListDesc); mCmdList[1] = rc.CreateCommandList(CmdListDesc); mCmdList[0].DebugName = debugName; mCmdList[1].DebugName = debugName; var ScreenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(rc, CEngineDesc.ScreenAlignedTriangleName, true); mScreenAlignedTriangle = CEngine.Instance.MeshManager.CreateMesh(rc, ScreenAlignedTriangle); var mtl = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, MtlInst); mScreenAlignedTriangle.SetMaterialInstance(rc, 0, mtl, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); //await mScreenAlignedTriangle.AwaitEffects(); mShadingEnv = ShadingEnv; mScreenView = new View.CGfxScreenView(); return(await mScreenView.Init(rc, SwapChain, ViewInfo, ShadingEnv, mtl, mScreenAlignedTriangle)); }
public override void TickRender(CSwapChain swapChain) { base.TickRender(SwapChain); var RHICtx = EngineNS.CEngine.Instance.RenderContext; if (RHICtx == null) { return; } //RHICtx.BindCurrentSwapChain(mSwapChain); //shadow ssm; mSSM.TickRender(RHICtx); mForwardBasePass.TickRender(RHICtx); //post effect; mMobileAO.TickRender(RHICtx); if (CEngine.EnableBloom == true) { mBloomMobile.TickRender(RHICtx); } mSunShaftMobile.TickRender(RHICtx); mCopyPostprocessPass.TickRender(RHICtx); swapChain.Present(); }
public override void TickRender(CSwapChain swapChain) { base.TickRender(SwapChain); var RHICtx = EngineNS.CEngine.Instance.RenderContext; if (RHICtx == null) { return; } #if Test_Snapshot mTestSnapshort?.RenderTick(null); #endif TickRender_Snapshots(); //shadow ssm; mCSM.TickRender(RHICtx); //hit proxy; mHitProxy.TickRender(); //picked effect; mPickedEffect.TickRender(); mForwardBasePass.TickRender(RHICtx); //post effect; mMobileAO.TickRender(RHICtx); mBloomMobile.TickRender(RHICtx); mSunShaftMobile.TickRender(RHICtx); mCopyPostprocessPass.TickRender(RHICtx); SwapChain.Present(); }
public WinformsDevice(Factory1 dxgiFactory, WinformsEye eye, CAdapter adapter, ControlWindow primaryWindow, SwapChainDescription primarySwapChainDesc, DeviceInitializationFlags flags, IFileSystem fileSystem) { this.flags = flags; this.eye = eye; this.dxgiFactory = dxgiFactory; this.adapter = adapter; d3dDevice = new Device(adapter.DXGIAdapter, CtSharpDX11.DeviceCreationFlags(flags)); primarySwapChain = new CSwapChain(this, primaryWindow, ref primarySwapChainDesc, pswc => { }, () => !primaryWindow.IsVisible && additionalSwapChains.All(aswc => !aswc.Window.IsVisible)); creator = new CDeviceChildCreator(this); immediateContext = new CDeviceContext(this, d3dDevice.ImmediateContext); additionalSwapChains = new List<CSwapChain>(); }
public override void TickRender(CSwapChain swapChain) { var rc = EngineNS.CEngine.Instance.RenderContext; var CmdList = mCLDB_Snapshot[1]; CmdList.Commit(rc); CmdList = mCLDB_Copy[1]; CmdList.BeginCommand(); CmdList.BeginRenderPass(mRenderPassDesc_Final, mFinalView.FrameBuffer); LatestPass = CmdList.BuildRenderPass(int.MaxValue, GraphicsDebug); CmdList.EndRenderPass(); CmdList.EndCommand(); CmdList.Commit(rc); base.TickRender(null); rc.FlushImmContext(); }
public override void TickRender(CSwapChain swapChain) { var RHICtx = EngineNS.CEngine.Instance.RenderContext; //shadow ssm; mSSM.TickRender(RHICtx); mForwardBasePass.TickRender(RHICtx); //post effect; mMobileAO.TickRender(RHICtx); if (CEngine.EnableBloom == true) { mBloomMobile.TickRender(RHICtx); } mSunShaftMobile.TickRender(RHICtx); mCopyPostprocessPass.TickRender(RHICtx); base.TickRender(null); }
public override void OnResize(CRenderContext RHICtx, CSwapChain SwapChain, UInt32 width, UInt32 height) { if (Camera == null || mBloomMobile.mUSView8 == null || BaseSceneView == null) { return; } SwapChain.OnResize(width, height); //RHICtx.BindCurrentSwapChain(mSwapChain); Camera.PerspectiveFovLH(Camera.mDefaultFoV, (float)width, (float)height); mCopyPostprocessPass.mScreenView.OnResize(RHICtx, SwapChain, width, height); BaseSceneView.OnResize(RHICtx, null, width, height); //hitproxy; mHitProxy.OnResize(width, height); //picked effect; mPickedEffect.OnResize(width, height); //post effect; mMobileAO.OnResize(RHICtx, width, height, BaseSceneView); mBloomMobile.OnResize(RHICtx, width, height, BaseSceneView); mSunShaftMobile.OnResize(RHICtx, width, height); 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.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 ViewportSizeAndRcp = new Vector4(width, height, 1.0f / width, 1.0f / height); BaseSceneView.mViewportSizeAndRcp = ViewportSizeAndRcp; mCopyPostprocessPass.mScreenView.ViewportSizeAndRcp = ViewportSizeAndRcp; }
public override void TickRender(CSwapChain swapChain) { var rc = EngineNS.CEngine.Instance.RenderContext; if (rc == null) { return; } mCommandList_Final.Commit(rc); if (UseCapture) { var tex = mCaptureSV.FrameBuffer.GetSRV_RenderTarget(0); tex.GetTexture2DData(rc, mTexData0, 0, (int)mViewWidth, (int)mViewHeight); if (CaptureRGBData) { tex = mCaptureSV.FrameBuffer.GetSRV_RenderTarget(1); tex.GetTexture2DData(rc, mTexData1, 0, (int)mViewWidth, (int)mViewHeight); } } }
public bool OnResize(CRenderContext RHICtx, CSwapChain SwapChain, UInt32 width, UInt32 height) { if (mViewport == null || width == 0 || height == 0) { return(false); } mViewport.Width = width; mViewport.Height = height; //frame buffer; mFrameBuffer?.Cleanup(); mFrameBuffer = null; CFrameBuffersDesc FBDesc = new CFrameBuffersDesc(); FBDesc.IsSwapChainBuffer = vBOOL.FromBoolean(mViewInfo.IsSwapChainBuffer); FBDesc.UseDSV = (mViewInfo.UseDepthStencilView ? vBOOL.FromBoolean(true) : vBOOL.FromBoolean(false)); mFrameBuffer = RHICtx.CreateFrameBuffers(FBDesc); if (mFrameBuffer == null) { return(false); } for (int idx = 0; idx < mTex2dArray.Count; idx++) { mTex2dArray[idx]?.Cleanup(); } mTex2dArray.Clear(); for (int idx = 0; idx < mSRVArray.Count; idx++) { mSRVArray[idx]?.Cleanup(); } mSRVArray.Clear(); //render target view; for (int idx = 0; idx < mRTVArray.Count; idx++) { mRTVArray[idx]?.Cleanup(); } mRTVArray.Clear(); mDepthStencilView?.Cleanup(); mDepthStencilView = null; if (mViewInfo.IsSwapChainBuffer == true && SwapChain != null) { for (int idx = 0; idx < mViewInfo.mRTVDescArray.Count; idx++) { var RTVDesc = mViewInfo.mRTVDescArray[idx]; //gles3.1 can not sample swap chain buffer; RTVDesc.mCanBeSampled = vBOOL.FromBoolean(false); RTVDesc.mTexture2D = SwapChain.Texture2D.CoreObject; //this is for editor to use(snapshot needs this); if (CEngine.Instance.Desc.RHIType == ERHIType.RHT_D3D11) { CShaderResourceViewDesc SRVDesc = new CShaderResourceViewDesc(); SRVDesc.Init(); SRVDesc.mTexture2D = SwapChain.Texture2D.CoreObject; var SRV = RHICtx.CreateShaderResourceView(SRVDesc); mSRVArray.Add(SRV); mFrameBuffer.BindSRV_RT((UInt32)idx, SRV); } var RTV = RHICtx.CreateRenderTargetView(RTVDesc); mRTVArray.Add(RTV); mFrameBuffer.BindRenderTargetView((UInt32)idx, RTV); } } else { for (int idx = 0; idx < mViewInfo.mRTVDescArray.Count; idx++) { var refRTVDesc = mViewInfo.mRTVDescArray[idx]; if (refRTVDesc.mCanBeSampled == true) { CTexture2DDesc TexDesc = new CTexture2DDesc(); TexDesc.Init(); TexDesc.Width = width; TexDesc.Height = height; TexDesc.Format = refRTVDesc.Format; TexDesc.BindFlags = (UInt32)(EBindFlags.BF_SHADER_RES | EBindFlags.BF_RENDER_TARGET); var Tex2D = RHICtx.CreateTexture2D(TexDesc); mTex2dArray.Add(Tex2D); CShaderResourceViewDesc SRVDesc = new CShaderResourceViewDesc(); SRVDesc.Init(); SRVDesc.mTexture2D = Tex2D.CoreObject; var SRV = RHICtx.CreateShaderResourceView(SRVDesc); mSRVArray.Add(SRV); mFrameBuffer.BindSRV_RT((UInt32)idx, SRV); refRTVDesc.mTexture2D = Tex2D.CoreObject; var RTV = RHICtx.CreateRenderTargetView(refRTVDesc); mRTVArray.Add(RTV); mFrameBuffer.BindRenderTargetView((UInt32)idx, RTV); } else { CTexture2DDesc TexDesc = new CTexture2DDesc(); TexDesc.Init(); TexDesc.Width = width; TexDesc.Height = height; TexDesc.Format = refRTVDesc.Format; TexDesc.BindFlags = (UInt32)(EBindFlags.BF_RENDER_TARGET); var Tex2D = RHICtx.CreateTexture2D(TexDesc); mTex2dArray.Add(Tex2D); refRTVDesc.mTexture2D = Tex2D.CoreObject; var RTV = RHICtx.CreateRenderTargetView(refRTVDesc); mRTVArray.Add(RTV); mFrameBuffer.BindRenderTargetView((UInt32)idx, RTV); } } } mViewInfo.mDSVDesc.Width = width; mViewInfo.mDSVDesc.Height = height; if (mViewInfo.UseDepthStencilView == true) { if (mViewInfo.mDSVDesc.mCanBeSampled == true) { CTexture2DDesc Tex2dDesc = new CTexture2DDesc(); Tex2dDesc.Init(); Tex2dDesc.Width = width; Tex2dDesc.Height = height; Tex2dDesc.Format = mViewInfo.mDSVDesc.Format; Tex2dDesc.BindFlags = (UInt32)(EBindFlags.BF_SHADER_RES | EBindFlags.BF_DEPTH_STENCIL); var Tex2d = RHICtx.CreateTexture2D(Tex2dDesc); mTex2dArray.Add(Tex2d); CShaderResourceViewDesc SRVDesc = new CShaderResourceViewDesc(); SRVDesc.Init(); SRVDesc.mTexture2D = Tex2d.CoreObject; var SRV = RHICtx.CreateShaderResourceView(SRVDesc); mSRVArray.Add(SRV); mFrameBuffer.BindSRV_DS(SRV); mViewInfo.mDSVDesc.mTexture2D = Tex2d.CoreObject; mDepthStencilView = RHICtx.CreateDepthStencilView(mViewInfo.mDSVDesc); mFrameBuffer.BindDepthStencilView(mDepthStencilView); } else { CTexture2DDesc Tex2dDesc = new CTexture2DDesc(); Tex2dDesc.Init(); Tex2dDesc.Width = width; Tex2dDesc.Height = height; Tex2dDesc.Format = mViewInfo.mDSVDesc.Format; Tex2dDesc.BindFlags = (UInt32)(EBindFlags.BF_SHADER_RES | EBindFlags.BF_DEPTH_STENCIL); var Tex2d = RHICtx.CreateTexture2D(Tex2dDesc); mTex2dArray.Add(Tex2d); mViewInfo.mDSVDesc.mTexture2D = Tex2d.CoreObject; mDepthStencilView = RHICtx.CreateDepthStencilView(mViewInfo.mDSVDesc); mFrameBuffer.BindDepthStencilView(mDepthStencilView); } } else { mDepthStencilView = null; } return(true); }
public async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx, CSwapChain SwapChain, CGfxScreenViewDesc ViewInfo, CGfxShadingEnv ShadingEnv, CGfxMaterialInstance MtlInst, CGfxMesh ViewportMesh) { if (ShadingEnv == null) { return(false); } if (ViewportMesh == null) { var ScreenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(RHICtx, CEngineDesc.ScreenAlignedTriangleName, true); ViewportMesh = CEngine.Instance.MeshManager.CreateMesh(RHICtx, ScreenAlignedTriangle); ViewportMesh.SetMaterialInstance(RHICtx, 0, await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(RHICtx, RName.GetRName("Material/defaultmaterial.instmtl")), CEngine.Instance.PrebuildPassData.DefaultShadingEnvs); //await ViewportMesh.AwaitEffects(); } mViewInfo = ViewInfo; mViewport = new CViewport(); mViewport.Width = ViewInfo.Width; mViewport.Height = ViewInfo.Height; mViewport.TopLeftX = 0.0f; mViewport.TopLeftY = 0.0f; mViewport.MinDepth = 0.0f; mViewport.MaxDepth = 1.0f; var ShaderProgram = CEngine.Instance.EffectManager.DefaultEffect.ShaderProgram; mScreenViewCB = RHICtx.CreateConstantBuffer(ShaderProgram, CEngine.Instance.EffectManager.DefaultEffect.CacheData.CBID_View); if (mScreenViewCB == null) { return(false); } mIDViewportSizeAndRcp = mScreenViewCB.FindVar("gViewportSizeAndRcp"); mID_SunPosNDC = mScreenViewCB.FindVar("gSunPosNDC"); mID_DirLightColor_Intensity = mScreenViewCB.FindVar("gDirLightColor_Intensity"); mID_AoParam = mScreenViewCB.FindVar("gAoParam"); CRasterizerStateDesc RSDesc = new CRasterizerStateDesc(); RSDesc.InitForCustom(); mRasterState = CEngine.Instance.RasterizerStateManager.GetRasterizerState(RHICtx, RSDesc); CDepthStencilStateDesc DSSDesc = new CDepthStencilStateDesc(); DSSDesc.InitForCustomLayers(); mDepthStencilState = CEngine.Instance.DepthStencilStateManager.GetDepthStencilState(RHICtx, DSSDesc); CBlendStateDesc BlendDesc = new CBlendStateDesc(); BlendDesc.InitForCustomLayers(); mBlendState = CEngine.Instance.BlendStateManager.GetBlendState(RHICtx, BlendDesc); mPass = RHICtx.CreatePass(); if (false == await mPass.InitPassForViewportView(RHICtx, ShadingEnv, MtlInst, ViewportMesh)) { return(false); } return(OnResize(RHICtx, SwapChain, ViewInfo.Width, ViewInfo.Height)); }
void OnAdditionalSwapChainDisposed(CSwapChain swc) { additionalSwapChains.Remove(swc); }
public virtual void OnResize(CRenderContext rc, CSwapChain SwapChain, UInt32 width, UInt32 height) { }
public virtual void TickRender(CSwapChain swapChain) { }
public IAdditionalSwapChain CreateAdditionalSwapChain(IWindowHandle windowHandle, SwapChainDescription swapChainDesc) { var window = (ControlWindow) windowHandle; var aswc = new CSwapChain(this, window, ref swapChainDesc, OnAdditionalSwapChainDisposed, () => false); window.SetSwapChain(aswc); additionalSwapChains.Add(aswc); return aswc; }
public override void OnResize(CRenderContext RHICtx, CSwapChain SwapChain, UInt32 width, UInt32 height) { Camera.PerspectiveFovLH(Camera.mDefaultFoV, (float)width, (float)height); BaseSceneView.OnResize(RHICtx, null, width, height); }
public bool OnResize(CRenderContext RHICtx, CSwapChain swapChain, UInt32 width, UInt32 height) { if (mViewport == null) { return(false); } if (width == 0 || height == 0) { return(false); } mViewport.Width = width; mViewport.Height = height; SDK_GfxSceneView_ResizeViewport(CoreObject, (UInt32)mViewport.TopLeftX, (UInt32)mViewport.TopLeftY, width, height); mFrameBuffer?.Cleanup(); mFrameBuffer = null; CFrameBuffersDesc fbDesc = new CFrameBuffersDesc(); fbDesc.IsSwapChainBuffer = vBOOL.FromBoolean(false); fbDesc.UseDSV = (mViewInfo.mUseDSV ? vBOOL.FromBoolean(true) : vBOOL.FromBoolean(false)); mFrameBuffer = RHICtx.CreateFrameBuffers(fbDesc); if (mFrameBuffer == null) { return(false); } SDK_GfxSceneView_SetFrameBuffers(CoreObject, FrameBuffer.CoreObject); for (int idx = 0; idx < mTex2dArray.Count; idx++) { mTex2dArray[idx]?.Cleanup(); } mTex2dArray.Clear(); for (int idx = 0; idx < mSRVArray.Count; idx++) { mSRVArray[idx]?.Cleanup(); } mSRVArray.Clear(); for (int idx = 0; idx < mRTVArray.Count; idx++) { mRTVArray[idx]?.Cleanup(); } mRTVArray.Clear(); mDSV?.Cleanup(); mDSV = null; for (int i = 0; i < mViewInfo.mRTVDescArray.Count; i++) { var refRTVDesc = mViewInfo.mRTVDescArray[i]; if (refRTVDesc.mCanBeSampled == true) { CTexture2DDesc Tex2dDesc = new CTexture2DDesc(); Tex2dDesc.Init(); Tex2dDesc.Width = width; Tex2dDesc.Height = height; Tex2dDesc.Format = refRTVDesc.Format; Tex2dDesc.BindFlags = (UInt32)(EBindFlags.BF_SHADER_RES | EBindFlags.BF_RENDER_TARGET); var Tex2d = RHICtx.CreateTexture2D(Tex2dDesc); mTex2dArray.Add(Tex2d); CShaderResourceViewDesc srvDesc = new CShaderResourceViewDesc(); srvDesc.Init(); srvDesc.mTexture2D = Tex2d.CoreObject; var SRV = RHICtx.CreateShaderResourceView(srvDesc); mSRVArray.Add(SRV); mFrameBuffer.BindSRV_RT((UInt32)i, SRV); refRTVDesc.mTexture2D = Tex2d.CoreObject; var RTV = RHICtx.CreateRenderTargetView(refRTVDesc); mRTVArray.Add(RTV); mFrameBuffer.BindRenderTargetView((UInt32)i, RTV); } else { CTexture2DDesc Tex2dDesc = new CTexture2DDesc(); Tex2dDesc.Init(); Tex2dDesc.Width = width; Tex2dDesc.Height = height; Tex2dDesc.Format = refRTVDesc.Format; Tex2dDesc.BindFlags = (UInt32)(EBindFlags.BF_RENDER_TARGET); var Tex2d = RHICtx.CreateTexture2D(Tex2dDesc); mTex2dArray.Add(Tex2d); CRenderTargetViewDesc rtDesc = new CRenderTargetViewDesc(); rtDesc.mTexture2D = Tex2d.CoreObject; var RTV = RHICtx.CreateRenderTargetView(rtDesc); mRTVArray.Add(RTV); mFrameBuffer.BindRenderTargetView((UInt32)i, RTV); } } mViewInfo.mDSVDesc.Width = width; mViewInfo.mDSVDesc.Height = height; if (mViewInfo.mUseDSV) { if (mViewInfo.mDSVDesc.mCanBeSampled == true) { CTexture2DDesc Tex2dDesc = new CTexture2DDesc(); Tex2dDesc.Init(); Tex2dDesc.Width = width; Tex2dDesc.Height = height; Tex2dDesc.Format = mViewInfo.mDSVDesc.Format; Tex2dDesc.BindFlags = (UInt32)(EBindFlags.BF_SHADER_RES | EBindFlags.BF_DEPTH_STENCIL); var Tex2d = RHICtx.CreateTexture2D(Tex2dDesc); mTex2dArray.Add(Tex2d); CShaderResourceViewDesc SRVDesc = new CShaderResourceViewDesc(); SRVDesc.Init(); SRVDesc.mTexture2D = Tex2d.CoreObject; var SRV = RHICtx.CreateShaderResourceView(SRVDesc); mSRVArray.Add(SRV); mFrameBuffer.BindSRV_DS(SRV); mViewInfo.mDSVDesc.mTexture2D = Tex2d.CoreObject; mDSV = RHICtx.CreateDepthStencilView(mViewInfo.mDSVDesc); mFrameBuffer.BindDepthStencilView(mDSV); } else { CTexture2DDesc Tex2dDesc = new CTexture2DDesc(); Tex2dDesc.Init(); Tex2dDesc.Width = width; Tex2dDesc.Height = height; Tex2dDesc.Format = mViewInfo.mDSVDesc.Format; Tex2dDesc.BindFlags = (UInt32)(EBindFlags.BF_SHADER_RES | EBindFlags.BF_DEPTH_STENCIL); var Tex2d = RHICtx.CreateTexture2D(Tex2dDesc); mTex2dArray.Add(Tex2d); mViewInfo.mDSVDesc.mTexture2D = Tex2d.CoreObject; mDSV = RHICtx.CreateDepthStencilView(mViewInfo.mDSVDesc); mFrameBuffer.BindDepthStencilView(mDSV); } } else { mDSV = null; } return(true); }