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 bool hasTransferThread()
const;
253 EQ_API
virtual void setDirty(
const uint64_t bits );
264 EQ_API
void startFrame(
const uint32_t frameNumber );
307 EQ_API
virtual bool configInit(
const uint128_t& initID );
339 EQ_API
virtual void frameStart(
const uint128_t& frameID,
340 const uint32_t frameNumber );
356 EQ_API
virtual void frameFinish(
const uint128_t& frameID,
357 const uint32_t frameNumber );
370 const uint32_t frameNumber );
373 EQ_API
virtual void attach(
const uint128_t&
id,
const uint32_t instanceID );
376 detail::Pipe*
const _impl;
377 friend class detail::RenderThread;
380 void _setupCommandQueue();
381 void _setupAffinity();
382 void _exitCommandQueue();
385 EQ_API int32_t _getAutoAffinity()
const;
386 friend class detail::ThreadAffinityVisitor;
390 void _stopTransferThread();
393 void _releaseViews();
402 bool _cmdCreateWindow( co::ICommand& command );
403 bool _cmdDestroyWindow( co::ICommand& command );
404 bool _cmdConfigInit( co::ICommand& command );
405 bool _cmdConfigExit( co::ICommand& command );
406 bool _cmdFrameStartClock( co::ICommand& command );
407 bool _cmdFrameStart( co::ICommand& command );
408 bool _cmdFrameFinish( co::ICommand& command );
409 bool _cmdFrameDrawFinish( co::ICommand& command );
410 bool _cmdExitThread( co::ICommand& command );
411 bool _cmdDetachView( co::ICommand& command );
412 bool _cmdExitTransferThread( co::ICommand& command );
414 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.
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 Pipe(Node *parent)
Construct a new pipe.