示例#1
0
 public void ClearSpecRenderLayerData(ERenderLayer render_layer)
 {
     mSceneRenderLayer[(int)render_layer].Clear();
 }
示例#2
0
 public extern static void SDK_GfxSceneView_PushSpecRenderLayerDataToRHI(NativePointer self, CCommandList.NativePointer cmd, ERenderLayer index);
示例#3
0
 public extern static void SDK_GfxSceneView_SendPassToCorrectRenderLayer(NativePointer self, ERenderLayer index, CPass.NativePointer passPtr);
示例#4
0
 public void PushSpecRenderLayerDataToRHI(CCommandList cmd, ERenderLayer index)
 {
     ScopePush2RHI.Begin();
     SDK_GfxSceneView_PushSpecRenderLayerDataToRHI(CoreObject, cmd.CoreObject, index);
     ScopePush2RHI.End();
 }
示例#5
0
 public void SendPassToCorrectRenderLayer(ERenderLayer index, CPass pass)
 {
     SDK_GfxSceneView_SendPassToCorrectRenderLayer(mCoreObject, index, pass.CoreObject);
 }
示例#6
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();
        }