Exemple #1
0
 public MyModelInstanceData(MyStringHash subtypeId, MyInstanceFlagsEnum flags, float maxViewDistance, BoundingBox modelBox)
 {
     SubtypeId       = subtypeId;
     Flags           = flags;
     MaxViewDistance = maxViewDistance;
     ModelBox        = modelBox;
 }
 public MyGridPartsRenderData(MyInstanceFlagsEnum flags, float maxViewDistance, float transparency = 0f, string debugBufferName = "Instance buffer")
 {
     m_instanceFlags = flags;
     m_maxViewDistance = maxViewDistance;
     m_transparency = transparency;
     m_debugBufferName = debugBufferName;
 }
Exemple #3
0
 public MyGridPartsRenderData(MyInstanceFlagsEnum flags, float maxViewDistance, float transparency = 0f, string debugBufferName = "Instance buffer")
 {
     m_instanceFlags   = flags;
     m_maxViewDistance = maxViewDistance;
     m_transparency    = transparency;
     m_debugBufferName = debugBufferName;
 }
 public MyModelInstanceData(MyStringHash subtypeId, MyInstanceFlagsEnum flags, float maxViewDistance, BoundingBox modelBox)
 {
     SubtypeId = subtypeId;
     Flags = flags;
     MaxViewDistance = maxViewDistance;
     ModelBox = modelBox;
 }
 public MyRenderInstanceInfo(uint instanceBufferId, int instanceStart, int instanceCount, float maxViewDistance, MyInstanceFlagsEnum flags)
 {
     Flags            = flags;
     InstanceBufferId = instanceBufferId;
     InstanceStart    = instanceStart;
     InstanceCount    = instanceCount;
     MaxViewDistance  = maxViewDistance;
 }
 public MyRenderInstanceInfo(uint instanceBufferId, int instanceStart, int instanceCount, bool castShadows, bool showLod1, float maxViewDistance, bool enableColorMaskHsv)
 {
     Flags = (castShadows ? MyInstanceFlagsEnum.CastShadows : 0) | (showLod1 ? MyInstanceFlagsEnum.ShowLod1 : 0) | (enableColorMaskHsv ? MyInstanceFlagsEnum.EnableColorMask : 0);
     InstanceBufferId = instanceBufferId;
     InstanceStart = instanceStart;
     InstanceCount = instanceCount;
     MaxViewDistance = maxViewDistance;
 }
 public MyRenderInstanceInfo(uint instanceBufferId, int instanceStart, int instanceCount, float maxViewDistance, MyInstanceFlagsEnum flags)
 {
     Flags = flags;
     InstanceBufferId = instanceBufferId;
     InstanceStart = instanceStart;
     InstanceCount = instanceCount;
     MaxViewDistance = maxViewDistance;
 }
Exemple #8
0
        public MyEnvironmentItems()
        {
            m_instanceFlags = MyInstanceFlagsEnum.ShowLod1 | MyInstanceFlagsEnum.CastShadows | MyInstanceFlagsEnum.EnableColorMask;
            m_definition    = null;

            this.Render = new MyRenderComponentEnvironmentItems(this);
            AddDebugRenderComponent(new MyEnviromentItemsDebugDraw(this));
        }
 public MyRenderInstanceInfo(uint instanceBufferId, int instanceStart, int instanceCount, bool castShadows, bool showLod1, float maxViewDistance, bool enableColorMaskHsv)
 {
     Flags            = (castShadows ? MyInstanceFlagsEnum.CastShadows : 0) | (showLod1 ? MyInstanceFlagsEnum.ShowLod1 : 0) | (enableColorMaskHsv ? MyInstanceFlagsEnum.EnableColorMask : 0);
     InstanceBufferId = instanceBufferId;
     InstanceStart    = instanceStart;
     InstanceCount    = instanceCount;
     MaxViewDistance  = maxViewDistance;
 }
