3#include "MRPch/MRBindingMacros.h"
17enum class DepthFunction
23 LessOrEqual = Less | Equal,
24 GreaterOrEqual = Greater | Equal,
25 NotEqual = Less | Greater,
26 Always = Less | Equal | Greater,
32struct BaseRenderParams
34 const Matrix4f& viewMatrix;
35 const Matrix4f& projMatrix;
36 ViewportId viewportId;
42struct ModelBaseRenderParams : BaseRenderParams
44 const Matrix4f& modelMatrix;
45 const Plane3f& clipPlane;
46 DepthFunction depthFunction = DepthFunction::Default;
50struct ModelRenderParams : ModelBaseRenderParams
52 const Matrix4f* normMatrixPtr{
nullptr };
54 TransparencyMode transparencyMode;
56 RenderModelPassMask passMask = RenderModelPassMask::All;
60struct BasicUiRenderTask
62 virtual ~BasicUiRenderTask() =
default;
64 BasicUiRenderTask() =
default;
65 BasicUiRenderTask(
const BasicUiRenderTask& ) =
default;
66 BasicUiRenderTask( BasicUiRenderTask&& ) =
default;
67 BasicUiRenderTask& operator=(
const BasicUiRenderTask& ) =
default;
68 BasicUiRenderTask& operator=( BasicUiRenderTask&& ) =
default;
73 enum class InteractionMask
84 mutable InteractionMask consumedInteractions{};
89 if ( !
bool( consumedInteractions & InteractionMask::mouseHover ) )
91 consumedInteractions |= InteractionMask::mouseHover;
100 virtual void earlyBackwardPass(
const BackwardPassParams& params ) { (void)params; }
106struct UiRenderParams : BaseRenderParams
108 using UiTaskList = std::vector<std::shared_ptr<BasicUiRenderTask>>;
111 UiTaskList* tasks =
nullptr;
114struct UiRenderManager
116 virtual ~UiRenderManager() =
default;
125 virtual BasicUiRenderTask::BackwardPassParams
beginBackwardPass( ViewportId viewport, UiRenderParams::UiTaskList& tasks ) { (void)viewport; (void)tasks;
return {}; }
127 virtual void finishBackwardPass( ViewportId viewport,
const BasicUiRenderTask::BackwardPassParams& params ) { (void)viewport, (
void)params; }
133 virtual ~IRenderObject() =
default;
141 virtual bool render(
const ModelRenderParams& params ) = 0;
142 virtual void renderPicker(
const ModelBaseRenderParams& params,
unsigned geomId ) = 0;
144 virtual size_t heapBytes()
const = 0;
146 virtual size_t glBytes()
const = 0;
154 virtual void renderUi(
const UiRenderParams& params ) { (void)params; }
160inline size_t IRenderObject::heapBytes()
const {
return 0; }
161inline size_t IRenderObject::glBytes()
const {
return 0; }
164template <
typename ...Bases>
165requires ( ( std::derived_from<Bases, IRenderObject> && !std::same_as<Bases, IRenderObject> ) && ... )
177 (void)( ..., ( ret = Bases::render( params ) || ret ) );
181 size_t heapBytes()
const override {
return ( std::size_t{} + ... + Bases::heapBytes() ); }
182 size_t glBytes()
const override {
return ( std::size_t{} + ... + Bases::glBytes() ); }
189template<
typename ObjectType>
192 static_assert( std::is_base_of_v<VisualObject, std::remove_reference_t<ObjectType>>,
"MR::VisualObject is not base of ObjectType" );
196using IRenderObjectConstructorLambda = std::function<std::unique_ptr<IRenderObject>(
const VisualObject& )>;
198template<
typename RenderObjType>
201 return [] (
const VisualObject& visObj ) {
return std::make_unique<RenderObjType>( visObj ); };
211 std::type_index type_;
214#define MR_REGISTER_RENDER_OBJECT_IMPL(objectType, ...)\
215 static MR::RegisterRenderObjectConstructor __objectRegistrator##objectType{typeid(objectType),makeRenderObjectConstructor<__VA_ARGS__>()};
#define MR_MAKE_FLAG_OPERATORS_IN_CLASS(T)
Definition MRFlagOperators.h:9
#define MR_MAKE_FLAG_OPERATORS(T)
Definition MRFlagOperators.h:6
#define MRMESH_API
Definition MRMeshFwd.h:80
new unsafe ref float renderTaskDepth
unsafe void earlyBackwardPass(MR.BasicUiRenderTask.Const_BackwardPassParams params_)
unsafe void renderUi(MR.Const_UiRenderParams params_)
unsafe void forceBindAll()
unsafe bool render(MR.Const_ModelRenderParams params_)
unsafe void renderPicker(MR.Const_ModelBaseRenderParams params_, uint geomId)
Definition MRIRenderObject.h:43
Definition MRIRenderObject.h:51
Definition MRIRenderObject.h:205
MRMESH_API RegisterRenderObjectConstructor(const std::type_index &type, IRenderObjectConstructorLambda lambda)
MRMESH_API ~RegisterRenderObjectConstructor()
Definition MRIRenderObject.h:167
size_t glBytes() const override
Definition MRIRenderObject.h:182
void renderUi(const UiRenderParams ¶ms) override
Definition MRIRenderObject.h:184
size_t heapBytes() const override
Definition MRIRenderObject.h:181
bool render(const ModelRenderParams ¶ms) override
Definition MRIRenderObject.h:173
void renderPicker(const ModelBaseRenderParams ¶ms, unsigned geomId) override
Definition MRIRenderObject.h:180
RenderObjectCombinator(const VisualObject &object)
Definition MRIRenderObject.h:169
void forceBindAll() override
Definition MRIRenderObject.h:183
unsafe MR.BasicUiRenderTask.BackwardPassParams beginBackwardPass(MR.ViewportId viewport, MR.Std.Vector_StdSharedPtrMRBasicUiRenderTask tasks)
unsafe void finishBackwardPass(MR.ViewportId viewport, MR.BasicUiRenderTask.Const_BackwardPassParams params_)
unsafe void postRenderViewport(MR.ViewportId viewport)
unsafe void preRenderViewport(MR.ViewportId viewport)
Definition MRIRenderObject.h:107
Definition MRVisualObject.h:119
Definition MRCameraOrientationPlugin.h:8
MR_BIND_IGNORE IRenderObjectConstructorLambda makeRenderObjectConstructor()
Definition MRIRenderObject.h:199
MR_BIND_IGNORE MRMESH_API std::unique_ptr< IRenderObject > createRenderObject(const VisualObject &visObj, const std::type_index &type)
Definition MRIRenderObject.h:81
bool tryConsumeMouseHover() const
Definition MRIRenderObject.h:87