Esempio n. 1
0
        internal void UpdateMergedMesh(MyRenderMessageUpdateMergedVoxelMesh msg)
        {
            ProfilerShort.Begin("MyClipmapHandler.UpdateMergedMesh");

            if(m_mergeHandler != null)
                m_mergeHandler.UpdateMesh(msg);

            ProfilerShort.End();
        }
        internal bool UpdateMergedMesh(MyRenderMessageUpdateMergedVoxelMesh msg)
        {
            if (!MyMeshes.UpdateMergedVoxelCell(MeshId, ref msg.Metadata, msg.MergedBatches))
                return false;
            
            m_scale = msg.Metadata.PositionScale;
            m_translation = msg.Metadata.PositionOffset;
            m_localAabb = msg.Metadata.LocalAabb;

            UpdateActorInfo();

            return true;
        }
        internal void UpdateMesh(MyRenderMessageUpdateMergedVoxelMesh updateMessage)
        {
            if (!MyRender11.Settings.EnableVoxelMerging)
                return;

            m_mergesPerLod[updateMessage.Lod].UpdateMesh(updateMessage);
        }
            internal void UpdateMesh(MyRenderMessageUpdateMergedVoxelMesh updateMessage)
            {
                ProfilerShort.Begin("MyLodMeshMergeHandler.UpdateMesh");

                int divideIndex = GetDivideIndexFromMergeCell(ref updateMessage.Metadata.Cell.CoordInLod);

                // A job wasn't cancelled in time and made it here
                if (m_mergeJobs[divideIndex].CurrentWorkId != updateMessage.WorkId)
                    return;

                MyMergedLodMeshId mergedId = MyMeshes.GetMergedLodMesh(m_mergedLodMeshProxies[divideIndex].MeshId, 0);
                bool mergeSuccessful = m_mergedLodMeshProxies[divideIndex].UpdateMergedMesh(updateMessage);
                if (mergeSuccessful)
                {
                    Debug.Assert(mergedId.Info.MergedLodMeshes.Count == 0, "Merging into an already merged mesh");

                    ProfilerShort.Begin("Combine to merged");
                    mergedId.Info.MergedLodMeshes.UnionWith(m_mergeJobs[divideIndex].LodMeshesBeingMerged);
                    ProfilerShort.End();

                    SwitchMergeState(divideIndex, true);
                }
                else
                {
                    ProfilerShort.Begin("Combine to pending");
                    mergedId.Info.PendingLodMeshes.UnionWith(m_mergeJobs[divideIndex].LodMeshesBeingMerged);
                    ProfilerShort.End();
                }

                ResetMerge(divideIndex);

                ProfilerShort.End();
            }