BsScenePicking.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsModule.h"
  4. #include "BsMatrix4.h"
  5. #include "BsGpuParam.h"
  6. namespace BansheeEngine
  7. {
  8. class ScenePickingCore;
  9. class ScenePicking : public Module<ScenePicking>
  10. {
  11. struct RenderablePickData
  12. {
  13. SPtr<MeshCore> mesh;
  14. UINT32 index;
  15. Matrix4 wvpTransform;
  16. bool alpha;
  17. CullingMode cullMode;
  18. HTexture mainTexture;
  19. };
  20. public:
  21. ScenePicking();
  22. ~ScenePicking();
  23. HSceneObject pickClosestObject(const CameraHandlerPtr& cam, const Vector2I& position, const Vector2I& area);
  24. Vector<HSceneObject> pickObjects(const CameraHandlerPtr& cam, const Vector2I& position, const Vector2I& area);
  25. private:
  26. friend class ScenePickingCore;
  27. typedef Set<RenderablePickData, std::function<bool(const RenderablePickData&, const RenderablePickData&)>> RenderableSet;
  28. static Color encodeIndex(UINT32 index);
  29. static UINT32 decodeIndex(Color color);
  30. ScenePickingCore* mCore;
  31. };
  32. class ScenePickingCore
  33. {
  34. struct MaterialData
  35. {
  36. SPtr<MaterialCore> mMatPickingCore;
  37. SPtr<MaterialCore> mMatPickingAlphaCore;
  38. SPtr<GpuParamsCore> mParamPickingVertParams;
  39. SPtr<GpuParamsCore> mParamPickingFragParams;
  40. SPtr<GpuParamsCore> mParamPickingAlphaVertParams;
  41. SPtr<GpuParamsCore> mParamPickingAlphaFragParams;
  42. GpuParamMat4Core mParamPickingWVP;
  43. GpuParamMat4Core mParamPickingAlphaWVP;
  44. GpuParamColorCore mParamPickingColor;
  45. GpuParamColorCore mParamPickingAlphaColor;
  46. GpuParamTextureCore mParamPickingAlphaTexture;
  47. };
  48. public:
  49. void initialize();
  50. void destroy();
  51. void corePickingBegin(const SPtr<RenderTargetCore>& target, const Rect2& viewportArea, const ScenePicking::RenderableSet& renderables,
  52. const Vector2I& position, const Vector2I& area);
  53. void corePickingEnd(const SPtr<RenderTargetCore>& target, const Rect2& viewportArea, const Vector2I& position,
  54. const Vector2I& area, AsyncOp& asyncOp);
  55. private:
  56. friend class ScenePicking;
  57. static const float ALPHA_CUTOFF;
  58. MaterialData mMaterialData[3];
  59. };
  60. }