internal MyLodModel AddLOD(float distance, string model)
        {
            try
            {
                MyLodModel lodModel = new MyLodModel();
                if (!string.IsNullOrEmpty(model))
                {
                    lodModel.Model = MyRenderModels.GetModel(model);
                    if (lodModel.Model.LoadState == LoadState.Error)
                    {
                        return(null);
                    }

                    lodModel.Model.CloneMaterials(lodModel.MeshMaterials);
                }
                lodModel.Distance = distance;

                m_lods.Add(lodModel);

                return(lodModel);
            }
            catch (Exception e)
            {
                throw new ApplicationException("Error adding lod: " + model + ", distance: " + distance, e);
            }
        }
        MyRenderModel AddLODs(string model)
        {
            MyLodModel lodModel = AddLOD(0, model);

            if (lodModel == null)
            {
                return(null);
            }

            foreach (var lodDesc in lodModel.Model.LODs)
            {
                string lodModelPath = lodDesc.Model;

                if (String.IsNullOrEmpty(Path.GetExtension(lodModelPath)))
                {
                    //Debug.Fail("Missing LOD file extension: " + lodModelPath);
                    lodModelPath += ".mwm";
                }

                lodModelPath = GetLodPath(model, lodModelPath);

                if (lodDesc.RenderQualityList == null || lodDesc.RenderQualityList.Contains((int)MyRenderConstants.RenderQualityProfile.RenderQuality))
                {
                    AddLOD(lodDesc.Distance, lodModelPath);
                }
            }

            return(lodModel.Model);
        }
        public MyLodModel AddData(MyRenderMessageSetRenderEntityData msg)
        {
            System.Diagnostics.Debug.Assert(msg.ModelData.Sections.Count > 0, "Invalid data");

            MyLodModel lodModel = new MyLodModel();

            lodModel.Model = new MyRenderModel(MyMeshDrawTechnique.MESH);
            ProfilerShort.Begin("LoadBuffers");
            lodModel.Model.LoadBuffers(msg.ModelData);
            ProfilerShort.BeginNextBlock("CloneMaterials");
            lodModel.Model.CloneMaterials(lodModel.MeshMaterials);
            ProfilerShort.End();
            lodModel.Distance = 0;

            m_localAABB         = (BoundingBoxD)lodModel.Model.BoundingBox;
            m_localVolume       = (BoundingSphereD)lodModel.Model.BoundingSphere;
            m_localVolumeOffset = (Vector3D)lodModel.Model.BoundingSphere.Center;
            m_volume            = m_localVolume;

            m_lods.Add(lodModel);
            m_isDataSet = true;

            return(lodModel);
        }
        public MyLodModel AddData(MyRenderMessageSetRenderEntityData msg)
        {
            System.Diagnostics.Debug.Assert(msg.ModelData.Sections.Count > 0, "Invalid data");

            MyLodModel lodModel = new MyLodModel();

            lodModel.Model = new MyRenderModel(MyMeshDrawTechnique.MESH);
            ProfilerShort.Begin("LoadBuffers");
            lodModel.Model.LoadBuffers(msg.ModelData);
            ProfilerShort.BeginNextBlock("CloneMaterials");
            lodModel.Model.CloneMaterials(lodModel.MeshMaterials);
            ProfilerShort.End();
            lodModel.Distance = 0;

            m_localAABB         = (BoundingBoxD)lodModel.Model.BoundingBox;
            m_localVolume       = (BoundingSphereD)lodModel.Model.BoundingSphere;
            m_localVolumeOffset = (Vector3D)lodModel.Model.BoundingSphere.Center;
            m_volume            = m_localVolume;

            m_lods.Add(lodModel);
            m_isDataSet = true;

            return lodModel;
        }
        internal MyLodModel AddLOD(float distance, string model)
        {
            try
            {
                MyLodModel lodModel = new MyLodModel();
                if (!string.IsNullOrEmpty(model))
                {
                    lodModel.Model = MyRenderModels.GetModel(model);
                    if (lodModel.Model.LoadState == LoadState.Error)
                    {
                        return null;
                    }

                    lodModel.Model.CloneMaterials(lodModel.MeshMaterials);
                }
                lodModel.Distance = distance;

                m_lods.Add(lodModel);

                return lodModel;
            }
            catch (Exception e)
            {
                throw new ApplicationException("Error adding lod: " + model + ", distance: " + distance, e);
            }
        }