using UnityEngine; namespace Assets.ThoMagic.Renderer { public struct InstanceData { public const int Add = 1; public const int Delete = 2; public static readonly int Stride = 48; public readonly Vector4 Packed1; public readonly Vector4 Packed2; public readonly uint prefabId; //Used to stream out new instances public readonly int uploadAction; public readonly int uploadId; public readonly int padding; public InstanceData( int uploadAction, int uploadId, uint prefabId, float x, float y, float z, in Quaternion rotation, float scaleXZ, float scaleY) { float num = rotation.w > 0.0 ? 1f : -1f; Packed1.x = x; Packed1.y = y; Packed1.z = z; Packed1.w = (rotation.x * num); Packed2.x = scaleXZ; Packed2.y = scaleY; Packed2.z = (rotation.y * num); Packed2.w = (rotation.z * num); this.prefabId = prefabId; this.uploadAction = uploadAction; this.uploadId = uploadId; padding = 0; } public InstanceData( int uploadAction, int uploadId) { Packed1.x = 0; Packed1.y = 0; Packed1.z = 0; Packed1.w = 0; Packed2.x = 0; Packed2.y = 0; Packed2.z = 0; Packed2.w = 0; this.prefabId = 0; this.uploadAction = uploadAction; this.uploadId = uploadId; padding = 0; } } public struct PrefabData { public static readonly int Stride = 228; public uint batchIndex; public uint indexBufferStartOffset; public uint maxCount; public uint lodCount; public uint fadeLods; public Vector4 densityInDistance; public Vector4 lodData0; public Vector4 lodData1; public Vector4 lodData2; public Vector4 lodData3; public Vector4 lodData4; public Vector4 lodData5; public Vector4 lodData6; public Vector4 lodData7; public uint indirectArgsOffset0; public uint indirectArgsCount0; public uint indirectArgsOffset1; public uint indirectArgsCount1; public uint indirectArgsOffset2; public uint indirectArgsCount2; public uint indirectArgsOffset3; public uint indirectArgsCount3; public uint indirectArgsOffset4; public uint indirectArgsCount4; public uint indirectArgsOffset5; public uint indirectArgsCount5; public uint indirectArgsOffset6; public uint indirectArgsCount6; public uint indirectArgsOffset7; public uint indirectArgsCount7; public void SetLods(Vector4[] lodData, uint[] indirectArgsPerLodOffset, uint[] indirectArgsPerLodCount) { this.lodData0 = lodCount > 0 ? lodData[0] : Vector4.zero; this.lodData1 = lodCount > 1 ? lodData[1] : Vector4.zero; this.lodData2 = lodCount > 2 ? lodData[2] : Vector4.zero; this.lodData3 = lodCount > 3 ? lodData[3] : Vector4.zero; this.lodData4 = lodCount > 4 ? lodData[4] : Vector4.zero; this.lodData5 = lodCount > 5 ? lodData[5] : Vector4.zero; this.lodData6 = lodCount > 6 ? lodData[6] : Vector4.zero; this.lodData7 = lodCount > 7 ? lodData[7] : Vector4.zero; this.indirectArgsOffset0 = lodCount > 0 ? indirectArgsPerLodOffset[0] : 0; this.indirectArgsOffset1 = lodCount > 1 ? indirectArgsPerLodOffset[1] : 0; this.indirectArgsOffset2 = lodCount > 2 ? indirectArgsPerLodOffset[2] : 0; this.indirectArgsOffset3 = lodCount > 3 ? indirectArgsPerLodOffset[3] : 0; this.indirectArgsOffset4 = lodCount > 4 ? indirectArgsPerLodOffset[4] : 0; this.indirectArgsOffset5 = lodCount > 5 ? indirectArgsPerLodOffset[5] : 0; this.indirectArgsOffset6 = lodCount > 6 ? indirectArgsPerLodOffset[6] : 0; this.indirectArgsOffset7 = lodCount > 7 ? indirectArgsPerLodOffset[7] : 0; this.indirectArgsCount0 = lodCount > 0 ? indirectArgsPerLodCount[0] : 0; this.indirectArgsCount1 = lodCount > 1 ? indirectArgsPerLodCount[1] : 0; this.indirectArgsCount2 = lodCount > 2 ? indirectArgsPerLodCount[2] : 0; this.indirectArgsCount3 = lodCount > 3 ? indirectArgsPerLodCount[3] : 0; this.indirectArgsCount4 = lodCount > 4 ? indirectArgsPerLodCount[4] : 0; this.indirectArgsCount5 = lodCount > 5 ? indirectArgsPerLodCount[5] : 0; this.indirectArgsCount6 = lodCount > 6 ? indirectArgsPerLodCount[6] : 0; this.indirectArgsCount7 = lodCount > 7 ? indirectArgsPerLodCount[7] : 0; } public PrefabData( uint batchIndex, uint indexBufferStartOffset, uint maxCount, uint lodCount, uint fadeLods, Vector4 densityInDistance, Vector4[] lodData, uint[] indirectArgsPerLodOffset, uint[] indirectArgsPerLodCount ) { this.batchIndex = batchIndex; this.indexBufferStartOffset = indexBufferStartOffset; this.maxCount = maxCount; this.lodCount = lodCount; this.fadeLods = fadeLods; this.densityInDistance = densityInDistance; this.lodData0 = lodCount > 0 ? lodData[0] : Vector4.zero; this.lodData1 = lodCount > 1 ? lodData[1] : Vector4.zero; this.lodData2 = lodCount > 2 ? lodData[2] : Vector4.zero; this.lodData3 = lodCount > 3 ? lodData[3] : Vector4.zero; this.lodData4 = lodCount > 4 ? lodData[4] : Vector4.zero; this.lodData5 = lodCount > 5 ? lodData[5] : Vector4.zero; this.lodData6 = lodCount > 6 ? lodData[6] : Vector4.zero; this.lodData7 = lodCount > 7 ? lodData[7] : Vector4.zero; this.indirectArgsOffset0 = lodCount > 0 ? indirectArgsPerLodOffset[0] : 0; this.indirectArgsOffset1 = lodCount > 1 ? indirectArgsPerLodOffset[1] : 0; this.indirectArgsOffset2 = lodCount > 2 ? indirectArgsPerLodOffset[2] : 0; this.indirectArgsOffset3 = lodCount > 3 ? indirectArgsPerLodOffset[3] : 0; this.indirectArgsOffset4 = lodCount > 4 ? indirectArgsPerLodOffset[4] : 0; this.indirectArgsOffset5 = lodCount > 5 ? indirectArgsPerLodOffset[5] : 0; this.indirectArgsOffset6 = lodCount > 6 ? indirectArgsPerLodOffset[6] : 0; this.indirectArgsOffset7 = lodCount > 7 ? indirectArgsPerLodOffset[7] : 0; this.indirectArgsCount0 = lodCount > 0 ? indirectArgsPerLodCount[0] : 0; this.indirectArgsCount1 = lodCount > 1 ? indirectArgsPerLodCount[1] : 0; this.indirectArgsCount2 = lodCount > 2 ? indirectArgsPerLodCount[2] : 0; this.indirectArgsCount3 = lodCount > 3 ? indirectArgsPerLodCount[3] : 0; this.indirectArgsCount4 = lodCount > 4 ? indirectArgsPerLodCount[4] : 0; this.indirectArgsCount5 = lodCount > 5 ? indirectArgsPerLodCount[5] : 0; this.indirectArgsCount6 = lodCount > 6 ? indirectArgsPerLodCount[6] : 0; this.indirectArgsCount7 = lodCount > 7 ? indirectArgsPerLodCount[7] : 0; } } }