Exemple #10
0
 public MyModelInstanceData(MyEnvironmentSector parent, MyStringHash subtypeId, int model, MyInstanceFlagsEnum flags, float maxViewDistance, BoundingBox modelBox)
 {
     this.Parent          = parent;
     this.SubtypeId       = subtypeId;
     this.Flags           = flags;
     this.MaxViewDistance = maxViewDistance;
     this.ModelBox        = modelBox;
     this.Model           = model;
 }
 public MyModelInstanceData(MyEnvironmentSector parent, MyStringHash subtypeId, ModelId model, MyInstanceFlagsEnum flags, float maxViewDistance, BoundingBox modelBox)
 {
     Parent          = parent;
     SubtypeId       = subtypeId;
     Flags           = flags;
     MaxViewDistance = maxViewDistance;
     ModelBox        = modelBox;
     Model           = model;
 }
 public MyModelInstanceData(MyEnvironmentSector parent, MyStringHash subtypeId, ModelId model, MyInstanceFlagsEnum flags, float maxViewDistance, BoundingBox modelBox)
 {
     Parent = parent;
     SubtypeId = subtypeId;
     Flags = flags;
     MaxViewDistance = maxViewDistance;
     ModelBox = modelBox;
     Model = model;
 }
        /// <summary>
        /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances).
        /// </summary>
        /// <param name="subtypeId"></param>
        /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param>
        /// <param name="colorMaskHsv"></param>
        public int AddInstance(
            MyStringHash subtypeId,
            ModelId modelId,
            int localId,
            ref Matrix localMatrix,
            BoundingBox localAabb,
            MyInstanceFlagsEnum instanceFlags,
            float maxViewDistance,
            Vector4 colorMaskHsv = default(Vector4),
            Vector2I uvOffset    = default(Vector2I))
        {
            MyModelInstanceData builderInstanceData;

            using (m_instancePartsLock.AcquireExclusiveUsing())
            {
                if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData))
                {
                    builderInstanceData = new MyModelInstanceData(subtypeId, instanceFlags, maxViewDistance, localAabb);
                    m_instanceParts.Add(modelId, builderInstanceData);
                }
            }


            uvOffset = new Vector2I(MyUtils.GetRandomInt(2), MyUtils.GetRandomInt(2));
            Color   green = Color.Green;
            Vector3 hsv   = green.ColorToHSVDX11();

            hsv.Y        = MyUtils.GetRandomFloat(0.0f, 1.0f);
            colorMaskHsv = new Vector4(hsv, 0);

            MySectorInstanceData newInstance = new MySectorInstanceData()
            {
                LocalId      = localId,
                InstanceData = new MyInstanceData()
                {
                    ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv),
                    LocalMatrix  = localMatrix,
                    UVOffset     = new VRageMath.PackedVector.HalfVector2(uvOffset)
                }
            };
            int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance);

            // Matrix has been changed due to packing.
            localMatrix = builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix;
            Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix == localMatrix, "Bad matrix");

            m_AABB = m_AABB.Include(localAabb.Transform(localMatrix));
            m_sectorItemCount++;
            m_invalidateAABB = true;

            return(sectorInstanceId);
        }
        /// <summary>
        /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances).
        /// </summary>
        /// <param name="subtypeId"></param>
        /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param>
        /// <param name="colorMaskHsv"></param>
        public int AddInstance(
            MyStringHash subtypeId,
            ModelId modelId,
            int localId,
            ref Matrix localMatrix,
            BoundingBox localAabb,
            MyInstanceFlagsEnum instanceFlags,
            float maxViewDistance,
            Vector3 colorMaskHsv = default(Vector3))
        {
            MyModelInstanceData builderInstanceData;

            using (m_instancePartsLock.AcquireExclusiveUsing())
            {
                if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData))
                {
                    builderInstanceData = new MyModelInstanceData(this, subtypeId, modelId, instanceFlags, maxViewDistance, localAabb);
                    m_instanceParts.Add(modelId, builderInstanceData);
                }
            }


            MySectorInstanceData newInstance = new MySectorInstanceData()
            {
                LocalId      = localId,
                InstanceData = new MyInstanceData()
                {
                    ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv.X, colorMaskHsv.Y, colorMaskHsv.Z, 0),
                    LocalMatrix  = localMatrix,
                }
            };
            int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance);

            // Matrix has been changed due to packing.
            localMatrix = builderInstanceData.InstanceData[sectorInstanceId].LocalMatrix;
            Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].LocalMatrix == localMatrix, "Bad matrix");

            m_AABB = m_AABB.Include(localAabb.Transform(localMatrix));
            m_sectorItemCount++;
            m_invalidateAABB = true;

            return(sectorInstanceId);
        }
        void AddInstancePart(Dictionary <ModelId, Tuple <List <MyCubeInstanceMergedData>, MyInstanceInfo> > instanceParts,
                             ModelId modelId, ref MyCubeInstanceData instance, List <uint> decals,
                             MyInstanceFlagsEnum flags, float maxViewDistance = float.MaxValue)
        {
            Tuple <List <MyCubeInstanceMergedData>, MyInstanceInfo> matrices;

            if (!instanceParts.TryGetValue(modelId, out matrices))
            {
                matrices = Tuple.Create(new List <MyCubeInstanceMergedData>(), new MyInstanceInfo(flags, maxViewDistance));
                instanceParts.Add(modelId, matrices);
            }

            m_tmpBoundingBox.Min = instance.LocalMatrix.Translation - new Vector3(m_gridRenderComponent.GridSize);
            m_tmpBoundingBox.Max = instance.LocalMatrix.Translation + new Vector3(m_gridRenderComponent.GridSize);
            m_boundingBox.Include(m_tmpBoundingBox);

            matrices.Item1.Add(new MyCubeInstanceMergedData()
            {
                CubeInstanceData = instance, Decals = decals
            });
        }
        public MyEnvironmentItems()
        {
            m_instanceFlags = MyInstanceFlagsEnum.ShowLod1 | MyInstanceFlagsEnum.CastShadows | MyInstanceFlagsEnum.EnableColorMask;
            m_definition = null;

            this.Render = new MyRenderComponentEnvironmentItems(this);
            AddDebugRenderComponent(new MyEnviromentItemsDebugDraw(this));
        }
