Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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();
        }
Esempio n. 6
0
        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>();
        }
Esempio n. 7
0
        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();
        }
Esempio n. 8
0
        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;
        }
Esempio n. 10
0
        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);
                }
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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));
        }
Esempio n. 13
0
 void OnAdditionalSwapChainDisposed(CSwapChain swc)
 {
     additionalSwapChains.Remove(swc);
 }
Esempio n. 14
0
 public virtual void OnResize(CRenderContext rc, CSwapChain SwapChain, UInt32 width, UInt32 height)
 {
 }
Esempio n. 15
0
 public virtual void TickRender(CSwapChain swapChain)
 {
 }
Esempio n. 16
0
 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;
 }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
        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);
        }