public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var Shader        = pass.Effect;

            if (Shader.CacheData.EnvMapBindPoint != UInt32.MaxValue)
            {
                TexBinder.PSBindTexture(Shader.CacheData.EnvMapBindPoint, mEnvMap);
            }

            if (Shader.CacheData.SampEnvMapBindPoint != UInt32.MaxValue)
            {
                SamplerBinder.PSBindSampler(Shader.CacheData.SampEnvMapBindPoint, SamplerStat);
            }

            if (Shader.CacheData.BindingSlot_ShadowMap != UInt32.MaxValue)
            {
                TexBinder.PSBindTexture(Shader.CacheData.BindingSlot_ShadowMap, mTex_ShadowMap);
            }
            if (Shader.CacheData.BindingSlot_ShadowMapSampler != UInt32.MaxValue)
            {
                SamplerBinder.PSBindSampler(Shader.CacheData.BindingSlot_ShadowMapSampler, mSampler_ShadowMap);
            }
        }
Esempio n. 2
0
 public void OnSetPassData(CPass pass, bool shadow)
 {
     for (int i = 0; i < Modifiers.Count; i++)
     {
         Modifiers[i].OnSetPassData(pass, shadow);
     }
 }
Esempio n. 3
0
        public void BindParticleVB(CPass pass)
        {
            if (SubStates == null || SubStates.Length == 0)
            {
                return;
            }

            if (pass != null && pass.GeometryMesh != null)
            {//这里在粒子Mesh创建Pass的时候调用
                if (pass.AttachVBs == null)
                {
                    if (HostActorMesh != null && HostActorMesh.SceneMesh != null)//MeshPrimitives
                    {
                        pass.AttachVBs = new CVertexArray();
                        if (TrailNode != null && IsTrail && pass.GeometryMesh != null)
                        {
                            pass.BindGeometry(TrailNode.GeomMesh, 0, 0);
                        }
                        else
                        {
                            pass.BindGeometry(HostActorMesh.SceneMesh.MeshPrimitives, 0, 0);
                        }


                        pass.AttachVBs.BindVertexBuffer(EVertexSteamType.VST_InstPos, mPosVB);
                        pass.AttachVBs.BindVertexBuffer(EVertexSteamType.VST_InstScale, mScaleVB);
                        pass.AttachVBs.BindVertexBuffer(EVertexSteamType.VST_InstQuat, mRotateVB);
                        pass.AttachVBs.BindVertexBuffer(EVertexSteamType.VST_F4_1, mColorVB);

                        if (MaterialInstanceNode != null)
                        {
                            MaterialInstanceNode.SetMaterialInstanceValue(HostActorMesh.SceneMesh);
                        }
                    }
                }
                if (pass.AttachVBs == null)
                {
                    return;
                }

                if (TrailNode != null && IsTrail && pass.GeometryMesh != null)
                {
                    if (TrailNode.TrailDataControlData != null && TrailNode.TrailDataControlData.IsVaild())
                    {
                        TrailNode.TrailDataControlData.BindBuffs(CEngine.Instance.RenderContext, TrailNode.GeomMesh);

                        pass.AttachVBs.NumInstances = 1;
                    }
                    else
                    {
                        pass.AttachVBs.NumInstances = 0;
                    }
                }
                else
                {
                    pass.AttachVBs.NumInstances = (uint)ParticleNumber;
                }
            }
        }
 public override void OnSetPassData(CPass pass, bool shadow)
 {
     if (shadow)
     {
         mShadowHost.BindBuffers(pass);
     }
     else
     {
         mHost.BindBuffers(pass);
     }
 }
Esempio n. 5
0
        public void CookShadowLayerData2Pass(CRenderContext RHICtx, CGfxCamera ViewerCamera, CGfxCamera ShadowCamera, CGfxShadingEnv ShadingEnv)
        {
            if (ViewerCamera == null || ShadowCamera == null || RHICtx == null || ShadingEnv == null)
            {
                return;
            }

            var ShadowRenderLayer = ViewerCamera.mSceneRenderLayer[(int)ERenderLayer.RL_Shadow];
            int Count             = ShadowRenderLayer.GetRenderLayerAtomNum();

            for (uint idx = 0; idx < Count; idx++)
            {
                var MtlMesh = ShadowRenderLayer.GetMtlMeshFromArray(idx);
                if (MtlMesh == null)
                {
                    return;
                }
                var SceneMesh = MtlMesh.mRootSceneMesh;

                if (MtlMesh == null || SceneMesh == null)
                {
                    Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"NullPtr here", "");
                    continue;
                }

                MtlMesh.UpdatePerMtlMeshCBufferForShadow(RHICtx, ShadowCamera);

                CPass refPass = MtlMesh.GetPass(PrebuildPassIndex.PPI_SSM);
                if (refPass == null)
                {
                    continue;
                }
                if (refPass.PreUse() == false)
                {
                    continue;
                }
                refPass.BindShaderTextures(MtlMesh);

                refPass.ShaderSamplerBinder = MtlMesh.GetSamplerBinder_Shadow(RHICtx, refPass.Effect.ShaderProgram);
                ShadingEnv.BindResources(SceneMesh, refPass);

                refPass.ViewPort = mViewport;
                refPass.BindCBuffer(refPass.Effect.ShaderProgram, refPass.Effect.CacheData.CBID_Camera, ShadowCamera.CBuffer);
                refPass.BindCBuffer(refPass.Effect.ShaderProgram, refPass.Effect.CacheData.CBID_View, SceneViewCB);

                SceneMesh.MdfQueue.OnSetPassData(refPass, true);

                SendPassToCorrectRenderLayer(ERenderLayer.RL_Shadow, refPass);
            }
        }
