BsHandleDrawManager.h 2.6 KB

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