Пример #1
0
        internal void InitInternal(MyModels models, bool isVisible, MyVisibilityExtFlags visibilityExt, MyCompatibilityDataForTheOldPipeline compatibilityData)
        {
            Models              = models;
            KeyColor            = new HalfVector3();
            m_instanceMaterials = MyObjectPoolManager.Allocate <MyInstanceMaterialList>();
            int instanceMaterialsCount = models.StandardModel.GetUniqueMaterialsCount(); // the other models do not use this mechanism

            m_instanceMaterials.SetSize(instanceMaterialsCount);
            for (int i = 0; i < instanceMaterialsCount; i++)
            {
                m_instanceMaterials.Set(i, MyInstanceMaterial.Default);
            }
            m_cpuCulledEntity = MyObjectPoolManager.Allocate <MyCpuCulledEntity>();

            // Bounding entity will be just registered, bounding box will be updated in the loopback OnAabbChange()
            BoundingBoxD boxTemporary = new BoundingBoxD(models.StandardModel.BoundingBox.Min, models.StandardModel.BoundingBox.Max);

            m_cpuCulledEntity.Register(boxTemporary, this);

            m_visibilityStrategy.Init(isVisible, visibilityExt);
            SetSingleInstanceTransformStrategy();

            m_lodStrategy.Init();

            Owner.SetMatrix(ref MatrixD.Identity);
            Owner.SetLocalAabb(models.StandardModel.BoundingBox);

            CompatibilityDataForTheOldPipeline = compatibilityData;
        }
Пример #2
0
 public static void Clear(MyInstanceMaterialList culledEntity)
 {
     if (culledEntity.m_explicitInstanceMaterials != null)
     {
         for (int i = 0; i < culledEntity.m_explicitInstanceMaterials.Length; i++)
         {
             culledEntity.m_explicitInstanceMaterials[i] = false;
         }
     }
 }