Esempio n. 6
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        //, CConstantBuffer cbPerInstance, CShaderResources TexBinder, CShaderSamplers SamplerBinder, CShaderProgram Shader)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var Shader        = pass.Effect;

            if (Shader.CacheData.EnvMapBindPoint != UInt32.MaxValue)
            {
                TexBinder.PSBindTexture(Shader.CacheData.EnvMapBindPoint, mEnvMap);
            }

            if (Shader.CacheData.SampEnvMapBindPoint != UInt32.MaxValue)
            {
                SamplerBinder.PSBindSampler(Shader.CacheData.SampEnvMapBindPoint, SamplerStat);
            }
        }
Esempio n. 7
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        //, CConstantBuffer cbPerInstance, CShaderResources TexBinder, CShaderSamplers SamplerBinder, CShaderProgram Shader)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var Shader        = pass.GpuProgram;
            //up
            {
                if (Shader.FindTextureBindInfo(null, "gSrcTexUp", ref mTexBindInfo_SrcTexUp))
                {
                    TexBinder.PSBindTexture(mTexBindInfo_SrcTexUp.PSBindPoint, mSrcTexUp);
                }

                if (Shader.FindSamplerBindInfo(null, "Samp_gSrcTexUp", ref mSamplerBindInfo_SrcTexUp) == true)
                {
                    mSamplerStateDesc_SrcTexUp.SetDefault();
                    mSamplerStateDesc_SrcTexUp.Filter   = ESamplerFilter.SPF_MIN_MAG_MIP_LINEAR;
                    mSamplerStateDesc_SrcTexUp.AddressU = EAddressMode.ADM_CLAMP;
                    mSamplerStateDesc_SrcTexUp.AddressV = EAddressMode.ADM_CLAMP;

                    var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_SrcTexUp);

                    SamplerBinder.PSBindSampler(mSamplerBindInfo_SrcTexUp.PSBindPoint, SamplerStat);
                }
            }

            //down
            {
                if (Shader.FindTextureBindInfo(null, "gSrcTexDown", ref mTexBindInfo_SrcTexDown))
                {
                    TexBinder.PSBindTexture(mTexBindInfo_SrcTexDown.PSBindPoint, mSrcTexDown);
                }

                if (Shader.FindSamplerBindInfo(null, "Samp_gSrcTexDown", ref mSamplerBindInfo_SrcTexDown) == true)
                {
                    mSamplerStateDesc_SrcTexDown.SetDefault();
                    mSamplerStateDesc_SrcTexDown.Filter   = ESamplerFilter.SPF_MIN_MAG_MIP_LINEAR;
                    mSamplerStateDesc_SrcTexDown.AddressU = EAddressMode.ADM_CLAMP;
                    mSamplerStateDesc_SrcTexDown.AddressV = EAddressMode.ADM_CLAMP;

                    var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_SrcTexDown);

                    SamplerBinder.PSBindSampler(mSamplerBindInfo_SrcTexDown.PSBindPoint, SamplerStat);
                }
            }
        }
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        {
            //CTextureBindInfo info = new CTextureBindInfo(); //this is a struct,so you can use new as convenient;
            //if (Shader.FindTextureBindInfo(null, "gEnvMap", ref info))
            //{
            //    TexBinder.PSBindTexture(info.PSBindPoint, mEnvMap);
            //}

            //var SamplerBindInfo = new CSamplerBindInfo();
            //if (Shader.FindSamplerBindInfo(null, "Samp_gEnvMap", ref SamplerBindInfo) == true)
            //{
            //    var SamplerStatDesc = new CSamplerStateDesc();
            //    SamplerStatDesc.SetDefault();
            //    SamplerStatDesc.Filter = ESamplerFilter.SPF_MIN_MAG_MIP_LINEAR;
            //    var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, SamplerStatDesc);

            //    SamplerBinder.PSBindSampler(SamplerBindInfo.PSBindPoint, SamplerStat);
            //}
        }
