public async System.Threading.Tasks.Task <bool> Init(Graphics.CGfxMaterialInstance material, float halfWidth = 0.1F) { var rc = CEngine.Instance.RenderContext; Material = material; GeomMesh = new Graphics.Mesh.CGfxMeshPrimitives(); GeomMesh.Init(rc, null, 1); CDrawPrimitiveDesc dpDesc = new CDrawPrimitiveDesc(); dpDesc.SetDefault(); dpDesc.StartIndex = 0xFFFFFFFF; GeomMesh.PushAtomLOD(0, ref dpDesc); var Mesh = new Graphics.Mesh.CGfxMesh(); Mesh.Init(rc, null, GeomMesh); var img = new Graphics.Mesh.CGfxImage2D(); Mesh.Tag = img; UpdateGeomMesh(rc, halfWidth); GraphActor = GamePlay.Actor.GActor.NewMeshActorDirect(Mesh); var meshComp = GraphActor.GetComponent <GamePlay.Component.GMeshComponent>(); await meshComp.SetMaterialInstanceAsync(rc, 0, material, null); //await meshComp.SetMaterial(rc, 0, material, CEngine.Instance.PrebuildPassData.Image2DShadingEnvs, false, true); return(true); }
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); } }
public void BindScreenTexture2Mesh(Graphics.Mesh.CGfxMesh mesh, UInt32 atom, string shaderVar) { if (atom >= mesh.MtlMeshArray.Length) { return; } CTextureBindInfo txInfo = new CTextureBindInfo(); for (int i = 0; i < mesh.MtlMeshArray[atom].PrebuildPassArray.Length; i++) { var pass = mesh.MtlMeshArray[atom].PrebuildPassArray[i]; if (pass == null || pass.GpuProgram == null) { continue; } var TexBinder = pass.ShaderResources; var SamplerBinder = pass.ShaderSamplerBinder; var Shader = pass.GpuProgram; if (Shader.FindTextureBindInfo(pass.MtlInst, shaderVar, ref txInfo)) { TexBinder.PSBindTexture(txInfo.PSBindPoint, OffScreenTexture); TexBinder.SetUserControlTexture(txInfo.PSBindPoint, true); } } }
public void RegisterMesh(SceneDataManager scene, Graphics.Mesh.CGfxMesh mesh) { for (int i = 0; i < mesh.MtlMeshArray.Length; i++) { var materailId = scene.GetOrAddMaterialId(mesh.MtlMeshArray[i].MtlInst); } }
public override void TickLogic(CRenderContext rc, Graphics.Mesh.CGfxMesh mesh, Int64 time) { if (ParticleSys.Effector != null) { UpdateTime(); ParticleSys.Effector.Get(false).Tick(rc.ImmCommandList, ParticleSys, CEngine.Instance.EngineElapseTimeSecond * Speed); if (mPass != null) { mPass.SetInstanceNumber(ParticleSys.ParticleNumber); } } }
public ActorProxy QueryActor(Graphics.Mesh.CGfxMesh mesh) { if (ValidActorPool.Count == 0) { for (int i = 0; i < 100; i++) { var ap = new ActorProxy(); ap.InitProxy(this); ValidActorPool.Enqueue(ap); } } var result = ValidActorPool.Dequeue(); result.SetShowMesh(CEngine.Instance.RenderContext.ImmCommandList, mesh); result.Checked = true; return(result); }
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); } }
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); //} }
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); } }
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); } }
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); } }
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); } }
public void AddMeshInstance(CRenderContext rc, Graphics.Mesh.CGfxMesh mesh, RName clusterName, GamePlay.Component.GPlacementComponent placement) { var worldMatrix = placement.WorldMatrix; uint instStart = (uint)mGpuInstanceDatas.Count; for (int i = 0; i < mesh.MtlMeshArray.Length; i++) { var data = new GpuMeshInstanceData(); data.VTMaterialId.x = 1;//(uint)GetOrAddMaterialId(mesh.MtlMeshArray[i].MtlInst); data.Matrix = worldMatrix; Matrix.Invert(ref data.Matrix, out data.InvMatrix); data.Matrix.Transpose(); data.InvMatrix.Transpose(); mGpuInstanceDatas.Add(data); //var module = CEngine.Instance.GetCurrentModule(); //module.World.AddActor(); } uint indexOffset; Cluster.ClusteredMesh cluster = GetClusteredMesh(rc, clusterName, out indexOffset); for (int i = 0; i < cluster.ClusterDatas.Count; i++) { Cluster.GpuCluster gpuCluster = cluster.ClusterDatas[i]; gpuCluster.InstanceId += instStart; gpuCluster.StartFaceIndex += indexOffset / 3; BoundingBox tmpBox = new BoundingBox(gpuCluster.BoundCenter - gpuCluster.BoundExtent, gpuCluster.BoundCenter + gpuCluster.BoundExtent); tmpBox = BoundingBox.Transform(ref tmpBox, ref worldMatrix); gpuCluster.BoundCenter = tmpBox.GetCenter(); gpuCluster.BoundExtent = tmpBox.GetSize() * 0.5f; mGpuClusters.Add(gpuCluster); } }
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); } }
public virtual void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass) { //每个shadingenv根据自己的shader代码,在这里绑定纹理,设置cbPerInstance变量 //正常情况ShadingEnv不应该给cbPerInstance设置变量,特殊需求在这个函数特殊写 //shadingEnv的变量,应该主要在非cbPerInstance里面 }
public override void BindResources(Graphics.Mesh.CGfxMesh mesh, CPass pass) { }
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); } }
public void AddMeshInstance(SceneDataManager scene, Graphics.Mesh.CGfxMesh mesh, GamePlay.Component.GPlacementComponent placement) { }
public void SetShowMesh(CCommandList cmd, Graphics.Mesh.CGfxMesh mesh) { var meshComp = Actor.GetComponent <Component.GMeshComponent>(); meshComp.SetSceneMesh(cmd, mesh); }
//实测,在android上,性能分析工具调用本身开心就很大 //public static Profiler.TimeScope ScopeFind = Profiler.TimeScopeManager.GetTimeScope(typeof(GInstancingManager), "PushInstance.Find", Profiler.TimeScope.EProfileFlag.Windows); //public static Profiler.TimeScope ScopePush = Profiler.TimeScopeManager.GetTimeScope(typeof(GInstancingManager), "PushInstance.Push", Profiler.TimeScope.EProfileFlag.Windows); public void PushInstance(GInstancingComponent inst, int lightNum, ref UInt32_4 lightIndices, Graphics.Mesh.CGfxMesh oriMesh, EPoolType poolType) { var meshComp = inst.HostContainer as GMeshComponent; if (meshComp == null) { return; } //ScopeFind.Begin(); if (oriMesh.mInstancePool == null || oriMesh.mShadowInstancePool == null) { oriMesh.mInstancePool = new GInstancing(); Meshes[oriMesh.Name] = oriMesh.mInstancePool; var task = oriMesh.mInstancePool.Init(oriMesh.Name, false); oriMesh.mShadowInstancePool = new GInstancing(); ShadowMeshes[oriMesh.Name] = oriMesh.mShadowInstancePool; var task1 = oriMesh.mShadowInstancePool.Init(oriMesh.Name, true); } GInstancing instType = null; switch (poolType) { case EPoolType.Normal: instType = oriMesh.mInstancePool; break; case EPoolType.Shadow: instType = oriMesh.mShadowInstancePool; break; } //ScopeFind.End(); //ScopePush.Begin(); instType.PushInstance(ref meshComp.Placement.mDrawPosition, ref meshComp.Placement.mDrawScale, ref meshComp.Placement.mDrawRotation, ref lightIndices, lightNum); //ScopePush.End(); }