Equalizer
2.1.0
Parallel Rendering Framework
|
A channel represents a two-dimensional viewport within a Window. More...
#include <channel.h>
Public Member Functions | |
EQ_API | Channel (Window *parent) |
Construct a new channel. More... | |
virtual EQ_API | ~Channel () |
Destruct the channel. More... | |
virtual EQ_API void | drawStatistics () |
Draw a statistics overlay. More... | |
virtual EQ_API void | outlineViewport () |
Outline the current pixel viewport. More... | |
void | changeLatency (const uint32_t latency) |
EQ_API void | addResultImageListener (ResultImageListener *listener) |
Add a listener that gets notified everytime a new frame was rendered for a destination channel. More... | |
EQ_API void | removeResultImageListener (ResultImageListener *listener) |
Remove a result image listener to stop receival of notifications on new images. More... | |
virtual EQ_API std::string | getDumpImageFileName () const |
Data Access | |
EQ_API co::CommandQueue * | getPipeThreadQueue () |
EQ_API co::CommandQueue * | getCommandThreadQueue () |
EQ_API uint32_t | getCurrentFrame () const |
bool | waitFrameFinished (uint32_t frame, uint32_t timeout) const |
EQ_API bool | isStopped () const |
EQ_API Pipe * | getPipe () |
EQ_API const Pipe * | getPipe () const |
EQ_API Node * | getNode () |
EQ_API const Node * | getNode () const |
EQ_API Config * | getConfig () |
EQ_API const Config * | getConfig () const |
EQ_API ServerPtr | getServer () |
EQ_API const GLEWContext * | glewGetContext () const |
Get the GLEW context for this channel. More... | |
EQ_API util::ObjectManager & | getObjectManager () |
EQ_API const DrawableConfig & | getDrawableConfig () const |
EQ_API View * | getNativeView () |
Get the channel's native view. More... | |
EQ_API const View * | getNativeView () const |
const-version of getNativeView() More... | |
EQ_API const Vector3ub & | getUniqueColor () const |
EQ_API void | addStatistic (Statistic &event) |
Context-specific data access. | |
The data returned by these methods depends on the context (callback) they are called from, typically the data for the current rendering task. If they are called outside of a frame task method, they return the channel's native parameter or a placeholder value for the task decomposition parameters. | |
virtual EQ_API Vector2f | getJitter () const |
EQ_API View * | getView () |
Get the channel's current View. More... | |
EQ_API const View * | getView () const |
Const version of getView(). More... | |
EQ_API Frustumf | getScreenFrustum () const |
Returns an orthographic frustum for 2D operations on the view. More... | |
Operations | |
Operations are only meaningful from within certain callbacks. They are just convenience wrappers applying context-specific data to the OpenGL state using the context-specific data access above. | |
virtual EQ_API void | applyBuffer () |
Apply the current rendering buffer, including the color mask. More... | |
virtual EQ_API void | applyColorMask () const |
Apply the current color mask. More... | |
virtual EQ_API void | applyViewport () const |
Apply the OpenGL viewport for the current rendering task. More... | |
virtual EQ_API void | applyFrustum () const |
Apply the frustum matrix for the current rendering task. More... | |
virtual EQ_API void | applyPerspective () const |
Apply the perspective frustum matrix for the current rendering task. More... | |
virtual EQ_API void | applyOrtho () const |
Apply the orthographic frustum matrix for the current rendering task. More... | |
EQ_API void | applyScreenFrustum () const |
Apply an orthographic frustum for pixel-based 2D operations. More... | |
virtual EQ_API void | applyHeadTransform () const |
Apply the transformation to position the view frustum. More... | |
virtual EQ_API void | applyPerspectiveTransform () const |
Apply the transformation to position the perspective view frustum. More... | |
virtual EQ_API void | applyOrthoTransform () const |
Apply the transformation to position the orthographic view frustum. More... | |
EQ_API void | applyOverlayState () |
Apply the state for pixel-based 2D overlay rendering operations. More... | |
EQ_API void | resetOverlayState () |
Reset the overlay state setup by applyOverlayState() More... | |
EQ_API void | bindFrameBuffer () |
Rebind the window frame buffer. More... | |
EQ_API void | bindDrawFrameBuffer () |
Rebind the window draw buffer. More... | |
Region of Interest. | |
virtual EQ_API void | resetRegions () |
Reset the declared regions of interest. More... | |
virtual EQ_API void | declareRegion (const eq::PixelViewport ®ion) |
Declare a region covered by the current draw or assemble operation. More... | |
EQ_API void | declareRegion (const eq::Viewport &vp) |
Convenience method to declare a region in relative coordinates. More... | |
EQ_API PixelViewport | getRegion () const |
EQ_API const PixelViewports & | getRegions () const |
Get the current regions of interest. More... | |
Events | |
EQ_API EventOCommand | sendError (const uint32_t error) |
Send a channel error event to the application node. More... | |
virtual EQ_API bool | processEvent (EventType type, SizeEvent &event) |
Process a received event. More... | |
virtual EQ_API bool | processEvent (EventType type, PointerEvent &event) |
virtual EQ_API bool | processEvent (EventType type, KeyEvent &event) |
virtual EQ_API bool | processEvent (Statistic &event) |
Public Member Functions inherited from eq::fabric::Channel< Window, Channel > | |
virtual bool | omitOutput () const |
virtual void | output (std::ostream &) const |
void | init () |
Window * | getWindow () |
const Window * | getWindow () const |
bool | isDestination () const |
void | setViewVersion (const co::ObjectVersion &view) |
const co::ObjectVersion & | getViewVersion () const |
void | setPixelViewport (const PixelViewport &pvp) |
EQFABRIC_INL void | setViewport (const Viewport &vp) |
const PixelViewport & | getNativePixelViewport () const |
bool | hasFixedViewport () const |
EQFABRIC_INL void | setNearFar (const float nearPlane, const float farPlane) |
Set the near and far planes for this channel. More... | |
EQFABRIC_INL VisitorResult | accept (Visitor &visitor) |
Perform a depth-first traversal of this channel. More... | |
EQFABRIC_INL VisitorResult | accept (Visitor &visitor) const |
Const-version of accept(). More... | |
EQFABRIC_INL void | setCapabilities (const uint64_t bitmask) |
Set the capabilities supported by the channel. More... | |
EQFABRIC_INL uint64_t | getCapabilities () const |
void | setOverdraw (const Vector4i &overdraw) |
EQFABRIC_INL ChannelPath | getPath () const |
virtual EQFABRIC_INL void | backup () |
virtual EQFABRIC_INL void | restore () |
uint32_t | getDrawBuffer () const |
uint32_t | getReadBuffer () const |
const ColorMask & | getDrawBufferMask () const |
const PixelViewport & | getPixelViewport () const |
virtual bool | useOrtho () const |
Select perspective or orthographic rendering. More... | |
const Frustumf & | getFrustum () const |
const Frustumf & | getPerspective () const |
const Frustumf & | getOrtho () const |
const Matrix4f & | getHeadTransform () const |
Return the view matrix. More... | |
const Matrix4f & | getPerspectiveTransform () const |
Return the perspective view matrix. More... | |
const Matrix4f & | getOrthoTransform () const |
Return the orthographic view matrix. More... | |
const Viewport & | getViewport () const |
const Range & | getRange () const |
const Pixel & | getPixel () const |
const SubPixel & | getSubPixel () const |
const Zoom & | getZoom () const |
uint32_t | getPeriod () const |
uint32_t | getPhase () const |
const Vector2i & | getPixelOffset () const |
Get the channel's current position wrt the destination channel. More... | |
Eye | getEye () const |
const Vector4i & | getOverdraw () const |
uint32_t | getTaskID () const |
const RenderContext & | getContext () const |
EQFABRIC_INL int32_t | getIAttribute (const IAttribute attr) const |
EQFABRIC_INL const std::string & | getSAttribute (const SAttribute attr) const |
Public Member Functions inherited from eq::fabric::Object | |
EQFABRIC_API bool | isDirty () const override |
EQFABRIC_API uint128_t | commit (const uint32_t incarnation=CO_COMMIT_NEXT) override |
virtual EQFABRIC_API void | setName (const std::string &name) |
Set the name of the object. More... | |
EQFABRIC_API const std::string & | getName () const |
EQFABRIC_API void | setUserData (co::Object *userData) |
Set user-specific data. More... | |
EQFABRIC_API co::Object * | getUserData () |
EQFABRIC_API const co::Object * | getUserData () const |
EQFABRIC_API uint32_t | getTasks () const |
Return the set of tasks this channel might execute in the worst case. More... | |
EQFABRIC_API uint32_t | getSerial () const |
Protected Member Functions | |
EQ_API void | attach (const uint128_t &id, const uint32_t instanceID) |
virtual void | frameTilesStart (const uint128_t &) |
Start a batch of tile rendering operations. More... | |
virtual void | frameTilesFinish (const uint128_t &) |
Finish a batch of tile rendering operations. More... | |
virtual EQ_API void | notifyViewportChanged () |
Notification that parameters influencing the vp/pvp have changed. More... | |
virtual EQ_API void | notifyStopFrame (const uint32_t lastFrameNumber) |
Notify interruption of the rendering. More... | |
Actions | |
EQ_API void | startFrame (const uint32_t frameNumber) |
Start a frame by unlocking all child resources. More... | |
EQ_API void | releaseFrame (const uint32_t frameNumber) |
Signal the completion of a frame to the parent. More... | |
EQ_API void | releaseFrameLocal (const uint32_t frameNumber) |
Release the local synchronization of the parent for a frame. More... | |
virtual EQ_API void | setupAssemblyState () |
Setup the OpenGL state for a readback or assemble operation. More... | |
virtual EQ_API void | resetAssemblyState () |
Reset the OpenGL state after an assembly operation. More... | |
Task Methods | |
The task methods (callbacks) are called by Equalizer during rendering to execute various rendering tasks. Each task method has a useful default implementation, but at least frameDraw() is implemented by an application. | |
virtual EQ_API bool | configInit (const uint128_t &initID) |
Initialize this channel. More... | |
virtual EQ_API bool | configExit () |
Exit this channel. More... | |
virtual EQ_API void | frameStart (const uint128_t &frameID, const uint32_t frameNumber) |
Start rendering a frame. More... | |
virtual EQ_API void | frameFinish (const uint128_t &frameID, const uint32_t frameNumber) |
Finish rendering a frame. More... | |
virtual EQ_API void | frameDrawFinish (const uint128_t &frameID, const uint32_t frameNumber) |
Finish drawing. More... | |
virtual EQ_API void | frameClear (const uint128_t &frameID) |
Clear the frame buffer. More... | |
virtual EQ_API void | frameDraw (const uint128_t &frameID) |
Draw the scene. More... | |
virtual EQ_API void | frameAssemble (const uint128_t &frameID, const Frames &frames) |
Assemble all input frames. More... | |
virtual EQ_API void | frameReadback (const uint128_t &frameID, const Frames &frames) |
Read back the rendered frame buffer into the output frames. More... | |
virtual EQ_API void | frameViewStart (const uint128_t &frameID) |
Start updating a destination channel. More... | |
virtual EQ_API void | frameViewFinish (const uint128_t &frameID) |
Finish updating a destination channel. More... | |
virtual EQ_API void | frameDrawOverlay (const uint128_t &frameID) |
Draw 2D overlay content on a destination channel. More... | |
Protected Member Functions inherited from eq::fabric::Channel< Window, Channel > | |
EQFABRIC_INL | Channel (Window *parent) |
Construct a new channel. | |
Channel (const Channel &from) | |
Construct a copy of a channel (view/segment dest). | |
virtual EQFABRIC_INL void | serialize (co::DataOStream &os, const uint64_t dirtyBits) |
virtual EQFABRIC_INL void | deserialize (co::DataIStream &is, const uint64_t dirtyBits) |
virtual EQFABRIC_INL void | setDirty (const uint64_t bits) |
void | setIAttribute (const IAttribute attr, const int32_t value) |
void | setSAttribute (const SAttribute attr, const std::string &value) |
virtual ChangeType | getChangeType () const |
virtual uint64_t | getRedistributableBits () const |
virtual void | updateCapabilities () |
void | overrideContext (const RenderContext &context) |
void | resetContext () |
const RenderContext & | getNativeContext () const |
Protected Member Functions inherited from eq::fabric::Object | |
EQFABRIC_API | Object () |
Construct a new Object. More... | |
EQFABRIC_API | Object (const Object &) |
Construct an unmapped, unregistered copy of an object. More... | |
virtual EQFABRIC_API | ~Object () |
Destruct the object. More... | |
EQFABRIC_API Object & | operator= (const Object &from) |
NOP assignment operator. More... | |
virtual bool | hasMasterUserData () |
virtual uint32_t | getUserDataLatency () const |
EQFABRIC_API void | setTasks (const uint32_t tasks) |
EQFABRIC_API void | notifyDetach () override |
EQFABRIC_API void | serialize (co::DataOStream &os, const uint64_t dirtyBits) override |
EQFABRIC_API void | deserialize (co::DataIStream &is, const uint64_t dirtyBits) override |
EQFABRIC_API void | postRemove (Object *child) |
virtual void | removeChild (const uint128_t &) |
template<class C , class S > | |
void | commitChild (C *child, S *sender, uint32_t cmd, const uint32_t incarnation) |
template<class C > | |
void | commitChild (C *child, const uint32_t incarnation) |
template<class C , class S > | |
void | commitChildren (const std::vector< C * > &children, S *sender, uint32_t cmd, const uint32_t incarnation) |
template<class C > | |
void | commitChildren (const std::vector< C * > &children, uint32_t cmd, const uint32_t incarnation) |
template<class C > | |
void | commitChildren (const std::vector< C * > &children, const uint32_t incarnation) |
template<class C > | |
void | syncChildren (const std::vector< C * > &children) |
template<class P , class C > | |
void | releaseChildren (const std::vector< C * > &children) |
EQFABRIC_API bool | _cmdSync (co::ICommand &command) |
EQFABRIC_API void | updateEvent (Event &event, int64_t time) |
Friends | |
class | fabric::Window< Pipe, Window, Channel, WindowSettings > |
Additional Inherited Members | |
Public Types inherited from eq::fabric::Channel< Window, Channel > | |
typedef LeafVisitor< Channel > | Visitor |
The channel visitor type. | |
typedef Window | Parent |
The parent window type. | |
enum | IAttribute |
Integer attributes for a channel. More... | |
enum | SAttribute |
String attributes. More... | |
Public Types inherited from eq::fabric::Object | |
enum | DirtyBits { DIRTY_NAME = Serializable::DIRTY_CUSTOM << 0, DIRTY_USERDATA = Serializable::DIRTY_CUSTOM << 1, DIRTY_TASKS = Serializable::DIRTY_CUSTOM << 2, DIRTY_REMOVED = Serializable::DIRTY_CUSTOM << 3, DIRTY_SERIAL = Serializable::DIRTY_CUSTOM << 4, DIRTY_CUSTOM = Serializable::DIRTY_CUSTOM << 6, DIRTY_OBJECT_BITS = DIRTY_NAME | DIRTY_USERDATA } |
The changed parts of the object since the last pack(). More... | |
Static Public Member Functions inherited from eq::fabric::Channel< Window, Channel > | |
static EQFABRIC_INL const std::string & | getIAttributeString (const IAttribute attr) |
static EQFABRIC_INL const std::string & | getSAttributeString (const SAttribute attr) |
Protected Types inherited from eq::fabric::Channel< Window, Channel > | |
enum | DirtyBits |
A channel represents a two-dimensional viewport within a Window.
The channel is the basic rendering entity. It represents a 2D rendering area within a Window. It executes all rendering-relevant tasks, such as clear, draw, assemble and readback. Each rendering task is using its own RenderContext, which is computed by the server based on the rendering description of the current configuration.
|
explicit |
Construct a new channel.
|
virtual |
EQ_API void eq::Channel::addResultImageListener | ( | ResultImageListener * | listener | ) |
Add a listener that gets notified everytime a new frame was rendered for a destination channel.
The channel does not take ownership of the listener. The notification always happens in the render thread.
listener | the new listener to add |
|
virtual |
Apply the current rendering buffer, including the color mask.
|
virtual |
|
virtual |
Apply the frustum matrix for the current rendering task.
If a sub-pixel decomposition is defined, the frustum is jittered by the amount given by getJitter() to implement software anti-aliasing. Applications which want to implement a different multi-sampling algorithm, e.g., depth-of-field, have to re-implement getJitter() or applyFrustum() accordingly.
|
virtual |
|
virtual |
Apply the orthographic frustum matrix for the current rendering task.
|
virtual |
Apply the transformation to position the orthographic view frustum.
EQ_API void eq::Channel::applyOverlayState | ( | ) |
Apply the state for pixel-based 2D overlay rendering operations.
|
virtual |
Apply the perspective frustum matrix for the current rendering task.
|
virtual |
Apply the transformation to position the perspective view frustum.
EQ_API void eq::Channel::applyScreenFrustum | ( | ) | const |
Apply an orthographic frustum for pixel-based 2D operations.
One unit of the frustum covers one pixel on screen. The frustum is positioned relative to the view.
|
virtual |
EQ_API void eq::Channel::bindDrawFrameBuffer | ( | ) |
Rebind the window draw buffer.
EQ_API void eq::Channel::bindFrameBuffer | ( | ) |
Rebind the window frame buffer.
|
protectedvirtual |
Exit this channel.
|
protectedvirtual |
Initialize this channel.
initID | the init identifier. |
|
virtual |
Declare a region covered by the current draw or assemble operation.
The region is relative to the current pixel viewport. It is clipped against the current pixel viewport of the channel. Called with the full pixel viewport after frameDraw if no region has been declared.
Declaring a single, empty region causes this channel to not read back any pixel data, i.e., if it did not draw anything.
The implementation might merge or split the declared regions.
EQ_API void eq::Channel::declareRegion | ( | const eq::Viewport & | vp | ) |
Convenience method to declare a region in relative coordinates.
The given viewport is relative to the current pixel viewport.
|
virtual |
Draw a statistics overlay.
|
protectedvirtual |
Assemble all input frames.
Called 0 to n times during one frame.
frameID | the per-frame identifier. |
frames | the input frames. |
|
protectedvirtual |
Clear the frame buffer.
Called 0 to n times during one frame.
frameID | the per-frame identifier. |
|
protectedvirtual |
Draw the scene.
Called 0 to n times during one frame.
frameID | the per-frame identifier. |
|
protectedvirtual |
Finish drawing.
Called once per frame after the last draw operation. Typically releases the local node thread synchronization for this frame.
frameID | the per-frame identifier. |
frameNumber | the frame to finished with draw. |
|
protectedvirtual |
Draw 2D overlay content on a destination channel.
This is called by frameViewFinish().
frameID | the per-frame identifier. |
|
protectedvirtual |
Finish rendering a frame.
Called once at the end of each frame, to do per-frame updates of channel-specific data. This method has to call releaseFrame().
frameID | the per-frame identifier. |
frameNumber | the frame to finish. |
|
protectedvirtual |
Read back the rendered frame buffer into the output frames.
Called 0 to n times during one frame.
frameID | the per-frame identifier. |
frames | the output frames. |
|
protectedvirtual |
Start rendering a frame.
Called once at the beginning of each frame, to do per-frame updates of channel-specific data. This method has to call startFrame().
frameID | the per-frame identifier. |
frameNumber | the frame to start. |
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
|
protectedvirtual |
Finish updating a destination channel.
Called once for each destination channel's eye pass, before frameFinish() to update a part of a display. Destination channels are the final display channels, e.g., channels which are defined by a view/segment intersection.
This is typically used to do operations on the output channel after it has been fully updated, e.g., to draw a 2D overlay or to perform post-processing on the rendered image.
frameID | the per-frame identifier. |
|
protectedvirtual |
Start updating a destination channel.
Called once for each destination channel's eye pass, after frameStart() to update a part of a display. Destination channels are the final display channels, e.g., channels which are defined by a view/segment intersection.
frameID | the per-frame identifier. |
EQ_API Config* eq::Channel::getConfig | ( | ) |
EQ_API const Config* eq::Channel::getConfig | ( | ) | const |
EQ_API const DrawableConfig& eq::Channel::getDrawableConfig | ( | ) | const |
|
virtual |
|
virtual |
EQ_API View* eq::Channel::getNativeView | ( | ) |
Get the channel's native view.
This function always returns the channel's native view, no matter in which context it is called. Only destination channels have a native view.
EQ_API const View* eq::Channel::getNativeView | ( | ) | const |
const-version of getNativeView()
EQ_API Node* eq::Channel::getNode | ( | ) |
EQ_API const Node* eq::Channel::getNode | ( | ) | const |
EQ_API util::ObjectManager& eq::Channel::getObjectManager | ( | ) |
EQ_API Pipe* eq::Channel::getPipe | ( | ) |
EQ_API const Pipe* eq::Channel::getPipe | ( | ) | const |
EQ_API PixelViewport eq::Channel::getRegion | ( | ) | const |
EQ_API const PixelViewports& eq::Channel::getRegions | ( | ) | const |
Get the current regions of interest.
The returned regions are guaranteed not to overlap with each other. Therefore they may differ in number and size from the declared regions. The actual algorithm to create the non-overlapping regions is unspecified and may change in the future.
EQ_API Frustumf eq::Channel::getScreenFrustum | ( | ) | const |
Returns an orthographic frustum for 2D operations on the view.
One unit of the frustum covers one pixel on screen. The frustum is positioned relative to the view.
EQ_API ServerPtr eq::Channel::getServer | ( | ) |
EQ_API const Vector3ub& eq::Channel::getUniqueColor | ( | ) | const |
EQ_API View* eq::Channel::getView | ( | ) |
Get the channel's current View.
During a frame task method, i.e., in one of the frameFoo functions, the view is set to the view of the destination channel, that is, the channel for which this channel is executing the rendering task. Outside of a frame task method the native view of the channel, or 0, is returned.
EQ_API const GLEWContext* eq::Channel::glewGetContext | ( | ) | const |
Get the GLEW context for this channel.
The GLEW context is initialized during window initialization, and provides access to OpenGL extensions. This function does not follow the Equalizer naming conventions, since GLEW uses a function of this name to automatically resolve OpenGL function entry points. Therefore, any supported GL function can be called directly from an initialized Channel.
EQ_API bool eq::Channel::isStopped | ( | ) | const |
|
protectedvirtual |
Notify interruption of the rendering.
This method is called from the Client command thread, as opposed to the rendering thread. Its purpose is to cause the rendering thread to stop its operations as soon as possible. Normal rendering shall recommence after the given frame.
lastFrameNumber | stop rendering until this frame has been processed. |
|
protectedvirtual |
Notification that parameters influencing the vp/pvp have changed.
Reimplemented from eq::fabric::Channel< Window, Channel >.
|
virtual |
Outline the current pixel viewport.
|
virtual |
Process a received event.
The task of this method is to update the channel and event as necessary, and send it to the application using Config::sendEvent().
type | the pointer event type. |
event | the received event. |
|
protected |
Signal the completion of a frame to the parent.
frameNumber | the frame to end. |
|
protected |
Release the local synchronization of the parent for a frame.
frameNumber | the frame to release. |
EQ_API void eq::Channel::removeResultImageListener | ( | ResultImageListener * | listener | ) |
Remove a result image listener to stop receival of notifications on new images.
listener | the new listener to remove |
|
protectedvirtual |
Reset the OpenGL state after an assembly operation.
EQ_API void eq::Channel::resetOverlayState | ( | ) |
Reset the overlay state setup by applyOverlayState()
|
virtual |
Reset the declared regions of interest.
Called from frameStart and frameClear to reset the area to be used to optimize compositing and load balancing for each frame.
EQ_API EventOCommand eq::Channel::sendError | ( | const uint32_t | error | ) |
Send a channel error event to the application node.
error | the error code. |
|
protectedvirtual |
Setup the OpenGL state for a readback or assemble operation.
The default implementation is very conservative and saves any state which is potentially changed by the assembly routines. Applications may overwrite this and resetAssemblyState() to optimize performance in accordance with their rendering code.
|
protected |
Start a frame by unlocking all child resources.
frameNumber | the frame to start. |