2
0

BsScriptMeshData.h 3.3 KB

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