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