BsScriptMesh.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 BansheeEngine
  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. ScriptMesh(MonoObject* instance, const HMesh& mesh);
  56. /** Converts the C# MeshTopology enum to DrawOperationType enum used by engine internals. */
  57. static DrawOperationType meshTopologyToDrawOp(MeshTopology topology);
  58. /** Converts the DrawOperationType enum used by engine internals to C# MeshTopology enum. */
  59. static MeshTopology drawOpToMeshTopology(DrawOperationType drawOp);
  60. /** Converts a managed array of SubMeshData%es into an array of SubMesh%es used by engine internals. */
  61. static Vector<SubMesh> monoToNativeSubMeshes(MonoArray* subMeshes);
  62. /************************************************************************/
  63. /* CLR HOOKS */
  64. /************************************************************************/
  65. static void internal_CreateInstance(MonoObject* instance, int numVertices,
  66. int numIndices, MonoArray* subMeshes, MeshUsage usage, VertexLayout vertex, ScriptIndexType index);
  67. static void internal_CreateInstanceMeshData(MonoObject* instance, ScriptMeshData* data, MonoArray* subMeshes,
  68. MeshUsage usage);
  69. static MonoArray* internal_GetSubMeshes(ScriptMesh* thisPtr);
  70. static UINT32 internal_GetSubMeshCount(ScriptMesh* thisPtr);
  71. static MonoObject* internal_GetSkeleton(ScriptMesh* thisPtr);
  72. static MonoObject* internal_GetMorphShapes(ScriptMesh* thisPtr);
  73. static void internal_GetBounds(ScriptMesh* thisPtr, AABox* box, Sphere* sphere);
  74. static MonoObject* internal_GetMeshData(ScriptMesh* thisPtr);
  75. static void internal_SetMeshData(ScriptMesh* thisPtr, ScriptMeshData* value);
  76. };
  77. /** @} */
  78. }