Esempio n. 9
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        //, CConstantBuffer cbPerInstance, CShaderResources TexBinder, CShaderSamplers SamplerBinder, CShaderProgram Shader)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var Shader        = pass.GpuProgram;

            //base scene view;
            if (Shader.FindTextureBindInfo(null, "gBaseSceneView", ref mTexBindInfo_BaseSceneView))
            {
                TexBinder.PSBindTexture(mTexBindInfo_BaseSceneView.PSBindPoint, mBaseSceneView);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gBaseSceneView", ref mSamplerBindInfo_BaseSceneView) == true)
            {
                mSamplerStateDesc_BaseSceneView.SetDefault();
                mSamplerStateDesc_BaseSceneView.Filter   = ESamplerFilter.SPF_MIN_MAG_MIP_LINEAR;
                mSamplerStateDesc_BaseSceneView.AddressU = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_BaseSceneView.AddressV = EAddressMode.ADM_CLAMP;

                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_BaseSceneView);

                SamplerBinder.PSBindSampler(mSamplerBindInfo_BaseSceneView.PSBindPoint, SamplerStat);
            }

            //bloom;
            if (Shader.FindTextureBindInfo(null, "gBloomTex", ref mTexBindInfo_BloomTex))
            {
                TexBinder.PSBindTexture(mTexBindInfo_BloomTex.PSBindPoint, mBloomTex);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gBloomTex", ref mSamplerBindInfo_BloomTex) == true)
            {
                mSamplerStateDesc_BloomTex.SetDefault();
                mSamplerStateDesc_BloomTex.Filter   = ESamplerFilter.SPF_MIN_MAG_MIP_LINEAR;
                mSamplerStateDesc_BloomTex.AddressU = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_BloomTex.AddressV = EAddressMode.ADM_CLAMP;

                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_BloomTex);

                SamplerBinder.PSBindSampler(mSamplerBindInfo_BloomTex.PSBindPoint, SamplerStat);
            }
        }
Esempio n. 10
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var Shader        = pass.GpuProgram;

            if (Shader.FindTextureBindInfo(null, "gPickedSetUpTex", ref mTBI_PickedSetUp))
            {
                TexBinder.PSBindTexture(mTBI_PickedSetUp.PSBindPoint, mSRV_PickedSetUp);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gPickedSetUp", ref mSBI_PickedSetUp) == true)
            {
                mSSD_PickedSetUp.SetDefault();
                mSSD_PickedSetUp.Filter   = ESamplerFilter.SPF_MIN_MAG_MIP_POINT;
                mSSD_PickedSetUp.AddressU = EAddressMode.ADM_CLAMP;
                mSSD_PickedSetUp.AddressV = EAddressMode.ADM_CLAMP;

                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSSD_PickedSetUp);

                SamplerBinder.PSBindSampler(mSBI_PickedSetUp.PSBindPoint, SamplerStat);
            }

            //
            if (Shader.FindTextureBindInfo(null, "gPickedBlurTex", ref mTBI_PickedBlur))
            {
                TexBinder.PSBindTexture(mTBI_PickedBlur.PSBindPoint, mSRV_PickedBlur);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gPickedBlur", ref mSBI_PickedBlur) == true)
            {
                mSSD_PickedBlur.SetDefault();
                mSSD_PickedBlur.Filter   = ESamplerFilter.SPF_MIN_MAG_MIP_POINT;
                mSSD_PickedBlur.AddressU = EAddressMode.ADM_CLAMP;
                mSSD_PickedBlur.AddressV = EAddressMode.ADM_CLAMP;

                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSSD_PickedBlur);

                SamplerBinder.PSBindSampler(mSBI_PickedBlur.PSBindPoint, SamplerStat);
            }
        }
Esempio n. 11
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        //, CConstantBuffer cbPerInstance, CShaderResources TexBinder, CShaderSamplers SamplerBinder, CShaderProgram Shader)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var effect        = pass.Effect;

            //env map;

            if (effect.CacheData.EnvMapBindPoint != UInt32.MaxValue)
            {
                TexBinder.PSBindTexture(effect.CacheData.EnvMapBindPoint, mEnvMap);
            }

            if (effect.CacheData.SampEnvMapBindPoint != UInt32.MaxValue)
            {
                SamplerBinder.PSBindSampler(effect.CacheData.SampEnvMapBindPoint, SamplerStat);
            }

            //eye env map;
            if (effect.CacheData.EyeEnvMapBindPoint != UInt32.MaxValue)
            {
                TexBinder.PSBindTexture(effect.CacheData.EyeEnvMapBindPoint, mEyeEnvMap);
            }

            if (effect.CacheData.SampEyeEnvMapBindPoint != UInt32.MaxValue)
            {
                SamplerBinder.PSBindSampler(effect.CacheData.SampEyeEnvMapBindPoint, SamplerStat);
            }

            //shadow map binding;
            if (effect.CacheData.BindingSlot_ShadowMap != UInt32.MaxValue)
            {
                TexBinder.PSBindTexture(effect.CacheData.BindingSlot_ShadowMap, mTex_ShadowMap);
            }

            if (effect.CacheData.BindingSlot_ShadowMapSampler != UInt32.MaxValue)
            {
                SamplerBinder.PSBindSampler(effect.CacheData.BindingSlot_ShadowMapSampler, mSampler_ShadowMap);
            }
        }
