BsScriptMeshData.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsScriptObject.h"
  4. #include "BsRendererMeshData.h"
  5. namespace BansheeEngine
  6. {
  7. /**
  8. * @brief Valid index types for mesh indices.
  9. */
  10. // Note: Do not modify, it must match the layout of C# enum IndexType
  11. enum class ScriptIndexType
  12. {
  13. Index16,
  14. Index32
  15. };
  16. /**
  17. * @brief Interop class between C++ & CLR for RendererMeshData.
  18. */
  19. class BS_SCR_BE_EXPORT ScriptMeshData : public ScriptObject <ScriptMeshData>
  20. {
  21. public:
  22. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "MeshData")
  23. /**
  24. * @brief Returns the internal wrapped mesh data.
  25. */
  26. RendererMeshDataPtr getInternalValue() const { return mMeshData; }
  27. /**
  28. * @brief Creates a new managed MeshData object from the provided
  29. * native render mesh data.
  30. */
  31. static MonoObject* create(const RendererMeshDataPtr& meshData);
  32. /**
  33. * @brief Creates a new managed MeshData object from the provided
  34. * native mesh data.
  35. */
  36. static MonoObject* create(const MeshDataPtr& meshData);
  37. private:
  38. ScriptMeshData(MonoObject* managedInstance);
  39. ~ScriptMeshData();
  40. /**
  41. * @brief Initializes the object. Must be called after construction
  42. * and before use.
  43. */
  44. void initialize(const RendererMeshDataPtr& meshData);
  45. /**
  46. * @brief Checks is the underlying mesh data of the provided object locked.
  47. * When locked mesh data cannot be accessed.
  48. */
  49. static bool checkIsLocked(ScriptMeshData* thisPtr);
  50. RendererMeshDataPtr mMeshData;
  51. /************************************************************************/
  52. /* CLR HOOKS */
  53. /************************************************************************/
  54. static void internal_CreateInstance(MonoObject* instance, int numVertices,
  55. int numIndices, VertexLayout vertex, ScriptIndexType index);
  56. static MonoArray* internal_GetPositions(ScriptMeshData* thisPtr);
  57. static void internal_SetPositions(ScriptMeshData* thisPtr, MonoArray* value);
  58. static MonoArray* internal_GetNormals(ScriptMeshData* thisPtr);
  59. static void internal_SetNormals(ScriptMeshData* thisPtr, MonoArray* value);
  60. static MonoArray* internal_GetTangents(ScriptMeshData* thisPtr);
  61. static void internal_SetTangents(ScriptMeshData* thisPtr, MonoArray* value);
  62. static MonoArray* internal_GetColors(ScriptMeshData* thisPtr);
  63. static void internal_SetColors(ScriptMeshData* thisPtr, MonoArray* value);
  64. static MonoArray* internal_GetUV0(ScriptMeshData* thisPtr);
  65. static void internal_SetUV0(ScriptMeshData* thisPtr, MonoArray* value);
  66. static MonoArray* internal_GetUV1(ScriptMeshData* thisPtr);
  67. static void internal_SetUV1(ScriptMeshData* thisPtr, MonoArray* value);
  68. static MonoArray* internal_GetBoneWeights(ScriptMeshData* thisPtr);
  69. static void internal_SetBoneWeights(ScriptMeshData* thisPtr, MonoArray* value);
  70. static MonoArray* internal_GetIndices(ScriptMeshData* thisPtr);
  71. static void internal_SetIndices(ScriptMeshData* thisPtr, MonoArray* value);
  72. static int internal_GetVertexCount(ScriptMeshData* thisPtr);
  73. static int internal_GetIndexCount(ScriptMeshData* thisPtr);
  74. };
  75. }