Equalizer  1.13.0
Parallel Rendering Framework
fabric/channel.h
1 
2 /* Copyright (c) 2010-2016, Stefan Eilemann <eile@equalizergraphics.com>
3  * Cedric Stalder <cedric.stalder@gmail.com>
4  * Julio Delgado Mangas <julio.delgadomangas@epfl.ch>
5  *
6  * This library is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Lesser General Public License version 2.1 as published
8  * by the Free Software Foundation.
9  *
10  * This library is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
13  * details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this library; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 #ifndef EQFABRIC_CHANNEL_H
21 #define EQFABRIC_CHANNEL_H
22 
23 #include <eq/fabric/object.h> // base class
24 #include <eq/fabric/paths.h>
25 #include <eq/fabric/renderContext.h> // member
26 #include <eq/fabric/types.h>
27 
28 namespace eq
29 {
30 namespace fabric
31 {
33 template< class W, class C > class Channel : public Object
34 {
35 public:
37  typedef W Parent;
38 
42  void init();
43 
45  W* getWindow() { return _window; }
46 
48  const W* getWindow() const { return _window; }
49 
51  bool isDestination() const
52  { return _data.nativeContext.view.identifier != 0;}
53 
55  void setViewVersion( const co::ObjectVersion& view );
56 
58  const co::ObjectVersion& getViewVersion() const
59  { return _data.nativeContext.view; }
60 
62  void setPixelViewport( const PixelViewport& pvp );
63 
65  EQFABRIC_INL void setViewport( const Viewport& vp );
66 
68  virtual void notifyViewportChanged();
69 
72  { return _data.nativeContext.pvp; }
73 
75  bool hasFixedViewport() const { return _data.fixedVP; }
76 
88  EQFABRIC_INL void setNearFar( const float nearPlane, const float farPlane );
89 
97  EQFABRIC_INL VisitorResult accept( Visitor& visitor );
98 
100  EQFABRIC_INL VisitorResult accept( Visitor& visitor ) const;
101 
110  EQFABRIC_INL void setCapabilities( const uint64_t bitmask );
111 
113  EQFABRIC_INL uint64_t getCapabilities() const;
114 
116  EQFABRIC_INL void setMaxSize( const Vector2i& size );
117 
118  void setOverdraw( const Vector4i& overdraw );
119  const Vector2i& getMaxSize() const { return _maxSize; }
120 
122  EQFABRIC_INL ChannelPath getPath() const;
123 
124  EQFABRIC_INL virtual void backup();
125  EQFABRIC_INL virtual void restore();
126 
127 
139  uint32_t getDrawBuffer() const { return _context->buffer; }
140 
142  uint32_t getReadBuffer() const { return _context->buffer; }
143 
145  const ColorMask& getDrawBufferMask() const { return _context->bufferMask; }
146 
151  const PixelViewport& getPixelViewport() const { return _context->pvp; }
152 
161  virtual bool useOrtho() const { return false; }
162 
167  const Frustumf& getFrustum() const
168  { return useOrtho() ? getOrtho() : getPerspective(); }
169 
174  const Frustumf& getPerspective() const { return _context->frustum; }
175 
180  const Frustumf& getOrtho() const { return _context->ortho; }
181 
191  const Matrix4f& getHeadTransform() const
193 
203  const Matrix4f& getPerspectiveTransform() const
204  { return _context->headTransform; }
205 
215  const Matrix4f& getOrthoTransform() const
216  { return _context->orthoTransform; }
217 
222  const Viewport& getViewport() const { return _context->vp; }
223 
228  const Range& getRange() const { return _context->range; }
229 
234  const Pixel& getPixel() const { return _context->pixel; }
235 
240  const SubPixel& getSubPixel() const { return _context->subPixel; }
241 
246  const Zoom& getZoom() const { return _context->zoom; }
247 
252  uint32_t getPeriod() const { return _context->period; }
253 
258  uint32_t getPhase() const { return _context->phase; }
259 
270  const Vector2i& getPixelOffset() const { return _context->offset; }
271 
273  Eye getEye() const { return _context->eye; }
274 
276  const Vector4i& getOverdraw() const { return _context->overdraw; }
277 
279  uint32_t getTaskID() const { return _context->taskID; }
280 
282  const RenderContext& getContext() const { return *_context; }
284 
287  // Note: also update string array initialization in channel.cpp
290  {
295  IATTR_LAST,
296  IATTR_ALL = IATTR_LAST + 5
297  };
298 
301  {
302  SATTR_DUMP_IMAGE,
303  SATTR_LAST,
304  SATTR_ALL = SATTR_LAST + 5
305  };
306 
308  EQFABRIC_INL int32_t getIAttribute( const IAttribute attr ) const;
309 
311  EQFABRIC_INL
312  const std::string& getSAttribute( const SAttribute attr ) const;
313 
315  EQFABRIC_INL static const std::string& getIAttributeString(
316  const IAttribute attr );
317 
319  EQFABRIC_INL static const std::string& getSAttributeString(
320  const SAttribute attr );
322 
323  virtual bool omitOutput() const { return false; }
324  virtual void output( std::ostream& ) const {}
325 
326 protected:
328  EQFABRIC_INL explicit Channel( W* parent );
329 
331  Channel( const Channel& from );
332 
334  EQFABRIC_INL virtual ~Channel();
335 
337  EQFABRIC_INL virtual void serialize( co::DataOStream& os,
338  const uint64_t dirtyBits );
340  EQFABRIC_INL virtual void deserialize( co::DataIStream& is,
341  const uint64_t dirtyBits );
342 
344  EQFABRIC_INL virtual void setDirty( const uint64_t bits );
345 
349  void overrideContext( const RenderContext& context )
350  { _overrideContext = context; _context = &_overrideContext; }
351 
353  void resetContext() { _context = &_data.nativeContext; }
354 
356  const RenderContext& getNativeContext() const
357  { return _data.nativeContext; }
359 
361  void setIAttribute( const IAttribute attr, const int32_t value )
362  { _iAttributes[attr] = value; setDirty( DIRTY_ATTRIBUTES ); }
363 
365  void setSAttribute( const SAttribute attr, const std::string& value )
366  { _sAttributes[attr] = value; setDirty( DIRTY_ATTRIBUTES ); }
367 
369  virtual ChangeType getChangeType() const { return UNBUFFERED; }
370 
371  enum DirtyBits
372  {
373  DIRTY_ATTRIBUTES = Object::DIRTY_CUSTOM << 0,
374  DIRTY_VIEWPORT = Object::DIRTY_CUSTOM << 1,
375  DIRTY_MEMBER = Object::DIRTY_CUSTOM << 2,
376  DIRTY_FRUSTUM = Object::DIRTY_CUSTOM << 3,
377  DIRTY_CAPABILITIES = Object::DIRTY_CUSTOM << 4,
378  DIRTY_CHANNEL_BITS =
379  DIRTY_ATTRIBUTES | DIRTY_VIEWPORT | DIRTY_MEMBER |
380  DIRTY_FRUSTUM | DIRTY_OBJECT_BITS
381  };
382 
384  virtual uint64_t getRedistributableBits() const
385  { return DIRTY_CHANNEL_BITS; }
386 
387  virtual void updateCapabilities() {}
388 
389 private:
391  W* const _window;
392 
393  struct BackupData
394  {
395  BackupData() : capabilities( LB_BIT_ALL_64 ), fixedVP( true ) {}
396 
398  RenderContext nativeContext;
399 
401  uint64_t capabilities;
402 
404  bool fixedVP;
405  }
406  _data, _backup;
407 
409  RenderContext _overrideContext;
410 
412  RenderContext* _context;
413 
415  int32_t _iAttributes[IATTR_ALL];
416 
418  std::string _sAttributes[SATTR_ALL];
419 
421  Vector2i _maxSize;
422 };
423 
424 template< class W, class C > EQFABRIC_INL
425 std::ostream& operator << ( std::ostream&, const Channel< W, C >& );
426 }
427 }
428 
429 #endif // EQFABRIC_CHANNEL_H
uint32_t buffer
buffer as passed to glDrawBuffer()
Definition: renderContext.h:61
const PixelViewport & getPixelViewport() const
A zoom specification with methods for manipulation.
Definition: zoom.h:35
IAttribute
Possible values for integer attributes.
Definition: iAttribute.h:30
EQFABRIC_INL uint64_t getCapabilities() const
Zoom zoom
up/downsampling wrt to dest
Definition: renderContext.h:59
const Frustumf & getPerspective() const
uint32_t getPhase() const
static EQFABRIC_INL const std::string & getSAttributeString(const SAttribute attr)
A fractional viewport with methods for manipulation.
Definition: viewport.h:34
Holds a subpixel decomposition specification along with some methods for manipulation.
Definition: subPixel.h:42
Defines which parts of the color buffer are to be written.
Definition: colorMask.h:34
const PixelViewport & getNativePixelViewport() const
Range range
database-range wrt to dest channel
Definition: renderContext.h:57
uint32_t getReadBuffer() const
bool hasFixedViewport() const
Viewport vp
fractional viewport wrt dest view
Definition: renderContext.h:54
static EQFABRIC_INL const std::string & getIAttributeString(const IAttribute attr)
IAttribute
Integer attributes for a channel.
A visitor to traverse leaf nodes of a graph.
Definition: leafVisitor.h:28
const ColorMask & getDrawBufferMask() const
Pixel pixel
pixel decomposition wrt to dest
Definition: renderContext.h:52
EQFABRIC_INL const std::string & getSAttribute(const SAttribute attr) const
W Parent
The parent window type.
uint32_t period
DPlex period.
Definition: renderContext.h:63
uint32_t getTaskID() const
EQFABRIC_INL void setNearFar(const float nearPlane, const float farPlane)
Set the near and far planes for this channel.
const SubPixel & getSubPixel() const
const Vector2i & getPixelOffset() const
Get the channel's current position wrt the destination channel.
EQFABRIC_INL void setMaxSize(const Vector2i &size)
Eye
Eye pass bit mask for which is enabled.
Definition: fabric/eye.h:33
ColorMask bufferMask
color mask for anaglyph stereo
Definition: renderContext.h:68
uint32_t phase
DPlex phase.
Definition: renderContext.h:64
const RenderContext & getContext() const
virtual bool useOrtho() const
Select perspective or orthographic rendering.
Use a send token for output frames (OFF, ON)
EQFABRIC_INL int32_t getIAttribute(const IAttribute attr) const
uint32_t getPeriod() const
Matrix4f orthoTransform
orthographic frustum transform
Definition: renderContext.h:47
SubPixel subPixel
subpixel decomposition wrt to dest
Definition: renderContext.h:58
const Viewport & getViewport() const
Holds a pixel decomposition specification with methods for manipulation.
Definition: pixel.h:40
const W * getWindow() const
The Equalizer client library.
Definition: eq/agl/types.h:23
const Vector4i & getOverdraw() const
Matrix4f headTransform
frustum transform for modelview
Definition: renderContext.h:46
const Matrix4f & getOrthoTransform() const
Return the orthographic view matrix.
LeafVisitor< C > Visitor
The channel visitor type.
EQFABRIC_INL Channel(W *parent)
Construct a new channel.
const Zoom & getZoom() const
Eye eye
current eye pass
Definition: renderContext.h:65
Vector2i offset
absolute position wrt dest channel
Definition: renderContext.h:56
Frustumf ortho
ortho frustum for projection matrix
Definition: renderContext.h:44
const Range & getRange() const
const Matrix4f & getHeadTransform() const
Return the view matrix.
const Frustumf & getFrustum() const
Base data transport class for channels.
uint32_t getDrawBuffer() const
PixelViewport pvp
pixel viewport of channel wrt window
Definition: renderContext.h:51
const Pixel & getPixel() const
Statistics gathering mode (OFF, FASTEST [ON], NICEST)
virtual EQFABRIC_INL ~Channel()
Destruct the channel.
Internal base class for all distributed, inheritable Equalizer objects.
Definition: object.h:41
EQFABRIC_INL void setCapabilities(const uint64_t bitmask)
Set the capabilities supported by the channel.
The context applied to a channel during rendering operations.
Definition: renderContext.h:37
Holds a 2D pixel viewport with methods for manipulation.
Definition: pixelViewport.h:34
A fractional database range with methods for manipulation.
Definition: range.h:31
const Frustumf & getOrtho() const
const Matrix4f & getPerspectiveTransform() const
Return the perspective view matrix.
Frustumf frustum
frustum for projection matrix
Definition: renderContext.h:43
EQFABRIC_INL VisitorResult accept(Visitor &visitor)
Perform a depth-first traversal of this channel.