Rumba C++ SDK
RenderablePlugin.h
Go to the documentation of this file.
1 /* *
2  ***
3  *****
4  ********************* Mercenaries Engineering SARL
5  ***************** Copyright (C) 2020
6  *************
7  ********* http://www.mercenaries-engineering.com
8  ***********
9  **** ****
10  ** **
11 */
12 # pragma once
13 # include "Maquina/Macros.h"
14 
15 MAQUINA_IGNORE_WARNINGS_BEGIN
16 # include <ImathMatrix.h>
17 # include <ImathColor.h>
18 MAQUINA_IGNORE_WARNINGS_END
19 
20 # include "Maquina/NodeDelegate.h"
21 # include "Maquina/NodePlugin.h"
22 # include "Maquina/RenderTargets.h"
23 
24 namespace maquina
25 {
31  enum class RenderTargetAttachment{ color = 0, ids = 1, position = 3, normal = 4 };
33  std::wstring env_map_path;
36  Imath::V4i viewport = Imath::V4i{0}; //x, y, width, height
40  /* The id of the rendering viewport. Viewport IDs may be sparse. When deleted, a viewport informs the renderable plugins
41  to free any viewport specific data using RenderablePlugin::free_viewport_data. */
42  uint64_t viewport_identifier = 0;
43  float near_clip = 0.1f;
44  float far_clip = 1000.f;
45  float time = 0;
46  uint8_t subdivision_level = 0; //0, 1 or 2
47  uint8_t lighting_mode = 0; //PBR, SIMPLE, FLAT, SILHOUETTE
48  uint8_t shading_mode = 0; //WIREFRAME, WIREFRAME_ON_SHADED or SHADED
49  uint8_t select_mode = 0; //CONTROLLER, MANIPULATOR, GEOMETRY
50  uint8_t msaa_samples = 0;
51  bool smooth_shading = true;
52  bool use_textures = false;
53  uint8_t culling_mode = 0; //style_back_unless_double_sided, style_back, off
54  bool is_playing = false;
55  bool force_picking = false;
56  std::shared_ptr<NodeDelegate> camera; // The camera node delegate path
57  };
58 
59  struct PickingResult {
60  PickingResult() = default;
61  PickingResult( const std::string& path, float depth )
62  : node_delegate_path{ path }, normalized_depth{ depth }
63  {}
64  bool empty() const { return node_delegate_path.empty(); }
65  std::string node_delegate_path;
67  };
68 
70  {
71  public:
72  RenderablePlugin( Node* node ) : NodePlugin( node ) {}
73  virtual ~RenderablePlugin() {}
74 
76  virtual void release_GL_resources() {};
77 
78  virtual void render( const RenderParameters& parameters ) = 0;
85  virtual void pick( const RenderParameters& parameters, Imath::V2i position, std::vector< PickingResult >& picked );
93  virtual void select( const RenderParameters& parameters, const Imath::V4i& trap, std::vector< std::string >& delegate_paths );
100  static void cache( const Plug& plug );
102  static void uncache( const Plug& plug );
103 
106  virtual void free_viewport_data(uint64_t viewport_identifier) {}
107 
113  virtual int rendering_order() = 0;
114 
115  };
116 }
Definition: RenderablePlugin.h:29
uint8_t select_mode
Definition: RenderablePlugin.h:49
Imath::M44d world_to_camera
Definition: RenderablePlugin.h:35
Imath::Color4f background_color
Definition: RenderablePlugin.h:38
virtual void free_viewport_data(uint64_t viewport_identifier)
Definition: RenderablePlugin.h:106
virtual void release_GL_resources()
The OpenGL resources allocated by the renderer plug-in must be released during this callback...
Definition: RenderablePlugin.h:76
bool smooth_shading
Definition: RenderablePlugin.h:51
Definition: RenderablePlugin.h:28
Definition: RenderablePlugin.h:28
Definition: ImathColor.h:120
Definition: ImathFrame.h:43
Definition: RenderablePlugin.h:29
bool force_picking
Definition: RenderablePlugin.h:55
bool use_textures
Definition: RenderablePlugin.h:52
uint8_t msaa_samples
Definition: RenderablePlugin.h:50
uint8_t shading_mode
Definition: RenderablePlugin.h:48
Derive this class to create your own Node type.
Definition: NodePlugin.h:28
bool is_playing
Definition: RenderablePlugin.h:54
CullingType
Definition: RenderablePlugin.h:30
RenderablePlugin(Node *node)
Definition: RenderablePlugin.h:72
Definition: RenderablePlugin.h:27
MAQUINA_EXPORT void pick(const std::function< void(const std::optional< std::string_view > &path)> &picking_callback)
Start the picking process: register a function to call the next time a node delegate is selected or t...
MAQUINA_EXPORT void select(const std::vector< Node > &nodes, SelectionMode mode=SelectionMode::Replace)
Update the active selection with a list of nodes according to the selection mode. ...
SelectType
Definition: RenderablePlugin.h:28
Definition: ImathVec.h:63
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
virtual ~RenderablePlugin()
Definition: RenderablePlugin.h:73
RenderTargets render_targets
Definition: RenderablePlugin.h:39
uint64_t viewport_identifier
Definition: RenderablePlugin.h:42
Imath::V4i viewport
Definition: RenderablePlugin.h:36
std::string node_delegate_path
Definition: RenderablePlugin.h:65
Definition: RenderablePlugin.h:29
std::shared_ptr< NodeDelegate > camera
Definition: RenderablePlugin.h:56
Definition: RenderTargets.h:5
PickingResult(const std::string &path, float depth)
Definition: RenderablePlugin.h:61
#define MAQUINA_EXPORT
Definition: Export.h:31
A node plug.
Definition: Plug.h:59
Definition: RenderablePlugin.h:29
Definition: RenderablePlugin.h:59
float time
Definition: RenderablePlugin.h:45
Definition: ImathVec.h:61
RenderPass
Definition: RenderablePlugin.h:32
float near_clip
Definition: RenderablePlugin.h:43
Definition: RenderablePlugin.h:27
Definition: RenderablePlugin.h:29
Imath::Color4f ambient_light
Definition: RenderablePlugin.h:37
float normalized_depth
Definition: RenderablePlugin.h:66
Definition: RenderablePlugin.h:69
LightingMode
Definition: RenderablePlugin.h:29
Definition: RenderablePlugin.h:28
Definition: RenderablePlugin.h:27
Imath::M44d camera_projection
Definition: RenderablePlugin.h:34
ShadingType
Definition: RenderablePlugin.h:27
uint8_t culling_mode
Definition: RenderablePlugin.h:53
uint8_t subdivision_level
Definition: RenderablePlugin.h:46
uint8_t lighting_mode
Definition: RenderablePlugin.h:47
Definition: RenderablePlugin.h:26
float far_clip
Definition: RenderablePlugin.h:44
bool empty() const
Definition: RenderablePlugin.h:64
std::wstring env_map_path
Definition: RenderablePlugin.h:33
RenderTargetAttachment
Definition: RenderablePlugin.h:31
Base class of all Rumba nodes.
Definition: Node.h:37