Esempio n. 12
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        {
            var fmesh = mesh.Tag as CFontMesh;

            if (fmesh != null)
            {
                if (fmesh.CBuffer == null)
                {
                    fmesh.CBuffer = CEngine.Instance.RenderContext.CreateConstantBuffer(pass.Effect.ShaderProgram, pass.Effect.CacheData.CBID_ShadingEnv);
                    int TextMatrixId  = fmesh.CBuffer.FindVar("RenderMatrix");
                    int TextOpacityId = fmesh.CBuffer.FindVar("TextOpacity");
                    int TextColorId   = fmesh.CBuffer.FindVar("TextColor");

                    fmesh.CBuffer.SetValue(TextMatrixId, fmesh.RenderMatrix, 0);
                    fmesh.CBuffer.SetValue(TextOpacityId, fmesh.TextOpacity, 0);
                    fmesh.CBuffer.SetValue(TextColorId, fmesh.TextColor, 0);
                }

                pass.BindCBuffer(pass.GpuProgram, pass.Effect.CacheData.CBID_ShadingEnv, fmesh.CBuffer);
            }
        }
Esempio n. 13
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var Shader        = pass.GpuProgram;

            if (Shader.FindTextureBindInfo(null, "gSrcTex", ref mTexBindInfo_Src))
            {
                TexBinder.PSBindTexture(mTexBindInfo_Src.PSBindPoint, mSRV_Src);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gSrcTex", ref mSampBindInfo_Src) == true)
            {
                mSampStateDesc_Src.SetDefault();
                mSampStateDesc_Src.Filter   = ESamplerFilter.SPF_MIN_MAG_LINEAR_MIP_POINT;
                mSampStateDesc_Src.AddressU = EAddressMode.ADM_CLAMP;
                mSampStateDesc_Src.AddressV = EAddressMode.ADM_CLAMP;
                mSampStateDesc_Src.AddressW = EAddressMode.ADM_CLAMP;

                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSampStateDesc_Src);
                SamplerBinder.PSBindSampler(mSampBindInfo_Src.PSBindPoint, SamplerStat);
            }
        }
