Omnidome
Fulldome Mapping Software Toolkit
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
omni::visual::Session Class Reference

Base class for drawing a session. More...

#include <Session.h>

Collaboration diagram for omni::visual::Session:
Collaboration graph
[legend]

Public Member Functions

 Session (omni::Session const &)
 Construct with reference to session. More...
 
omni::Session const & session () const
 Return const ref to session. More...
 
void drawCanvas (mapping::OutputMode=mapping::OutputMode::MAPPED_INPUT, bool _grayscale=false) const
 Draw canvas with given output mode and optional grayscale toggle. More...
 
void drawCanvasWireframe () const
 
void drawCanvasFor3DView ()
 Draw canvas for scene view. More...
 
void drawCanvasWithFrustumIntersections (ProjectorSelectionMode) const
 Canvas with frustum intersection of all projectors. More...
 
void drawFrustumIntersection (proj::Projector const &, QColor const &) const
 Draw frustum canvas intersection. More...
 
void update ()
 Update projectors and canvas. More...
 
void drawProjectors (ProjectorSelectionMode=ProjectorSelectionMode::ALL) const
 Draw projectors. If _selectedOnly true, only currently selected projector is drawn. More...
 
void drawProjectorHalos (ProjectorSelectionMode=ProjectorSelectionMode::ALL) const
 Draw projector halos. If _selectedOnly true, only currently selected projector is drawn. More...
 
bool needsUpdate () const
 Returns true if an update is required. More...
 

Private Member Functions

void drawCanvasWithMatrix () const
 Draw canvas transform with matrix. More...
 
template<typename F >
void projectorDrawFunction (ProjectorSelectionMode, F f) const
 

Private Attributes

omni::Session const & session_
 
std::list< visual::Projectorprojectors_
 
bool needsUpdate_ = true
 

Static Private Attributes

static ContextBoundPtr
< QOpenGLShaderProgram > 
frustumShader_
 

Detailed Description

Base class for drawing a session.

Constructor & Destructor Documentation

omni::visual::Session::Session ( omni::Session const &  _session)

Construct with reference to session.

30  :
31  session_(_session)
32  {}
omni::Session const & session_
Definition: Session.h:82

Member Function Documentation

void omni::visual::Session::drawCanvas ( mapping::OutputMode  _mode = mapping::OutputMode::MAPPED_INPUT,
bool  _grayscale = false 
) const

Draw canvas with given output mode and optional grayscale toggle.

