Equalizer  1.12.0
Parallel Rendering Framework
config.h
1 
2 /* Copyright (c) 2005-2014, Stefan Eilemann <eile@equalizergraphics.com>
3  * 2010, Cedric Stalder <cedric Stalder@gmail.com>
4  * 2011-2012, Daniel Nachbaur <danielnachbaur@gmail.com>
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 EQ_CONFIG_H
21 #define EQ_CONFIG_H
22 
23 #include <eq/api.h>
24 #include <eq/types.h>
25 
26 #include <eq/fabric/config.h> // base class
27 #include <co/objectHandler.h> // base class
28 
29 namespace eq
30 {
31 namespace detail { class Config; }
32 
55 class Config : public fabric::Config< Server, Config, Observer, Layout, Canvas,
56  Node, ConfigVisitor >,
57  public co::ObjectHandler
58 {
59 public:
62 
64  EQ_API explicit Config( ServerPtr parent );
65 
67  EQ_API virtual ~Config();
68 
72  EQ_API ClientPtr getClient();
73 
75  EQ_API ConstClientPtr getClient() const;
76 
81  EQ_API co::NodePtr getApplicationNode();
82 
83  EQ_API co::CommandQueue* getMainThreadQueue();
84  EQ_API co::CommandQueue* getCommandThreadQueue();
85 
87  EQ_API uint32_t getCurrentFrame() const;
88 
90  EQ_API uint32_t getFinishedFrame() const;
91 
93  EQ_API GLStats::Data getStatistics() const;
94 
100  EQ_API bool isRunning() const;
101 
103  EQ_API void stopRunning();
104 
115  EQ_API int64_t getTime() const;
116 
118  EQ_API MessagePump* getMessagePump();
119 
121  const Channel* findChannel( const std::string& name ) const
122  { return find< Channel >( name ); }
124 
150  EQ_API virtual bool init( const uint128_t& initID );
151 
166  EQ_API virtual bool exit();
167 
187  EQ_API bool update();
188 
190  EQ_API void setLatency( const uint32_t latency ) override;
192 
202  EQ_API bool registerObject( co::Object* object ) override;
203 
213  EQ_API void deregisterObject( co::Object* object ) override;
214 
222  EQ_API virtual bool mapObject( co::Object* object, const uint128_t& id,
223  const uint128_t& version = co::VERSION_OLDEST );
224 
225 
227  EQ_API virtual uint32_t mapObjectNB( co::Object* object, const uint128_t& id,
228  const uint128_t& version = co::VERSION_OLDEST );
229 
231  EQ_API uint32_t mapObjectNB( co::Object* object,
232  const uint128_t& id,
233  const uint128_t& version,
234  co::NodePtr master ) override;
235 
237  EQ_API bool mapObjectSync( const uint32_t requestID ) override;
238 
246  EQ_API void unmapObject( co::Object* object ) override;
247 
254  EQ_API f_bool_t syncObject( co::Object* object, const uint128_t& id,
255  co::NodePtr master,
256  const uint32_t instanceID = CO_INSTANCE_ALL)
257  override;
259 
278  EQ_API virtual uint32_t startFrame( const uint128_t& frameID );
279 
295  EQ_API virtual uint32_t finishFrame();
296 
306  EQ_API virtual uint32_t finishAllFrames();
307 
319  EQ_API void releaseFrameLocal( const uint32_t frameNumber );
320 
330  EQ_API void stopFrames();
331 
333 
336 #ifndef EQ_2_0_API
337 
349  EQ_API const ConfigEvent* nextEvent();
350 
362  EQ_API const ConfigEvent* tryNextEvent();
363 #endif
364 
374  EQ_API void sendEvent( ConfigEvent& event );
375 
387  EQ_API virtual bool handleEvent( const ConfigEvent* event );
388 
400  EQ_API EventOCommand sendEvent( const uint32_t type );
401 
409  EQ_API EventOCommand sendError( const uint32_t type, const Error& error );
410 
414  EQ_API Errors getErrors();
415 
429  EQ_API EventICommand getNextEvent( const uint32_t timeout =
430  LB_TIMEOUT_INDEFINITE ) const;
431 
439  EQ_API virtual bool handleEvent( EventICommand command );
440 
442  EQ_API bool checkEvent() const;
443 
453  EQ_API virtual void handleEvents();
454 
462  void addStatistic( const uint32_t originator, const Statistic& stat );
464 
470  void setupMessagePump( Pipe* pipe );
471 
473  void setupServerConnections( const std::string& connectionData );
474 
475 protected:
477  EQ_API void attach( const uint128_t& id,
478  const uint32_t instanceID ) override;
479 
480  EQ_API void notifyAttached() override;
481  EQ_API void notifyDetach() override;
482 
483  EQ_API void changeLatency( const uint32_t latency ) override;
484  EQ_API bool mapViewObjects() const override;
485 
486 private:
487  detail::Config* const _impl;
488 
489  void _frameStart();
490  friend class Node;
491 
492  bool _needsLocalSync() const;
493 
494  bool _handleNewEvent( EventICommand& command );
495  bool _handleEvent( const Event& event );
496  const ConfigEvent* _convertEvent( co::ObjectICommand command );
497 
499  void _updateStatistics();
500 
503  void _releaseObjects();
504 
506  void _exitMessagePump();
507 
509  bool _cmdSyncClock( co::ICommand& command );
510  bool _cmdCreateNode( co::ICommand& command );
511  bool _cmdDestroyNode( co::ICommand& command );
512  bool _cmdInitReply( co::ICommand& command );
513  bool _cmdExitReply( co::ICommand& command );
514  bool _cmdUpdateVersion( co::ICommand& command );
515  bool _cmdUpdateReply( co::ICommand& command );
516  bool _cmdReleaseFrameLocal( co::ICommand& command );
517  bool _cmdFrameFinish( co::ICommand& command );
518  bool _cmdSwapObject( co::ICommand& command );
519 };
520 }
521 
522 #endif // EQ_CONFIG_H
EQ_API EventOCommand sendError(const uint32_t type, const Error &error)
Send an error event to the application node.
virtual EQ_API bool init(const uint128_t &initID)
Initialize this configuration.
A visitor to traverse configs and all children.
Definition: configVisitor.h:36
A channel represents a two-dimensional viewport within a Window.
Definition: channel.h:43
EQ_API bool isRunning() const
void addStatistic(const uint32_t originator, const Statistic &stat)
Add an statistic event to the statistics overlay.
A configuration is a visualization session driven by an application.
Definition: config.h:55
Proxy object for the connection to an Equalizer server.
Definition: server.h:40
A canvas represents a logical 2D projection surface.
Definition: canvas.h:50
EQ_API EventICommand getNextEvent(const uint32_t timeout=LB_TIMEOUT_INDEFINITE) const
Get the next event.
virtual EQ_API uint32_t finishFrame()
Finish the rendering of a frame.
EQ_API uint32_t getCurrentFrame() const
EQ_API uint32_t getFinishedFrame() const
virtual EQ_API bool exit()
Exit this configuration.
EQ_API const ConfigEvent * nextEvent()
Get the next event.
A Pipe represents a graphics card (GPU) on a Node.
Definition: pipe.h:50
EQ_API bool registerObject(co::Object *object) override
Register a distributed object.
EQ_API bool update()
Update the configuration.
A Node represents a single computer in the cluster.
Definition: node.h:48
EQ_API void stopFrames()
Asynchronously signal all channels to interrupt their rendering.
virtual EQ_API uint32_t startFrame(const uint128_t &frameID)
Request a new frame of rendering.
virtual EQ_API uint32_t mapObjectNB(co::Object *object, const uint128_t &id, const uint128_t &version=co::VERSION_OLDEST)
Start mapping a distributed object.
virtual EQ_API uint32_t finishAllFrames()
Finish rendering all pending frames.
EQ_API int64_t getTime() const
Get the current time in milliseconds.
EQ_API void releaseFrameLocal(const uint32_t frameNumber)
Release the local synchronization of the config for a frame.
EQ_API void sendEvent(ConfigEvent &event)
Send an (old) event to the application node.
EQ_API void unmapObject(co::Object *object) override
Unmap a mapped object.
lunchbox::RefPtr< Server > ServerPtr
A reference-counted pointer to an eq::Server.
Definition: eq/types.h:213
EQ_API f_bool_t syncObject(co::Object *object, const uint128_t &id, co::NodePtr master, const uint32_t instanceID=CO_INSTANCE_ALL) override
Synchronize the local object with a remote object.
A command specialization for config events.
Definition: eventICommand.h:38
An interface to process system messages or events.
Definition: messagePump.h:27
EQ_API bool mapObjectSync(const uint32_t requestID) override
Finalize the mapping of a distributed object.
EQ_API void setLatency(const uint32_t latency) override
EQ_API MessagePump * getMessagePump()
EQ_API bool checkEvent() const
virtual EQ_API ~Config()
Destruct a config.
virtual EQ_API bool mapObject(co::Object *object, const uint128_t &id, const uint128_t &version=co::VERSION_OLDEST)
Map a distributed object.
lunchbox::RefPtr< Client > ClientPtr
A reference-counted pointer to an eq::Client.
Definition: eq/types.h:209
EQ_API Config(ServerPtr parent)
Construct a new config.
The Equalizer client library.
Definition: eq/agl/types.h:23
A layout groups one or more View, logically belonging together.
Definition: layout.h:46
EQ_API ClientPtr getClient()
EQ_API co::NodePtr getApplicationNode()
An Observer looks at one or more views from a certain position (head matrix) with a given eye separat...
Definition: observer.h:37
EQ_API Errors getErrors()
Base data class for a configuration.
Definition: fabric/config.h:34
EQ_API void deregisterObject(co::Object *object) override
Deregister a distributed object.
EQ_API void stopRunning()
Stop the config.
fabric::Config< Server, Config, Observer, Layout, Canvas, Node, ConfigVisitor > Super
base class
Definition: config.h:61
virtual EQ_API bool handleEvent(const ConfigEvent *event)
Handle one (old) config event.
lunchbox::RefPtr< const Client > ConstClientPtr
A reference-counted pointer to a const eq::Client.
Definition: eq/types.h:211
EQ_API const ConfigEvent * tryNextEvent()
Try to get the next event.
virtual EQ_API void handleEvents()
Handle all config events.