MeshData.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. using System.Runtime.InteropServices;
  4. namespace BansheeEngine
  5. {
  6. public class MeshData : ScriptObject
  7. {
  8. public MeshData(int numVertices, int numIndices, VertexType vertex = VertexType.Position,
  9. IndexType index = IndexType.Index32)
  10. {
  11. Internal_CreateInstance(this, numVertices, numIndices, vertex, index);
  12. }
  13. public Vector3[] Positions
  14. {
  15. get { return Internal_GetPositions(mCachedPtr); }
  16. set { Internal_SetPositions(mCachedPtr, value); }
  17. }
  18. public Vector3[] Normals
  19. {
  20. get { return Internal_GetNormals(mCachedPtr); }
  21. set { Internal_SetNormals(mCachedPtr, value); }
  22. }
  23. public Vector4[] Tangents
  24. {
  25. get { return Internal_GetTangents(mCachedPtr); }
  26. set { Internal_SetTangents(mCachedPtr, value); }
  27. }
  28. public Color[] Colors
  29. {
  30. get { return Internal_GetColors(mCachedPtr); }
  31. set { Internal_SetColors(mCachedPtr, value); }
  32. }
  33. public Vector2[] UV
  34. {
  35. get { return UV0; }
  36. set { UV0 = value; }
  37. }
  38. public Vector2[] UV0
  39. {
  40. get { return Internal_GetUV0(mCachedPtr); }
  41. set { Internal_SetUV0(mCachedPtr, value); }
  42. }
  43. public Vector2[] UV1
  44. {
  45. get { return Internal_GetUV1(mCachedPtr); }
  46. set { Internal_SetUV0(mCachedPtr, value); }
  47. }
  48. public BoneWeight[] BoneWeights
  49. {
  50. get { return Internal_GetBoneWeights(mCachedPtr); }
  51. set { Internal_SetBoneWeights(mCachedPtr, value); }
  52. }
  53. public int[] Indices
  54. {
  55. get { return Internal_GetIndices(mCachedPtr); }
  56. set { Internal_SetIndices(mCachedPtr, value); }
  57. }
  58. public int VertexCount
  59. {
  60. get { return Internal_GetVertexCount(mCachedPtr); }
  61. }
  62. public int IndexCount
  63. {
  64. get { return Internal_GetIndexCount(mCachedPtr); }
  65. }
  66. [MethodImpl(MethodImplOptions.InternalCall)]
  67. private static extern void Internal_CreateInstance(MeshData instance, int numVertices,
  68. int numIndices, VertexType vertex, IndexType index);
  69. [MethodImpl(MethodImplOptions.InternalCall)]
  70. private static extern Vector3[] Internal_GetPositions(IntPtr thisPtr);
  71. [MethodImpl(MethodImplOptions.InternalCall)]
  72. private static extern void Internal_SetPositions(IntPtr thisPtr, Vector3[] value);
  73. [MethodImpl(MethodImplOptions.InternalCall)]
  74. private static extern Vector3[] Internal_GetNormals(IntPtr thisPtr);
  75. [MethodImpl(MethodImplOptions.InternalCall)]
  76. private static extern void Internal_SetNormals(IntPtr thisPtr, Vector3[] value);
  77. [MethodImpl(MethodImplOptions.InternalCall)]
  78. private static extern Vector4[] Internal_GetTangents(IntPtr thisPtr);
  79. [MethodImpl(MethodImplOptions.InternalCall)]
  80. private static extern void Internal_SetTangents(IntPtr thisPtr, Vector4[] value);
  81. [MethodImpl(MethodImplOptions.InternalCall)]
  82. private static extern Color[] Internal_GetColors(IntPtr thisPtr);
  83. [MethodImpl(MethodImplOptions.InternalCall)]
  84. private static extern void Internal_SetColors(IntPtr thisPtr, Color[] value);
  85. [MethodImpl(MethodImplOptions.InternalCall)]
  86. private static extern Vector2[] Internal_GetUV0(IntPtr thisPtr);
  87. [MethodImpl(MethodImplOptions.InternalCall)]
  88. private static extern void Internal_SetUV0(IntPtr thisPtr, Vector2[] value);
  89. [MethodImpl(MethodImplOptions.InternalCall)]
  90. private static extern Vector2[] Internal_GetUV1(IntPtr thisPtr);
  91. [MethodImpl(MethodImplOptions.InternalCall)]
  92. private static extern void Internal_SetUV1(IntPtr thisPtr, Vector2[] value);
  93. [MethodImpl(MethodImplOptions.InternalCall)]
  94. private static extern BoneWeight[] Internal_GetBoneWeights(IntPtr thisPtr);
  95. [MethodImpl(MethodImplOptions.InternalCall)]
  96. private static extern void Internal_SetBoneWeights(IntPtr thisPtr, BoneWeight[] value);
  97. [MethodImpl(MethodImplOptions.InternalCall)]
  98. private static extern int[] Internal_GetIndices(IntPtr thisPtr);
  99. [MethodImpl(MethodImplOptions.InternalCall)]
  100. private static extern void Internal_SetIndices(IntPtr thisPtr, int[] value);
  101. [MethodImpl(MethodImplOptions.InternalCall)]
  102. private static extern int Internal_GetVertexCount(IntPtr thisPtr);
  103. [MethodImpl(MethodImplOptions.InternalCall)]
  104. private static extern int Internal_GetIndexCount(IntPtr thisPtr);
  105. }
  106. // Note: Do not modify, it must match the layout of C++ enum VertexLayout
  107. public enum VertexType
  108. {
  109. Position = 0x01,
  110. Color = 0x02,
  111. Normal = 0x04,
  112. Tangent = 0x08,
  113. BlendWeights = 0x10,
  114. UV0 = 0x20,
  115. UV1 = 0x40,
  116. PC = Position | Color,
  117. PU = Position | UV0,
  118. PCU = Position | Color | UV0,
  119. PCN = Position | Color | Normal,
  120. PCNU = Position | Color | Normal | UV0,
  121. PCNT = Position | Color | Normal | Tangent,
  122. PCNTU = Position | Color | Normal | Tangent | UV0,
  123. PN = Position | Normal,
  124. PNU = Position | Normal | UV0,
  125. PNT = Position | Normal | Tangent,
  126. PNTU = Position | Normal | Tangent | UV0,
  127. }
  128. // Note: Do not modify, it must match the layout of C++ enum ScriptIndexType
  129. public enum IndexType
  130. {
  131. Index16,
  132. Index32
  133. }
  134. [StructLayout(LayoutKind.Sequential)]
  135. public struct BoneWeight
  136. {
  137. public int index0;
  138. public int index1;
  139. public int index2;
  140. public int index3;
  141. public float weight0;
  142. public float weight1;
  143. public float weight2;
  144. public float weight3;
  145. }
  146. }