BsScriptMesh.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 "BsScriptResource.h"
  6. #include "BsScriptMeshData.h"
  7. #include "BsMesh.h"
  8. namespace bs
  9. {
  10. /** @addtogroup ScriptInteropEngine
  11. * @{
  12. */
  13. /**
  14. * Possible mesh toplogy values.
  15. *
  16. * @note Must match C# enum MeshTopology.
  17. */
  18. enum class MeshTopology
  19. {
  20. PointList = 1,
  21. LineList = 2,
  22. LineStrip = 3,
  23. TriangleList = 4,
  24. TriangleStrip = 5,
  25. TriangleFan = 6
  26. };
  27. /** Contains data about a portion of a mesh inside MeshData. */
  28. struct BS_SCR_BE_EXPORT SubMeshData
  29. {
  30. UINT32 indexOffset;
  31. UINT32 indexCount;
  32. MeshTopology topology;
  33. };
  34. /** Interop class between C++ & CLR for SubMesh. */
  35. class BS_SCR_BE_EXPORT ScriptSubMesh : public ScriptObject < ScriptSubMesh >
  36. {
  37. public:
  38. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "SubMesh")
  39. /** Unboxes a boxed managed SubMesh struct and returns the native version of the structure. */
  40. static SubMeshData unbox(MonoObject* obj);
  41. /** Boxes a native SubMesh struct and returns a managed object containing it. */
  42. static MonoObject* box(const SubMeshData& value);
  43. private:
  44. ScriptSubMesh(MonoObject* instance);
  45. };
  46. /** Interop class between C++ & CLR for Mesh. */
  47. class BS_SCR_BE_EXPORT ScriptMesh : public TScriptResource<ScriptMesh, Mesh>
  48. {
  49. public:
  50. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Mesh")
  51. /** Creates an empty, uninitialized managed instance of the resource interop object. */
  52. static MonoObject* createInstance();
  53. private:
  54. friend class ScriptResourceManager;
  55. friend class BuiltinResourceTypes;
  56. ScriptMesh(MonoObject* instance, const HMesh& mesh);
  57. /** Converts the C# MeshTopology enum to DrawOperationType enum used by engine internals. */
  58. static DrawOperationType meshTopologyToDrawOp(MeshTopology topology);
  59. /** Converts the DrawOperationType enum used by engine internals to C# MeshTopology enum. */
  60. static MeshTopology drawOpToMeshTopology(DrawOperationType drawOp);
  61. /** Converts a managed array of SubMeshData%es into an array of SubMesh%es used by engine internals. */
  62. static Vector<SubMesh> monoToNativeSubMeshes(MonoArray* subMeshes);
  63. /************************************************************************/
  64. /* CLR HOOKS */
  65. /************************************************************************/
  66. static void internal_CreateInstance(MonoObject* instance, int numVertices,
  67. int numIndices, MonoArray* subMeshes, MeshUsage usage, VertexLayout vertex, ScriptIndexType index);
  68. static void internal_CreateInstanceMeshData(MonoObject* instance, ScriptMeshData* data, MonoArray* subMeshes,
  69. MeshUsage usage);
  70. static MonoArray* internal_GetSubMeshes(ScriptMesh* thisPtr);
  71. static UINT32 internal_GetSubMeshCount(ScriptMesh* thisPtr);
  72. static MonoObject* internal_GetSkeleton(ScriptMesh* thisPtr);
  73. static MonoObject* internal_GetMorphShapes(ScriptMesh* thisPtr);
  74. static void internal_GetBounds(ScriptMesh* thisPtr, AABox* box, Sphere* sphere);
  75. static MonoObject* internal_GetMeshData(ScriptMesh* thisPtr);
  76. static void internal_SetMeshData(ScriptMesh* thisPtr, ScriptMeshData* value);
  77. };
  78. /** @} */
  79. }