Exemple #17
0
        private void AddInstancePart(Dictionary <MyInstanceBucket, Tuple <List <MyCubeInstanceMergedData>, Sandbox.Game.Entities.Cube.MyInstanceInfo> > instanceParts, int modelId, MyStringHash skinSubtypeId, ref MyCubeInstanceData instance, ConcurrentDictionary <uint, bool> decals, MyInstanceFlagsEnum flags, float maxViewDistance = 3.402823E+38f)
        {
            Tuple <List <MyCubeInstanceMergedData>, Sandbox.Game.Entities.Cube.MyInstanceInfo> tuple;
            MyInstanceBucket key = new MyInstanceBucket(modelId, skinSubtypeId);

            if (!instanceParts.TryGetValue(key, out tuple))
            {
                tuple = Tuple.Create <List <MyCubeInstanceMergedData>, Sandbox.Game.Entities.Cube.MyInstanceInfo>(new List <MyCubeInstanceMergedData>(), new Sandbox.Game.Entities.Cube.MyInstanceInfo(flags, maxViewDistance));
                instanceParts.Add(key, tuple);
            }
            Vector3 translation = instance.LocalMatrix.Translation;

            this.m_tmpBoundingBox.Min = translation - new Vector3(this.m_gridRenderComponent.GridSize);
            this.m_tmpBoundingBox.Max = translation + new Vector3(this.m_gridRenderComponent.GridSize);
            this.m_boundingBox.Include(this.m_tmpBoundingBox);
            MyCubeInstanceMergedData item = new MyCubeInstanceMergedData {
                CubeInstanceData = instance,
                Decals           = decals
            };

            tuple.Item1.Add(item);
        }
