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; }
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 MyEnvironmentItems() { m_instanceFlags = MyInstanceFlagsEnum.ShowLod1 | MyInstanceFlagsEnum.CastShadows | MyInstanceFlagsEnum.EnableColorMask; m_definition = null; this.Render = new MyRenderComponentEnvironmentItems(this); AddDebugRenderComponent(new MyEnviromentItemsDebugDraw(this)); }
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; }
/// <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 }); }
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); }
/// <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); }
public MyModelInstanceData(MyInstanceFlagsEnum flags, float maxViewDistance) { InstanceInfo = new MyInstanceInfo(flags, maxViewDistance); }
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); }
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); }
/// <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; }