Esempio n. 14
0
        public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
        {
            var TexBinder     = pass.ShaderResources;
            var SamplerBinder = pass.ShaderSamplerBinder;
            var Shader        = pass.GpuProgram;

            //base scene view;
            if (Shader.FindTextureBindInfo(null, "gBaseSceneView", ref mTexBindInfo_BaseSceneView))
            {
                TexBinder.PSBindTexture(mTexBindInfo_BaseSceneView.PSBindPoint, mBaseSceneView);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gBaseSceneView", ref mSamplerBindInfo_BaseSceneView) == true)
            {
                mSamplerStateDesc_BaseSceneView.SetDefault();
                mSamplerStateDesc_BaseSceneView.Filter   = ESamplerFilter.SPF_MIN_MAG_LINEAR_MIP_POINT;
                mSamplerStateDesc_BaseSceneView.AddressU = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_BaseSceneView.AddressV = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_BaseSceneView.AddressW = EAddressMode.ADM_CLAMP;

                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_BaseSceneView);
                SamplerBinder.PSBindSampler(mSamplerBindInfo_BaseSceneView.PSBindPoint, SamplerStat);
            }

            //bloom;
            if (Shader.FindTextureBindInfo(null, "gBloomTex", ref mTexBindInfo_BloomTex))
            {
                TexBinder.PSBindTexture(mTexBindInfo_BloomTex.PSBindPoint, mBloomTex);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gBloomTex", ref mSamplerBindInfo_BloomTex) == true)
            {
                mSamplerStateDesc_BloomTex.SetDefault();
                mSamplerStateDesc_BloomTex.Filter   = ESamplerFilter.SPF_MIN_MAG_LINEAR_MIP_POINT;
                mSamplerStateDesc_BloomTex.AddressU = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_BloomTex.AddressV = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_BloomTex.AddressW = EAddressMode.ADM_CLAMP;

                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_BloomTex);
                SamplerBinder.PSBindSampler(mSamplerBindInfo_BloomTex.PSBindPoint, SamplerStat);
            }

            //vignette;
            if (Shader.FindTextureBindInfo(null, "gVignette", ref mTexBindInfo_Vignette))
            {
                TexBinder.PSBindTexture(mTexBindInfo_Vignette.PSBindPoint, mVignetteTex);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gVignette", ref mSamplerBindInfo_Vignette) == true)
            {
                mSamplerStateDesc_Vignette.SetDefault();
                mSamplerStateDesc_Vignette.Filter   = ESamplerFilter.SPF_MIN_MAG_LINEAR_MIP_POINT;
                mSamplerStateDesc_Vignette.AddressU = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_Vignette.AddressV = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_Vignette.AddressW = EAddressMode.ADM_CLAMP;
                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_Vignette);
                SamplerBinder.PSBindSampler(mSamplerBindInfo_Vignette.PSBindPoint, SamplerStat);
            }

            //sun shaft;
            if (Shader.FindTextureBindInfo(null, "gSunShaft", ref mTexBindInfo_SunShaft))
            {
                TexBinder.PSBindTexture(mTexBindInfo_SunShaft.PSBindPoint, mSunShaftTex);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gSunShaft", ref mSamplerBindInfo_SunShaft) == true)
            {
                mSamplerStateDesc_SunShaft.SetDefault();
                mSamplerStateDesc_SunShaft.Filter   = ESamplerFilter.SPF_MIN_MAG_LINEAR_MIP_POINT;
                mSamplerStateDesc_SunShaft.AddressU = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_SunShaft.AddressV = EAddressMode.ADM_CLAMP;
                mSamplerStateDesc_SunShaft.AddressW = EAddressMode.ADM_CLAMP;
                var SamplerStat = CEngine.Instance.SamplerStateManager.GetSamplerState(CEngine.Instance.RenderContext, mSamplerStateDesc_SunShaft);
                SamplerBinder.PSBindSampler(mSamplerBindInfo_SunShaft.PSBindPoint, SamplerStat);
            }

            //mobile ao srv binding;
            if (Shader.FindTextureBindInfo(null, "gMobileAoTex", ref mTBI_MobileAo))
            {
                TexBinder.PSBindTexture(mTBI_MobileAo.PSBindPoint, mSRV_MobileAo);
            }

            if (Shader.FindSamplerBindInfo(null, "Samp_gMobileAoTex", ref mSBI_MobileAo) == true)
            {
                SamplerBinder.PSBindSampler(mSBI_MobileAo.PSBindPoint, mSampStat_MobileAo);
            }
        }
Esempio n. 15
0
        public void FillPassData(CRenderContext RHICtx,
                                 CPass refPass,
                                 CGfxEffect effect,
                                 PrebuildPassIndex ppi,
                                 bool flushVars = false)
        {
            refPass.Effect = effect;
            if (effect.CacheData.PerInstanceId != UInt32.MaxValue)
            {
                ReCreateCBuffer(RHICtx, effect, flushVars);
            }
            refPass.BindCBuffer(effect.ShaderProgram, effect.CacheData.PerInstanceId, CBuffer);
            MtlInst.BindTextures(refPass.ShaderResources, effect.ShaderProgram);
            refPass.BindShaderTextures(this);
            var tempSampler = new CShaderSamplers();

            this.GetSamplerBinder(RHICtx, effect.ShaderProgram, tempSampler);
            refPass.ShaderSamplerBinder = tempSampler;

            var PrebuildPassData = CEngine.Instance.PrebuildPassData;

            if (ppi == PrebuildPassIndex.PPI_HitProxy ||
                ppi == PrebuildPassIndex.PPI_SceneCapture)
            {
                switch (MtlInst.mRenderLayer)
                {
                case View.ERenderLayer.RL_Opaque:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mOpaqueRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mOpaqueDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;

                case View.ERenderLayer.RL_Translucent:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mTranslucentRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mTranslucentDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;

                case View.ERenderLayer.RL_CustomOpaque:
                case View.ERenderLayer.RL_CustomTranslucent:
                case View.ERenderLayer.RL_Gizmos:
                case View.ERenderLayer.RL_Sky:
                {
                    refPass.RenderPipeline.RasterizerState   = MtlInst.CustomRasterizerState;
                    refPass.RenderPipeline.DepthStencilState = MtlInst.CustomDepthStencilState;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;
                }
            }
            else if (ppi == PrebuildPassIndex.PPI_Snapshot)
            {
                switch (MtlInst.mRenderLayer)
                {
                case View.ERenderLayer.RL_Opaque:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mOpaqueRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mOpaqueDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;

                case View.ERenderLayer.RL_Translucent:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mTranslucentRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mTranslucentDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mSnapshotBlendStat;
                }
                break;

                case View.ERenderLayer.RL_CustomOpaque:
                case View.ERenderLayer.RL_CustomTranslucent:
                case View.ERenderLayer.RL_Gizmos:
                case View.ERenderLayer.RL_Sky:
                {
                    refPass.RenderPipeline.RasterizerState   = MtlInst.CustomRasterizerState;
                    refPass.RenderPipeline.DepthStencilState = MtlInst.CustomDepthStencilState;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mSnapshotBlendStat;
                }
                break;
                }
            }
            else if (ppi == PrebuildPassIndex.PPI_PickedEditor)
            {
                switch (MtlInst.mRenderLayer)
                {
                case View.ERenderLayer.RL_Opaque:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mOpaqueRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mOpaqueDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;

                case View.ERenderLayer.RL_Translucent:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mTranslucentRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mTranslucentDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;

                case View.ERenderLayer.RL_CustomOpaque:
                case View.ERenderLayer.RL_CustomTranslucent:
                case View.ERenderLayer.RL_Gizmos:
                case View.ERenderLayer.RL_Sky:
                {
                    refPass.RenderPipeline.RasterizerState   = MtlInst.CustomRasterizerState;
                    refPass.RenderPipeline.DepthStencilState = MtlInst.CustomDepthStencilState;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;
                }
            }
            else if (ppi == PrebuildPassIndex.PPI_SSM)
            {
                refPass.RenderPipeline.RasterizerState   = MtlInst.mShadowRasterState;
                refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mOpaqueDSStat;
                refPass.RenderPipeline.BlendState        = PrebuildPassData.mShadowBlendStat;
            }
            else
            {
                switch (MtlInst.mRenderLayer)
                {
                case View.ERenderLayer.RL_Shadow:
                {
                    refPass.RenderPipeline.RasterizerState   = MtlInst.mShadowRasterState;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mOpaqueDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mShadowBlendStat;
                }
                break;

                case View.ERenderLayer.RL_Opaque:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mOpaqueRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mOpaqueDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mOpaqueBlendStat;
                }
                break;

                case View.ERenderLayer.RL_Translucent:
                {
                    refPass.RenderPipeline.RasterizerState   = PrebuildPassData.mTranslucentRasterStat;
                    refPass.RenderPipeline.DepthStencilState = PrebuildPassData.mTranslucentDSStat;
                    refPass.RenderPipeline.BlendState        = PrebuildPassData.mTranslucentBlendStat;
                }
                break;

                case View.ERenderLayer.RL_CustomOpaque:
                case View.ERenderLayer.RL_CustomTranslucent:
                {
                    refPass.RenderPipeline.RasterizerState   = MtlInst.CustomRasterizerState;
                    refPass.RenderPipeline.DepthStencilState = MtlInst.CustomDepthStencilState;
                    refPass.RenderPipeline.BlendState        = MtlInst.CustomBlendState; // PrebuildPassData.mOpaqueBlendStat;
                }
                break;

                case View.ERenderLayer.RL_Gizmos:
                case View.ERenderLayer.RL_Sky:
                {
                    refPass.RenderPipeline.RasterizerState   = MtlInst.CustomRasterizerState;
                    refPass.RenderPipeline.DepthStencilState = MtlInst.CustomDepthStencilState;
                    refPass.RenderPipeline.BlendState        = MtlInst.CustomBlendState;
                }
                break;
                }
            }
        }
Esempio n. 16
0
        public bool InitByEffects(CRenderContext RHICtx, CGfxMesh SceneMesh, UInt32 index, CGfxMaterialInstance mtl_inst, CGfxEffect[] effects, CGfxShadingEnv[] EnvShaderArray, bool preUseEffect)
        {
            MtlInst        = mtl_inst;
            mRootSceneMesh = SceneMesh;
            mAtomIndex     = index;

            if (mPrebuildPassArray == null)
            {
                mPrebuildPassArray = new CPass[(int)PrebuildPassIndex.PPI_Num];
            }

            for (int ppi = 0; ppi < (int)PrebuildPassIndex.PPI_Num; ppi++)
            {
                var effect = effects[ppi];
                if (effect == null)
                {
                    continue;
                }

                CPass refPass = null;
                if (mPrebuildPassArray[ppi] != null)
                {
                    refPass = mPrebuildPassArray[ppi];
                }
                else
                {
                    refPass = RHICtx.CreatePass();
                }

                refPass.InitPass(RHICtx, effect, EnvShaderArray[ppi], this, index);
                refPass.PassIndex = (PrebuildPassIndex)ppi;

                //如果Effect已经加载完成,那么设置Pass状态
                //否则就要等渲染的时候Pass.PreUse来间接触发了
                //
                if (refPass.Effect.IsValid)
                {
                    FillPassData(RHICtx, refPass, effect, (PrebuildPassIndex)ppi, true);
                }
                else
                {
                    if (preUseEffect)
                    {
                        effect.PreUse((successed) =>
                        {
                            if (successed == false)
                            {
                                return;
                            }
                            FillPassData(RHICtx, refPass, effect, (PrebuildPassIndex)ppi);
                        });
                    }
                }
                //这里一旦PreUse了,那就把所有shader都在初始化的时候就加载了
                //effect.PreUse((successed) =>
                //{
                //    if(successed==false)
                //    {
                //        return;
                //    }
                //    FillPassData(RHICtx, refPass, effect, (PrebuildPassIndex)ppi);
                //});

                mPrebuildPassArray[ppi] = refPass;
            }

            return(true);
        }
Esempio n. 17
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. 18
0
 public void SendPassToCorrectRenderLayer(ERenderLayer index, CPass pass)
 {
     SDK_GfxSceneView_SendPassToCorrectRenderLayer(mCoreObject, index, pass.CoreObject);
 }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
 public virtual void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
 {
     //每个shadingenv根据自己的shader代码,在这里绑定纹理,设置cbPerInstance变量
     //正常情况ShadingEnv不应该给cbPerInstance设置变量,特殊需求在这个函数特殊写
     //shadingEnv的变量,应该主要在非cbPerInstance里面
 }
Esempio n. 21
0
        public async System.Threading.Tasks.Task InitPass(CRenderContext rc, Graphics.CGfxMaterialInstance MtlInst = null, bool isSM3 = false)
        {
            if (rc == null)
            {
                rc = CEngine.Instance.RenderContext;
            }

            if (CRenderContext.ShaderModel >= 4)
            {
                UseComputeShader = true;
                Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Graphics", $"GpuDriven: SM = {CRenderContext.ShaderModel},Use ComputeShader");
            }
            else
            {
                UseComputeShader = false;
                Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Graphics", $"GpuDriven: SM = {CRenderContext.ShaderModel},CPU Culling");
            }

            if (rc.ContextCaps.MaxVertexShaderStorageBlocks == 0)
            {
                UseVTF = true;
                Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Graphics", $"GpuDriven: No SSBO in VertexShader,Use VTF");
            }
            else
            {
                UseVTF = false;
                Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Graphics", $"GpuDriven: Use SSBO in VertexShader");
            }
            if (mMergeInstanceSE == null)
            {
                mMergeInstanceSE = mMergeInstanceSE = EngineNS.CEngine.Instance.ShadingEnvManager.GetGfxShadingEnv <CGfxMergeInstanceSE>();
                if (UseVTF)
                {
                    mMergeInstanceSE.SetMacroDefineValue("ENV_USEVTF", "1");
                }
                else
                {
                    mMergeInstanceSE.SetMacroDefineValue("ENV_USEVTF", "0");
                }
            }
            if (MtlInst == null)
            {
                MtlInst = await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("Material/defaultmaterial.instmtl"));
            }
            if (mPass == null)
            {
                var pass = rc.CreatePass();

                var meshpri = CEngine.Instance.MeshPrimitivesManager.CreateMeshPrimitives(rc, 1);
                EngineNS.Graphics.Mesh.CGfxMeshCooker.MakeRect3D(rc, meshpri);
                //var meshpri = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(rc, CEngineDesc.ScreenAlignedTriangleName, true);
                var ViewportMesh = CEngine.Instance.MeshManager.CreateMesh(rc, meshpri);
                ViewportMesh.SetMaterialInstance(rc, 0, MtlInst,
                                                 CEngine.Instance.PrebuildPassData.DefaultShadingEnvs);

                var affectLights = new List <GamePlay.SceneGraph.GSceneGraph.AffectLight>();
                ViewportMesh.mMeshVars.SetPointLights(affectLights);

                await pass.InitPassForViewportView(rc, mMergeInstanceSE, MtlInst, ViewportMesh);

                mPass = pass;

                var vsDesc = mPass.Effect.ShaderProgram.VertexShader.Desc;

                var tbInfo = new CTextureBindInfo();
                if (vsDesc.GetSRVDesc(vsDesc.FindSRVDesc("AllVertexArray"), ref tbInfo))
                {
                }
                if (vsDesc.GetSRVDesc(vsDesc.FindSRVDesc("MeshInstanceArray"), ref tbInfo))
                {
                }
            }

            //const string CSVersion = "cs_5_0";
            var macros     = new CShaderDefinitions();
            var shaderFile = RName.GetRName("Shaders/Compute/GpuDriven/Cluster.compute", RName.enRNameType.Engine);

            mCS_MeshBatchDesc = rc.CreateShaderDesc(shaderFile, "CSMain_MeshBatch", EShaderType.EST_ComputeShader, macros, CIPlatform.Instance.PlatformType);
            mCS_MeshBatch     = rc.CreateComputeShader(mCS_MeshBatchDesc);

            mCS_ClearBatchArgsDesc = rc.CreateShaderDesc(shaderFile, "CSMain_ClearBatchArgs", EShaderType.EST_ComputeShader, macros, CIPlatform.Instance.PlatformType);
            mCS_ClearBatchArgs     = rc.CreateComputeShader(mCS_ClearBatchArgsDesc);

            var cbIndex = mCS_MeshBatchDesc.FindCBufferDesc("cbMeshBatch");

            if (cbIndex != uint.MaxValue)
            {
                mCBMeshBatch = rc.CreateConstantBuffer(mCS_MeshBatchDesc, cbIndex);
            }
        }
