Equalizer  1.9.0
Parallel Rendering Framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
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 
146  { return _context->bufferMask; }
147 
152  const PixelViewport& getPixelViewport() const { return _context->pvp; }
153 
162  virtual bool useOrtho() const { return false; }
163 
168  const Frustumf& getFrustum() const
169  { return useOrtho() ? getOrtho() : getPerspective(); }
170 
175  const Frustumf& getPerspective() const { return _context->frustum; }
176 
181  const Frustumf& getOrtho() const { return _context->ortho; }
182 
192  const Matrix4f& getHeadTransform() const
194 
204  const Matrix4f& getPerspectiveTransform() const
205  { return _context->headTransform; }
206 
216  const Matrix4f& getOrthoTransform() const
217  { return _context->orthoTransform; }
218 
223  const Viewport& getViewport() const { return _context->vp; }
224 
229  const Range& getRange() const { return _context->range; }
230 
235  const Pixel& getPixel() const { return _context->pixel; }
236 
241  const SubPixel& getSubPixel() const { return _context->subpixel; }
242 
247  const Zoom& getZoom() const { return _context->zoom; }
248 
253  uint32_t getPeriod() const { return _context->period; }
254 
259  uint32_t getPhase() const { return _context->phase; }
260 
271  const Vector2i& getPixelOffset() const { return _context->offset; }
272 
274  Eye getEye() const { return _context->eye; }
275 
277  const Vector4i& getOverdraw() const { return _context->overdraw; }
278 
280  uint32_t getTaskID() const { return _context->taskID; }
282 
285  // Note: also update string array initialization in channel.cpp
288  {
293  IATTR_LAST,
294  IATTR_ALL = IATTR_LAST + 5
295  };
296 
299  {
300  SATTR_DUMP_IMAGE,
301  SATTR_LAST,
302  SATTR_ALL = SATTR_LAST + 5
303  };
304 
306  EQFABRIC_INL int32_t getIAttribute( const IAttribute attr ) const;
307 
309  EQFABRIC_INL
310  const std::string& getSAttribute( const SAttribute attr ) const;
311 
313  EQFABRIC_INL static const std::string& getIAttributeString(
314  const IAttribute attr );
315 
317  EQFABRIC_INL static const std::string& getSAttributeString(
318  const SAttribute attr );
320 
321  virtual bool omitOutput() const { return false; }
322  virtual void output( std::ostream& ) const {}
323 
324 protected:
326  EQFABRIC_INL Channel( W* parent );
327 
329  Channel( const Channel& from );
330 
332  EQFABRIC_INL virtual ~Channel();
333 
335  EQFABRIC_INL virtual void serialize( co::DataOStream& os,
336  const uint64_t dirtyBits );
338  EQFABRIC_INL virtual void deserialize( co::DataIStream& is,
339  const uint64_t dirtyBits );
340 
342  EQFABRIC_INL virtual void setDirty( const uint64_t bits );
343 
347  void overrideContext( RenderContext& context ) { _context = &context; }
348 
350  void resetContext() { _context = &_data.nativeContext; }
351 
353  const RenderContext& getContext() const { return *_context; }
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, // 64
374  DIRTY_VIEWPORT = Object::DIRTY_CUSTOM << 1, // 128
375  DIRTY_MEMBER = Object::DIRTY_CUSTOM << 2, // 256
376  DIRTY_FRUSTUM = Object::DIRTY_CUSTOM << 3, // 512
377  DIRTY_CAPABILITIES = Object::DIRTY_CUSTOM << 4, // 1024
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* _context;
410 
412  int32_t _iAttributes[IATTR_ALL];
413 
415  std::string _sAttributes[SATTR_ALL];
416 
418  Vector2i _maxSize;
419 
420  struct Private;
421  Private* _private; // placeholder for binary-compatible changes
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:62
const PixelViewport & getPixelViewport() const
A zoom specification with methods for manipulation.
Definition: zoom.h:34
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:60
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:58
uint32_t getReadBuffer() const
bool hasFixedViewport() const
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.
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
uint32_t getTaskID() const
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
uint32_t getPeriod() 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.
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: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.
uint32_t getDrawBuffer() const
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.