Equalizer  1.8.0
Parallel Rendering Framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
include/eq/fabric/channel.h
1 
2 /* Copyright (c) 2010-2013, Stefan Eilemann <eile@equalizergraphics.com>
3  * 2010, Cedric Stalder <cedric.stalder@gmail.com>
4  * 2013, 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 
45  enum Drawable
46  {
47  FB_WINDOW = LB_BIT_NONE,
48  FBO_COLOR = LB_BIT1,
49  FBO_DEPTH = LB_BIT2,
50  FBO_STENCIL = LB_BIT3
51  };
52 
56  void init();
57 
59  W* getWindow() { return _window; }
60 
62  const W* getWindow() const { return _window; }
63 
65  bool isDestination() const
66  { return _data.nativeContext.view.identifier != 0;}
67 
69  void setViewVersion( const co::ObjectVersion& view );
70 
72  const co::ObjectVersion& getViewVersion() const
73  { return _data.nativeContext.view; }
74 
76  void setPixelViewport( const PixelViewport& pvp );
77 
79  EQFABRIC_INL void setViewport( const Viewport& vp );
80 
82  virtual void notifyViewportChanged();
83 
86  { return _data.nativeContext.pvp; }
87 
89  bool hasFixedViewport() const { return _data.fixedVP; }
90 
102  EQFABRIC_INL void setNearFar( const float nearPlane, const float farPlane );
103 
108  uint32_t getDrawable() const { return _drawable; }
109 
117  EQFABRIC_INL VisitorResult accept( Visitor& visitor );
118 
120  EQFABRIC_INL VisitorResult accept( Visitor& visitor ) const;
121 
130  EQFABRIC_INL void setCapabilities( const uint64_t bitmask );
131 
133  EQFABRIC_INL uint64_t getCapabilities() const;
134 
136  EQFABRIC_INL void setMaxSize( const Vector2i& size );
137 
138  void setOverdraw( const Vector4i& overdraw );
139  const Vector2i& getMaxSize() const { return _maxSize; }
140 
142  EQFABRIC_INL ChannelPath getPath() const;
143 
144  EQFABRIC_INL virtual void backup();
145  EQFABRIC_INL virtual void restore();
146 
147 
159  uint32_t getDrawBuffer() const { return _context->buffer; }
160 
162  uint32_t getReadBuffer() const { return _context->buffer; }
163 
166  { return _context->bufferMask; }
167 
172  const PixelViewport& getPixelViewport() const { return _context->pvp; }
173 
182  virtual bool useOrtho() const { return false; }
183 
188  const Frustumf& getFrustum() const
189  { return useOrtho() ? getOrtho() : getPerspective(); }
190 
195  const Frustumf& getPerspective() const { return _context->frustum; }
196 
201  const Frustumf& getOrtho() const { return _context->ortho; }
202 
212  const Matrix4f& getHeadTransform() const
214 
224  const Matrix4f& getPerspectiveTransform() const
225  { return _context->headTransform; }
226 
236  const Matrix4f& getOrthoTransform() const
237  { return _context->orthoTransform; }
238 
243  const Viewport& getViewport() const { return _context->vp; }
244 
249  const Range& getRange() const { return _context->range; }
250 
255  const Pixel& getPixel() const { return _context->pixel; }
256 
261  const SubPixel& getSubPixel() const { return _context->subpixel; }
262 
267  const Zoom& getZoom() const { return _context->zoom; }
268 
273  uint32_t getPeriod() const { return _context->period; }
274 
279  uint32_t getPhase() const { return _context->phase; }
280 
291  const Vector2i& getPixelOffset() const { return _context->offset; }
292 
294  Eye getEye() const { return _context->eye; }
295 
297  const Vector4i& getOverdraw() const { return _context->overdraw; }
298 
300  uint32_t getTaskID() const { return _context->taskID; }
302 
305  // Note: also update string array initialization in channel.cpp
308  {
313  IATTR_LAST,
314  IATTR_ALL = IATTR_LAST + 5
315  };
316 
319  {
320  SATTR_DUMP_IMAGE,
321  SATTR_LAST,
322  SATTR_ALL = SATTR_LAST + 5
323  };
324 
326  EQFABRIC_INL int32_t getIAttribute( const IAttribute attr ) const;
327 
329  EQFABRIC_INL
330  const std::string& getSAttribute( const SAttribute attr ) const;
331 
333  EQFABRIC_INL static const std::string& getIAttributeString(
334  const IAttribute attr );
335 
337  EQFABRIC_INL static const std::string& getSAttributeString(
338  const SAttribute attr );
340 
341  virtual bool omitOutput() const { return false; }
342  virtual void output( std::ostream& ) const {}
343 
344 protected:
346  EQFABRIC_INL Channel( W* parent );
347 
349  Channel( const Channel& from );
350 
352  EQFABRIC_INL virtual ~Channel();
353 
355  EQFABRIC_INL virtual void serialize( co::DataOStream& os,
356  const uint64_t dirtyBits );
358  EQFABRIC_INL virtual void deserialize( co::DataIStream& is,
359  const uint64_t dirtyBits );
360 
362  EQFABRIC_INL virtual void setDirty( const uint64_t bits );
363 
364  void setDrawable( const uint32_t drawable );
365 
369  void overrideContext( RenderContext& context ) { _context = &context; }
370 
372  void resetContext() { _context = &_data.nativeContext; }
373 
375  const RenderContext& getContext() const { return *_context; }
376 
378  const RenderContext& getNativeContext() const
379  { return _data.nativeContext; }
381 
383  void setIAttribute( const IAttribute attr, const int32_t value )
384  { _iAttributes[attr] = value; setDirty( DIRTY_ATTRIBUTES ); }
385 
387  void setSAttribute( const SAttribute attr, const std::string& value )
388  { _sAttributes[attr] = value; setDirty( DIRTY_ATTRIBUTES ); }
389 
391  virtual ChangeType getChangeType() const { return UNBUFFERED; }
392 
393  enum DirtyBits
394  {
395  DIRTY_ATTRIBUTES = Object::DIRTY_CUSTOM << 0, // 64
396  DIRTY_VIEWPORT = Object::DIRTY_CUSTOM << 1, // 128
397  DIRTY_MEMBER = Object::DIRTY_CUSTOM << 2, // 256
398  DIRTY_FRUSTUM = Object::DIRTY_CUSTOM << 3, // 512
399  DIRTY_CAPABILITIES = Object::DIRTY_CUSTOM << 4, // 1024
400  DIRTY_CHANNEL_BITS =
401  DIRTY_ATTRIBUTES | DIRTY_VIEWPORT | DIRTY_MEMBER |
402  DIRTY_FRUSTUM | DIRTY_OBJECT_BITS
403  };
404 
406  virtual uint64_t getRedistributableBits() const
407  { return DIRTY_CHANNEL_BITS; }
408 
409  virtual void updateCapabilities() {}
410 
411 private:
413  W* const _window;
414 
415  struct BackupData
416  {
417  BackupData() : capabilities( LB_BIT_ALL_64 ), fixedVP( true ) {}
418 
420  RenderContext nativeContext;
421 
423  uint64_t capabilities;
424 
426  bool fixedVP;
427  }
428  _data, _backup;
429 
431  RenderContext* _context;
432 
434  int32_t _iAttributes[IATTR_ALL];
435 
437  std::string _sAttributes[SATTR_ALL];
438 
440  uint32_t _drawable;
441 
443  Vector2i _maxSize;
444 
445  struct Private;
446  Private* _private; // placeholder for binary-compatible changes
447 };
448 
449 template< class W, class C > EQFABRIC_INL
450 std::ostream& operator << ( std::ostream&, const Channel< W, C >& );
451 }
452 }
453 
454 #endif // EQFABRIC_CHANNEL_H
uint32_t buffer
buffer as passed to glDrawBuffer()
Definition: renderContext.h:62
const PixelViewport & getPixelViewport() const
A zoom specification with methods for manipulation.
Definition: zoom.h:34
Use an FBO for depth values.
IAttribute
Possible values for integer attributes.
Definition: iAttribute.h:30
Use an FBO for stencil values.
EQFABRIC_INL uint64_t getCapabilities() const
Zoom zoom
up/downsampling wrt to dest
Definition: renderContext.h:60
const Frustumf & getPerspective() 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:58
Viewport vp
fractional viewport wrt dest view
Definition: renderContext.h:55
static EQFABRIC_INL const std::string & getIAttributeString(const IAttribute attr)
IAttribute
Integer attributes for a channel.
Drawable
The drawable format defines the components used as an alternate drawable for this 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:53
EQFABRIC_INL const std::string & getSAttribute(const SAttribute attr) const
W Parent
The parent window type.
uint32_t period
DPlex period.
Definition: renderContext.h:64
EQFABRIC_INL void setNearFar(const float nearPlane, const float farPlane)
Set the near and far planes for this channel.
SubPixel subpixel
subpixel decomposition wrt to dest
Definition: renderContext.h:59
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:69
uint32_t phase
DPlex phase.
Definition: renderContext.h:65
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
Matrix4f orthoTransform
orthographic frustum transform
Definition: renderContext.h:48
const Viewport & getViewport() const
Holds a pixel decomposition specification with methods for manipulation.
Definition: pixel.h:40
const W * getWindow() const
const Vector4i & getOverdraw() const
Matrix4f headTransform
frustum transform for modelview
Definition: renderContext.h:47
const Matrix4f & getOrthoTransform() const
Return the orthographic view matrix.
Use the window's frame buffer.
LeafVisitor< C > Visitor
The channel visitor type.
EQFABRIC_INL Channel(W *parent)
Construct a new channel.
Use an FBO for color values.
const Zoom & getZoom() const
Eye eye
current eye pass
Definition: renderContext.h:66
Vector2i offset
absolute position wrt dest channel
Definition: renderContext.h:57
Frustumf ortho
ortho frustum for projection matrix
Definition: renderContext.h:45
const Range & getRange() const
const Matrix4f & getHeadTransform() const
Return the view matrix.
const Frustumf & getFrustum() const
Base data transport class for channels.
PixelViewport pvp
pixel viewport of channel wrt window
Definition: renderContext.h:52
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.
Holds a 2D pixel viewport with methods for manipulation.
Definition: pixelViewport.h:34
A fractional database range with methods for manipulation.
Definition: range.h:30
const Frustumf & getOrtho() const
const Matrix4f & getPerspectiveTransform() const
Return the perspective view matrix.
Frustumf frustum
frustum for projection matrix
Definition: renderContext.h:44
EQFABRIC_INL VisitorResult accept(Visitor &visitor)
Perform a depth-first traversal of this channel.