BsHandleDrawManager.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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);
  15. void drawSphere(const Vector3& position, float radius);
  16. void drawWireCube(const Vector3& position, const Vector3& extents);
  17. void drawWireSphere(const Vector3& position, float radius);
  18. void drawCone(const Vector3& base, const Vector3& normal, float height, float radius);
  19. void drawLine(const Vector3& start, const Vector3& end);
  20. void drawDisc(const Vector3& position, const Vector3& normal, float radius);
  21. void drawWireDisc(const Vector3& position, const Vector3& normal, float radius);
  22. void drawArc(const Vector3& position, const Vector3& normal, float radius, Degree startAngle, Degree amountAngle);
  23. void drawWireArc(const Vector3& position, const Vector3& normal, float radius, Degree startAngle, Degree amountAngle);
  24. void drawRect(const Rect3& area);
  25. void draw(const HCamera& camera);
  26. private:
  27. friend class HandleDrawManagerCore;
  28. void initializeCore(const MaterialProxyPtr& wireMatProxy, const MaterialProxyPtr& solidMatProxy);
  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. HandleDrawManagerCore* mCore;
  34. DrawHelper* mDrawHelper;
  35. };
  36. class BS_ED_EXPORT HandleDrawManagerCore
  37. {
  38. struct SolidMaterialData
  39. {
  40. MaterialProxyPtr proxy;
  41. GpuParamMat4 mViewProj;
  42. };
  43. struct WireMaterialData
  44. {
  45. MaterialProxyPtr proxy;
  46. GpuParamMat4 mViewProj;
  47. };
  48. enum class MeshType
  49. {
  50. Solid, Wire
  51. };
  52. struct MeshProxyData
  53. {
  54. MeshProxyData(const MeshProxyPtr& proxy, MeshType type)
  55. :proxy(proxy), type(type)
  56. { }
  57. MeshProxyPtr proxy;
  58. MeshType type;
  59. };
  60. struct PrivatelyConstruct { };
  61. public:
  62. HandleDrawManagerCore(const PrivatelyConstruct& dummy) { }
  63. private:
  64. friend class HandleDrawManager;
  65. void initialize(const MaterialProxyPtr& wireMatProxy, const MaterialProxyPtr& solidMatProxy);
  66. void updateData(const RenderTargetPtr& rt, const Vector<MeshProxyData>& proxies);
  67. void render(const CameraProxy& camera);
  68. RenderTargetPtr mSceneRenderTarget;
  69. Vector<MeshProxyData> mProxies;
  70. // Immutable
  71. SolidMaterialData mSolidMaterial;
  72. WireMaterialData mWireMaterial;
  73. };
  74. }