BsHandleDrawManager.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsGpuParams.h"
  4. namespace BansheeEngine
  5. {
  6. class HandleDrawManagerCore;
  7. class BS_ED_EXPORT HandleDrawManager
  8. {
  9. public:
  10. HandleDrawManager();
  11. ~HandleDrawManager();
  12. void setColor(const Color& color);
  13. void setTransform(const Matrix4& transform);
  14. void drawCube(const Vector3& position, const Vector3& extents, float size = 1.0f);
  15. void drawSphere(const Vector3& position, float radius, float size = 1.0f);
  16. void drawWireCube(const Vector3& position, const Vector3& extents, float size = 1.0f);
  17. void drawWireSphere(const Vector3& position, float radius, float size = 1.0f);
  18. void drawCone(const Vector3& base, const Vector3& normal, float height, float radius, float size = 1.0f);
  19. void drawLine(const Vector3& start, const Vector3& end, float size = 1.0f);
  20. void drawDisc(const Vector3& position, const Vector3& normal, float radius, float size = 1.0f);
  21. void drawWireDisc(const Vector3& position, const Vector3& normal, float radius, float size = 1.0f);
  22. void drawArc(const Vector3& position, const Vector3& normal, float radius, Degree startAngle, Degree amountAngle, float size = 1.0f);
  23. void drawWireArc(const Vector3& position, const Vector3& normal, float radius, Degree startAngle, Degree amountAngle, float size = 1.0f);
  24. void drawRect(const Rect3& area, float size = 1.0f);
  25. void draw(const CameraHandlerPtr& camera);
  26. private:
  27. friend class HandleDrawManagerCore;
  28. void initializeCore(const SPtr<MaterialCore>& wireMat, const SPtr<MaterialCore>& solidMat);
  29. void destroyCore(HandleDrawManagerCore* core);
  30. static const UINT32 SPHERE_QUALITY;
  31. static const UINT32 WIRE_SPHERE_QUALITY;
  32. static const UINT32 ARC_QUALITY;
  33. Matrix4 mTransform;
  34. HandleDrawManagerCore* mCore;
  35. DrawHelper* mDrawHelper;
  36. };
  37. class BS_ED_EXPORT HandleDrawManagerCore
  38. {
  39. struct SolidMaterialData
  40. {
  41. SPtr<MaterialCore> mat;
  42. GpuParamMat4Core mViewProj;
  43. };
  44. struct WireMaterialData
  45. {
  46. SPtr<MaterialCore> mat;
  47. GpuParamMat4Core mViewProj;
  48. };
  49. enum class MeshType
  50. {
  51. Solid, Wire
  52. };
  53. struct MeshData
  54. {
  55. MeshData(const SPtr<MeshCoreBase>& mesh, MeshType type)
  56. :mesh(mesh), type(type)
  57. { }
  58. SPtr<MeshCoreBase> mesh;
  59. MeshType type;
  60. };
  61. struct PrivatelyConstruct { };
  62. public:
  63. HandleDrawManagerCore(const PrivatelyConstruct& dummy) { }
  64. private:
  65. friend class HandleDrawManager;
  66. void initialize(const SPtr<MaterialCore>& wireMat, const SPtr<MaterialCore>& solidMat);
  67. void updateData(const RenderTargetPtr& rt, const Vector<MeshData>& meshes);
  68. void render(const CameraHandlerCore& camera);
  69. RenderTargetPtr mSceneRenderTarget;
  70. Vector<MeshData> mMeshes;
  71. // Immutable
  72. SolidMaterialData mSolidMaterial;
  73. WireMaterialData mWireMaterial;
  74. };
  75. }