Esempio n. 22
0
 public override void BindResources(CGfxMesh mesh, CPass pass)
 {
 }
Esempio n. 23
0
 public void BindBuffers(CPass pass)
 {
     pass.AttachSRVs = mAttachSRVs;
     pass.AttachVBs  = mAttachVBs;
 }
Esempio n. 24
0
 public void ClearLatestPass()
 {
     mLatestPass = null;
 }
Esempio n. 25
0
 public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass)
 {
 }
Esempio n. 26
0
 public virtual void OnSetPassData(CPass pass, bool shadow)
 {
 }
Esempio n. 27
0
 public override void OnSetPassData(CPass pass, bool shadow)
 {
     ParticleSys.BindParticleVB(pass);
     pass.SetInstanceNumber(ParticleSys.ParticleNumber);
     mPass = pass;
 }
Esempio n. 28
0
        public void CookSpecRenderLayerDataToPass(CRenderContext RHICtx, ERenderLayer RenderLayer, CGfxCamera ViewerCamera, CGfxShadingEnv ShadingEnv, PrebuildPassIndex ppi)
        {
            ScopeCook2Pass.Begin();
            if (ViewerCamera == null || RenderLayer == ERenderLayer.RL_Shadow)
            {
                return;
            }

            if (RenderLayer == ERenderLayer.RL_Num)
            {
                RenderLayer = ERenderLayer.RL_Num - 1;
                return;
            }

            var SpecRenderLayer = ViewerCamera.mSceneRenderLayer[(int)RenderLayer];
            int Count           = SpecRenderLayer.GetRenderLayerAtomNum();

            for (uint idx = 0; idx < Count; idx++)
            {
                var MtlMesh = SpecRenderLayer.GetMtlMeshFromArray(idx);
                if (MtlMesh == null)
                {
                    break;
                }
                var SceneMesh = MtlMesh.mRootSceneMesh;

                if (MtlMesh == null || SceneMesh == null)
                {
                    Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"NullPtr here", "");
                    continue;
                }

                if (ppi == PrebuildPassIndex.PPI_HitProxy && SceneMesh.mMeshVars.mHitProxyId == 0)
                {
                    continue;
                }

                if (ppi == PrebuildPassIndex.PPI_PickedEditor)
                {
                    if (SceneMesh.mSelected == false)
                    {
                        continue;
                    }
                }

                MtlMesh.UpdatePerMtlMeshCBuffer(RHICtx, ViewerCamera);

                CPass refPass = MtlMesh.GetPass(ppi);
                if (refPass == null)
                {
                    continue;
                }
                if (false == refPass.PreUse())
                {
                    continue;
                }

                refPass.OnCookRenderData(ShadingEnv, ppi);

                switch (ppi)
                {
                case PrebuildPassIndex.PPI_PickedEditor:
                    refPass.BindShaderTextures(MtlMesh);
                    refPass.ShaderSamplerBinder = MtlMesh.GetSamplerBinder_PickedEditor(RHICtx, refPass.Effect.ShaderProgram);
                    ShadingEnv.BindResources(SceneMesh, refPass);
                    break;

                case PrebuildPassIndex.PPI_HitProxy:
                {
                    refPass.BindShaderTextures(MtlMesh);
                    refPass.ShaderSamplerBinder = MtlMesh.GetSamplerBinder_HitProxy(RHICtx, refPass.Effect.ShaderProgram);
                    ShadingEnv.BindResources(SceneMesh, refPass);
                }
                break;

                case PrebuildPassIndex.PPI_SceneCapture:
                case PrebuildPassIndex.PPI_OpaquePbr:
                case PrebuildPassIndex.PPI_TransparentPbr:
                case PrebuildPassIndex.PPI_CustomTranslucentPbr:
                case PrebuildPassIndex.PPI_OpaquePbrEditor:
                case PrebuildPassIndex.PPI_CustomTranslucentPbrEditor:
                case PrebuildPassIndex.PPI_Gizmos:
                case PrebuildPassIndex.PPI_Snapshot:
                case PrebuildPassIndex.PPI_Sky:
                {
                    refPass.BindShaderTextures(MtlMesh);
                    //refPass.ShaderSamplerBinder = MtlMesh.GetSamplerBinder(RHICtx, refPass.Effect.ShaderProgram);
                    ShadingEnv.BindResources(SceneMesh, refPass);
                    //var sEnv = refPass.Effect.Desc.EnvShaderPatch;
                    //sEnv.BindResources(SceneMesh, refPass);
                }
                break;

                default:
                    break;
                }

                refPass.ViewPort = Viewport;
#if DEBUG
                if (ViewerCamera.CBuffer == null)
                {
                    System.Diagnostics.Debug.Assert(false);
                }
#endif
                refPass.BindCBuffer(refPass.Effect.ShaderProgram, refPass.Effect.CacheData.CBID_Camera, ViewerCamera.CBuffer);

                refPass.BindCBuffer(refPass.Effect.ShaderProgram, refPass.Effect.CacheData.CBID_View, SceneViewCB);

                SceneMesh.MdfQueue.OnSetPassData(refPass, false);

                SendPassToCorrectRenderLayer(RenderLayer, refPass);
            }

            ScopeCook2Pass.End();
        }