148  {
149  auto _canvas = session_.canvas();
150 
151  if (!_canvas) return;
152 
153  withCurrentContext([&](QOpenGLFunctions& _)
154  {
155  auto *_input = session_.inputs().current();
156  auto *_mapping = const_cast<mapping::Interface *>(session_.mapping());
157 
158  if (_input && session_.mapping() &&
160  {
161  _.glDisable(GL_LIGHTING);
162  _.glActiveTexture(GL_TEXTURE0);
163  _.glBindTexture(GL_TEXTURE_RECTANGLE, _input->textureId());
164  _mapping->bind(session_.inputs().current(), _mode, _grayscale);
166  _.glBindTexture(GL_TEXTURE_RECTANGLE, 0);
167  _mapping->release();
168  }
169  else
170  {
171  // Render canvas with lighting when there is no input
172  glColor4f(1.0, 1.0, 1.0, 1.0);
174  }
175  });
176  }
Canvas * canvas()
Return pointer to canvas.
Definition: Session.cpp:104
omni::Session const & session_
Definition: Session.h:82
void withCurrentContext(ContextFunctor f)
Do OpenGL operations with current context, if it exists.
Definition: ContextSwitch.cpp:45
Mapping * mapping()
Returns pointer to mapping.
Definition: Session.cpp:74
InputList & inputs()
Returns reference to list of inputs.
Definition: Session.cpp:84
Input * current()
Returns pointer to current input Returns nullptr if currentIdx_ == -1 or input list is empty...
Definition: List.cpp:78
void drawCanvasWithMatrix() const
Draw canvas transform with matrix.
Definition: Session.cpp:39
void omni::visual::Session::drawCanvasFor3DView ( )

Draw canvas for scene view.

There is also no input to be displayed when input has no texture

78  {
79  auto _canvas = session_.canvas();
80 
81  if (!_canvas) return;
82 
83  withCurrentContext([&](QOpenGLFunctions& _)
84  {
85  auto *_input = session_.inputs().current();
86  auto *_mapping = const_cast<mapping::Interface *>(session_.mapping());
87 
88  bool _displayInput = session_.scene().displayInput() &&
89  _mapping && _input;
90 
91  if (_input) {
92  /// There is also no input to be displayed when input has no texture
93  _displayInput &= _input->textureId() != 0;
94  }
95 
96  if (_displayInput)
97  {
98  _.glDisable(GL_LIGHTING);
99  _.glEnable(GL_DEPTH_TEST);
100  _.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
101  _.glActiveTexture(GL_TEXTURE0);
102  _.glBindTexture(GL_TEXTURE_RECTANGLE, _input->textureId());
103  glPushMatrix();
104  {
105  glLoadIdentity();
106  glMultMatrixf(_canvas->matrix().constData());
107 
108  _mapping->bind(session_.inputs().current(),
109  session_.scene().insideOutside());
110  {
111  _canvas->draw();
112  }
113  _mapping->release();
114 
115  _.glDisable(GL_DEPTH_TEST);
116  _.glBlendFunc(GL_SRC_ALPHA, GL_ONE);
117  _mapping->bind(session_.inputs().current(),
118  1.0 - session_.scene().insideOutside());
119  {
120  _canvas->draw();
121  }
122  _mapping->release();
123  _.glBindTexture(GL_TEXTURE_RECTANGLE, 0);
124  glPopMatrix();
125  }
126  _.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
127  _.glEnable(GL_DEPTH_TEST);
128  }
129  else
130  {
131  _.glEnable(GL_LIGHTING);
132 
133  // Render canvas with lighting when there is no input
134  glColor4f(1.0, 1.0, 1.0, 1.0);
135  glPushMatrix();
136  {
137  glLoadIdentity();
138  glMultMatrixf(_canvas->matrix().constData());
139  _canvas->draw();
140  }
141  glPopMatrix();
142  }
144  });
145  }
Canvas * canvas()
Return pointer to canvas.
Definition: Session.cpp:104
omni::Session const & session_
Definition: Session.h:82
void withCurrentContext(ContextFunctor f)
Do OpenGL operations with current context, if it exists.
Definition: ContextSwitch.cpp:45
void drawCanvasWireframe() const
Definition: Session.cpp:53
Scene & scene()
Return reference to export settings.
Definition: Session.cpp:144
Mapping * mapping()
Returns pointer to mapping.
Definition: Session.cpp:74
InputList & inputs()
Returns reference to list of inputs.
Definition: Session.cpp:84
Input * current()
Returns pointer to current input Returns nullptr if currentIdx_ == -1 or input list is empty...
Definition: List.cpp:78
void omni::visual::Session::drawCanvasWireframe ( ) const
53  {
54  auto _canvas = session_.canvas();
55  float _wf = session_.scene().wireframe();
56  if (!_canvas || _wf <= 0.0) return;
57 
58  glPushMatrix();
59  {
60  glEnable(GL_BLEND);
61  glEnable(GL_LINE_SMOOTH);
62  glPolygonMode(GL_FRONT,GL_LINE);
63  glPolygonMode(GL_BACK,GL_LINE);
64  glLineWidth(std::max(0.5,_wf*5.0));
65  glColor4f(1.0,1.0,1.0,_wf);
66 
67  glLoadIdentity();
68  glMultMatrixf(_canvas->matrix().constData());
69  _canvas->drawWithViewMode();
70 
71  glPolygonMode(GL_FRONT,GL_FILL);
72  glPolygonMode(GL_BACK,GL_FILL);
73  glLineWidth(1.0);
74  }
75  glPopMatrix();
76  }
Canvas * canvas()
Return pointer to canvas.
Definition: Session.cpp:104
omni::Session const & session_
Definition: Session.h:82
Scene & scene()
Return reference to export settings.
Definition: Session.cpp:144
void omni::visual::Session::drawCanvasWithFrustumIntersections ( ProjectorSelectionMode  _selectionMode) const

Canvas with frustum intersection of all projectors.

180  {
181  projectorDrawFunction(_selectionMode, [&](Projector const&, int i) {
182  auto _tuning = session_.tunings()[i];
183  drawFrustumIntersection(_tuning->projector(),
184  _tuning->color());
185  });
186  }
void drawFrustumIntersection(proj::Projector const &, QColor const &) const
Draw frustum canvas intersection.
Definition: Session.cpp:188
omni::Session const & session_
Definition: Session.h:82
proj::TuningList & tunings()
Returns reference to projector tunings.
Definition: Session.cpp:55
void projectorDrawFunction(ProjectorSelectionMode, F f) const
Definition: Session.cpp:223
void omni::visual::Session::drawCanvasWithMatrix ( ) const
private

Draw canvas transform with matrix.

39  {
40  auto _canvas = session_.canvas();
41 
42  if (!_canvas) return;
43 
44  glPushMatrix();
45  {
46  glLoadIdentity();
47  glMultMatrixf(_canvas->matrix().constData());
48  _canvas->drawWithViewMode();
49  }
50  glPopMatrix();
51  }
Canvas * canvas()
Return pointer to canvas.
Definition: Session.cpp:104
omni::Session const & session_
Definition: Session.h:82
void omni::visual::Session::drawFrustumIntersection ( proj::Projector const &  _proj,
QColor const &  _color 
) const

Draw frustum canvas intersection.

Construct frustum

191  {
192  auto _canvas = session_.canvas();
193 
194  if (!frustumShader_ || !_canvas) return;
195 
196  frustumShader_->bind();
197  /// Construct frustum
198  QVector3D _eye = _proj.pos();
199 
200  // Setup frustum uniforms for intersection test
201  frustumShader_->setUniformValue("color", _color.redF(),
202  _color.greenF(), _color.blueF());
203  frustumShader_->setUniformValue("eye", _eye);
204  frustumShader_->setUniformValue("frame_width",
205  GLfloat(0.02));
206  frustumShader_->setUniformValue("proj_matrix", _proj.projectionMatrix());
207  frustumShader_->setUniformValue("opacity", GLfloat(0.8));
208  frustumShader_->setUniformValue("view_mode",int(_canvas->viewMode()));
209 
210  glDisable(GL_DEPTH_TEST);
212  glEnable(GL_DEPTH_TEST);
213 
214  frustumShader_->release();
215  }
Canvas * canvas()
Return pointer to canvas.
Definition: Session.cpp:104
omni::Session const & session_
Definition: Session.h:82
static ContextBoundPtr< QOpenGLShaderProgram > frustumShader_
Definition: Session.h:83
void drawCanvasWithMatrix() const
Draw canvas transform with matrix.
Definition: Session.cpp:39
void omni::visual::Session::drawProjectorHalos ( ProjectorSelectionMode  _selectionMode = ProjectorSelectionMode::ALL) const

Draw projector halos. If _selectedOnly true, only currently selected projector is drawn.

272  {
273  if (needsUpdate()) return;
274 
275  projectorDrawFunction(_selectionMode, [&](Projector const& _proj, int i) {
276  if (session_.tunings()[i]->outputEnabled()) {
277  _proj.drawHalo();
278  }
279  });
280  }
omni::Session const & session_
Definition: Session.h:82
bool needsUpdate() const
Returns true if an update is required.
Definition: Session.cpp:217
proj::TuningList & tunings()
Returns reference to projector tunings.
Definition: Session.cpp:55
void projectorDrawFunction(ProjectorSelectionMode, F f) const
Definition: Session.cpp:223
void omni::visual::Session::drawProjectors ( ProjectorSelectionMode  _selectedMode = ProjectorSelectionMode::ALL) const

Draw projectors. If _selectedOnly true, only currently selected projector is drawn.

248  {
249  if (needsUpdate()) return;
250 
251  withCurrentContext([&](QOpenGLFunctions& _) {
252  _.glDisable(GL_DEPTH_TEST);
253 
254  projectorDrawFunction(_selectedMode, [&](Projector const& _proj, int) {
255  _proj.draw();
256  });
257 
258  if (session_.canvas())
259  {
260  projectorDrawFunction(_selectedMode, [&](Projector const& _proj, int) {
261  _proj.drawPositioning(
262  session_.canvas()->center());
263  });
264  }
265 
266  _.glEnable(GL_DEPTH_TEST);
267 
268  });
269  }
Canvas * canvas()
Return pointer to canvas.
Definition: Session.cpp:104
virtual QVector3D center() const
Spectator's center of canvas (center of bounding box by default)
Definition: Interface.cpp:37
omni::Session const & session_
Definition: Session.h:82
bool needsUpdate() const
Returns true if an update is required.
Definition: Session.cpp:217
void withCurrentContext(ContextFunctor f)
Do OpenGL operations with current context, if it exists.
Definition: ContextSwitch.cpp:45
void projectorDrawFunction(ProjectorSelectionMode, F f) const
Definition: Session.cpp:223
bool omni::visual::Session::needsUpdate ( ) const

Returns true if an update is required.

218  {
219  return session_.tunings().size() != projectors_.size() || needsUpdate_;
220  }
std::list< visual::Projector > projectors_
Definition: Session.h:85
omni::Session const & session_
Definition: Session.h:82
bool needsUpdate_
Definition: Session.h:86
proj::TuningList & tunings()
Returns reference to projector tunings.
Definition: Session.cpp:55
template<typename F >
void omni::visual::Session::projectorDrawFunction ( ProjectorSelectionMode  _selectionMode,
f 
) const
private
224  {
225  int i = 0;
226 
227  for (auto& _proj : projectors_) {
228  switch (_selectionMode) {
229  default:
231  f(_proj, i);
232  break;
233 
235 
236  if (i == session_.tunings().currentIndex()) {
237  f(_proj, i);
238  }
239 
241  break;
242  }
243  ++i;
244  }
245  }
std::list< visual::Projector > projectors_
Definition: Session.h:85
omni::Session const & session_
Definition: Session.h:82
int currentIndex() const
Return current index.
Definition: TuningList.cpp:81
proj::TuningList & tunings()
Returns reference to projector tunings.
Definition: Session.cpp:55
omni::Session const & omni::visual::Session::session ( ) const

Return const ref to session.

35  {
36  return session_;
37  }
omni::Session const & session_
Definition: Session.h:82
void omni::visual::Session::update ( )

Update projectors and canvas.

283  {
284  if (!QOpenGLContext::currentContext()) return;
285 
286  // Update projector visualizers
287  projectors_.clear();
288 
289  for (int i = 0; i < session_.tunings().size(); ++i)
290  {
291  projectors_.emplace_back(session_.tunings()[i]->projector());
292  projectors_.back().setColor(session_.tunings()[i]->color());
293  projectors_.back().setSelected(
294  i == session_.tunings().currentIndex());
295  projectors_.back().setSize(session_.scene().size() / 10.0);
296  projectors_.back().update();
297  }
298 
299  // Setup frustum/canvas intersection shader
300  if (!frustumShader_)
301  {
302  initShader(frustumShader_,"frustum");
303  }
304  needsUpdate_ = false;
305  }
std::list< visual::Projector > projectors_
Definition: Session.h:85
omni::Session const & session_
Definition: Session.h:82
void initShader(QOpenGLShaderProgram &_s, const char *_filename)
Initialize shader: load from file and compile.
Definition: Shader.cpp:27
bool needsUpdate_
Definition: Session.h:86
int currentIndex() const
Return current index.
Definition: TuningList.cpp:81
proj::TuningList & tunings()
Returns reference to projector tunings.
Definition: Session.cpp:55
Scene & scene()
Return reference to export settings.
Definition: Session.cpp:144
static ContextBoundPtr< QOpenGLShaderProgram > frustumShader_
Definition: Session.h:83

Field Documentation

ContextBoundPtr< QOpenGLShaderProgram > omni::visual::Session::frustumShader_
staticprivate
bool omni::visual::Session::needsUpdate_ = true
private
std::list<visual::Projector> omni::visual::Session::projectors_
private
omni::Session const& omni::visual::Session::session_
private

The documentation for this class was generated from the following files: