BsSelectionRenderer.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsEditorPrerequisites.h"
  5. #include "Renderer/BsRendererExtension.h"
  6. #include "Image/BsColor.h"
  7. #include "Math/BsMatrix4.h"
  8. #include "RenderAPI/BsGpuParam.h"
  9. namespace bs
  10. {
  11. /** @addtogroup Scene-Editor-Internal
  12. * @{
  13. */
  14. namespace ct { class SelectionRendererCore; }
  15. /** Handles rendering of the selected SceneObject%s overlay. */
  16. class BS_ED_EXPORT SelectionRenderer
  17. {
  18. public:
  19. SelectionRenderer();
  20. ~SelectionRenderer();
  21. /** Called once per frame. Updates the overlay depending on current selection. */
  22. void update(const SPtr<Camera>& camera);
  23. private:
  24. friend class ct::SelectionRendererCore;
  25. SPtr<ct::SelectionRendererCore> mRenderer;
  26. };
  27. namespace ct
  28. {
  29. /** Core thread version of the selection renderer, that handles actual rendering. */
  30. class SelectionRendererCore : public RendererExtension
  31. {
  32. friend class bs::SelectionRenderer;
  33. public:
  34. SelectionRendererCore();
  35. private:
  36. /** @copydoc RendererExtension::initialize */
  37. void initialize(const Any& data) override;
  38. /** @copydoc RendererExtension::check */
  39. RendererExtensionRequest check(const Camera& camera) override;
  40. /** @copydoc RendererExtension::render */
  41. void render(const Camera& camera, const RendererViewContext& viewContext) override;
  42. /**
  43. * Updates the internal data that determines what will be rendered on the next render() call.
  44. *
  45. * @param[in] camera Camera to render the selection overlay in.
  46. * @param[in] objects A set of objects to render with the selection overlay.
  47. */
  48. void updateData(const SPtr<Camera>& camera, const Vector<SPtr<Renderable>>& objects);
  49. Vector<SPtr<Renderable>> mObjects;
  50. SPtr<Camera> mCamera;
  51. // Immutable
  52. SPtr<Material> mMaterial;
  53. SPtr<GpuParamsSet> mParams[4];
  54. GpuParamMat4 mMatWorldViewProj[4];
  55. GpuParamColor mColor[4];
  56. GpuParamBuffer mBoneMatrices[4];
  57. UINT32 mTechniqueIndices[4];
  58. static const Color SELECTION_COLOR;
  59. };
  60. }
  61. /** @} */
  62. }