void ParentMeshInSpace_GetRenderSceneDataBefore(Component_ObjectInSpace sender, ViewportRenderingContext context, GetRenderSceneDataMode mode) { //check need modifiable mesh bool needModifiableMesh = CheckNeedModifiableMesh(); //check need recreate if (needRecreateModifiableMesh) { if (ParentMeshInSpace.ModifiableMesh_CreatedByObject == this) { ParentMeshInSpace.ModifiableMesh_Destroy(); } needRecreateModifiableMesh = false; } //recreate if (needModifiableMesh) { if (ParentMeshInSpace.ModifiableMesh == null) { if (CalculateOnCPU) { var flags = Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersCreateDuplicate | Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersDynamic; ParentMeshInSpace.ModifiableMesh_Create(this, flags); } //var flags = Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersCreateDuplicate; //if( CalculateOnCPU ) // flags |= Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersDynamic; //else // flags |= Component_MeshInSpace.ModifiableMeshCreationFlags.VertexBuffersComputeWrite; //ParentMeshInSpace.ModifiableMesh_Create( this, flags ); needRecreateModifiableMesh = false; } } else { if (ParentMeshInSpace.ModifiableMesh_CreatedByObject == this) { ParentMeshInSpace.ModifiableMesh_Destroy(); needRecreateModifiableMesh = false; } } //update data if (ParentMeshInSpace.ModifiableMesh_CreatedByObject == this) { UpdateModifiableMesh(context); } if (DisplaySkeleton) { RenderSkeleton(context.Owner); } }
///////////////////////////////////////// protected override void OnEnabledInHierarchyChanged() { base.OnEnabledInHierarchyChanged(); if (ParentMeshInSpace != null) { if (EnabledInHierarchy) { ParentMeshInSpace.GetRenderSceneDataBefore += ParentMeshInSpace_GetRenderSceneDataBefore; ParentMeshInSpace.GetRenderSceneDataAddToFrameData += ParentMeshInSpace_GetRenderSceneDataAddToFrameData; } else { ParentMeshInSpace.GetRenderSceneDataBefore -= ParentMeshInSpace_GetRenderSceneDataBefore; ParentMeshInSpace.GetRenderSceneDataAddToFrameData -= ParentMeshInSpace_GetRenderSceneDataAddToFrameData; if (ParentMeshInSpace.ModifiableMesh_CreatedByObject == this) { ParentMeshInSpace.ModifiableMesh_Destroy(); } needRecreateModifiableMesh = false; } } }