Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

SpriteShapeDefaultCreator.cs 2.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Collections.Generic;
  2. using Unity.Jobs;
  3. using Unity.Collections;
  4. using Unity.Mathematics;
  5. using Unity.Collections.LowLevel.Unsafe;
  6. using Unity.Profiling;
  7. namespace UnityEngine.U2D
  8. {
  9. internal class SpriteShapeDefaultCreator : SpriteShapeGeometryCreator
  10. {
  11. public override int GetVertexArrayCount(SpriteShapeController sc)
  12. {
  13. NativeArray<ShapeControlPoint> shapePoints = sc.GetShapeControlPoints();
  14. sc.CalculateMaxArrayCount(shapePoints);
  15. shapePoints.Dispose();
  16. return sc.maxArrayCount;
  17. }
  18. public override JobHandle MakeCreatorJob(SpriteShapeController sc,
  19. NativeArray<ushort> indices, NativeSlice<Vector3> positions, NativeSlice<Vector2> texCoords,
  20. NativeSlice<Vector4> tangents, NativeArray<SpriteShapeSegment> segments, NativeArray<float2> colliderData)
  21. {
  22. var uTess2D = sc.ValidateUTess2D();
  23. NativeArray<Bounds> bounds = sc.spriteShapeRenderer.GetBounds();
  24. var spriteShapeJob = new SpriteShapeGenerator()
  25. {
  26. m_Bounds = bounds, m_PosArray = positions, m_Uv0Array = texCoords, m_TanArray = tangents,
  27. m_GeomArray = segments, m_IndexArray = indices, m_ColliderPoints = colliderData, m_Stats = sc.stats, m_ShadowPoints = sc.shadowData
  28. };
  29. spriteShapeJob.generateCollider = SpriteShapeController.generateCollider;
  30. spriteShapeJob.generateGeometry = SpriteShapeController.generateGeometry;
  31. var shapePoints = sc.GetShapeControlPoints();
  32. var shapeMetaData = sc.GetSplinePointMetaData();
  33. spriteShapeJob.Prepare(sc, sc.spriteShapeParameters, sc.maxArrayCount, shapePoints, shapeMetaData,
  34. sc.angleRangeInfoArray, sc.edgeSpriteArray, sc.cornerSpriteArray, uTess2D);
  35. var jobHandle = spriteShapeJob.Schedule();
  36. shapePoints.Dispose();
  37. shapeMetaData.Dispose();
  38. return jobHandle;
  39. }
  40. static SpriteShapeDefaultCreator creator;
  41. internal static SpriteShapeDefaultCreator defaultInstance
  42. {
  43. get
  44. {
  45. if (null == creator)
  46. {
  47. creator = ScriptableObject.CreateInstance<SpriteShapeDefaultCreator>();
  48. creator.hideFlags = HideFlags.DontSave;
  49. }
  50. return creator;
  51. }
  52. }
  53. /// <summary>
  54. /// Get Versioning so we can check if geometry needs to be generated.
  55. /// </summary>
  56. public override int GetVersion()
  57. {
  58. int hashCode = 0;
  59. int versionHash = 1;
  60. unchecked
  61. {
  62. hashCode = (int)2166136261 ^ GetInstanceID();
  63. hashCode = hashCode * 16777619 ^ versionHash;
  64. }
  65. return hashCode;
  66. }
  67. }
  68. }