Exemple #18
0
        /// <summary>
        /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances).
        /// </summary>
        /// <param name="subtypeId"></param>
        /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param>
        /// <param name="colorMaskHsv"></param>
        public int AddInstance(MyStringId subtypeId, ref Matrix localMatrix, BoundingBox localAabb, MyInstanceFlagsEnum instanceFlags, float maxViewDistance,
                               Vector4 colorMaskHsv = default(Vector4))
        {
            MyModelInstanceData builderInstanceData;

            if (!m_instanceParts.TryGetValue(subtypeId, out builderInstanceData))
            {
                builderInstanceData = new MyModelInstanceData(subtypeId, instanceFlags, maxViewDistance);
                m_instanceParts.Add(subtypeId, builderInstanceData);
            }

            MyInstanceData newInstance = new MyInstanceData()
            {
                ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv),
                LocalMatrix  = localMatrix
            };
            int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance);

            // Matrix has been changed due to packing.
            localMatrix = builderInstanceData.InstanceData[builderInstanceData.InstanceData.Count - 1].LocalMatrix;
            Debug.Assert(builderInstanceData.InstanceData[builderInstanceData.InstanceData.Count - 1].LocalMatrix == localMatrix, "Bad matrix");

            m_AABB = m_AABB.Include(localAabb.Transform(localMatrix));
            m_sectorItemCount++;

            return(sectorInstanceId);
        }
Exemple #19
0
 public MyModelInstanceData(MyInstanceFlagsEnum flags, float maxViewDistance)
 {
     InstanceInfo = new MyInstanceInfo(flags, maxViewDistance);
 }
Exemple #20
0
 public MyModelInstanceData(MyStringId subtypeId, MyInstanceFlagsEnum flags, float maxViewDistance)
 {
     SubtypeId       = subtypeId;
     Flags           = flags;
     MaxViewDistance = maxViewDistance;
 }
        /// <summary>
        /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances).
        /// </summary>
        /// <param name="subtypeId"></param>
        /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param>
        /// <param name="colorMaskHsv"></param>
        public int AddInstance(
            MyStringHash subtypeId, 
            ModelId modelId,
            int localId,
            ref Matrix localMatrix, 
            BoundingBox localAabb, 
            MyInstanceFlagsEnum instanceFlags, 
            float maxViewDistance,
            Vector4 colorMaskHsv = default(Vector4),
            Vector2I uvOffset = default(Vector2I))
        {
            MyModelInstanceData builderInstanceData;

            using (m_instancePartsLock.AcquireExclusiveUsing())
            {
                if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData))
                {
                    builderInstanceData = new MyModelInstanceData(subtypeId, instanceFlags, maxViewDistance, localAabb);
                    m_instanceParts.Add(modelId, builderInstanceData);
                }
            }


            uvOffset = new Vector2I(MyUtils.GetRandomInt(2), MyUtils.GetRandomInt(2));
            Color green = Color.Green;
            Vector3 hsv = green.ColorToHSVDX11();
            hsv.Y = MyUtils.GetRandomFloat(0.0f, 1.0f);
            colorMaskHsv = new Vector4(hsv, 0);

            MySectorInstanceData newInstance = new MySectorInstanceData()
            {
                LocalId = localId,
                InstanceData = new MyInstanceData()
                {
                    ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv),
                    LocalMatrix = localMatrix,
                    UVOffset = new VRageMath.PackedVector.HalfVector2(uvOffset)
                }
            };
            int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance);

            // Matrix has been changed due to packing.
            localMatrix = builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix;
            Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix == localMatrix, "Bad matrix");

            m_AABB = m_AABB.Include(localAabb.Transform(localMatrix));
            m_sectorItemCount++;
            m_invalidateAABB = true;

            return sectorInstanceId;
        }
 public MyInstanceInfo(MyInstanceFlagsEnum flags, float maxViewDistance)
 {
     Flags = flags;
     MaxViewDistance = maxViewDistance;
 }
        void AddInstancePart(Dictionary<ModelId, Tuple<List<MyCubeInstanceData>, MyInstanceInfo>> instanceParts, ModelId modelId, ref MyCubeInstanceData instance, MyInstanceFlagsEnum flags, float maxViewDistance = float.MaxValue)
        {
            Tuple<List<MyCubeInstanceData>, MyInstanceInfo> matrices;
            if (!instanceParts.TryGetValue(modelId, out matrices))
            {
                matrices = new Tuple<List<MyCubeInstanceData>, MyInstanceInfo>(new List<MyCubeInstanceData>(), new MyInstanceInfo(flags, maxViewDistance));
                instanceParts.Add(modelId, matrices);
            }

            m_tmpBoundingBox.Min = instance.LocalMatrix.Translation - new Vector3(m_gridRenderComponent.GridSize);
            m_tmpBoundingBox.Max = instance.LocalMatrix.Translation + new Vector3(m_gridRenderComponent.GridSize);
            m_boundingBox.Include(m_tmpBoundingBox);

            matrices.Item1.Add(instance);
        }
