26 #include <eq/visitorResult.h>
28 #include <eq/fabric/pipe.h>
29 #include <co/objectVersion.h>
37 class ThreadAffinityVisitor;
54 EQ_API
explicit Pipe(
Node* parent );
57 EQ_API
virtual ~Pipe();
61 EQ_API co::CommandQueue* getPipeThreadQueue();
62 co::CommandQueue* getMainThreadQueue();
63 co::CommandQueue* getCommandThreadQueue();
64 co::CommandQueue* getTransferThreadQueue();
97 EQ_API uint32_t getFinishedFrame()
const;
124 Frame* getFrame(
const co::ObjectVersion& frameVersion,
125 const Eye eye,
const bool output );
128 co::QueueSlave* getQueue(
const uint128_t& queueID );
134 const View* getView(
const co::ObjectVersion& viewVersion )
const;
137 View* getView(
const co::ObjectVersion& viewVersion );
140 void waitExited()
const;
150 EQ_API
void waitFrameFinished(
const uint32_t frameNumber );
158 EQ_API EventOCommand
sendError(
const uint32_t error );
167 EQ_API
void waitFrameLocal(
const uint32_t frameNumber )
const;
191 bool startTransferThread();
194 QThread* getTransferQThread();
197 bool hasTransferThread()
const;
256 EQ_API
virtual void setDirty(
const uint64_t bits );
277 EQ_API
void startFrame(
const uint32_t frameNumber );
320 EQ_API
virtual bool configInit(
const uint128_t& initID );
352 EQ_API
virtual void frameStart(
const uint128_t& frameID,
353 const uint32_t frameNumber );
369 EQ_API
virtual void frameFinish(
const uint128_t& frameID,
370 const uint32_t frameNumber );
383 const uint32_t frameNumber );
386 EQ_API
virtual void attach(
const uint128_t&
id,
const uint32_t instanceID );
389 detail::Pipe*
const _impl;
390 friend class detail::RenderThread;
393 void _setupCommandQueue();
394 void _setupAffinity();
395 void _exitCommandQueue();
398 EQ_API int32_t _getAutoAffinity()
const;
399 friend class detail::ThreadAffinityVisitor;
403 void _stopTransferThread();
406 void _releaseViews();
415 bool _cmdCreateWindow( co::ICommand& command );
416 bool _cmdDestroyWindow( co::ICommand& command );
417 bool _cmdConfigInit( co::ICommand& command );
418 bool _cmdConfigExit( co::ICommand& command );
419 bool _cmdFrameStartClock( co::ICommand& command );
420 bool _cmdFrameStart( co::ICommand& command );
421 bool _cmdFrameFinish( co::ICommand& command );
422 bool _cmdFrameDrawFinish( co::ICommand& command );
423 bool _cmdExitThread( co::ICommand& command );
424 bool _cmdDetachView( co::ICommand& command );
425 bool _cmdExitTransferThread( co::ICommand& command );
427 LB_TS_VAR( _pipeThread );
virtual EQ_API WindowSystem selectWindowSystem() const
Choose the window system to be used by this pipe.
MessagePump * getMessagePump()
EQ_API ServerPtr getServer()
EQ_API void releaseFrameLocal(const uint32_t frameNumber)
Release the local synchronization of the parent for a frame.
A configuration is a visualization session driven by an application.
EQ_API uint32_t getCurrentFrame() const
Return the current frame number.
virtual EQ_API bool processEvent(const Event &event)
Process a received event.
EQ_API EventOCommand sendError(const uint32_t error)
Send a pipe error event to the application node.
virtual EQ_API bool configInit(const uint128_t &initID)
Initialize this pipe.
EQ_API bool isStopped() const
A Pipe represents a graphics card (GPU) on a Node.
A Node represents a single computer in the cluster.
virtual EQ_API bool configInitSystemPipe(const uint128_t &initID)
Initialize the OS-specific pipe.
virtual EQ_API bool configExit()
De-initialize this pipe.
lunchbox::RefPtr< Server > ServerPtr
A reference-counted pointer to an eq::Server.
EQ_API void setComputeContext(ComputeContext *ctx)
Set the compute-specific context.
EQ_API Config * getConfig()
Base data transport class for pipes.
EQ_API void releaseFrame(const uint32_t frameNumber)
Signal the completion of a frame to the parent.
An interface to process system messages or events.
The interface definition for system-specific GPU handling.
EQ_API void setSystemPipe(SystemPipe *pipe)
Set the system-specific pipe implementation.
EQ_API const ComputeContext * getComputeContext() const
virtual EQ_API void frameDrawFinish(const uint128_t &frameID, const uint32_t frameNumber)
Finish drawing.
EQ_API ClientPtr getClient()
lunchbox::RefPtr< Client > ClientPtr
A reference-counted pointer to an eq::Client.
virtual EQ_API MessagePump * createMessagePump()
Create a new MessagePump for this pipe.
The Equalizer client library.
A View is a 2D area of a Layout.
virtual EQ_API void frameFinish(const uint128_t &frameID, const uint32_t frameNumber)
Finish rendering a frame.
A facility class to manage OpenGL objects across shared contexts.
virtual EQ_API void frameStart(const uint128_t &frameID, const uint32_t frameNumber)
Start rendering a frame.
The interface definition for API-specific GPGPU handling.
EQ_API WindowSystem getWindowSystem() const
Return the window system used by this pipe.
virtual EQ_API ~Pipe()
Destruct the pipe.
EQ_API void startFrame(const uint32_t frameNumber)
Start a frame by unlocking all child resources.
A holder for a frame data and related parameters.
EQ_API SystemPipe * getSystemPipe()
EQ_API bool isWindowSystemAvailable(const std::string &name) const
EQ_API Pipe(Node *parent)
Construct a new pipe.