BsHandleDrawManager.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. TransientMeshPtr mSolidMesh;
  36. TransientMeshPtr mWireMesh;
  37. };
  38. class BS_ED_EXPORT HandleDrawManagerCore
  39. {
  40. struct SolidMaterialData
  41. {
  42. MaterialProxyPtr proxy;
  43. GpuParamMat4 mViewProj;
  44. GpuParamMat4 mViewIT;
  45. };
  46. struct WireMaterialData
  47. {
  48. MaterialProxyPtr proxy;
  49. GpuParamMat4 mViewProj;
  50. };
  51. struct PrivatelyConstruct { };
  52. public:
  53. HandleDrawManagerCore(const PrivatelyConstruct& dummy) { }
  54. private:
  55. friend class HandleDrawManager;
  56. void initialize(const MaterialProxyPtr& wireMatProxy, const MaterialProxyPtr& solidMatProxy);
  57. void updateData(const RenderTargetPtr& rt, const MeshProxyPtr& solidMeshProxy, const MeshProxyPtr& wireMeshProxy);
  58. void render(const CameraProxy& camera);
  59. void renderSolid(Matrix4 viewMatrix, Matrix4 projMatrix, MeshProxyPtr mesh);
  60. void renderWire(Matrix4 viewMatrix, Matrix4 projMatrix, MeshProxyPtr mesh);
  61. RenderTargetPtr mSceneRenderTarget;
  62. MeshProxyPtr mSolidMeshProxy;
  63. MeshProxyPtr mWireMeshProxy;
  64. // Immutable
  65. SolidMaterialData mSolidMaterial;
  66. WireMaterialData mWireMaterial;
  67. };
  68. }