Exemple #24
0
        public int AddInstance(MyStringHash subtypeId, int modelId, int localId, ref Matrix localMatrix, BoundingBox localAabb, MyInstanceFlagsEnum instanceFlags, float maxViewDistance, Vector3 colorMaskHsv = new Vector3())
        {
            MyModelInstanceData data;

            using (this.m_instancePartsLock.AcquireExclusiveUsing())
            {
                if (!this.m_instanceParts.TryGetValue(modelId, out data))
                {
                    data = new MyModelInstanceData(this, subtypeId, modelId, instanceFlags, maxViewDistance, localAabb);
                    this.m_instanceParts.Add(modelId, data);
                }
            }
            MySectorInstanceData data3 = new MySectorInstanceData {
                LocalId = localId
            };
            MyInstanceData data4 = new MyInstanceData {
                ColorMaskHSV = new HalfVector4(colorMaskHsv.X, colorMaskHsv.Y, colorMaskHsv.Z, 0f),
                LocalMatrix  = localMatrix
            };

            data3.InstanceData = data4;
            MySectorInstanceData instanceData = data3;
            int num = data.AddInstanceData(ref instanceData);

            localMatrix = data.InstanceData[num].LocalMatrix;
            this.m_AABB = this.m_AABB.Include(localAabb.Transform((Matrix)localMatrix));
            this.m_sectorItemCount++;
            this.m_invalidateAABB = true;
            return(num);
        }
 public MyModelInstanceData(MyStringId subtypeId, MyInstanceFlagsEnum flags, float maxViewDistance)
 {
     SubtypeId = subtypeId;
     Flags = flags;
     MaxViewDistance = maxViewDistance;
 }
        /// <summary>
        /// Adds instance of the given model. Local matrix specified might be changed internally for renderer (must be used for removing instances).
        /// </summary>
        /// <param name="subtypeId"></param>
        /// <param name="localMatrix">Local transformation matrix. Changed to internal matrix.</param>
        /// <param name="colorMaskHsv"></param>
        public int AddInstance(
            MyStringHash subtypeId, 
            ModelId modelId,
            int localId,
            ref Matrix localMatrix, 
            BoundingBox localAabb, 
            MyInstanceFlagsEnum instanceFlags, 
            float maxViewDistance,
            Vector4 colorMaskHsv = default(Vector4))
        {
            MyModelInstanceData builderInstanceData;
            if (!m_instanceParts.TryGetValue(modelId, out builderInstanceData))
            {
                builderInstanceData = new MyModelInstanceData(subtypeId, instanceFlags, maxViewDistance, localAabb);
                m_instanceParts.Add(modelId, builderInstanceData);
            }

            MySectorInstanceData newInstance = new MySectorInstanceData()
            {
                LocalId = localId,
                InstanceData = new MyInstanceData()
                {
                ColorMaskHSV = new VRageMath.PackedVector.HalfVector4(colorMaskHsv),
                LocalMatrix = localMatrix
                }
            };
            int sectorInstanceId = builderInstanceData.AddInstanceData(ref newInstance);

            // Matrix has been changed due to packing.
            localMatrix = builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix;
            Debug.Assert(builderInstanceData.InstanceData[sectorInstanceId].InstanceData.LocalMatrix == localMatrix, "Bad matrix");

            m_AABB = m_AABB.Include(localAabb.Transform(localMatrix));
            m_sectorItemCount++;
            m_invalidateAABB = true;

            return sectorInstanceId;
        }
 public MyModelInstanceData(MyInstanceFlagsEnum flags, float maxViewDistance)
 {
     InstanceInfo = new MyInstanceInfo(flags, maxViewDistance);
 }
 public MyInstanceInfo(MyInstanceFlagsEnum flags, float maxViewDistance)
 {
     Flags           = flags;
     MaxViewDistance = maxViewDistance;
 }