osg::MultiDisplayWindowBase Class Reference

MultiDisplayWindow Base Class.

#include <OSGMultiDisplayWindowBase.h>

Inheritance diagram for osg::MultiDisplayWindowBase:

osg::ClusterWindow osg::ClusterWindowBase osg::Window osg::WindowBase osg::AttachmentContainer osg::FieldContainer osg::MultiDisplayWindow

List of all members.

asynchronous initialization



typedef bool(* connectioncbfp )(std::string server, Real32 progress)
bool initAsync (connectioncbfp fp)
void setConnectionCB (connectioncbfp fp)

Extension handling



static void setGLLibraryName (const Char8 *s)
static Int32 getExtensionId (const Char8 *s)
static bool hasCommonExtension (UInt32 id)
static const std::vector
< std::string > & 
getRegisteredExtensions (void)
UInt32 getGLVersion (void)
bool hasExtension (UInt32 id)
bool hasExtension (const Char8 *s)
void * getFunction (UInt32 id)
void * getFunctionNoCheck (UInt32 id)
void dumpExtensions (void)
Real32 getConstantValue (GLenum val)
const Vec2fgetConstantValuev (GLenum val)
const std::vector< std::string > & getRegisteredFunctions (void)
const std::vector< std::string > & getExtensions (void)
const std::vector< std::string > & getIgnoredExtensions (void)

GL object handling



static UInt32 getGLObjectsSize (void)
static void refreshGLObject (UInt32 id)
static void refreshAllGLObjects (void)
static void reinitializeGLObject (UInt32 id)
static void reinitializeAllGLObjects (void)
static void destroyGLObject (UInt32 id, UInt32 num=1)
static void unpackIdStatus (UInt32 idstatus, UInt32 &id, GLObjectStatusE &status)
void validateGLObject (UInt32 id)
void validateAllGLObjects (void)
void setGLObjectId (UInt32 id, UInt32 id2)
UInt32 getGLObjectId (UInt32 id)

GL object handling



void doInitRegisterGLObject (UInt32 id, UInt32 num)
static void initRegisterGLObject (UInt32 id, UInt32 num)
static UInt32 packIdStatus (UInt32 id, GLObjectStatusE status)

Public Types

enum  {
  HServersFieldId = Inherited::NextFieldId, VServersFieldId = HServersFieldId + 1, ManageClientViewportsFieldId = VServersFieldId + 1, XOverlapFieldId = ManageClientViewportsFieldId + 1,
  YOverlapFieldId = XOverlapFieldId + 1, NextFieldId = YOverlapFieldId + 1
}
typedef MultiDisplayWindowPtr Ptr
enum  {
  ServersFieldId = Inherited::NextFieldId, ConnectionTypeFieldId = ServersFieldId + 1, ConnectionInterfaceFieldId = ConnectionTypeFieldId + 1, ConnectionDestinationFieldId = ConnectionInterfaceFieldId + 1,
  ConnectionParamsFieldId = ConnectionDestinationFieldId + 1, ServicePortFieldId = ConnectionParamsFieldId + 1, ServiceAddressFieldId = ServicePortFieldId + 1, ServiceInterfaceFieldId = ServiceAddressFieldId + 1,
  ClientWindowFieldId = ServiceInterfaceFieldId + 1, InterleaveFieldId = ClientWindowFieldId + 1, FrameCountFieldId = InterleaveFieldId + 1, ComposerFieldId = FrameCountFieldId + 1,
  AutostartFieldId = ComposerFieldId + 1, CalibrationFieldId = AutostartFieldId + 1, FilterFieldId = CalibrationFieldId + 1, DirtyFieldId = FilterFieldId + 1,
  NextFieldId = DirtyFieldId + 1
}
enum  GLObjectStatusE {
  notused = 1, initialize, reinitialize, initialized,
  needrefresh, destroy, finaldestroy
}
enum  { invalidExtensionID = 0x7fffffff, invalidFunctionID = 0x7fffffff }
enum  { statusShift = 3, statusMask = 7 }
typedef ArgsCollector< UInt32GLObjectFunctorArgs
typedef TypedVoidFunctor2Base
< PtrCallArg< Window >
, GLObjectFunctorArgs
GLObjectFunctor
typedef void(* GLExtensionFunction )(void)
enum  {
  WidthFieldId = Inherited::NextFieldId, HeightFieldId = WidthFieldId + 1, PortFieldId = HeightFieldId + 1, ResizePendingFieldId = PortFieldId + 1,
  GlObjectEventCounterFieldId = ResizePendingFieldId + 1, GlObjectLastRefreshFieldId = GlObjectEventCounterFieldId + 1, GlObjectLastReinitializeFieldId = GlObjectLastRefreshFieldId + 1, NextFieldId = GlObjectLastReinitializeFieldId + 1
}
enum  { AttachmentsFieldId = Inherited::NextFieldId, NextFieldId = AttachmentsFieldId + 1 }
enum  { NextFieldId = 1 }

Public Member Functions

FieldContainer Get


virtual FieldContainerTypegetType (void)
virtual const FieldContainerTypegetType (void) const
virtual UInt32 getContainerSize (void) const
Field Get


SFUInt32getSFHServers (void)
 Get the MultiDisplayWindow::_sfHServers field.
SFUInt32getSFVServers (void)
 Get the MultiDisplayWindow::_sfVServers field.
SFBoolgetSFManageClientViewports (void)
 Get the MultiDisplayWindow::_sfManageClientViewports field.
SFInt32getSFXOverlap (void)
 Get the MultiDisplayWindow::_sfXOverlap field.
SFInt32getSFYOverlap (void)
 Get the MultiDisplayWindow::_sfYOverlap field.
UInt32getHServers (void)
 Get the value of the MultiDisplayWindow::_sfHServers field.
const UInt32getHServers (void) const
 Get the value of the MultiDisplayWindow::_sfHServers field.
UInt32getVServers (void)
 Get the value of the MultiDisplayWindow::_sfVServers field.
const UInt32getVServers (void) const
 Get the value of the MultiDisplayWindow::_sfVServers field.
bool & getManageClientViewports (void)
 Get the value of the MultiDisplayWindow::_sfManageClientViewports field.
const bool & getManageClientViewports (void) const
 Get the value of the MultiDisplayWindow::_sfManageClientViewports field.
Int32getXOverlap (void)
 Get the value of the MultiDisplayWindow::_sfXOverlap field.
const Int32getXOverlap (void) const
 Get the value of the MultiDisplayWindow::_sfXOverlap field.
Int32getYOverlap (void)
 Get the value of the MultiDisplayWindow::_sfYOverlap field.
const Int32getYOverlap (void) const
 Get the value of the MultiDisplayWindow::_sfYOverlap field.
Field Set


void setHServers (const UInt32 &value)
 Set the value of the MultiDisplayWindow::_sfHServers field.
void setVServers (const UInt32 &value)
 Set the value of the MultiDisplayWindow::_sfVServers field.
void setManageClientViewports (const bool &value)
 Set the value of the MultiDisplayWindow::_sfManageClientViewports field.
void setXOverlap (const Int32 &value)
 Set the value of the MultiDisplayWindow::_sfXOverlap field.
void setYOverlap (const Int32 &value)
 Set the value of the MultiDisplayWindow::_sfYOverlap field.
Binary Access
virtual UInt32 getBinSize (const BitVector &whichField)
virtual void copyToBin (BinaryDataHandler &pMem, const BitVector &whichField)
virtual void copyFromBin (BinaryDataHandler &pMem, const BitVector &whichField)
Copy


virtual FieldContainerPtr shallowCopy (void) const
window functions


virtual void changed (BitVector whichField, UInt32 origin)
 react to field changes
Output


virtual void dump (UInt32 uiIndent=0, const BitVector bvFlags=0) const
 output the instance for debug purposes
GL implementation functions


virtual void(* getFunctionByName (const Char8 *s))()
Window system implementation functions


virtual void activate (void)
virtual void deactivate (void)
virtual void swap (void)
virtual void init (void)
virtual void render (RenderActionBase *action=NULL)
virtual void renderAllViewports (RenderActionBase *action=NULL)
virtual void frameInit (void)
virtual void frameExit (void)
connection pool


ClusterNetworkgetNetwork (void)
Statistics


StatCollectorgetStatistics (void) const
void setStatistics (StatCollector *stat)
Calibration


bool loadCalibration (std::istream &in)
bool saveCalibration (std::ostream &out)
bool loadFilter (std::istream &in)
bool updateFilter (WindowPtr window, UInt32 id, RenderActionBase *action)
Field Get


MFStringgetMFServers (void)
 Get the ClusterWindow::_mfServers field.
SFStringgetSFConnectionType (void)
 Get the ClusterWindow::_sfConnectionType field.
SFStringgetSFConnectionInterface (void)
 Get the ClusterWindow::_sfConnectionInterface field.
SFStringgetSFConnectionDestination (void)
 Get the ClusterWindow::_sfConnectionDestination field.
SFStringgetSFConnectionParams (void)
 Get the ClusterWindow::_sfConnectionParams field.
SFUInt32getSFServicePort (void)
 Get the ClusterWindow::_sfServicePort field.
SFStringgetSFServiceAddress (void)
 Get the ClusterWindow::_sfServiceAddress field.
SFStringgetSFServiceInterface (void)
 Get the ClusterWindow::_sfServiceInterface field.
SFWindowPtrgetSFClientWindow (void)
 Get the ClusterWindow::_sfClientWindow field.
SFUInt32getSFInterleave (void)
 Get the ClusterWindow::_sfInterleave field.
SFUInt32getSFFrameCount (void)
 Get the ClusterWindow::_sfFrameCount field.
SFImageComposerPtrgetSFComposer (void)
 Get the ClusterWindow::_sfComposer field.
MFStringgetMFAutostart (void)
 Get the ClusterWindow::_mfAutostart field.
MFDisplayCalibrationPtrgetMFCalibration (void)
 Get the ClusterWindow::_mfCalibration field.
MFDisplayFilterForegroundPtrgetMFFilter (void)
 Get the ClusterWindow::_mfFilter field.
std::string & getConnectionType (void)
 Get the value of the ClusterWindow::_sfConnectionType field.
const std::string & getConnectionType (void) const
 Get the value of the ClusterWindow::_sfConnectionType field.
std::string & getConnectionInterface (void)
 Get the value of the ClusterWindow::_sfConnectionInterface field.
const std::string & getConnectionInterface (void) const
 Get the value of the ClusterWindow::_sfConnectionInterface field.
std::string & getConnectionDestination (void)
 Get the value of the ClusterWindow::_sfConnectionDestination field.
const std::string & getConnectionDestination (void) const
 Get the value of the ClusterWindow::_sfConnectionDestination field.
std::string & getConnectionParams (void)
 Get the value of the ClusterWindow::_sfConnectionParams field.
const std::string & getConnectionParams (void) const
 Get the value of the ClusterWindow::_sfConnectionParams field.
UInt32getServicePort (void)
 Get the value of the ClusterWindow::_sfServicePort field.
const UInt32getServicePort (void) const
 Get the value of the ClusterWindow::_sfServicePort field.
std::string & getServiceAddress (void)
 Get the value of the ClusterWindow::_sfServiceAddress field.
const std::string & getServiceAddress (void) const
 Get the value of the ClusterWindow::_sfServiceAddress field.
std::string & getServiceInterface (void)
 Get the value of the ClusterWindow::_sfServiceInterface field.
const std::string & getServiceInterface (void) const
 Get the value of the ClusterWindow::_sfServiceInterface field.
WindowPtrgetClientWindow (void)
 Get the value of the ClusterWindow::_sfClientWindow field.
const WindowPtrgetClientWindow (void) const
 Get the value of the ClusterWindow::_sfClientWindow field.
UInt32getInterleave (void)
 Get the value of the ClusterWindow::_sfInterleave field.
const UInt32getInterleave (void) const
 Get the value of the ClusterWindow::_sfInterleave field.
UInt32getFrameCount (void)
 Get the value of the ClusterWindow::_sfFrameCount field.
const UInt32getFrameCount (void) const
 Get the value of the ClusterWindow::_sfFrameCount field.
ImageComposerPtrgetComposer (void)
 Get the value of the ClusterWindow::_sfComposer field.
const ImageComposerPtrgetComposer (void) const
 Get the value of the ClusterWindow::_sfComposer field.
std::string & getServers (const UInt32 index)
 Get the value of the index element the ClusterWindow::_mfServers field.
MFStringgetServers (void)
 Get the ClusterWindow::_mfServers field.
const MFStringgetServers (void) const
 Get the ClusterWindow::_mfServers field.
std::string & getAutostart (const UInt32 index)
 Get the value of the index element the ClusterWindow::_mfAutostart field.
MFStringgetAutostart (void)
 Get the ClusterWindow::_mfAutostart field.
const MFStringgetAutostart (void) const
 Get the ClusterWindow::_mfAutostart field.
DisplayCalibrationPtrgetCalibration (const UInt32 index)
 Get the value of the index element the ClusterWindow::_mfCalibration field.
MFDisplayCalibrationPtrgetCalibration (void)
 Get the ClusterWindow::_mfCalibration field.
const MFDisplayCalibrationPtrgetCalibration (void) const
 Get the ClusterWindow::_mfCalibration field.
DisplayFilterForegroundPtrgetFilter (const UInt32 index)
 Get the value of the index element the ClusterWindow::_mfFilter field.
MFDisplayFilterForegroundPtrgetFilter (void)
 Get the ClusterWindow::_mfFilter field.
const
MFDisplayFilterForegroundPtr
getFilter (void) const
 Get the ClusterWindow::_mfFilter field.
Field Set


void setConnectionType (const std::string &value)
 Set the value of the ClusterWindow::_sfConnectionType field.
void setConnectionInterface (const std::string &value)
 Set the value of the ClusterWindow::_sfConnectionInterface field.
void setConnectionDestination (const std::string &value)
 Set the value of the ClusterWindow::_sfConnectionDestination field.
void setConnectionParams (const std::string &value)
 Set the value of the ClusterWindow::_sfConnectionParams field.
void setServicePort (const UInt32 &value)
 Set the value of the ClusterWindow::_sfServicePort field.
void setServiceAddress (const std::string &value)
 Set the value of the ClusterWindow::_sfServiceAddress field.
void setServiceInterface (const std::string &value)
 Set the value of the ClusterWindow::_sfServiceInterface field.
void setClientWindow (const WindowPtr &value)
 Set the value of the ClusterWindow::_sfClientWindow field.
void setInterleave (const UInt32 &value)
 Set the value of the ClusterWindow::_sfInterleave field.
void setFrameCount (const UInt32 &value)
 Set the value of the ClusterWindow::_sfFrameCount field.
void setComposer (const ImageComposerPtr &value)
 Set the value of the ClusterWindow::_sfComposer field.
Viewport handling


void addPort (const ViewportPtr &portP)
void insertPort (UInt32 portIndex, const ViewportPtr &portP)
void replacePort (UInt32 portIndex, const ViewportPtr &portP)
void replacePortBy (const ViewportPtr &portP, const ViewportPtr &newPortP)
void subPort (const ViewportPtr &portP)
void subPort (UInt32 portIndex)
void clearPorts (void)
Size handling


bool isResizePending (void)
virtual void resize (int width, int height)
virtual void resizeGL (void)
void setSize (UInt16 width, UInt16 height)
Drawing


virtual void draw (DrawAction *action=NULL)
virtual void drawAllViewports (DrawAction *action=NULL)
Field Get


SFUInt16getSFWidth (void)
 Get the Window::_sfWidth field.
SFUInt16getSFHeight (void)
 Get the Window::_sfHeight field.
MFViewportPtrgetMFPort (void)
 Get the Window::_mfPort field.
SFBoolgetSFResizePending (void)
 Get the Window::_sfResizePending field.
UInt16getWidth (void)
 Get the value of the Window::_sfWidth field.
const UInt16getWidth (void) const
 Get the value of the Window::_sfWidth field.
UInt16getHeight (void)
 Get the value of the Window::_sfHeight field.
const UInt16getHeight (void) const
 Get the value of the Window::_sfHeight field.
bool & getResizePending (void)
 Get the value of the Window::_sfResizePending field.
const bool & getResizePending (void) const
 Get the value of the Window::_sfResizePending field.
ViewportPtrgetPort (const UInt32 index)
 Get the value of the index element the Window::_mfPort field.
MFViewportPtrgetPort (void)
 Get the Window::_mfPort field.
const MFViewportPtrgetPort (void) const
 Get the Window::_mfPort field.
Field Set


void setWidth (const UInt16 &value)
 Set the value of the Window::_sfWidth field.
void setHeight (const UInt16 &value)
 Set the value of the Window::_sfHeight field.
void setResizePending (const bool &value)
 Set the value of the Window::_sfResizePending field.
Handle Attachments


void addAttachment (const AttachmentPtr &fieldContainerP, UInt16 binding=0)
void subAttachment (const AttachmentPtr &fieldContainerP, UInt16 binding=0)
AttachmentPtr findAttachment (UInt32 groupId, UInt16 binding=0)
AttachmentPtr findAttachment (const FieldContainerType &type, UInt16 binding=0)


SFAttachmentMapgetSFAttachments (void)
Get Instance Type Information


UInt32 getTypeId (void) const
UInt16 getGroupId (void) const
const Char8getTypeName (void) const


FieldgetField (UInt32 fieldId)
FieldgetField (const Char8 *fieldName)

Static Public Member Functions

Class Get


static FieldContainerTypegetClassType (void)
 access the type of the class
static UInt32 getClassTypeId (void)
 access the numerical type of the class
Construction


static MultiDisplayWindowPtr create (void)
 create a new instance of the class
static MultiDisplayWindowPtr createEmpty (void)
 create an empty new instance of the class, do not copy the prototype
Class Get


static const char * getClassname (void)
Extension registration


static UInt32 registerExtension (const Char8 *s)
static void ignoreExtensions (const Char8 *s)
static UInt32 registerFunction (const Char8 *s, Int32 ext=-1, UInt32 version=0xffff)
static void registerConstant (GLenum val)
GL object registration


static UInt32 registerGLObject (GLObjectFunctor functor, UInt32 num=1)
Get Class Type Information


static UInt16 getClassGroupId (void)

Static Public Attributes

static const osg::BitVector HServersFieldMask
static const osg::BitVector VServersFieldMask
static const osg::BitVector ManageClientViewportsFieldMask
static const osg::BitVector XOverlapFieldMask
static const osg::BitVector YOverlapFieldMask
static const osg::BitVector MTInfluenceMask
static const osg::BitVector ServersFieldMask
static const osg::BitVector ConnectionTypeFieldMask
static const osg::BitVector ConnectionInterfaceFieldMask
static const osg::BitVector ConnectionDestinationFieldMask
static const osg::BitVector ConnectionParamsFieldMask
static const osg::BitVector ServicePortFieldMask
static const osg::BitVector ServiceAddressFieldMask
static const osg::BitVector ServiceInterfaceFieldMask
static const osg::BitVector ClientWindowFieldMask
static const osg::BitVector InterleaveFieldMask
static const osg::BitVector FrameCountFieldMask
static const osg::BitVector ComposerFieldMask
static const osg::BitVector AutostartFieldMask
static const osg::BitVector CalibrationFieldMask
static const osg::BitVector FilterFieldMask
static const osg::BitVector DirtyFieldMask
static const Real32 unknownConstant = -1e100
static const osg::BitVector WidthFieldMask
static const osg::BitVector HeightFieldMask
static const osg::BitVector PortFieldMask
static const osg::BitVector ResizePendingFieldMask
static const osg::BitVector GlObjectEventCounterFieldMask
static const osg::BitVector GlObjectLastRefreshFieldMask
static const osg::BitVector GlObjectLastReinitializeFieldMask
static const BitVector AttachmentsFieldMask
static const BitVector NextFieldMask
CoredNodePtr helper


static const bool isNodeCore = false

Protected Types

Map for GL cvonstant handling


typedef std::map< GLenum, Vec2fConstHash

Protected Member Functions

Constructors


 MultiDisplayWindowBase (void)
 MultiDisplayWindowBase (const MultiDisplayWindowBase &source)
Destructors


virtual ~MultiDisplayWindowBase (void)
Sync


void executeSyncImpl (MultiDisplayWindowBase *pOther, const BitVector &whichField)
virtual void executeSync (FieldContainer &other, const BitVector &whichField)
client window funcitons


virtual void clientInit (void)
virtual void clientPreSync (void)
virtual void clientRender (RenderActionBase *action)
virtual void clientSwap (void)
server window funcitons


virtual void serverInit (WindowPtr window, UInt32 id)
virtual void serverRender (WindowPtr window, UInt32 id, RenderActionBase *action)
virtual void serverSwap (WindowPtr window, UInt32 id)
Field Get


SFBoolgetSFDirty (void)
 Get the ClusterWindow::_sfDirty field.
bool & getDirty (void)
 Get the value of the ClusterWindow::_sfDirty field.
const bool & getDirty (void) const
 Get the value of the ClusterWindow::_sfDirty field.
Field Set


void setDirty (const bool &value)
 Set the value of the ClusterWindow::_sfDirty field.
Sync


void executeSyncImpl (ClusterWindowBase *pOther, const BitVector &whichField)
Sync


void executeSyncImpl (WindowBase *pOther, const BitVector &whichField)
Sync


void executeSyncImpl (AttachmentContainer *pOther, const BitVector &whichField)
Sync


void executeSyncImpl (FieldContainer *pOther, const BitVector &whichField)
GL setup handling


virtual void setupGL (void)
MT Construction


void onCreate (const FieldContainer *source=NULL)
void onCreateAspect (const FieldContainer *aspect0, const FieldContainer *source=NULL)
Field Get


SFUInt32getSFGlObjectEventCounter (void)
 Get the Window::_sfGlObjectEventCounter field.
MFUInt32getMFGlObjectLastRefresh (void)
 Get the Window::_mfGlObjectLastRefresh field.
MFUInt32getMFGlObjectLastReinitialize (void)
 Get the Window::_mfGlObjectLastReinitialize field.
UInt32getGlObjectEventCounter (void)
 Get the value of the Window::_sfGlObjectEventCounter field.
const UInt32getGlObjectEventCounter (void) const
 Get the value of the Window::_sfGlObjectEventCounter field.
UInt32getGlObjectLastRefresh (UInt32 index)
 Get the value of the index element the Window::_mfGlObjectLastRefresh field.
MFUInt32getGlObjectLastRefresh (void)
 Get the Window::_mfGlObjectLastRefresh field.
const MFUInt32getGlObjectLastRefresh (void) const
 Get the Window::_mfGlObjectLastRefresh field.
UInt32getGlObjectLastReinitialize (UInt32 index)
 Get the value of the index element the Window::_mfGlObjectLastReinitialize field.
MFUInt32getGlObjectLastReinitialize (void)
 Get the Window::_mfGlObjectLastReinitialize field.
const MFUInt32getGlObjectLastReinitialize (void) const
 Get the Window::_mfGlObjectLastReinitialize field.
Field Set


void setGlObjectEventCounter (const UInt32 &value)
 Set the value of the Window::_sfGlObjectEventCounter field.
Pointer


AttachmentContainerPtr getPtr (void)
MT Edit


template<class FieldTypeT>
void beginEditX (const BitVector &whichField, FieldTypeT &field)
template<class FieldTypeT>
void endEditX (const BitVector &whichField, FieldTypeT &field)

Static Protected Member Functions

Create Fieldcontainer


template<class ObjectPtrT>
static void newPtr (ObjectPtrT &result, const typename ObjectPtrT::StoredObjectType *prototypeP)
template<class ObjectPtrT>
static void newPtr (ObjectPtrT &result)

Protected Attributes

Fields


SFUInt32 _sfHServers
SFUInt32 _sfVServers
SFBool _sfManageClientViewports
SFInt32 _sfXOverlap
SFInt32 _sfYOverlap
unsynced thread variables


bool _firstFrame
StatCollector_statistics
Fields


MFString _mfServers
SFString _sfConnectionType
SFString _sfConnectionInterface
SFString _sfConnectionDestination
SFString _sfConnectionParams
SFUInt32 _sfServicePort
SFString _sfServiceAddress
SFString _sfServiceInterface
SFWindowPtr _sfClientWindow
SFUInt32 _sfInterleave
SFUInt32 _sfFrameCount
SFImageComposerPtr _sfComposer
MFString _mfAutostart
MFDisplayCalibrationPtr _mfCalibration
MFDisplayFilterForegroundPtr _mfFilter
SFBool _sfDirty
Fields


SFUInt16 _sfWidth
SFUInt16 _sfHeight
MFViewportPtr _mfPort
SFBool _sfResizePending
SFUInt32 _sfGlObjectEventCounter
MFUInt32 _mfGlObjectLastRefresh
MFUInt32 _mfGlObjectLastReinitialize
Fields


SFAttachmentMap _attachmentMap
Member


UInt32 _shares

Private Types

typedef ClusterWindow Inherited

Private Member Functions

void operator= (const MultiDisplayWindowBase &source)

Static Private Attributes

static FieldDescription_desc []
 MultiDisplayWindow description.
static FieldContainerType _type

Friends

class FieldContainer
GL object handling helper class


class GLObject


Detailed Description

Definition at line 85 of file OSGMultiDisplayWindowBase.h.


Member Typedef Documentation

Reimplemented from osg::ClusterWindow.

Reimplemented in osg::MultiDisplayWindow.

Definition at line 89 of file OSGMultiDisplayWindowBase.h.

Reimplemented from osg::ClusterWindowBase.

Definition at line 94 of file OSGMultiDisplayWindowBase.h.

typedef bool(* osg::ClusterWindow::connectioncbfp)(std::string server, Real32 progress) [inherited]

Definition at line 96 of file OSGWindow.h.

Definition at line 99 of file OSGWindow.h.

typedef void(* osg::Window::GLExtensionFunction)(void) [inherited]

typedef std::map< GLenum, Vec2f > osg::Window::ConstHash [protected, inherited]

Definition at line 331 of file OSGWindow.h.


Member Enumeration Documentation

anonymous enum

Enumerator:
HServersFieldId 
VServersFieldId 
ManageClientViewportsFieldId 
XOverlapFieldId 
YOverlapFieldId 
NextFieldId 

Definition at line 96 of file OSGMultiDisplayWindowBase.h.

00097     {
00098         HServersFieldId              = Inherited::NextFieldId,
00099         VServersFieldId              = HServersFieldId              + 1,
00100         ManageClientViewportsFieldId = VServersFieldId              + 1,
00101         XOverlapFieldId              = ManageClientViewportsFieldId + 1,
00102         YOverlapFieldId              = XOverlapFieldId              + 1,
00103         NextFieldId                  = YOverlapFieldId              + 1
00104     };

anonymous enum [inherited]

Enumerator:
ServersFieldId 
ConnectionTypeFieldId 
ConnectionInterfaceFieldId 
ConnectionDestinationFieldId 
ConnectionParamsFieldId 
ServicePortFieldId 
ServiceAddressFieldId 
ServiceInterfaceFieldId 
ClientWindowFieldId 
InterleaveFieldId 
FrameCountFieldId 
ComposerFieldId 
AutostartFieldId 
CalibrationFieldId 
FilterFieldId 
DirtyFieldId 
NextFieldId 

Definition at line 107 of file OSGClusterWindowBase.h.

00108     {
00109         ServersFieldId               = Inherited::NextFieldId,
00110         ConnectionTypeFieldId        = ServersFieldId               + 1,
00111         ConnectionInterfaceFieldId   = ConnectionTypeFieldId        + 1,
00112         ConnectionDestinationFieldId = ConnectionInterfaceFieldId   + 1,
00113         ConnectionParamsFieldId      = ConnectionDestinationFieldId + 1,
00114         ServicePortFieldId           = ConnectionParamsFieldId      + 1,
00115         ServiceAddressFieldId        = ServicePortFieldId           + 1,
00116         ServiceInterfaceFieldId      = ServiceAddressFieldId        + 1,
00117         ClientWindowFieldId          = ServiceInterfaceFieldId      + 1,
00118         InterleaveFieldId            = ClientWindowFieldId          + 1,
00119         FrameCountFieldId            = InterleaveFieldId            + 1,
00120         ComposerFieldId              = FrameCountFieldId            + 1,
00121         AutostartFieldId             = ComposerFieldId              + 1,
00122         CalibrationFieldId           = AutostartFieldId             + 1,
00123         FilterFieldId                = CalibrationFieldId           + 1,
00124         DirtyFieldId                 = FilterFieldId                + 1,
00125         NextFieldId                  = DirtyFieldId                 + 1
00126     };

enum osg::Window::GLObjectStatusE [inherited]

Enumeration values for the status of the GL objects. This is primarily used to signal the object's callback functions what to do. See OpenGL Objects & Extension Handling for a description.

Enumerator:
notused  Object is not used at all right now.
initialize  The object is being initialized for the first time.
reinitialize  The object is being re-initialized, i.e. it has changed significantly.
initialized  The object is initialized and valid.
needrefresh  The object is initialized but needs a refresh.
destroy  The object is to be destroyed, i.e. removed from the current OpenGL context.
finaldestroy  The object has been removed from all OpenGL contexts and used ressources but be freed now.

Definition at line 78 of file OSGWindow.h.

00079     {
00080         notused      = 1, 
00081         initialize, 
00082         reinitialize, 
00083         initialized,
00084         needrefresh, 
00085         destroy, 
00086         finaldestroy 
00087     };

anonymous enum [inherited]

Enumerator:
invalidExtensionID 
invalidFunctionID 

Definition at line 89 of file OSGWindow.h.

00089 { invalidExtensionID = 0x7fffffff, invalidFunctionID = 0x7fffffff };

anonymous enum [inherited]

Enumerator:
statusShift 
statusMask 

Definition at line 92 of file OSGWindow.h.

00092 { statusShift = 3, statusMask = 7 }; 

anonymous enum [inherited]

Enumerator:
WidthFieldId 
HeightFieldId 
PortFieldId 
ResizePendingFieldId 
GlObjectEventCounterFieldId 
GlObjectLastRefreshFieldId 
GlObjectLastReinitializeFieldId 
NextFieldId 

Definition at line 98 of file OSGWindowBase.h.

00099     {
00100         WidthFieldId                    = Inherited::NextFieldId,
00101         HeightFieldId                   = WidthFieldId                    + 1,
00102         PortFieldId                     = HeightFieldId                   + 1,
00103         ResizePendingFieldId            = PortFieldId                     + 1,
00104         GlObjectEventCounterFieldId     = ResizePendingFieldId            + 1,
00105         GlObjectLastRefreshFieldId      = GlObjectEventCounterFieldId     + 1,
00106         GlObjectLastReinitializeFieldId = GlObjectLastRefreshFieldId      + 1,
00107         NextFieldId                     = GlObjectLastReinitializeFieldId + 1
00108     };

anonymous enum [inherited]

Enumerator:
AttachmentsFieldId 
NextFieldId 

Definition at line 78 of file OSGAttachmentContainerImpl.h.

anonymous enum [inherited]

Enumerator:
NextFieldId 

Definition at line 73 of file OSGFieldContainerImpl.h.

00073 { NextFieldId = 1 };


Constructor & Destructor Documentation

MultiDisplayWindowBase::MultiDisplayWindowBase ( void   )  [protected]

Definition at line 208 of file OSGMultiDisplayWindowBase.cpp.

00208                                                    :
00209     _sfHServers               (), 
00210     _sfVServers               (), 
00211     _sfManageClientViewports  (bool(true)), 
00212     _sfXOverlap               (Int32(0)), 
00213     _sfYOverlap               (Int32(0)), 
00214     Inherited() 
00215 {
00216 }

MultiDisplayWindowBase::MultiDisplayWindowBase ( const MultiDisplayWindowBase source  )  [protected]

Definition at line 222 of file OSGMultiDisplayWindowBase.cpp.

00222                                                                                    :
00223     _sfHServers               (source._sfHServers               ), 
00224     _sfVServers               (source._sfVServers               ), 
00225     _sfManageClientViewports  (source._sfManageClientViewports  ), 
00226     _sfXOverlap               (source._sfXOverlap               ), 
00227     _sfYOverlap               (source._sfYOverlap               ), 
00228     Inherited                 (source)
00229 {
00230 }

MultiDisplayWindowBase::~MultiDisplayWindowBase ( void   )  [protected, virtual]

Definition at line 234 of file OSGMultiDisplayWindowBase.cpp.

00235 {
00236 }


Member Function Documentation

osg::FieldContainerType & osg::MultiDisplayWindowBase::getClassType ( void   )  [inline, static]

Reimplemented from osg::ClusterWindowBase.

Definition at line 58 of file OSGMultiDisplayWindowBase.inl.

References _type.

Referenced by create().

00059 {
00060     return _type; 
00061 } 

osg::UInt32 osg::MultiDisplayWindowBase::getClassTypeId ( void   )  [inline, static]

Reimplemented from osg::ClusterWindowBase.

Definition at line 65 of file OSGMultiDisplayWindowBase.inl.

References _type, and osg::TypeBase::getId().

00066 {
00067     return _type.getId(); 
00068 } 

FieldContainerType & MultiDisplayWindowBase::getType ( void   )  [virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 150 of file OSGMultiDisplayWindowBase.cpp.

References _type.

00151 {
00152     return _type; 
00153 } 

const FieldContainerType & MultiDisplayWindowBase::getType ( void   )  const [virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 155 of file OSGMultiDisplayWindowBase.cpp.

References _type.

00156 {
00157     return _type;
00158 } 

UInt32 MultiDisplayWindowBase::getContainerSize ( void   )  const [virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 170 of file OSGMultiDisplayWindowBase.cpp.

00171 { 
00172     return sizeof(MultiDisplayWindow); 
00173 }

SFUInt32 * osg::MultiDisplayWindowBase::getSFHServers ( void   )  [inline]

Definition at line 101 of file OSGMultiDisplayWindowBase.inl.

References _sfHServers.

00102 {
00103     return &_sfHServers;
00104 }

SFUInt32 * osg::MultiDisplayWindowBase::getSFVServers ( void   )  [inline]

Definition at line 108 of file OSGMultiDisplayWindowBase.inl.

References _sfVServers.

00109 {
00110     return &_sfVServers;
00111 }

SFBool * osg::MultiDisplayWindowBase::getSFManageClientViewports ( void   )  [inline]

Definition at line 115 of file OSGMultiDisplayWindowBase.inl.

References _sfManageClientViewports.

00116 {
00117     return &_sfManageClientViewports;
00118 }

SFInt32 * osg::MultiDisplayWindowBase::getSFXOverlap ( void   )  [inline]

Definition at line 122 of file OSGMultiDisplayWindowBase.inl.

References _sfXOverlap.

00123 {
00124     return &_sfXOverlap;
00125 }

SFInt32 * osg::MultiDisplayWindowBase::getSFYOverlap ( void   )  [inline]

Definition at line 129 of file OSGMultiDisplayWindowBase.inl.

References _sfYOverlap.

00130 {
00131     return &_sfYOverlap;
00132 }

UInt32 & osg::MultiDisplayWindowBase::getHServers ( void   )  [inline]

const UInt32 & osg::MultiDisplayWindowBase::getHServers ( void   )  const [inline]

Definition at line 144 of file OSGMultiDisplayWindowBase.inl.

References _sfHServers, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00145 {
00146     return _sfHServers.getValue();
00147 }

UInt32 & osg::MultiDisplayWindowBase::getVServers ( void   )  [inline]

const UInt32 & osg::MultiDisplayWindowBase::getVServers ( void   )  const [inline]

Definition at line 165 of file OSGMultiDisplayWindowBase.inl.

References _sfVServers, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00166 {
00167     return _sfVServers.getValue();
00168 }

bool & osg::MultiDisplayWindowBase::getManageClientViewports ( void   )  [inline]

const bool & osg::MultiDisplayWindowBase::getManageClientViewports ( void   )  const [inline]

Definition at line 186 of file OSGMultiDisplayWindowBase.inl.

References _sfManageClientViewports, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00187 {
00188     return _sfManageClientViewports.getValue();
00189 }

Int32 & osg::MultiDisplayWindowBase::getXOverlap ( void   )  [inline]

Definition at line 200 of file OSGMultiDisplayWindowBase.inl.

References _sfXOverlap, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

Referenced by osg::MultiDisplayWindow::serverRender().

00201 {
00202     return _sfXOverlap.getValue();
00203 }

const Int32 & osg::MultiDisplayWindowBase::getXOverlap ( void   )  const [inline]

Definition at line 207 of file OSGMultiDisplayWindowBase.inl.

References _sfXOverlap, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00208 {
00209     return _sfXOverlap.getValue();
00210 }

Int32 & osg::MultiDisplayWindowBase::getYOverlap ( void   )  [inline]

Definition at line 221 of file OSGMultiDisplayWindowBase.inl.

References _sfYOverlap, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

Referenced by osg::MultiDisplayWindow::serverRender().

00222 {
00223     return _sfYOverlap.getValue();
00224 }

const Int32 & osg::MultiDisplayWindowBase::getYOverlap ( void   )  const [inline]

Definition at line 228 of file OSGMultiDisplayWindowBase.inl.

References _sfYOverlap, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00229 {
00230     return _sfYOverlap.getValue();
00231 }

void osg::MultiDisplayWindowBase::setHServers ( const UInt32 value  )  [inline]

Definition at line 151 of file OSGMultiDisplayWindowBase.inl.

References _sfHServers, and osg::SField< FieldTypeT, fieldNameSpace >::setValue().

Referenced by osg::MultiDisplayWindow::serverRender().

00152 {
00153     _sfHServers.setValue(value);
00154 }

void osg::MultiDisplayWindowBase::setVServers ( const UInt32 value  )  [inline]

Definition at line 172 of file OSGMultiDisplayWindowBase.inl.

References _sfVServers, and osg::SField< FieldTypeT, fieldNameSpace >::setValue().

Referenced by osg::MultiDisplayWindow::serverRender().

00173 {
00174     _sfVServers.setValue(value);
00175 }

void osg::MultiDisplayWindowBase::setManageClientViewports ( const bool &  value  )  [inline]

void osg::MultiDisplayWindowBase::setXOverlap ( const Int32 value  )  [inline]

Definition at line 214 of file OSGMultiDisplayWindowBase.inl.

References _sfXOverlap, and osg::SField< FieldTypeT, fieldNameSpace >::setValue().

00215 {
00216     _sfXOverlap.setValue(value);
00217 }

void osg::MultiDisplayWindowBase::setYOverlap ( const Int32 value  )  [inline]

Definition at line 235 of file OSGMultiDisplayWindowBase.inl.

References _sfYOverlap, and osg::SField< FieldTypeT, fieldNameSpace >::setValue().

00236 {
00237     _sfYOverlap.setValue(value);
00238 }

UInt32 MultiDisplayWindowBase::getBinSize ( const BitVector whichField  )  [virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 240 of file OSGMultiDisplayWindowBase.cpp.

References _sfHServers, _sfManageClientViewports, _sfVServers, _sfXOverlap, _sfYOverlap, osg::SField< FieldTypeT, fieldNameSpace >::getBinSize(), osg::ClusterWindowBase::getBinSize(), HServersFieldMask, ManageClientViewportsFieldMask, osg::FieldBits::NoField, VServersFieldMask, XOverlapFieldMask, and YOverlapFieldMask.

00241 {
00242     UInt32 returnValue = Inherited::getBinSize(whichField);
00243 
00244     if(FieldBits::NoField != (HServersFieldMask & whichField))
00245     {
00246         returnValue += _sfHServers.getBinSize();
00247     }
00248 
00249     if(FieldBits::NoField != (VServersFieldMask & whichField))
00250     {
00251         returnValue += _sfVServers.getBinSize();
00252     }
00253 
00254     if(FieldBits::NoField != (ManageClientViewportsFieldMask & whichField))
00255     {
00256         returnValue += _sfManageClientViewports.getBinSize();
00257     }
00258 
00259     if(FieldBits::NoField != (XOverlapFieldMask & whichField))
00260     {
00261         returnValue += _sfXOverlap.getBinSize();
00262     }
00263 
00264     if(FieldBits::NoField != (YOverlapFieldMask & whichField))
00265     {
00266         returnValue += _sfYOverlap.getBinSize();
00267     }
00268 
00269 
00270     return returnValue;
00271 }

void MultiDisplayWindowBase::copyToBin ( BinaryDataHandler pMem,
const BitVector whichField 
) [virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 273 of file OSGMultiDisplayWindowBase.cpp.

References _sfHServers, _sfManageClientViewports, _sfVServers, _sfXOverlap, _sfYOverlap, osg::SField< FieldTypeT, fieldNameSpace >::copyToBin(), osg::ClusterWindowBase::copyToBin(), HServersFieldMask, ManageClientViewportsFieldMask, osg::FieldBits::NoField, VServersFieldMask, XOverlapFieldMask, and YOverlapFieldMask.

00275 {
00276     Inherited::copyToBin(pMem, whichField);
00277 
00278     if(FieldBits::NoField != (HServersFieldMask & whichField))
00279     {
00280         _sfHServers.copyToBin(pMem);
00281     }
00282 
00283     if(FieldBits::NoField != (VServersFieldMask & whichField))
00284     {
00285         _sfVServers.copyToBin(pMem);
00286     }
00287 
00288     if(FieldBits::NoField != (ManageClientViewportsFieldMask & whichField))
00289     {
00290         _sfManageClientViewports.copyToBin(pMem);
00291     }
00292 
00293     if(FieldBits::NoField != (XOverlapFieldMask & whichField))
00294     {
00295         _sfXOverlap.copyToBin(pMem);
00296     }
00297 
00298     if(FieldBits::NoField != (YOverlapFieldMask & whichField))
00299     {
00300         _sfYOverlap.copyToBin(pMem);
00301     }
00302 
00303 
00304 }

void MultiDisplayWindowBase::copyFromBin ( BinaryDataHandler pMem,
const BitVector whichField 
) [virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 306 of file OSGMultiDisplayWindowBase.cpp.

References _sfHServers, _sfManageClientViewports, _sfVServers, _sfXOverlap, _sfYOverlap, osg::SField< FieldTypeT, fieldNameSpace >::copyFromBin(), osg::ClusterWindowBase::copyFromBin(), HServersFieldMask, ManageClientViewportsFieldMask, osg::FieldBits::NoField, VServersFieldMask, XOverlapFieldMask, and YOverlapFieldMask.

00308 {
00309     Inherited::copyFromBin(pMem, whichField);
00310 
00311     if(FieldBits::NoField != (HServersFieldMask & whichField))
00312     {
00313         _sfHServers.copyFromBin(pMem);
00314     }
00315 
00316     if(FieldBits::NoField != (VServersFieldMask & whichField))
00317     {
00318         _sfVServers.copyFromBin(pMem);
00319     }
00320 
00321     if(FieldBits::NoField != (ManageClientViewportsFieldMask & whichField))
00322     {
00323         _sfManageClientViewports.copyFromBin(pMem);
00324     }
00325 
00326     if(FieldBits::NoField != (XOverlapFieldMask & whichField))
00327     {
00328         _sfXOverlap.copyFromBin(pMem);
00329     }
00330 
00331     if(FieldBits::NoField != (YOverlapFieldMask & whichField))
00332     {
00333         _sfYOverlap.copyFromBin(pMem);
00334     }
00335 
00336 
00337 }

MultiDisplayWindowPtr osg::MultiDisplayWindowBase::create ( void   )  [inline, static]

Reimplemented from osg::ClusterWindowBase.

Definition at line 72 of file OSGMultiDisplayWindowBase.inl.

References osg::AttachmentContainerPtr::dcast(), getClassType(), osg::NullFC, and shallowCopy().

00073 {
00074     MultiDisplayWindowPtr fc; 
00075 
00076     if(getClassType().getPrototype() != OSG::NullFC) 
00077     {
00078         fc = MultiDisplayWindowPtr::dcast(
00079             getClassType().getPrototype()-> shallowCopy()); 
00080     }
00081     
00082     return fc; 
00083 }

MultiDisplayWindowPtr osg::MultiDisplayWindowBase::createEmpty ( void   )  [inline, static]

Reimplemented from osg::ClusterWindowBase.

Definition at line 87 of file OSGMultiDisplayWindowBase.inl.

References osg::FieldContainer::newPtr().

00088 { 
00089     MultiDisplayWindowPtr returnValue; 
00090     
00091     newPtr(returnValue); 
00092 
00093     return returnValue; 
00094 }

FieldContainerPtr MultiDisplayWindowBase::shallowCopy ( void   )  const [virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 161 of file OSGMultiDisplayWindowBase.cpp.

References osg::FieldContainer::newPtr().

Referenced by osg::MultiDisplayWindow::clientInit(), and create().

00162 { 
00163     MultiDisplayWindowPtr returnValue; 
00164 
00165     newPtr(returnValue, dynamic_cast<const MultiDisplayWindow *>(this)); 
00166 
00167     return returnValue; 
00168 }

void MultiDisplayWindowBase::executeSyncImpl ( MultiDisplayWindowBase pOther,
const BitVector whichField 
) [protected]

void MultiDisplayWindowBase::executeSync ( FieldContainer other,
const BitVector whichField 
) [protected, virtual]

Reimplemented from osg::ClusterWindowBase.

Definition at line 177 of file OSGMultiDisplayWindowBase.cpp.

References executeSyncImpl().

00179 {
00180     this->executeSyncImpl((MultiDisplayWindowBase *) &other, whichField);
00181 }

void osg::MultiDisplayWindowBase::operator= ( const MultiDisplayWindowBase source  )  [private]

void ClusterWindow::changed ( BitVector  whichField,
UInt32  origin 
) [virtual, inherited]

Reimplemented from osg::Window.

Reimplemented in osg::MultiDisplayWindow, and osg::SortFirstWindow.

Definition at line 89 of file OSGClusterWindow.cpp.

References osg::Window::changed().

Referenced by osg::SortFirstWindow::changed(), and osg::MultiDisplayWindow::changed().

00090 {
00091     Inherited::changed(whichField, origin);
00092 }

void ClusterWindow::dump ( UInt32  uiIndent = 0,
const BitVector  bvFlags = 0 
) const [virtual, inherited]

Reimplemented from osg::Window.

Reimplemented in osg::MultiDisplayWindow, and osg::SortFirstWindow.

Definition at line 96 of file OSGClusterWindow.cpp.

References SLOG.

00098 {
00099     SLOG << "Dump ClusterWindow NI" << std::endl;
00100 }

virtual void(* osg::ClusterWindow::getFunctionByName ( const Char8 s  )  [virtual, inherited]

Reimplemented from osg::Window.

void ClusterWindow::activate ( void   )  [virtual, inherited]

Implements osg::Window.

Definition at line 453 of file OSGClusterWindow.cpp.

Referenced by osg::ClusterWindow::render().

00454 {
00455 }

void ClusterWindow::deactivate ( void   )  [virtual, inherited]

Implements osg::Window.

Definition at line 457 of file OSGClusterWindow.cpp.

00458 {
00459 }

void ClusterWindow::swap ( void   )  [virtual, inherited]

Implements osg::Window.

Definition at line 461 of file OSGClusterWindow.cpp.

References osg::ClusterWindow::clientSwap(), and osg::ClusterWindow::getNetwork().

Referenced by osg::ClusterWindow::render().

00462 {
00463     if(getNetwork()->getMainConnection() && getNetwork()->getAspect())
00464     {
00465         clientSwap();
00466     }
00467 }

void ClusterWindow::init ( void   )  [virtual, inherited]

init cluster window. connect to all servers

Implements osg::Window.

Definition at line 110 of file OSGClusterWindow.cpp.

References osg::ClusterWindow::_connectionFP, osg::ClusterWindowBase::_sfServiceAddress, osg::ClusterWindow::_statistics, osg::SocketAddress::BROADCAST, osg::BinaryMessage::clear(), osg::DgramSocket::close(), osg::Connection::connectPoint(), osg::ConnectionFactory::createGroup(), osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::MField< FieldTypeT, fieldNameSpace >::find(), osg::BinaryDataHandler::flush(), osg::ClusterWindowBase::getAutostart(), osg::ClusterWindowBase::getConnectionDestination(), osg::ClusterWindowBase::getConnectionInterface(), osg::ClusterWindowBase::getConnectionParams(), osg::ClusterWindowBase::getConnectionType(), osg::SocketAddress::getHost(), osg::ClusterWindow::getNetwork(), osg::ClusterWindowBase::getServers(), osg::ClusterWindowBase::getServiceInterface(), osg::ClusterWindowBase::getServicePort(), osg::BinaryMessage::getString(), osg::BinaryDataHandler::getValue(), osg::SField< FieldTypeT, fieldNameSpace >::getValue(), osg::DgramSocket::open(), osg::BinaryMessage::putString(), osg::BinaryDataHandler::putValue(), osg::DgramSocket::recvFrom(), osg::GroupConnection::resetSelection(), osg::Connection::selectChannel(), osg::DgramSocket::sendTo(), osg::ClusterNetwork::setAspect(), osg::ClusterWindowBase::setConnectionType(), osg::GroupConnection::setDestination(), osg::Connection::setInterface(), osg::ClusterNetwork::setMainConnection(), osg::DgramSocket::setMCastInterface(), osg::BinaryDataHandler::setNetworkOrder(), osg::Connection::setParams(), osg::RemoteAspect::setStatistics(), osg::DgramSocket::setTTL(), SFATAL, SINFO, osg::MField< FieldTypeT, fieldNameSpace >::size(), osg::GroupConnection::subSelection(), SWARNING, osg::ConnectionFactory::the(), and osg::Socket::waitReadable().

Referenced by osg::ClusterWindow::initAsync().

00111 {
00112     GroupConnection    *connection;
00113     RemoteAspect       *remoteAspect;
00114     int                 c,i,id;
00115     MFString::iterator  s;
00116     Connection::Channel channel;
00117     bool                directConnect=false;
00118 
00119     if(getNetwork()->getMainConnection())
00120     {
00121         SWARNING << "init called twice" << std::endl;
00122         return;
00123     }
00124     // create connection
00125     if(getConnectionType().empty())
00126     {
00127         setConnectionType("StreamSock");
00128     }
00129 
00130     connection = ConnectionFactory::the().createGroup(getConnectionType());
00131     if(connection == NULL)
00132     {
00133         SFATAL << "Unknown connection type " 
00134                << getConnectionType() 
00135                << std::endl;
00136         return;
00137     }
00138 
00139     connection->setDestination(getConnectionDestination());
00140     connection->setInterface(getConnectionInterface());
00141     connection->setParams(getConnectionParams());
00142 
00143     getNetwork()->setMainConnection(connection);
00144     // create remote aspect
00145     remoteAspect = new RemoteAspect();
00146     getNetwork()->setAspect(remoteAspect);
00147     if(_statistics)
00148         remoteAspect->setStatistics(_statistics);
00149 
00150     // autostart servers
00151     std::string server;
00152     std::string autostart;
00153     std::string env;
00154 
00155     Real32 progress = 0.0f;
00156     Real32 progressStep = 1.0f / Real32(getServers().size());
00157 
00158     if(getAutostart().size())
00159     {
00160         progressStep /= 2;
00161         std::vector<FILE*>           pipes;
00162 
00163         for(id=0 ; id<getServers().size() ; ++id)
00164         {
00165             std::ostringstream command;
00166 
00167             server    = getServers()[id];
00168             int pos=server.find(":");
00169             if(pos>=0)
00170                 server.erase(pos);
00171 
00172             autostart = getAutostart()[id % getAutostart().size()];
00173 
00174             for(c = 0 ; c < autostart.length() ; ++c)
00175             {
00176                 if(autostart[c] == '%' && c+1 < autostart.length())  
00177                     switch(autostart[++c])
00178                     {
00179                         case 's': 
00180                             command << server;
00181                             break;
00182                         case 'n': 
00183                             command << getServers()[id];
00184                             break;
00185                         case 'i':
00186                             command << id;
00187                             break;
00188                         case '{':
00189                             env = "" ;
00190                             while(++c < autostart.length() &&
00191                                   autostart[c] != '}')
00192                                 env += autostart[c];
00193                             if(getenv(env.c_str()))
00194                                 command << getenv(env.c_str());
00195                             break;
00196                         case '%':
00197                             command << '%';
00198                             break;
00199                         default:
00200                             command << '%' << autostart[c];
00201                     }
00202                 else
00203                     command << autostart[c];
00204             } 
00205             SINFO << command.str() << std::endl;
00206 #ifdef WIN32
00207             FILE *pipe = _popen(command.str().c_str(),"r");
00208 #else
00209             FILE *pipe = popen(command.str().c_str(),"r");
00210 #endif
00211             if(!pipe)
00212                 SFATAL << "Error starting: " << command << std::endl;
00213             pipes.push_back(pipe);
00214         }
00215         for(id=0 ; id<getServers().size() ; ++id)
00216         {
00217             if(pipes[id]) 
00218             {
00219                 // update progress
00220                 if(_connectionFP != NULL)
00221                 {
00222                     std::string message;
00223                     message += "Starting:" + getServers()[id]; 
00224                     if(!_connectionFP(message, progress))
00225                     {
00226                         // abort, cleanup remaining pipes
00227                         for( ; id<getServers().size() ; ++id)
00228                         {
00229                             if(pipes[id]) 
00230                             {
00231 #ifdef WIN32
00232                                 _pclose(pipes[id]);
00233 #else
00234                                 pclose(pipes[id]);
00235 #endif
00236                             }
00237                             throw AsyncCancel();
00238                         }
00239                     }
00240                 }
00241                 SINFO << "Waiting for " << getServers()[id] << " to start." << std::endl;
00242                 char result;
00243                 std::string line="";
00244                 while((result=fgetc(pipes[id])) != EOF)
00245                 {
00246                     line += result;
00247                     if(result == '\n')
00248                     {
00249                         SINFO << line;
00250                         line = "";
00251                     }
00252                 }
00253                 if(!line.empty())
00254                     SINFO << line << std::endl;
00255 #ifdef WIN32
00256                 _pclose(pipes[id]);
00257 #else
00258                 pclose(pipes[id]);
00259 #endif
00260                 SINFO << getServers()[id] << " started." << std::endl;
00261                 progress += progressStep;
00262             }
00263         }
00264     }
00265 
00266     // connect to all servers
00267     for(s =getServers().begin();
00268         s!=getServers().end();
00269         s++)
00270     {
00271         DgramSocket      serviceSock;
00272         BinaryMessage    msg;
00273         std::string      respServer;
00274         std::string      respAddress;
00275         bool             retry=true;
00276 
00277         if(strstr((*s).c_str(),":"))
00278             directConnect = true;
00279         else
00280             directConnect = false;
00281 
00282         SINFO << "Connect to " << (*s) << std::endl;
00283         serviceSock.open();
00284         serviceSock.setTTL(8);
00285 
00286         // set interface
00287         if(!getServiceInterface().empty())
00288         {
00289             serviceSock.setMCastInterface(
00290                 SocketAddress(getServiceInterface().c_str()));
00291         }
00292 
00293         while(retry)
00294         {
00295             try
00296             {
00297                 // update progress
00298                 if(_connectionFP != NULL)
00299                 {
00300                     std::string message;
00301                     message += "Connecting:" + *s; 
00302                     if(!_connectionFP(message, progress))
00303                     {
00304                         serviceSock.close();
00305                         throw AsyncCancel();
00306                     }
00307                 }
00308 
00309                 // try to connect with the servers name
00310                 try 
00311                 {
00312                     if(directConnect)
00313                     {
00314                         channel = connection->connectPoint(*s,0.5);
00315                         if(channel >= 0) {
00316                             retry=false;
00317                             SINFO << "Connected with address:" << *s << std::endl;
00318                             break;
00319                         }
00320                     }
00321                 }
00322                 catch(...)
00323                 {
00324                 }
00325                 // find server
00326                 msg.clear();
00327                 msg.putString(*s);
00328                 msg.putString(getConnectionType());
00329                     
00330                 if(_sfServiceAddress.getValue().size() != 0)
00331                 {
00332                     SINFO << "send request to:" << 
00333                         _sfServiceAddress.getValue()
00334                           << std::endl;
00335                     serviceSock.sendTo(
00336                         msg,SocketAddress(
00337                             _sfServiceAddress.getValue().c_str(),
00338                             getServicePort()));
00339                 }
00340                 SINFO << "send request to:" 
00341                       << SocketAddress(SocketAddress::BROADCAST,
00342                                        getServicePort()).getHost().c_str()
00343                       << std::endl;
00344                 serviceSock.sendTo(
00345                     msg,SocketAddress(SocketAddress::BROADCAST,
00346                                       getServicePort()));
00347                 if(serviceSock.waitReadable(0.1))
00348                 {
00349                     SocketAddress from;
00350                     serviceSock.recvFrom(msg,from);
00351                     msg.getString(respServer);
00352                     msg.getString(respAddress);
00353                     if(respServer == *s)
00354                     {
00355                         GroupSockConnection *pointSock =
00356                             dynamic_cast<GroupSockConnection*> (connection);
00357                         if(pointSock)
00358                         {
00359                             /* for all socket connections ignore the
00360                                incomming host and use the host from
00361                                the last response. */
00362                             char port[16];
00363                             if(sscanf(respAddress.c_str(),
00364                                       "%*[^:]:%15s",port) == 1)
00365                                 respAddress = from.getHost() + ":" + port;
00366                         }
00367                         SINFO << "Found at address " << respAddress << std::endl;
00368                         // connect to server
00369                         channel = connection->connectPoint(respAddress);
00370                         if(channel >= 0)
00371                             retry=false;
00372                     }
00373                 }
00374             }
00375             catch(AsyncCancel &)
00376             {
00377                 throw;
00378             }
00379             catch(OSG_STDEXCEPTION_NAMESPACE::exception &e)
00380             {
00381                 SINFO << e.what() << std::endl;
00382             }
00383         }
00384         serviceSock.close();
00385         progress += progressStep;
00386     }
00387     // determine byte order
00388     UInt8 serverLittleEndian;
00389     UInt8 forceNetworkOrder=false;
00390 #if BYTE_ORDER == LITTLE_ENDIAN
00391     UInt8 littleEndian = true;
00392 #else
00393     UInt8 littleEndian = false;
00394 #endif
00395     for(UInt32 i=0;i<getServers().size();++i)
00396     {
00397         channel = connection->selectChannel();
00398         connection->subSelection(channel);
00399         connection->getValue(serverLittleEndian);
00400         if(serverLittleEndian != littleEndian)
00401         {
00402             forceNetworkOrder=true;
00403         }
00404     }
00405     connection->resetSelection();
00406     // tell the servers the encoding mode
00407     connection->putValue(forceNetworkOrder);
00408     connection->flush();
00409     connection->setNetworkOrder((forceNetworkOrder != 0));
00410     if(forceNetworkOrder)
00411     {
00412         SINFO << "Run clustering in network order mode" << std::endl;
00413     }
00414     // inform connection finished
00415     if(_connectionFP != NULL)
00416         _connectionFP("ok", 1.0);
00417 }

void ClusterWindow::render ( RenderActionBase action = NULL  )  [virtual, inherited]

void ClusterWindow::renderAllViewports ( RenderActionBase action = NULL  )  [virtual, inherited]

Reimplemented from osg::Window.

Definition at line 469 of file OSGClusterWindow.cpp.

References osg::ClusterWindow::clientRender(), and osg::ClusterWindow::getNetwork().

Referenced by osg::ClusterWindow::render().

00470 {
00471     if(getNetwork()->getMainConnection() && getNetwork()->getAspect())
00472     {
00473         clientRender(action);
00474     }
00475 }

void ClusterWindow::frameInit ( void   )  [virtual, inherited]

Reimplemented from osg::Window.

Definition at line 477 of file OSGClusterWindow.cpp.

References osg::ClusterWindow::_firstFrame, osg::beginEditCP(), osg::ChangeList::clearAll(), osg::ClusterWindow::clientInit(), osg::ClusterWindow::clientPreSync(), osg::endEditCP(), osg::ClusterWindowBase::FrameCountFieldMask, osg::ClusterNetwork::getAspect(), osg::PThreadBase::getCurrentChangeList(), osg::ClusterWindowBase::getFrameCount(), osg::ClusterNetwork::getMainConnection(), osg::ClusterWindow::getNetwork(), osg::ChangeList::merge(), osg::RemoteAspect::sendSync(), and osg::ClusterWindowBase::setFrameCount().

Referenced by osg::ClusterWindow::render().

00478 {
00479     ClusterWindowPtr ptr(this);
00480     Connection   *connection  =getNetwork()->getMainConnection();
00481     RemoteAspect *remoteAspect=getNetwork()->getAspect();
00482 
00483     if(remoteAspect && connection)
00484     {
00485         if(_firstFrame)
00486         {
00487             beginEditCP(ptr,ClusterWindow::FrameCountFieldMask);
00488             setFrameCount(0);
00489             endEditCP(ptr,ClusterWindow::FrameCountFieldMask);
00490             // send sync
00491             remoteAspect->sendSync(*connection);
00492             ChangeList cl;
00493             cl.clearAll();
00494             cl.merge(*Thread::getCurrentChangeList());
00495             Thread::getCurrentChangeList()->clearAll();
00496             // init client window
00497             clientInit();
00498             // last chance to modifie before sync
00499             clientPreSync();
00500             // send sync
00501             remoteAspect->sendSync(*connection);
00502             cl.merge(*Thread::getCurrentChangeList());
00503             Thread::getCurrentChangeList()->clearAll();
00504             Thread::getCurrentChangeList()->merge(cl);
00505             _firstFrame=false;
00506         }
00507         else
00508         {
00509             beginEditCP(ptr,ClusterWindow::FrameCountFieldMask);
00510             getFrameCount()++;
00511             endEditCP(ptr,ClusterWindow::FrameCountFieldMask);
00512             clientPreSync();
00513             remoteAspect->sendSync(*connection);
00514         }
00515     }
00516 }

void ClusterWindow::frameExit ( void   )  [virtual, inherited]

Reimplemented from osg::Window.

Definition at line 518 of file OSGClusterWindow.cpp.

Referenced by osg::ClusterWindow::render().

00519 {
00520 }

bool ClusterWindow::initAsync ( connectioncbfp  fp  )  [inherited]

Definition at line 419 of file OSGClusterWindow.cpp.

References osg::ClusterWindow::_connectionFP, and osg::ClusterWindow::init().

00420 {
00421     bool result;
00422     connectioncbfp saveFP = _connectionFP;
00423 
00424     _connectionFP = fp;
00425     try 
00426     {
00427         init();
00428         result = true;
00429     }
00430     catch(AsyncCancel &e)
00431     {
00432         result = false;
00433     }
00434     _connectionFP = saveFP;
00435 
00436     return result;
00437 }

void ClusterWindow::setConnectionCB ( connectioncbfp  fp  )  [inherited]

Definition at line 439 of file OSGClusterWindow.cpp.

References osg::ClusterWindow::_connectionFP.

00440 {
00441     _connectionFP = fp;
00442 }

ClusterNetwork * ClusterWindow::getNetwork ( void   )  [inherited]

StatCollector * osg::ClusterWindow::getStatistics ( void   )  const [inline, inherited]

Definition at line 46 of file OSGClusterWindow.inl.

References osg::ClusterWindow::_statistics.

00047 {
00048     return _statistics;
00049 }

void ClusterWindow::setStatistics ( StatCollector stat  )  [inherited]

Definition at line 525 of file OSGClusterWindow.cpp.

References osg::ClusterWindow::_statistics, osg::ClusterNetwork::getAspect(), osg::ClusterWindow::getNetwork(), and osg::RemoteAspect::setStatistics().

00526 {
00527     _statistics = statistics;
00528     if(getNetwork()->getAspect())
00529         getNetwork()->getAspect()->setStatistics(statistics);
00530 }

bool ClusterWindow::loadCalibration ( std::istream &  in  )  [inherited]

load color and projection calibration file from xml

Definition at line 537 of file OSGClusterWindow.cpp.

References osg::addRefCP(), osg::beginEditCP(), osg::ClusterWindowBase::CalibrationFieldMask, osg::MField< FieldTypeT, fieldNameSpace >::clear(), osg::DisplayCalibrationBase::create(), osg::endEditCP(), osg::ClusterWindowBase::getCalibration(), osg::MField< FieldTypeT, fieldNameSpace >::push_back(), osg::Color3< ValueTypeT >::setValue(), osg::PointInterface< ValueTypeT, StorageInterfaceT >::setValueFromCString(), and SFATAL.

00538 {
00539     ClusterWindowPtr ptr(this);
00540     DisplayCalibrationPtr calibPtr;
00541     xmlpp::xmlcontextptr ctxptr(new xmlpp::xmlcontext());
00542     xmlpp::xmldocument doc(ctxptr);
00543     xmlpp::xmlnodelist servers;
00544     xmlpp::xmlnodelist colors;
00545     xmlpp::xmlnodelist points;
00546     xmlpp::xmlnodelist rows;
00547     xmlpp::xmlnodelist::const_iterator sI;
00548     xmlpp::xmlnodelist::const_iterator nI;
00549     xmlpp::xmlnodelist::const_iterator cI;
00550     xmlpp::xmlnodelist::const_iterator rI;
00551     xmlpp::xmlnodelist::const_iterator pI;
00552     xmlpp::xmlstring serverTag("server");
00553     xmlpp::xmlstring colorTag("color");
00554     xmlpp::xmlstring rowTag("row");
00555     xmlpp::xmlstring pointTag("point");
00556     Matrix colorMatrix;
00557     Real32 gamma;
00558     xmlpp::xmlnodeptr nP;
00559 
00560     getCalibration().clear();
00561     try
00562     {
00563         doc.load(in,ctxptr);
00564         servers = doc.select_nodes(serverTag);
00565         // loop through servers
00566         for(sI = servers.begin() ; sI != servers.end(); ++sI)
00567         {
00568             // create new calibration structure
00569             calibPtr = DisplayCalibration::create();
00570             beginEditCP(calibPtr);
00571             addRefCP(calibPtr);
00572             beginEditCP(ptr,CalibrationFieldMask);
00573             getCalibration().push_back(calibPtr);
00574             endEditCP(ptr,CalibrationFieldMask);
00575 
00576             // server name
00577             if((*sI)->get_attrmap().count("name"))
00578                 calibPtr->setServer((*sI)->get_attrmap()["name"]);
00579             
00580             // loop over children
00581             for(nI  = (*sI)->get_nodelist().begin();
00582                 nI != (*sI)->get_nodelist().end(); 
00583                 ++nI) 
00584             {
00585                 if((*nI)->get_name() == "colormatrix")
00586                 {
00587                     nP = (*nI);
00588                     do
00589                         nP = nP->get_nodelist().front();
00590                     while (nP->get_nodelist().size() == 1);
00591                     if(nP->get_type() == xmlpp::xml_nt_cdata) 
00592                         calibPtr->getColorMatrix().setValue(nP->get_cdata().c_str());
00593                 }
00594 
00595                 if((*nI)->get_name() == "scaledown")
00596                 {
00597                     nP = (*nI);
00598                     do
00599                         nP = nP->get_nodelist().front();
00600                     while (nP->get_nodelist().size() == 1);
00601                     if(nP->get_type() == xmlpp::xml_nt_cdata) 
00602                         sscanf(nP->get_cdata().c_str(),"%f",&calibPtr->getScaleDown());
00603                 }
00604 
00605                 if((*nI)->get_name() == "gamma")
00606                 {
00607                     nP = (*nI);
00608                     do
00609                         nP = nP->get_nodelist().front();
00610                     while (nP->get_nodelist().size() == 1);
00611                     if(nP->get_type() == xmlpp::xml_nt_cdata) 
00612                         sscanf(nP->get_cdata().c_str(),"%f",&calibPtr->getGamma());
00613                 }
00614 
00615                 if((*nI)->get_name() == "gammaramp")
00616                 {
00617                     colors = (*nI)->select_nodes(colorTag);
00618                     for(cI = colors.begin() ; cI != colors.end(); ++cI)
00619                     {   
00620                         nP = (*cI);
00621                         do
00622                             nP = nP->get_nodelist().front();
00623                         while (nP->get_nodelist().size() == 1);
00624                         if(nP->get_type() == xmlpp::xml_nt_cdata) 
00625                         {
00626                             Color3f col;
00627                             col.setValue(nP->get_cdata().c_str());
00628                             calibPtr->getGammaRamp().push_back(col);
00629                         }
00630                     }
00631                 }
00632                 if((*nI)->get_name() == "grid")
00633                 {
00634                     rows = (*nI)->select_nodes(rowTag);
00635                     calibPtr->getGridHeight() = 0;
00636                     for(rI = rows.begin() ; rI != rows.end(); ++rI)
00637                     {   
00638                         calibPtr->getGridHeight()++;
00639                         calibPtr->getGridWidth() = 0;
00640                         points = (*rI)->select_nodes(pointTag);
00641                         for(pI = points.begin() ; pI != points.end(); ++pI)
00642                         {   
00643                             nP = (*pI);
00644                             do
00645                                 nP = nP->get_nodelist().front();
00646                             while (nP->get_nodelist().size() == 1);
00647                             if(nP->get_type() == xmlpp::xml_nt_cdata) 
00648                             {
00649                                 Vec2f pos;
00650                                 calibPtr->getGridWidth()++;
00651                                 pos.setValueFromCString(nP->get_cdata().c_str());
00652                                 calibPtr->getGrid().push_back(pos);
00653                             }
00654                         }
00655                     }
00656                 }
00657             }
00658             endEditCP(calibPtr);
00659         }
00660     }
00661     catch (xmlpp::xmlerror e)
00662     {
00663         // parser error
00664         xmlpp::xmllocation where( ctxptr->get_location() );
00665         xmlpp::xmlstring errmsg( e.get_strerror() );
00666         SFATAL << "XML error line " << where.get_line() << " "
00667                << "at position " << where.get_pos()
00668                << ": error: " << errmsg.c_str()
00669                << std::endl;
00670         return false;
00671     }
00672     return true;
00673 }

bool ClusterWindow::saveCalibration ( std::ostream &  out  )  [inherited]

save color and projection calibration file to xml

Definition at line 677 of file OSGClusterWindow.cpp.

References osg::ClusterWindowBase::getCalibration(), and osg::MField< FieldTypeT, fieldNameSpace >::size().

00678 {
00679     DisplayCalibrationPtr calibPtr;
00680     UInt32 c;
00681     UInt32 color,row,col,pos;
00682 
00683     out << "<?xml version=\"1.0\"?>\n"
00684         << "<displaycalibration>\n";
00685     for(c=0 ; c<getCalibration().size() ; ++c)
00686     {
00687         calibPtr = getCalibration()[c];
00688         out << "<server name=\"" << calibPtr->getServer() << "\">\n";
00689         out << "<gamma>" << calibPtr->getGamma() << "</gamma>\n";
00690         out << "<scaledown>" << calibPtr->getScaleDown() << "</scaledown>\n";
00691         out << "<colormatrix>\n"
00692             << calibPtr->getColorMatrix()
00693             << "</colormatrix>\n";
00694         out << "<gammaramp>\n";
00695         for(color=0 ; color< calibPtr->getGammaRamp().size() ; ++color)
00696             out << "<color>" 
00697                 << calibPtr->getGammaRamp()[color] 
00698                 << "</color>\n";
00699         out << "</gammaramp>\n";
00700         out << "<grid>\n";
00701         for(row=0 ; row< calibPtr->getGridHeight() ; ++row)
00702         {
00703             out << "<row>\n";
00704             for(col=0 ; col< calibPtr->getGridWidth() ; ++col)
00705             {
00706                 pos = row*calibPtr->getGridHeight()+col;
00707                 out << "<point>";
00708                 if(pos < calibPtr->getGrid().size())
00709                     out << calibPtr->getGrid()[pos][0] << " "
00710                         << calibPtr->getGrid()[pos][1];
00711                 else
00712                     out << col << " " << row;
00713                 out << "</point>\n";
00714             }
00715             out << "</row>\n";
00716         }
00717         out << "</grid>\n";
00718         out << "</server>\n";
00719     }
00720     out << "</displaycalibration>\n";
00721     return true;
00722 }

bool ClusterWindow::loadFilter ( std::istream &  in  )  [inherited]

load display filter calibration file from xml

displayfilter server a colordisplayfilter colormatrix mat gamma size (w,h,d) shadingtable color (r,g,b)*n resolutiondisplayfilter downScale distortiondisplayfilter rows cols positions point (x,y)*n server b ...

Definition at line 744 of file OSGClusterWindow.cpp.

References osg::addRefCP(), osg::beginEditCP(), osg::MField< FieldTypeT, fieldNameSpace >::clear(), osg::DistortionDisplayFilterBase::create(), osg::ResolutionDisplayFilterBase::create(), osg::ColorDisplayFilterBase::create(), osg::DisplayFilterForegroundBase::create(), osg::ClusterWindowBase::DirtyFieldMask, osg::endEditCP(), osg::ClusterWindowBase::FilterFieldMask, osg::ClusterWindowBase::getFilter(), osg::MField< FieldTypeT, fieldNameSpace >::push_back(), osg::ClusterWindowBase::setDirty(), osg::Color3< ValueTypeT >::setValue(), osg::PointInterface< ValueTypeT, StorageInterfaceT >::setValueFromCString(), and SFATAL.

00745 {
00746     ClusterWindowPtr ptr(this);
00747     DisplayFilterForegroundPtr filterFgnd;
00748     ColorDisplayFilterPtr colorFilter;
00749     DistortionDisplayFilterPtr distortionFilter;
00750     ResolutionDisplayFilterPtr resolutionFilter;
00751     xmlpp::xmlcontextptr ctxptr(new xmlpp::xmlcontext());
00752     xmlpp::xmldocument doc(ctxptr);
00753     xmlpp::xmlnodelist servers;
00754     xmlpp::xmlnodelist colors;
00755     xmlpp::xmlnodelist points;
00756     xmlpp::xmlnodelist::const_iterator sI;
00757     xmlpp::xmlnodelist::const_iterator fI;
00758     xmlpp::xmlnodelist::const_iterator nI;
00759     xmlpp::xmlnodelist::const_iterator cI;
00760     xmlpp::xmlnodelist::const_iterator pI;
00761     xmlpp::xmlstring serverTag("server");
00762     xmlpp::xmlstring colorTag("color");
00763     xmlpp::xmlstring pointTag("point");
00764     xmlpp::xmlnodeptr nP;
00765     
00766     beginEditCP(ptr, FilterFieldMask | DirtyFieldMask);
00767         getFilter().clear();
00768         setDirty(true);
00769     endEditCP(ptr, FilterFieldMask | DirtyFieldMask);
00770     
00771     try
00772     {
00773         doc.load(in, ctxptr);
00774         servers = doc.select_nodes(serverTag);
00775         
00776         // loop through servers
00777         for(sI = servers.begin(); sI != servers.end(); ++sI)
00778         {
00779             // create new display filter foreground
00780             filterFgnd = DisplayFilterForeground::create();
00781             addRefCP(filterFgnd);
00782             
00783             beginEditCP(ptr, FilterFieldMask);
00784                 getFilter().push_back(filterFgnd);
00785             endEditCP(ptr, FilterFieldMask);
00786             
00787             beginEditCP(filterFgnd);
00788             
00789             // server name
00790             if((*sI)->get_attrmap().count("name"))
00791                 filterFgnd->setServer((*sI)->get_attrmap()["name"]);
00792             
00793             // loop over outer children, i.e. the filters
00794             for(fI  = (*sI)->get_nodelist().begin();
00795                 fI != (*sI)->get_nodelist().end(); ++fI)
00796             {
00797                 if ((*fI)->get_name() == "colordisplayfilter")
00798                 {
00799                     colorFilter = ColorDisplayFilter::create();
00800                     addRefCP(colorFilter);
00801                     
00802                     filterFgnd->getFilter().push_back(colorFilter);
00803                     
00804                     beginEditCP(colorFilter);
00805                     
00806                     // loop over inner children, i.e. the params
00807                     for(nI  = (*fI)->get_nodelist().begin();
00808                         nI != (*fI)->get_nodelist().end(); ++nI) 
00809                     {
00810                         if((*nI)->get_name() == "colormatrix")
00811                         {
00812                             nP = (*nI);
00813                             do
00814                                 nP = nP->get_nodelist().front();
00815                             while (nP->get_nodelist().size() == 1);
00816                             
00817                             if(nP->get_type() == xmlpp::xml_nt_cdata) 
00818                                 colorFilter->getMatrix().setValue(nP->get_cdata().c_str());
00819                         }
00820                         if((*nI)->get_name() == "gamma")
00821                         {
00822                             nP = (*nI);
00823                             do
00824                                 nP = nP->get_nodelist().front();
00825                             while (nP->get_nodelist().size() == 1);
00826                             
00827                             if(nP->get_type() == xmlpp::xml_nt_cdata) 
00828                                 sscanf(nP->get_cdata().c_str(),"%f",
00829                                     &colorFilter->getGamma());
00830                         }
00831                         if((*nI)->get_name() == "size")
00832                         {
00833                             nP = (*nI);
00834                             do
00835                                 nP = nP->get_nodelist().front();
00836                             while (nP->get_nodelist().size() == 1);
00837                             
00838                             if(nP->get_type() == xmlpp::xml_nt_cdata) 
00839                                 sscanf(nP->get_cdata().c_str(),"%d %d %d",
00840                                     &colorFilter->getWidth(),
00841                                     &colorFilter->getHeight(),
00842                                     &colorFilter->getDepth());
00843                         }
00844                         if((*nI)->get_name() == "shadingtable")
00845                         {
00846                             colors = (*nI)->select_nodes(colorTag);
00847                             
00848                             for(cI = colors.begin(); cI != colors.end(); ++cI)
00849                             {
00850                                 nP = (*cI);
00851                                 do
00852                                     nP = nP->get_nodelist().front();
00853                                 while (nP->get_nodelist().size() == 1);
00854                                 
00855                                 if(nP->get_type() == xmlpp::xml_nt_cdata) 
00856                                 {
00857                                     Color3f col;
00858                                     col.setValue(nP->get_cdata().c_str());
00859                                     colorFilter->getTable().push_back(col);
00860                                 }
00861                             }
00862                         }
00863                     }
00864                     endEditCP(colorFilter);
00865                 } // colordisplayfilter
00866                 
00867                 if ((*fI)->get_name() == "resolutiondisplayfilter")
00868                 {
00869                     resolutionFilter = ResolutionDisplayFilter::create();
00870                     addRefCP(resolutionFilter);
00871                     
00872                     filterFgnd->getFilter().push_back(resolutionFilter);
00873                     
00874                     beginEditCP(resolutionFilter);
00875                     
00876                     for(nI  = (*fI)->get_nodelist().begin();
00877                         nI != (*fI)->get_nodelist().end(); ++nI) 
00878                     {
00879                         if((*nI)->get_name() == "downscale")
00880                         {
00881                             nP = (*nI);
00882                             do
00883                                 nP = nP->get_nodelist().front();
00884                             while (nP->get_nodelist().size() == 1);
00885                             
00886                             if(nP->get_type() == xmlpp::xml_nt_cdata) 
00887                                 sscanf(nP->get_cdata().c_str(),"%f",
00888                                     &resolutionFilter->getDownScale());
00889                         }
00890                     }
00891                     endEditCP(resolutionFilter);
00892                 } // resolutiondisplayfilter
00893                 
00894                 if ((*fI)->get_name() == "distortiondisplayfilter")
00895                 {
00896                     distortionFilter = DistortionDisplayFilter::create();
00897                     addRefCP(distortionFilter);
00898                     
00899                     filterFgnd->getFilter().push_back(distortionFilter);
00900                     
00901                     beginEditCP(distortionFilter);
00902                     
00903                     for(nI  = (*fI)->get_nodelist().begin();
00904                         nI != (*fI)->get_nodelist().end(); ++nI) 
00905                     {
00906                         if((*nI)->get_name() == "rows")
00907                         {
00908                             nP = (*nI);
00909                             do
00910                                 nP = nP->get_nodelist().front();
00911                             while (nP->get_nodelist().size() == 1);
00912                             
00913                             if(nP->get_type() == xmlpp::xml_nt_cdata) 
00914                                 sscanf(nP->get_cdata().c_str(),"%d",
00915                                     &distortionFilter->getRows());
00916                         }
00917                         if((*nI)->get_name() == "cols")
00918                         {
00919                             nP = (*nI);
00920                             do
00921                                 nP = nP->get_nodelist().front();
00922                             while (nP->get_nodelist().size() == 1);
00923                             
00924                             if(nP->get_type() == xmlpp::xml_nt_cdata) 
00925                                 sscanf(nP->get_cdata().c_str(),"%d",
00926                                     &distortionFilter->getColumns());
00927                         }
00928                         if((*nI)->get_name() == "positions")
00929                         {
00930                             points = (*nI)->select_nodes(pointTag);
00931                             
00932                             for(pI = points.begin(); pI != points.end(); ++pI)
00933                             {   
00934                                 nP = (*pI);
00935                                 do
00936                                     nP = nP->get_nodelist().front();
00937                                 while (nP->get_nodelist().size() == 1);
00938                                 
00939                                 if(nP->get_type() == xmlpp::xml_nt_cdata) 
00940                                 {
00941                                     Vec2f pos;
00942                                     pos.setValueFromCString(nP->get_cdata().c_str());
00943                                     distortionFilter->getPositions().push_back(pos);
00944                                 }
00945                             }
00946                         }
00947                     }
00948                     endEditCP(distortionFilter);
00949                 } // distortiondisplayfilter
00950             }
00951             
00952             endEditCP(filterFgnd);
00953         } // servers
00954     }
00955     catch (xmlpp::xmlerror e)
00956     {
00957         // parser error
00958         xmlpp::xmllocation where( ctxptr->get_location() );
00959         xmlpp::xmlstring errmsg( e.get_strerror() );
00960         SFATAL << "XML error line " << where.get_line() << " "
00961                << "at position " << where.get_pos()
00962                << ": error: " << errmsg.c_str()
00963                << std::endl;
00964         return false;
00965     }
00966     return true;
00967 }

bool ClusterWindow::updateFilter ( WindowPtr  window,
UInt32  id,
RenderActionBase action 
) [inherited]

load color and projection calibration file from xml

Definition at line 1045 of file OSGClusterWindow.cpp.

References osg::beginEditCP(), osg::ClusterWindowBase::DirtyFieldMask, osg::endEditCP(), osg::ViewportBase::ForegroundsFieldMask, osg::ClusterWindowBase::getDirty(), osg::ClusterWindowBase::getFilter(), osg::ClusterWindowBase::getServers(), p, osg::ClusterWindowBase::setDirty(), and osg::MField< FieldTypeT, fieldNameSpace >::size().

Referenced by osg::ClusterWindow::serverRender().

01047 {
01048     bool found = false;
01049 
01050     if (!getFilter().empty() && getDirty())
01051     {
01052         UInt32 c, p;
01053         
01054         ClusterWindowPtr ptr(this);
01055         
01056         beginEditCP(ptr, DirtyFieldMask);
01057             setDirty(false);
01058         endEditCP(ptr, DirtyFieldMask);
01059         
01060         // for all viewports
01061         for(p=0; p<window->getPort().size(); ++p) 
01062         {
01063             // search filter foregrounds
01064             for(c=0; c<getFilter().size(); ++c)
01065             {
01066                 std::string name = getServers()[id];
01067                 char portName[64];
01068                 
01069                 if(window->getPort().size() > 1)
01070                 {
01071                     sprintf(portName,"[%d]",p);
01072                     name = name + portName;
01073                 }
01074                 
01075                 DisplayFilterForegroundPtr filterFgnd = getFilter()[c];
01076                 
01077                 if(filterFgnd->getServer() == name)
01078                 {
01079                     beginEditCP(window->getPort()[p], Viewport::ForegroundsFieldMask);
01080                     
01081                     // first remove old filters, if any
01082                     for (Int32 n=window->getPort()[p]->getForegrounds().size(), j=n-1; 
01083                             j>=0; j--) 
01084                     {
01085                         MFForegroundPtr::iterator fgndIt = 
01086                             window->getPort()[p]->getForegrounds().begin() + j;
01087                         if ( (*fgndIt) == filterFgnd )
01088                             window->getPort()[p]->getForegrounds().erase(fgndIt);
01089                     }
01090                     
01091                     // then add new one
01092                     window->getPort()[p]->getForegrounds().push_back(filterFgnd);
01093                     
01094                     endEditCP(window->getPort()[p], Viewport::ForegroundsFieldMask);
01095 
01096                     found = true;
01097                     break;
01098                 }
01099             }
01100         }
01101     }
01102 
01103     return found;
01104 }

void ClusterWindow::clientInit ( void   )  [protected, virtual, inherited]

init client window. In a derived cluster window this method is called before the first sync with the rendering servers. There is no default action.

Reimplemented in osg::MultiDisplayWindow, and osg::SortFirstWindow.

Definition at line 983 of file OSGClusterWindow.cpp.

Referenced by osg::SortFirstWindow::clientInit(), and osg::ClusterWindow::frameInit().

00984 {
00985 }

void ClusterWindow::clientPreSync ( void   )  [protected, virtual, inherited]

client frame before sync

In a derived cluster window this method is called before sync with the rendering servers. Default aciton is to activate and init the client window.

Reimplemented in osg::SortFirstWindow.

Definition at line 994 of file OSGClusterWindow.cpp.

References osg::ClusterWindowBase::getClientWindow(), and osg::NullFC.

Referenced by osg::SortFirstWindow::clientPreSync(), and osg::ClusterWindow::frameInit().

00995 {
00996     if(getClientWindow() != NullFC)
00997     {
00998         getClientWindow()->activate();
00999         getClientWindow()->frameInit();
01000     }
01001 }

void ClusterWindow::clientRender ( RenderActionBase action  )  [protected, virtual, inherited]

initiate client rendering

In a derived cluster window this method is called after the sync with all rendering servers. Default aciton is to render all viewports of the client window.

Reimplemented in osg::SortFirstWindow.

Definition at line 1010 of file OSGClusterWindow.cpp.

References osg::ClusterWindowBase::getClientWindow(), and osg::NullFC.

Referenced by osg::ClusterWindow::renderAllViewports().

01011 {
01012     if(getClientWindow() != NullFC)
01013     {
01014         getClientWindow()->renderAllViewports( action );
01015     }
01016 }

void ClusterWindow::clientSwap ( void   )  [protected, virtual, inherited]

swap client window

In a derived cluster window this method is called after rendering Default action is to swap the local client window.

Reimplemented in osg::MultiDisplayWindow, and osg::SortFirstWindow.

Definition at line 1024 of file OSGClusterWindow.cpp.

References osg::beginEditCP(), osg::ClusterWindowBase::DirtyFieldMask, osg::endEditCP(), osg::ClusterWindowBase::getClientWindow(), osg::ClusterWindowBase::getDirty(), osg::NullFC, and osg::ClusterWindowBase::setDirty().

Referenced by osg::SortFirstWindow::clientSwap(), osg::MultiDisplayWindow::clientSwap(), and osg::ClusterWindow::swap().

01025 {
01026     if(getClientWindow() != NullFC)
01027     {
01028         getClientWindow()->swap( );
01029         getClientWindow()->frameExit();
01030     }
01031 
01032     if (getDirty())
01033     {
01034         ClusterWindowPtr ptr(this);
01035         
01036         beginEditCP(ptr, DirtyFieldMask);
01037             setDirty(false);
01038         endEditCP(ptr, DirtyFieldMask);
01039     }
01040 }

void ClusterWindow::serverInit ( WindowPtr  window,
UInt32  id 
) [protected, virtual, inherited]

initialise the cluster window on the server side

This method is called after the first sync.

Parameters:
window server render window
id server id

Reimplemented in osg::MultiDisplayWindow, and osg::SortFirstWindow.

Definition at line 1114 of file OSGClusterWindow.cpp.

01116 {
01117 }

void ClusterWindow::serverRender ( WindowPtr  window,
UInt32  id,
RenderActionBase action 
) [protected, virtual, inherited]

render server window

This method is called after synchronisation of all changes with the rendering client. Default action is to render all viewports with the given action

!param window server render window !param id server id !param action action

Reimplemented in osg::MultiDisplayWindow, and osg::SortFirstWindow.

Definition at line 1130 of file OSGClusterWindow.cpp.

References osg::ClusterWindowBase::getCalibration(), osg::AttachmentContainerPtr::getCPtr(), osg::ClusterWindowBase::getServers(), osg::NullFC, p, osg::DrawActionBase::setWindow(), osg::MField< FieldTypeT, fieldNameSpace >::size(), and osg::ClusterWindow::updateFilter().

Referenced by osg::SortFirstWindow::serverRender(), and osg::MultiDisplayWindow::serverRender().

01133 {
01134     updateFilter(window, id, action);
01135     
01136     RenderOptionsPtr ro;
01137 
01138     window->activate();
01139     window->frameInit();
01140 
01141     RenderAction *ract = dynamic_cast<RenderAction *>(action);
01142     if(ract != NULL)
01143     {
01144         MFViewportPtr::iterator       portIt  = window->getPort().begin();
01145         MFViewportPtr::const_iterator portEnd = window->getPort().end();
01146         // try to find option as an attachment of window
01147         OSG::RenderOptionsPtr winRo = OSG::RenderOptionsPtr::dcast(
01148             window->findAttachment(OSG::RenderOptions::getClassType()));
01149         ract->setWindow(window.getCPtr());
01150         while(portIt != portEnd)
01151         {
01152             // try to find option an attachment at the viewport
01153             OSG::RenderOptionsPtr vpRo = OSG::RenderOptionsPtr::dcast(
01154                 (*portIt)->findAttachment(OSG::RenderOptions::getClassType()));
01155             // try to find option an attachment at the root node
01156             OSG::RenderOptionsPtr rootRo = NullFC;
01157             if((*portIt)->getRoot() != NullFC)
01158             {
01159                 rootRo = OSG::RenderOptionsPtr::dcast(
01160                     (*portIt)->getRoot()->findAttachment(OSG::RenderOptions::getClassType()));
01161             }
01162             if(rootRo != NullFC)
01163                 ro = rootRo;
01164             else
01165                 if(vpRo != NullFC)
01166                     ro = vpRo;
01167                 else
01168                     ro = winRo;
01169             if(ro != NullFC)
01170                 ro->activateOptions(ract);
01171             (*portIt)->render(ract);
01172             ++portIt;
01173         }
01174     } else {
01175         if(action)
01176             window->renderAllViewports(action);
01177     }
01178 
01179     // do calibration
01180     DisplayCalibrationPtr calibPtr=NullFC;
01181     UInt32 c, p;
01182     
01183     // for all viewports
01184     for(p = 0 ; p<window->getPort().size() ; ++p) 
01185     {
01186         // search calibration 
01187         for(c=0 ; c<getCalibration().size() ; ++c)
01188         {
01189             std::string name = getServers()[id];
01190             char portName[64];
01191             if(window->getPort().size() > 1)
01192             {
01193                 sprintf(portName,"[%d]",p);
01194                 name = name + portName;
01195             }
01196             if(getCalibration()[c]->getServer() == name)
01197             {
01198                 calibPtr = getCalibration()[c];
01199                 calibPtr->calibrate(window->getPort()[p],action);
01200                 break;
01201             }
01202         }
01203     }
01204 }

void ClusterWindow::serverSwap ( WindowPtr  window,
UInt32  id 
) [protected, virtual, inherited]

swap server window

serverSwap is called after rendering. Default action is to swap the rendering window.

!param window server render window !param id server id !param connection connection to client

Reimplemented in osg::MultiDisplayWindow, and osg::SortFirstWindow.

Definition at line 1215 of file OSGClusterWindow.cpp.

Referenced by osg::MultiDisplayWindow::serverSwap().

01217 {
01218     window->swap();
01219     window->frameExit();
01220 }

MFString * osg::ClusterWindowBase::getMFServers ( void   )  [inline, inherited]

Definition at line 101 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfServers.

00102 {
00103     return &_mfServers;
00104 }

SFString * osg::ClusterWindowBase::getSFConnectionType ( void   )  [inline, inherited]

Definition at line 108 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfConnectionType.

00109 {
00110     return &_sfConnectionType;
00111 }

SFString * osg::ClusterWindowBase::getSFConnectionInterface ( void   )  [inline, inherited]

Definition at line 115 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfConnectionInterface.

00116 {
00117     return &_sfConnectionInterface;
00118 }

SFString * osg::ClusterWindowBase::getSFConnectionDestination ( void   )  [inline, inherited]

Definition at line 122 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfConnectionDestination.

00123 {
00124     return &_sfConnectionDestination;
00125 }

SFString * osg::ClusterWindowBase::getSFConnectionParams ( void   )  [inline, inherited]

Definition at line 129 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfConnectionParams.

00130 {
00131     return &_sfConnectionParams;
00132 }

SFUInt32 * osg::ClusterWindowBase::getSFServicePort ( void   )  [inline, inherited]

Definition at line 136 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfServicePort.

00137 {
00138     return &_sfServicePort;
00139 }

SFString * osg::ClusterWindowBase::getSFServiceAddress ( void   )  [inline, inherited]

Definition at line 143 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfServiceAddress.

00144 {
00145     return &_sfServiceAddress;
00146 }

SFString * osg::ClusterWindowBase::getSFServiceInterface ( void   )  [inline, inherited]

Definition at line 150 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfServiceInterface.

00151 {
00152     return &_sfServiceInterface;
00153 }

SFWindowPtr * osg::ClusterWindowBase::getSFClientWindow ( void   )  [inline, inherited]

Definition at line 157 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfClientWindow.

00158 {
00159     return &_sfClientWindow;
00160 }

SFUInt32 * osg::ClusterWindowBase::getSFInterleave ( void   )  [inline, inherited]

Definition at line 164 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfInterleave.

00165 {
00166     return &_sfInterleave;
00167 }

SFUInt32 * osg::ClusterWindowBase::getSFFrameCount ( void   )  [inline, inherited]

Definition at line 171 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfFrameCount.

00172 {
00173     return &_sfFrameCount;
00174 }

SFImageComposerPtr * osg::ClusterWindowBase::getSFComposer ( void   )  [inline, inherited]

Definition at line 178 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfComposer.

00179 {
00180     return &_sfComposer;
00181 }

MFString * osg::ClusterWindowBase::getMFAutostart ( void   )  [inline, inherited]

Definition at line 185 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfAutostart.

00186 {
00187     return &_mfAutostart;
00188 }

MFDisplayCalibrationPtr * osg::ClusterWindowBase::getMFCalibration ( void   )  [inline, inherited]

Definition at line 192 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfCalibration.

00193 {
00194     return &_mfCalibration;
00195 }

MFDisplayFilterForegroundPtr * osg::ClusterWindowBase::getMFFilter ( void   )  [inline, inherited]

Definition at line 199 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfFilter.

00200 {
00201     return &_mfFilter;
00202 }

std::string & osg::ClusterWindowBase::getConnectionType ( void   )  [inline, inherited]

const std::string & osg::ClusterWindowBase::getConnectionType ( void   )  const [inline, inherited]

Definition at line 221 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfConnectionType, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00222 {
00223     return _sfConnectionType.getValue();
00224 }

std::string & osg::ClusterWindowBase::getConnectionInterface ( void   )  [inline, inherited]

const std::string & osg::ClusterWindowBase::getConnectionInterface ( void   )  const [inline, inherited]

std::string & osg::ClusterWindowBase::getConnectionDestination ( void   )  [inline, inherited]

const std::string & osg::ClusterWindowBase::getConnectionDestination ( void   )  const [inline, inherited]

std::string & osg::ClusterWindowBase::getConnectionParams ( void   )  [inline, inherited]

const std::string & osg::ClusterWindowBase::getConnectionParams ( void   )  const [inline, inherited]

UInt32 & osg::ClusterWindowBase::getServicePort ( void   )  [inline, inherited]

Definition at line 298 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfServicePort, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

Referenced by osg::ClusterWindow::init().

00299 {
00300     return _sfServicePort.getValue();
00301 }

const UInt32 & osg::ClusterWindowBase::getServicePort ( void   )  const [inline, inherited]

Definition at line 305 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfServicePort, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00306 {
00307     return _sfServicePort.getValue();
00308 }

std::string & osg::ClusterWindowBase::getServiceAddress ( void   )  [inline, inherited]

Definition at line 319 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfServiceAddress, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00320 {
00321     return _sfServiceAddress.getValue();
00322 }

const std::string & osg::ClusterWindowBase::getServiceAddress ( void   )  const [inline, inherited]

Definition at line 326 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfServiceAddress, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00327 {
00328     return _sfServiceAddress.getValue();
00329 }

std::string & osg::ClusterWindowBase::getServiceInterface ( void   )  [inline, inherited]

const std::string & osg::ClusterWindowBase::getServiceInterface ( void   )  const [inline, inherited]

WindowPtr & osg::ClusterWindowBase::getClientWindow ( void   )  [inline, inherited]

const WindowPtr & osg::ClusterWindowBase::getClientWindow ( void   )  const [inline, inherited]

Definition at line 368 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfClientWindow, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00369 {
00370     return _sfClientWindow.getValue();
00371 }

UInt32 & osg::ClusterWindowBase::getInterleave ( void   )  [inline, inherited]

const UInt32 & osg::ClusterWindowBase::getInterleave ( void   )  const [inline, inherited]

Definition at line 389 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfInterleave, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00390 {
00391     return _sfInterleave.getValue();
00392 }

UInt32 & osg::ClusterWindowBase::getFrameCount ( void   )  [inline, inherited]

Definition at line 403 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfFrameCount, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

Referenced by osg::ClusterWindow::frameInit().

00404 {
00405     return _sfFrameCount.getValue();
00406 }

const UInt32 & osg::ClusterWindowBase::getFrameCount ( void   )  const [inline, inherited]

Definition at line 410 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfFrameCount, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00411 {
00412     return _sfFrameCount.getValue();
00413 }

ImageComposerPtr & osg::ClusterWindowBase::getComposer ( void   )  [inline, inherited]

Definition at line 424 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfComposer, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00425 {
00426     return _sfComposer.getValue();
00427 }

const ImageComposerPtr & osg::ClusterWindowBase::getComposer ( void   )  const [inline, inherited]

Definition at line 431 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfComposer, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00432 {
00433     return _sfComposer.getValue();
00434 }

std::string & osg::ClusterWindowBase::getServers ( const UInt32  index  )  [inline, inherited]

Definition at line 467 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfServers.

00468 {
00469     return _mfServers[index];
00470 }

MFString & osg::ClusterWindowBase::getServers ( void   )  [inline, inherited]

const MFString & osg::ClusterWindowBase::getServers ( void   )  const [inline, inherited]

Definition at line 481 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfServers.

00482 {
00483     return _mfServers;
00484 }

std::string & osg::ClusterWindowBase::getAutostart ( const UInt32  index  )  [inline, inherited]

Definition at line 488 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfAutostart.

00489 {
00490     return _mfAutostart[index];
00491 }

MFString & osg::ClusterWindowBase::getAutostart ( void   )  [inline, inherited]

Definition at line 495 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfAutostart.

Referenced by osg::ClusterWindow::init().

00496 {
00497     return _mfAutostart;
00498 }

const MFString & osg::ClusterWindowBase::getAutostart ( void   )  const [inline, inherited]

Definition at line 502 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfAutostart.

00503 {
00504     return _mfAutostart;
00505 }

DisplayCalibrationPtr & osg::ClusterWindowBase::getCalibration ( const UInt32  index  )  [inline, inherited]

Definition at line 509 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfCalibration.

00510 {
00511     return _mfCalibration[index];
00512 }

MFDisplayCalibrationPtr & osg::ClusterWindowBase::getCalibration ( void   )  [inline, inherited]

const MFDisplayCalibrationPtr & osg::ClusterWindowBase::getCalibration ( void   )  const [inline, inherited]

Definition at line 523 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfCalibration.

00524 {
00525     return _mfCalibration;
00526 }

DisplayFilterForegroundPtr & osg::ClusterWindowBase::getFilter ( const UInt32  index  )  [inline, inherited]

Definition at line 530 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfFilter.

00531 {
00532     return _mfFilter[index];
00533 }

MFDisplayFilterForegroundPtr & osg::ClusterWindowBase::getFilter ( void   )  [inline, inherited]

Definition at line 537 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfFilter.

Referenced by osg::ClusterWindow::loadFilter(), and osg::ClusterWindow::updateFilter().

00538 {
00539     return _mfFilter;
00540 }

const MFDisplayFilterForegroundPtr & osg::ClusterWindowBase::getFilter ( void   )  const [inline, inherited]

Definition at line 544 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_mfFilter.

00545 {
00546     return _mfFilter;
00547 }

void osg::ClusterWindowBase::setConnectionType ( const std::string &  value  )  [inline, inherited]

void osg::ClusterWindowBase::setConnectionInterface ( const std::string &  value  )  [inline, inherited]

void osg::ClusterWindowBase::setConnectionDestination ( const std::string &  value  )  [inline, inherited]

void osg::ClusterWindowBase::setConnectionParams ( const std::string &  value  )  [inline, inherited]

void osg::ClusterWindowBase::setServicePort ( const UInt32 value  )  [inline, inherited]

void osg::ClusterWindowBase::setServiceAddress ( const std::string &  value  )  [inline, inherited]

void osg::ClusterWindowBase::setServiceInterface ( const std::string &  value  )  [inline, inherited]

void osg::ClusterWindowBase::setClientWindow ( const WindowPtr value  )  [inline, inherited]

void osg::ClusterWindowBase::setInterleave ( const UInt32 value  )  [inline, inherited]

void osg::ClusterWindowBase::setFrameCount ( const UInt32 value  )  [inline, inherited]

void osg::ClusterWindowBase::setComposer ( const ImageComposerPtr value  )  [inline, inherited]

SFBool * osg::ClusterWindowBase::getSFDirty ( void   )  [inline, protected, inherited]

Definition at line 206 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfDirty.

00207 {
00208     return &_sfDirty;
00209 }

bool & osg::ClusterWindowBase::getDirty ( void   )  [inline, protected, inherited]

const bool & osg::ClusterWindowBase::getDirty ( void   )  const [inline, protected, inherited]

Definition at line 452 of file OSGClusterWindowBase.inl.

References osg::ClusterWindowBase::_sfDirty, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00453 {
00454     return _sfDirty.getValue();
00455 }

void osg::ClusterWindowBase::setDirty ( const bool &  value  )  [inline, protected, inherited]

void osg::ClusterWindowBase::executeSyncImpl ( ClusterWindowBase pOther,
const BitVector whichField 
) [protected, inherited]

Definition at line 652 of file OSGClusterWindowBase.cpp.

References osg::ClusterWindowBase::_mfAutostart, osg::ClusterWindowBase::_mfCalibration, osg::ClusterWindowBase::_mfFilter, osg::ClusterWindowBase::_mfServers, osg::ClusterWindowBase::_sfClientWindow, osg::ClusterWindowBase::_sfComposer, osg::ClusterWindowBase::_sfConnectionDestination, osg::ClusterWindowBase::_sfConnectionInterface, osg::ClusterWindowBase::_sfConnectionParams, osg::ClusterWindowBase::_sfConnectionType, osg::ClusterWindowBase::_sfDirty, osg::ClusterWindowBase::_sfFrameCount, osg::ClusterWindowBase::_sfInterleave, osg::ClusterWindowBase::_sfServiceAddress, osg::ClusterWindowBase::_sfServiceInterface, osg::ClusterWindowBase::_sfServicePort, osg::ClusterWindowBase::AutostartFieldMask, osg::ClusterWindowBase::CalibrationFieldMask, osg::ClusterWindowBase::ClientWindowFieldMask, osg::ClusterWindowBase::ComposerFieldMask, osg::ClusterWindowBase::ConnectionDestinationFieldMask, osg::ClusterWindowBase::ConnectionInterfaceFieldMask, osg::ClusterWindowBase::ConnectionParamsFieldMask, osg::ClusterWindowBase::ConnectionTypeFieldMask, osg::ClusterWindowBase::DirtyFieldMask, osg::WindowBase::executeSyncImpl(), osg::ClusterWindowBase::FilterFieldMask, osg::ClusterWindowBase::FrameCountFieldMask, osg::ClusterWindowBase::InterleaveFieldMask, osg::FieldBits::NoField, osg::ClusterWindowBase::ServersFieldMask, osg::ClusterWindowBase::ServiceAddressFieldMask, osg::ClusterWindowBase::ServiceInterfaceFieldMask, osg::ClusterWindowBase::ServicePortFieldMask, osg::SField< FieldTypeT, fieldNameSpace >::syncWith(), and osg::MField< FieldTypeT, fieldNameSpace >::syncWith().

Referenced by osg::ClusterWindowBase::executeSync(), osg::SortFirstWindowBase::executeSyncImpl(), and executeSyncImpl().

00654 {
00655 
00656     Inherited::executeSyncImpl(pOther, whichField);
00657 
00658     if(FieldBits::NoField != (ServersFieldMask & whichField))
00659         _mfServers.syncWith(pOther->_mfServers);
00660 
00661     if(FieldBits::NoField != (ConnectionTypeFieldMask & whichField))
00662         _sfConnectionType.syncWith(pOther->_sfConnectionType);
00663 
00664     if(FieldBits::NoField != (ConnectionInterfaceFieldMask & whichField))
00665         _sfConnectionInterface.syncWith(pOther->_sfConnectionInterface);
00666 
00667     if(FieldBits::NoField != (ConnectionDestinationFieldMask & whichField))
00668         _sfConnectionDestination.syncWith(pOther->_sfConnectionDestination);
00669 
00670     if(FieldBits::NoField != (ConnectionParamsFieldMask & whichField))
00671         _sfConnectionParams.syncWith(pOther->_sfConnectionParams);
00672 
00673     if(FieldBits::NoField != (ServicePortFieldMask & whichField))
00674         _sfServicePort.syncWith(pOther->_sfServicePort);
00675 
00676     if(FieldBits::NoField != (ServiceAddressFieldMask & whichField))
00677         _sfServiceAddress.syncWith(pOther->_sfServiceAddress);
00678 
00679     if(FieldBits::NoField != (ServiceInterfaceFieldMask & whichField))
00680         _sfServiceInterface.syncWith(pOther->_sfServiceInterface);
00681 
00682     if(FieldBits::NoField != (ClientWindowFieldMask & whichField))
00683         _sfClientWindow.syncWith(pOther->_sfClientWindow);
00684 
00685     if(FieldBits::NoField != (InterleaveFieldMask & whichField))
00686         _sfInterleave.syncWith(pOther->_sfInterleave);
00687 
00688     if(FieldBits::NoField != (FrameCountFieldMask & whichField))
00689         _sfFrameCount.syncWith(pOther->_sfFrameCount);
00690 
00691     if(FieldBits::NoField != (ComposerFieldMask & whichField))
00692         _sfComposer.syncWith(pOther->_sfComposer);
00693 
00694     if(FieldBits::NoField != (AutostartFieldMask & whichField))
00695         _mfAutostart.syncWith(pOther->_mfAutostart);
00696 
00697     if(FieldBits::NoField != (CalibrationFieldMask & whichField))
00698         _mfCalibration.syncWith(pOther->_mfCalibration);
00699 
00700     if(FieldBits::NoField != (FilterFieldMask & whichField))
00701         _mfFilter.syncWith(pOther->_mfFilter);
00702 
00703     if(FieldBits::NoField != (DirtyFieldMask & whichField))
00704         _sfDirty.syncWith(pOther->_sfDirty);
00705 
00706 
00707 }

void WindowBase::executeSyncImpl ( WindowBase pOther,
const BitVector whichField 
) [protected, inherited]

Definition at line 390 of file OSGWindowBase.cpp.

References osg::WindowBase::_mfGlObjectLastRefresh, osg::WindowBase::_mfGlObjectLastReinitialize, osg::WindowBase::_mfPort, osg::WindowBase::_sfGlObjectEventCounter, osg::WindowBase::_sfHeight, osg::WindowBase::_sfResizePending, osg::WindowBase::_sfWidth, osg::AttachmentContainer::executeSyncImpl(), osg::WindowBase::GlObjectEventCounterFieldMask, osg::WindowBase::GlObjectLastRefreshFieldMask, osg::WindowBase::GlObjectLastReinitializeFieldMask, osg::WindowBase::HeightFieldMask, osg::FieldBits::NoField, osg::WindowBase::PortFieldMask, osg::WindowBase::ResizePendingFieldMask, osg::MField< FieldTypeT, fieldNameSpace >::syncWith(), osg::SField< FieldTypeT, fieldNameSpace >::syncWith(), and osg::WindowBase::WidthFieldMask.

Referenced by osg::WindowBase::executeSync(), osg::XWindowBase::executeSyncImpl(), osg::WIN32WindowBase::executeSyncImpl(), osg::PassiveWindowBase::executeSyncImpl(), osg::GLUTWindowBase::executeSyncImpl(), and osg::ClusterWindowBase::executeSyncImpl().

00392 {
00393 
00394     Inherited::executeSyncImpl(pOther, whichField);
00395 
00396     if(FieldBits::NoField != (WidthFieldMask & whichField))
00397         _sfWidth.syncWith(pOther->_sfWidth);
00398 
00399     if(FieldBits::NoField != (HeightFieldMask & whichField))
00400         _sfHeight.syncWith(pOther->_sfHeight);
00401 
00402     if(FieldBits::NoField != (PortFieldMask & whichField))
00403         _mfPort.syncWith(pOther->_mfPort);
00404 
00405     if(FieldBits::NoField != (ResizePendingFieldMask & whichField))
00406         _sfResizePending.syncWith(pOther->_sfResizePending);
00407 
00408     if(FieldBits::NoField != (GlObjectEventCounterFieldMask & whichField))
00409         _sfGlObjectEventCounter.syncWith(pOther->_sfGlObjectEventCounter);
00410 
00411     if(FieldBits::NoField != (GlObjectLastRefreshFieldMask & whichField))
00412         _mfGlObjectLastRefresh.syncWith(pOther->_mfGlObjectLastRefresh);
00413 
00414     if(FieldBits::NoField != (GlObjectLastReinitializeFieldMask & whichField))
00415         _mfGlObjectLastReinitialize.syncWith(pOther->_mfGlObjectLastReinitialize);
00416 
00417 
00418 }

void AttachmentContainer::executeSyncImpl ( AttachmentContainer pOther,
const BitVector whichField 
) [protected, inherited]

void osg::FieldContainer::executeSyncImpl ( FieldContainer pOther,
const BitVector whichField 
) [inline, protected, inherited]

static const char* osg::Window::getClassname ( void   )  [inline, static, inherited]

Definition at line 107 of file OSGWindow.h.

00107 { return "Window"; };

void osg::Window::addPort ( const ViewportPtr portP  )  [inherited]

Definition at line 407 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, osg::MField< FieldTypeT, fieldNameSpace >::back(), osg::beginEditCP(), osg::endEditCP(), osg::NullFC, osg::ViewportBase::ParentFieldMask, and osg::MField< FieldTypeT, fieldNameSpace >::push_back().

00408 {
00409     if(portP != NullFC)
00410     {
00411         _mfPort.push_back(portP);
00412 // CHECK CHECK
00413 //        _mfPort.back()->setParent(FieldContainer::getPtr<WindowPtr>(*this));
00414 
00415         beginEditCP(portP, Viewport::ParentFieldMask);
00416         {
00417             _mfPort.back()->setParent(WindowPtr(*this));
00418         }
00419         endEditCP  (portP, Viewport::ParentFieldMask);
00420     }
00421 }

void osg::Window::insertPort ( UInt32  portIndex,
const ViewportPtr portP 
) [inherited]

Definition at line 423 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, osg::MField< FieldTypeT, fieldNameSpace >::begin(), osg::beginEditCP(), osg::endEditCP(), osg::MField< FieldTypeT, fieldNameSpace >::insert(), osg::NullFC, and osg::ViewportBase::ParentFieldMask.

00424 {    
00425     MFViewportPtr::iterator portIt = _mfPort.begin();
00426 
00427     if(portP != NullFC)
00428     {
00429         portIt += portIndex;
00430   
00431 // CHECK CHECK      
00432 //        (*(_mfPort.insert(portIt, portP)))->setParent(
00433 //            FieldContainer::getPtr<WindowPtr>(*this));
00434 
00435         beginEditCP(portP, Viewport::ParentFieldMask);
00436         {
00437             (*(_mfPort.insert(portIt, portP)))->setParent(
00438                 WindowPtr(*this));
00439         }
00440         endEditCP  (portP, Viewport::ParentFieldMask);
00441 
00442     }
00443 }

void osg::Window::replacePort ( UInt32  portIndex,
const ViewportPtr portP 
) [inherited]

Definition at line 446 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, and osg::NullFC.

00447 {
00448     if(portP != NullFC)
00449     {
00450         _mfPort[portIndex]->setParent(NullFC);
00451         _mfPort[portIndex] = portP;
00452 // CHECK CHECK
00453 //        _mfPort.getValue(portIndex)->setParent(
00454 //            FieldContainer::getPtr<WindowPtr>(*this));
00455         _mfPort[portIndex]->setParent(
00456             WindowPtr(*this));
00457     }
00458 }

void osg::Window::replacePortBy ( const ViewportPtr portP,
const ViewportPtr newPortP 
) [inherited]

Definition at line 460 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::MField< FieldTypeT, fieldNameSpace >::find(), and osg::NullFC.

00462 {
00463     MFViewportPtr::iterator portIt = _mfPort.find(portP);
00464 
00465     if(newportP != NullFC)
00466     {
00467         if(portIt != _mfPort.end())
00468         {
00469             (*portIt)->setParent(NullFC);
00470             (*portIt) = newportP;
00471 // CHECK CHECK
00472 //            (*portIt)->setParent(
00473 //                FieldContainer::getPtr<WindowPtr>(*this));
00474             (*portIt)->setParent(
00475                 WindowPtr(*this));
00476         }
00477     }
00478 }

void osg::Window::subPort ( const ViewportPtr portP  )  [inherited]

Definition at line 480 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::MField< FieldTypeT, fieldNameSpace >::erase(), osg::MField< FieldTypeT, fieldNameSpace >::find(), and osg::NullFC.

00481 {
00482     MFViewportPtr::iterator portIt = _mfPort.find(portP);
00483 
00484     if(portIt != _mfPort.end())
00485     {
00486         (*portIt)->setParent(NullFC);
00487 
00488         _mfPort.erase(portIt);
00489     }
00490 
00491 }

void osg::Window::subPort ( UInt32  portIndex  )  [inherited]

Definition at line 493 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, osg::MField< FieldTypeT, fieldNameSpace >::begin(), osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::MField< FieldTypeT, fieldNameSpace >::erase(), and osg::NullFC.

00494 {
00495     MFViewportPtr::iterator portIt = _mfPort.begin();
00496 
00497     portIt += portIndex;
00498 
00499     if(portIt != _mfPort.end())
00500     {
00501         (*portIt)->setParent(NullFC);
00502 
00503         _mfPort.erase(portIt);
00504     }
00505 }

void osg::Window::clearPorts ( void   )  [inherited]

Definition at line 507 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, osg::MField< FieldTypeT, fieldNameSpace >::begin(), osg::MField< FieldTypeT, fieldNameSpace >::clear(), osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::NullFC, and osg::subRefCP().

00508 {
00509     MFViewportPtr::iterator portIt = _mfPort.begin();
00510 
00511     while(portIt != _mfPort.end())
00512     {
00513         (*portIt)->setParent(NullFC);
00514 
00515         subRefCP(*portIt);
00516     }
00517  
00518     _mfPort.clear();
00519 }

UInt32 osg::Window::registerExtension ( const Char8 s  )  [static, inherited]

Register a new OpenGL extension. See OpenGL Extensions for details. Ignores NULL strings.

Definition at line 920 of file OSGWindow.cpp.

References osg::Window::_registeredExtensions, FDEBUG, FPDEBUG, osg::Window::staticAcquire(), and osg::Window::staticRelease().

Referenced by osg::BlendChunk::BlendChunk(), osg::PhongMaterial::createChunkMaterial(), osg::DisplayCalibration::createCMViewports(), osg::DVRIsoShader::DVRIsoShader(), osg::DVRMtexLUTShader::DVRMtexLUTShader(), osg::DVRSimpleLUTShader::DVRSimpleLUTShader(), osg::FBOViewport::FBOViewport(), osg::FragmentProgramChunk::FragmentProgramChunk(), osg::GeoPumpFactory::glextInitFunction(), osg::Particles::Particles(), osg::PhongMaterial::PhongMaterial(), osg::PointChunk::PointChunk(), osg::ProgramChunk::ProgramChunk(), osg::RegisterCombinersChunk::RegisterCombinersChunk(), osg::RenderAction::RenderAction(), osg::SHLChunk::SHLChunk(), osg::SHLParameterChunk::SHLParameterChunk(), osg::Slices::Slices(), osg::TextureChunk::TextureChunk(), and osg::VertexProgramChunk::VertexProgramChunk().

00921 {
00922     FDEBUG(("Window::registerExtension: register '%s': ", s));
00923     staticAcquire();
00924    
00925     if(s == NULL)
00926     {
00927         staticRelease();
00928         return TypeTraits<UInt32>::getMax();
00929     }
00930     
00931     std::vector<std::string>::iterator i;
00932     
00933     i = std::find(_registeredExtensions.begin(), _registeredExtensions.end(), 
00934                   s);
00935     
00936     if(i < _registeredExtensions.end())
00937     {
00938         staticRelease();
00939         FPDEBUG(("reusing id %d\n", i - _registeredExtensions.begin()));
00940         return i - _registeredExtensions.begin();
00941     }
00942         
00943     UInt32 r = _registeredExtensions.size();
00944     _registeredExtensions.push_back(s);
00945     
00946     FPDEBUG(("new id %d\n", r));
00947     
00948     staticRelease();
00949     return r;
00950 }

void osg::Window::ignoreExtensions ( const Char8 s  )  [static, inherited]

Register new OpenGL extensions to ignore. See OpenGL Extensions for details.

Definition at line 977 of file OSGWindow.cpp.

References osg::Window::_allWindows, osg::Window::_ignoredExtensions, osg::Window::_registeredExtensions, FDEBUG, FPDEBUG, osg::Window::staticAcquire(), and osg::Window::staticRelease().

Referenced by osg::Window::frameInit().

00978 {    
00979     FDEBUG(("Window:: Ignoring extensions '%s'\n", s));
00980 
00981     staticAcquire();
00982     
00983     std::back_insert_iterator< std::vector<std::string> > 
00984             extension_back_inserter(_ignoredExtensions);
00985 
00986     std::string toex(s);
00987     
00988     for(string_token_iterator ignit = string_token_iterator(toex, ",. ");
00989         ignit != string_token_iterator(); ++ignit)
00990     {          
00991         std::string ignore = *ignit;
00992 
00993         FDEBUG(("Ignoring '%s':", ignore.c_str()));
00994         
00995         if(std::find(_ignoredExtensions.begin(),
00996                      _ignoredExtensions.end(),
00997                      ignore.c_str())            != _ignoredExtensions.end())
00998         {
00999             FPDEBUG((" already ignored.\n"));
01000             continue;
01001         }
01002         
01003         _ignoredExtensions.push_back(ignore);
01004         
01005         std::vector<std::string>::iterator regit;
01006         
01007         // if extension is registered, disable it on all existing Windows
01008         
01009         regit = std::find(_registeredExtensions.begin(),
01010                           _registeredExtensions.end(),
01011                           ignore.c_str());                                 
01012         
01013         Int32 ind = -1;
01014         
01015         if(regit != _registeredExtensions.end())
01016         {
01017             ind = regit - _registeredExtensions.begin();
01018             FPDEBUG(("(reg as %d)", ind));
01019         }
01020 
01021         // Walk all existing windows and remove the ignored extension 
01022         // from the _extensions vector. Disable it if it was a registered one.
01023         
01024         std::vector<WindowPtr>::iterator winit;
01025 
01026         for(winit = _allWindows.begin(); winit != _allWindows.end(); ++winit)
01027         {
01028             FPDEBUG((" %p:", (*winit).getCPtr()));
01029             
01030             std::vector<std::string>::iterator extit;
01031             
01032             extit = std::find((*winit)->_extensions.begin(),
01033                               (*winit)->_extensions.end(),
01034                               ignore.c_str()); 
01035                                                                      
01036             if(extit != (*winit)->_extensions.end())
01037             {
01038                 FPDEBUG((" removed"));
01039                 (*winit)->_extensions.erase(extit);
01040             }
01041             else
01042             {
01043                 FPDEBUG((" nonsupp"));            
01044             }
01045                         
01046             if(ind >= 0)
01047             {
01048                 if((*winit)->_availExtensions.size() > UInt32(ind))
01049                 {
01050                     (*winit)->_availExtensions[ind] = false;
01051                     FPDEBUG((" disabled"));            
01052                 }
01053                 if((*winit)->_commonExtensions.size() > UInt32(ind))
01054                 {
01055                     (*winit)->_commonExtensions[ind] = false;
01056                     FPDEBUG((" uncommoned"));            
01057                 }
01058             }
01059         }
01060         FPDEBUG(("\n"));    
01061     }
01062 
01063     std::sort(_ignoredExtensions.begin(), _ignoredExtensions.end());
01064     
01065     staticRelease();
01066 }

UInt32 osg::Window::registerFunction ( const Char8 s,
Int32  ext = -1,
UInt32  version = 0xffff 
) [static, inherited]

Register a new OpenGL extension function. See OpenGL Extensions for details. Ignores NULL strings.

Definition at line 1071 of file OSGWindow.cpp.

References osg::Window::_registeredFunctionExts, osg::Window::_registeredFunctions, osg::Window::_registeredFunctionVersions, FDEBUG, FPDEBUG, osg::Window::staticAcquire(), and osg::Window::staticRelease().

Referenced by osg::BlendChunk::BlendChunk(), osg::DVRIsoShader::DVRIsoShader(), osg::DVRMtexLUTShader::DVRMtexLUTShader(), osg::DVRSimpleLUTShader::DVRSimpleLUTShader(), osg::FBOViewport::FBOViewport(), osg::GeoPumpFactory::glextInitFunction(), glextFuncInit::init(), osg::Particles::Particles(), osg::PointChunk::PointChunk(), osg::ProgramChunk::ProgramChunk(), osg::RegisterCombinersChunk::RegisterCombinersChunk(), osg::RenderAction::RenderAction(), osg::SHLChunk::SHLChunk(), osg::Slices::Slices(), and osg::TextureChunk::TextureChunk().

01073 {
01074     if(s == NULL)
01075         return TypeTraits<UInt32>::getMax();
01076 
01077     FDEBUG(("Window::registerFunction: register '%s': ", s));
01078 
01079     staticAcquire();
01080     
01081     std::vector<std::string>::iterator i;
01082     
01083     i = std::find(_registeredFunctions.begin(), _registeredFunctions.end(), 
01084                   s);
01085     
01086     if(i < _registeredFunctions.end())
01087     {
01088         staticRelease();
01089         FPDEBUG(("reusing id %d\n", i - _registeredFunctions.begin()));
01090         return i - _registeredFunctions.begin();
01091     }
01092             
01093     UInt32 r=_registeredFunctions.size();
01094     _registeredFunctions.push_back(s);
01095     _registeredFunctionExts.push_back(ext);
01096     _registeredFunctionVersions.push_back(version);
01097 
01098     FPDEBUG(("new id %d\n", r));
01099     
01100     staticRelease();
01101     return r;
01102 }

void osg::Window::registerConstant ( GLenum  val  )  [static, inherited]

Register a new OpenGL constant. See OpenGL Extensions for details.

Definition at line 1107 of file OSGWindow.cpp.

References osg::Window::_registeredConstants, osg::Window::staticAcquire(), and osg::Window::staticRelease().

Referenced by osg::TextureChunk::TextureChunk().

01108 {
01109     staticAcquire();
01110    
01111     if(std::find(_registeredConstants.begin(), 
01112             _registeredConstants.end(),
01113             val) ==  _registeredConstants.end())
01114     {
01115         _registeredConstants.push_back(val);
01116     }
01117     
01118     staticRelease();
01119 }

void osg::Window::setGLLibraryName ( const Char8 s  )  [inline, static, inherited]

Set the library name where to find OpenGL extension functions. This has to be called before the first extension function is accessed, and it's safe to call it before osgInit().

Definition at line 121 of file OSGWindow.inl.

References osg::Window::_glLibraryName.

00122 {
00123     _glLibraryName = s;
00124 }

UInt32 osg::Window::getGLVersion ( void   )  [inline, inherited]

Return the version of OpenGL running in the Window in the form 0x<major><major><minor><minor>, e.g. 0x0201 for version 2.1.

Definition at line 129 of file OSGWindow.inl.

References osg::Window::_glVersion.

Referenced by osg::TextureChunk::activate(), osg::TextureChunk::changeFrom(), osg::TextureChunk::deactivate(), osg::TextureChunk::handleGL(), and osg::TextureChunk::handleTexture().

00130 {
00131     return _glVersion;
00132 }

Int32 osg::Window::getExtensionId ( const Char8 s  )  [inline, static, inherited]

Find the id of a registered extension. Return -1 if extension not registered.

Definition at line 137 of file OSGWindow.inl.

References osg::Window::_registeredExtensions.

00138 {
00139     std::vector<std::string>::iterator it;
00140 
00141     it = std::find(_registeredExtensions.begin(),
00142               _registeredExtensions.end(),
00143               s);
00144 
00145     if(it == _registeredExtensions.end())
00146         return -1;
00147 
00148     return Int32(it -_registeredExtensions.begin());
00149 }

bool osg::Window::hasExtension ( UInt32  id  )  [inline, inherited]

Check if the window has the indicated extension.

Warning:
No error checks are done on the passed index!

Definition at line 64 of file OSGWindow.inl.

References osg::Window::_availExtensions.

Referenced by osg::TextureChunk::activate(), osg::SHLParameterChunk::activate(), osg::RegisterCombinersChunk::activate(), osg::ProgramChunk::activate(), osg::PointChunk::activate(), osg::DVRSimpleLUTShader::activate(), osg::CubeTextureChunk::activate(), osg::BlendChunk::activate(), osg::DVRIsoShader::activate_NVRegisterCombinerShading(), osg::TextureChunk::changeFrom(), osg::SHLParameterChunk::changeFrom(), osg::ProgramChunk::changeFrom(), osg::PointChunk::changeFrom(), osg::CubeTextureChunk::changeFrom(), osg::BlendChunk::changeFrom(), osg::TextureChunk::deactivate(), osg::ProgramChunk::deactivate(), osg::PointChunk::deactivate(), osg::CubeTextureChunk::deactivate(), osg::BlendChunk::deactivate(), osg::GeoVBO::draw(), osg::Slices::drawSlices(), GeoPump128(), GeoPump129(), osg::DVRVolume::getTextureMode(), osg::TextureChunk::handleGL(), osg::SHLChunk::handleGL(), osg::ProgramChunk::handleGL(), osg::Geometry::handleGL(), osg::CubeTextureChunk::handleGL(), osg::TextureChunk::handleTexture(), osg::TextureChunk::handleTextureShader(), osg::TextureChunk::hasMultiTexture(), osg::DVRMtexLUTShader::initCombiners(), osg::DVRMtexLUTShader::initialize(), osg::DVRVolume::initializeClipObjects(), osg::DVRSimpleLUTShader::isModeSupported(), osg::DVRIsoShader::isModeSupported(), osg::FBOViewport::render(), osg::DVRMtexLUTShader::renderSlice(), osg::DVRSimpleLUTShader::setupAlphaCorrectionRegisterCombiners(), osg::RenderAction::start(), osg::SHLChunk::updateProgram(), and osg::SHLChunk::updateProgramParameters().

00065 {
00066     return _availExtensions[id];
00067 }

bool osg::Window::hasExtension ( const Char8 s  )  [inherited]

Check if the Window supports the given extension. Should be used for initialisation checks only, for checks done often it's recommended to register the extensions and use hasExtension(UInt32) instead.

Definition at line 956 of file OSGWindow.cpp.

References osg::Window::_extensions, and osg::Window::_ignoredExtensions.

00957 {
00958     if(std::find(_ignoredExtensions.begin(),
00959                  _ignoredExtensions.end(),
00960                  s)                         != _ignoredExtensions.end())
00961     {
00962         return false;
00963     }
00964     
00965     if(std::find(_extensions.begin(),
00966                  _extensions.end(),
00967                  s)                         != _extensions.end())
00968     {
00969         return true;
00970     }
00971     
00972     return false;
00973 }

bool osg::Window::hasCommonExtension ( UInt32  id  )  [inline, static, inherited]

Check if the window has the indicated extension.

Definition at line 71 of file OSGWindow.inl.

References osg::Window::_commonExtensions.

Referenced by osg::PhongMaterial::createChunkMaterial(), and osg::PhongMaterial::prepareLocalChunks().

00072 {
00073     if(id >= _commonExtensions.size())
00074         return false;
00075 
00076     return _commonExtensions[id];
00077 }

void * osg::Window::getFunction ( UInt32  id  )  [inline, inherited]

Get the indicated extension function. The id and the returned functions are checked for sanity and a warning is issued if there are problems. Use getFunctionNoCheck if you're sure you don't need them.

Definition at line 84 of file OSGWindow.inl.

References osg::Window::_extFunctions, osg::Window::_registeredFunctions, and FINFO.

Referenced by osg::SHLChunk::activate(), osg::RegisterCombinersChunk::activate(), osg::ProgramChunk::activate(), osg::PointChunk::activate(), osg::DVRSimpleLUTShader::activate(), osg::BlendChunk::activate(), osg::DVRIsoShader::activate_NVRegisterCombinerShading(), osg::TextureChunk::activeTexture(), osg::FBOViewport::bind(), osg::SHLChunk::changeFrom(), osg::ProgramChunk::changeFrom(), osg::PointChunk::changeFrom(), osg::BlendChunk::changeFrom(), osg::FBOViewport::checkFrameBufferStatus(), osg::SHLChunk::deactivate(), osg::ProgramChunk::deactivate(), osg::PointChunk::deactivate(), osg::DVRSimpleLUTShader::deactivate(), osg::BlendChunk::deactivate(), drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::draw(), drawShaderQuads< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::draw(), osg::GeoVBO::draw(), drawShaderStrips< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::drawIndexed(), drawShaderQuads< posTrait, secPosTrait, colTrait, texTrait, sizeTrait, normalTrait >::drawIndexed(), osg::Slices::drawSlices(), GeoPump128(), GeoPump129(), osg::SHLChunk::handleGL(), osg::ProgramChunk::handleGL(), osg::TextureChunk::handleTexture(), osg::DVRMtexLUTShader::initCombiners(), osg::DVRIsoShader::initCombiners_Diffuse2Combiners(), osg::DVRIsoShader::initCombiners_DiffuseMultiCombiners(), osg::DVRIsoShader::initCombiners_IsoSurfaceDiffuse(), osg::DVRIsoShader::initCombiners_IsoSurfaceSpecular(), osg::DVRIsoShader::initCombiners_Specular2Combiners(), osg::DVRIsoShader::initCombiners_SpecularMultiCombiners(), osg::FBOViewport::initialize(), osg::FBOViewport::render(), osg::DVRMtexLUTShader::renderSlice(), osg::DVRIsoShader::renderSlice_NVRegisterCombinerShading(), osg::FBOViewport::setTarget(), osg::DVRSimpleLUTShader::setupAlphaCorrectionRegisterCombiners(), osg::DVRIsoShader::setupCombinerParametersDiffuse(), osg::DVRIsoShader::setupCombinerParametersSpecular(), osg::RenderAction::start(), osg::FBOViewport::stop(), osg::GeoVBO::update(), osg::SHLChunk::updateActiveLightsMask(), osg::SHLChunk::updateCameraOrientation(), osg::SHLChunk::updateCameraPosition(), osg::SHLChunk::updateClusterId(), osg::SHLChunk::updateInvViewMatrix(), osg::SHLChunk::updateInvWorldMatrix(), osg::SHLChunk::updateLight0Active(), osg::SHLChunk::updateLight1Active(), osg::SHLChunk::updateLight2Active(), osg::SHLChunk::updateLight3Active(), osg::SHLChunk::updateLight4Active(), osg::SHLChunk::updateLight5Active(), osg::SHLChunk::updateLight6Active(), osg::SHLChunk::updateLight7Active(), osg::SHLChunk::updateOSGParameters(), osg::SHLChunk::updateParameterLocation(), osg::SHLChunk::updateParameterLocations(), osg::SHLChunk::updateParameters(), osg::SHLChunk::updateProgram(), osg::SHLChunk::updateProgramParameters(), osg::SHLChunk::updateStereoLeftEye(), osg::SHLChunk::updateTransInvWorldMatrix(), osg::SHLChunk::updateViewMatrix(), osg::SHLChunk::updateWorldMatrix(), and osg::GeoVBO::~GeoVBO().

00085 {
00086     if(id >= _extFunctions.size())
00087     {
00088         FINFO(("Window::getFunction: illegal id %d!\n", id));
00089         return NULL;
00090     }
00091     if(_extFunctions[id] == NULL)
00092     {
00093         FINFO(("Window::getFunction: function \"%s\" is NULL!\n",
00094                     _registeredFunctions[id].c_str()));
00095         return NULL;
00096     }
00097     return _extFunctions[id];
00098 }

void * osg::Window::getFunctionNoCheck ( UInt32  id  )  [inline, inherited]

Get the indicated extension function.

Warning:
No error checks are done on the passed index nor on the returned function!

Definition at line 104 of file OSGWindow.inl.

References osg::Window::_extFunctions.

00105 {
00106     return _extFunctions[ id ];
00107 }

void osg::Window::dumpExtensions ( void   )  [inherited]

Dump all the registered extensions to std::cout.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 1128 of file OSGWindow.cpp.

References osg::Window::_extensions.

01129 {   
01130     std::vector<std::string>::iterator it;
01131     std::cout << "GL Extensions: ";
01132     for ( it = _extensions.begin(); it != _extensions.end(); it++ )
01133     {
01134         std::cout << it->c_str() << ", ";
01135     }
01136     std::cout << std::endl;       
01137 }

Real32 osg::Window::getConstantValue ( GLenum  id  )  [inline, inherited]

const Vec2f & osg::Window::getConstantValuev ( GLenum  id  )  [inherited]

Return the value of the registered constant, (Inf, Inf) if not registered or no value received yet.

Definition at line 1558 of file OSGWindow.cpp.

References osg::Window::_availConstants, and osg::Inf.

Referenced by osg::Window::getConstantValue().

01559 {
01560     static Vec2f inf(Inf, Inf);
01561 
01562     ConstHash::iterator it = _availConstants.find(id);
01563 
01564     if(it != _availConstants.end())
01565         return _availConstants[id];
01566 
01567     return inf;
01568 }

const std::vector< std::string > & osg::Window::getRegisteredExtensions ( void   )  [inline, static, inherited]

Access the registered extensions.

Definition at line 160 of file OSGWindow.inl.

References osg::Window::_registeredExtensions.

00161 {
00162     return _registeredExtensions;
00163 }

const std::vector< std::string > & osg::Window::getRegisteredFunctions ( void   )  [inline, inherited]

Access the registered functions.

Definition at line 167 of file OSGWindow.inl.

References osg::Window::_registeredFunctions.

00168 {
00169     return _registeredFunctions;
00170 }

const std::vector< std::string > & osg::Window::getExtensions ( void   )  [inline, inherited]

Access the available extensions.

Definition at line 153 of file OSGWindow.inl.

References osg::Window::_extensions.

00154 {
00155     return _extensions;
00156 }

const std::vector< std::string > & osg::Window::getIgnoredExtensions ( void   )  [inline, inherited]

Access the ignored extensions.

Definition at line 174 of file OSGWindow.inl.

References osg::Window::_ignoredExtensions.

00175 {
00176     return _ignoredExtensions;
00177 }

UInt32 osg::Window::registerGLObject ( GLObjectFunctor  functor,
UInt32  num = 1 
) [static, inherited]

Register a number of OpenGL objects. By default the number is 1, but more can be necessary for things like text. It returns the first id of the contiguous reserved ID block.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 534 of file OSGWindow.cpp.

References osg::Window::_glObjects, osg::Window::GLObject, osg::Window::initRegisterGLObject(), osg::Window::staticAcquire(), and osg::Window::staticRelease().

Referenced by osg::TextureChunk::changed(), osg::SHLChunk::changed(), osg::Geometry::changed(), osg::VertexProgramChunk::onCreate(), osg::TextureChunk::onCreate(), osg::Surface::onCreate(), osg::SHLChunk::onCreate(), osg::Geometry::onCreate(), osg::FragmentProgramChunk::onCreate(), and osg::CubeTextureChunk::onCreate().

00535 {
00536     UInt32    id, i; 
00537     GLObject *pGLObject;
00538 
00539     staticAcquire();
00540     
00541     // reserve index 0, illegal for most OpenGL functions
00542     if(_glObjects.empty())
00543         _glObjects.push_back( NULL );
00544 
00545     id        = _glObjects.size();
00546     pGLObject = new GLObject(functor);
00547     
00548     // does the requested block fit into the capacity?
00549     
00550     if(_glObjects.capacity() >= id + num)
00551     {
00552         _glObjects.insert(_glObjects.end(), num, pGLObject );
00553         
00554         initRegisterGLObject(id, num);
00555 
00556         staticRelease();
00557 
00558         return id;
00559     }
00560     
00561     // doesn't fit, try to find a block in the middle
00562     
00563     UInt32 cnt = 0;
00564 
00565     // start searching at 1, id 0 is reserved for GL
00566     for(i = 1; i < _glObjects.size(); ++i)
00567     {       
00568         if(_glObjects[i] == NULL)
00569         {
00570             if(cnt == 0)
00571             {
00572                 id = i;
00573             }
00574 
00575             ++cnt;
00576 
00577             if(cnt == num) 
00578             {
00579                 // block of unused entries found ...
00580                         
00581                 while(i >= id) 
00582                 {
00583                     _glObjects[i] = pGLObject;
00584                     i = i - 1;
00585                 } 
00586                 
00587                 initRegisterGLObject(id, num);
00588 
00589                 staticRelease();
00590 
00591                 return id;
00592             }
00593         }
00594         else
00595         {
00596             cnt = 0;
00597             id = 0;
00598         }
00599     }
00600     
00601     // no block found, add at the end
00602 
00603     if(id > 0) // ok the last entries in the vector were empty
00604     {
00605         // fill the empty slots at the end
00606         i = id + cnt - 1;
00607         while ( i >= id )
00608         {
00609             _glObjects[i] = pGLObject;
00610             i = i - 1;
00611         }
00612     }
00613     else
00614     {
00615         // we found no empty entries so the new id is the size of the vector.
00616         id = _glObjects.size();
00617     }
00618 
00619     // expand the vector for the rest
00620     for ( i = 1; i <= num - cnt; i++ )
00621     {
00622         _glObjects.push_back( pGLObject );
00623     }
00624 
00625     initRegisterGLObject(id, num);
00626 
00627     staticRelease();
00628     
00629     return id;
00630 }

void osg::Window::validateGLObject ( UInt32  id  )  [inherited]

Validate the given object, i.e. make sure it is up-to-date in the current context.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 638 of file OSGWindow.cpp.

References osg::Window::_glObjects, osg::Window::_lastValidate, osg::WindowBase::_mfGlObjectLastRefresh, osg::WindowBase::_mfGlObjectLastReinitialize, osg::TypedVoidFunctor2Base< CallArgT, ArgsT, SizeTraitsT >::call(), FDEBUG, osg::Window::GLObject::getFunctor(), osg::WindowBase::getGlObjectEventCounter(), osg::Window::GLObject::incRefCounter(), osg::Window::initialize, osg::Window::needrefresh, osg::Window::packIdStatus(), osg::Window::reinitialize, osg::MField< FieldTypeT, fieldNameSpace >::size(), and SWARNING.

Referenced by osg::TextureChunk::activate(), osg::SHLChunk::activate(), osg::ProgramChunk::activate(), osg::CubeTextureChunk::activate(), osg::TextureChunk::changeFrom(), osg::SHLChunk::changeFrom(), osg::ProgramChunk::changeFrom(), osg::CubeTextureChunk::changeFrom(), osg::TextureGrabBackground::clear(), osg::TextureGrabForeground::draw(), osg::Surface::drawPrimitives(), osg::Geometry::drawPrimitives(), osg::Geometry::drawVBO(), osg::FBOViewport::render(), osg::SHLChunk::update(), and osg::Window::validateAllGLObjects().

00639 {
00640     if ( id == 0 )
00641     {
00642         SWARNING << "Window::validateGLObject: id is 0!" << std::endl;
00643             return;
00644     }
00645     
00646     GLObject *obj = _glObjects[id];
00647     
00648     if(obj == NULL)
00649     {
00650         SWARNING << "Window::validateGLObject: obj with id " << id << " is NULL!" << std::endl;
00651         return;
00652     }
00653 
00654     if(id >= _lastValidate.size()) // can happen if multi-threading
00655     {
00656         _lastValidate.insert(_lastValidate.end(), 
00657                              id + 1 - _lastValidate.size(),
00658                              0);
00659     }
00660     
00661     FDEBUG(("Window 0x%p (event %d,ri:%d,rf:%d): "
00662             "Validating object %d: last reinit:%d, last validate:"
00663             "%d last refresh: %d => %s\n", 
00664             this, getGlObjectEventCounter(), 
00665             _mfGlObjectLastReinitialize.size(),
00666             _mfGlObjectLastRefresh.size(),
00667             id, 
00668             (_mfGlObjectLastReinitialize.size() > id)?
00669                 _mfGlObjectLastReinitialize[id]:0xffffffff,
00670             _lastValidate[id],
00671             (_mfGlObjectLastRefresh.size() > id)?
00672                 _mfGlObjectLastRefresh[id]:0xffffffff,
00673             (_mfGlObjectLastReinitialize[id] == 0)?"init":
00674             ((_mfGlObjectLastReinitialize[id] > _lastValidate[id])?"reinit":
00675             ((_mfGlObjectLastRefresh[id] > _lastValidate[id])?"refresh":
00676             "up-to-date"))
00677           ));
00678     
00679     if(_mfGlObjectLastReinitialize[id] == 0)
00680     {
00681         obj->incRefCounter();
00682         obj->getFunctor().call(this, packIdStatus(id, initialize));
00683         _mfGlObjectLastReinitialize[id] = 1;
00684         _lastValidate[id] = getGlObjectEventCounter();
00685     }
00686     else if(_mfGlObjectLastReinitialize[id] > _lastValidate[id])
00687     {
00688         obj->getFunctor().call(this, packIdStatus(id, reinitialize));
00689         _lastValidate[id] = getGlObjectEventCounter();
00690     }
00691     else if(_mfGlObjectLastRefresh[id] > _lastValidate[id])
00692     {
00693         obj->getFunctor().call(this, packIdStatus(id, needrefresh));
00694         _lastValidate[id] = getGlObjectEventCounter();
00695     }
00696 }

void osg::Window::validateAllGLObjects ( void   )  [inherited]

Validate all existing GL objects. Use with care, and only if the correct OpenGL context is active.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 705 of file OSGWindow.cpp.

References osg::Window::_glObjects, osg::Window::activate(), osg::Window::frameExit(), osg::Window::frameInit(), and osg::Window::validateGLObject().

00706 {
00707     activate();
00708     frameInit();
00709 
00710     for (UInt32 i = 1; i < _glObjects.size(); ++i)
00711         validateGLObject(i);
00712     
00713     frameExit();
00714 }   

void osg::Window::setGLObjectId ( UInt32  id,
UInt32  id2 
) [inline, inherited]

Validate the given object, i.e. make sure it is up-to-date in the current context.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 179 of file OSGWindow.inl.

References osg::Window::_glObjects, osg::Window::_ids, and SWARNING.

Referenced by osg::Geometry::createVBO(), osg::Geometry::destroyVBO(), osg::TextureChunk::handleGL(), osg::SHLChunk::handleGL(), osg::ProgramChunk::handleGL(), osg::Geometry::handleGL(), osg::CubeTextureChunk::handleGL(), and osg::SHLChunk::updateProgram().

00180 {
00181     if(osgId < _ids.size())
00182     {
00183         _ids[osgId] = id2;
00184     }
00185     else
00186     {
00187         _ids.resize(_glObjects.size());
00188         if(osgId < _ids.size())
00189             _ids[osgId] = id2;
00190         else
00191             SWARNING << "Window::setGLObjectId: id (" << osgId << ") is not valid!" << std::endl;
00192     }
00193 }

UInt32 osg::Window::getGLObjectId ( UInt32  id  )  [inline, inherited]

UInt32 osg::Window::getGLObjectsSize ( void   )  [inline, static, inherited]

Validate the given object, i.e. make sure it is up-to-date in the current context.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 204 of file OSGWindow.inl.

References osg::Window::_glObjects.

00205 {
00206     return _glObjects.size();
00207 }

void osg::Window::refreshGLObject ( UInt32  id  )  [static, inherited]

Mark the given object for refresh. The next time it is validated the registered callback function will be called for a refresh action.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 722 of file OSGWindow.cpp.

References osg::Window::_allWindows, osg::beginEditCP(), osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::endEditCP(), osg::MField< FieldTypeT, fieldNameSpace >::getValues(), osg::WindowBase::GlObjectEventCounterFieldMask, osg::WindowBase::GlObjectLastRefreshFieldMask, osg::MField< FieldTypeT, fieldNameSpace >::size(), and SWARNING.

Referenced by osg::TextureChunk::changed(), osg::Surface::changed(), osg::SHLChunk::changed(), osg::ProgramChunk::changed(), osg::Geometry::changed(), osg::Geometry::invalidateDlistCache(), osg::Window::refreshAllGLObjects(), and osg::BrickSet::reloadBrickTextures().

00723 {
00724     if ( id == 0 )
00725     {
00726         SWARNING << "Window::refreshGLObject: id is 0!" << std::endl;
00727         return;
00728     }
00729 
00730     std::vector<WindowPtr>::iterator it;
00731 
00732     for ( it = _allWindows.begin(); it != _allWindows.end(); ++it)
00733     {
00734         beginEditCP(*it, GlObjectEventCounterFieldMask|
00735                          GlObjectLastRefreshFieldMask);
00736 
00737         UInt32 lastinv = (*it)->getGlObjectEventCounter() + 1;
00738         MFUInt32 &field = (*it)->_mfGlObjectLastRefresh;
00739         if(field.size() <= id)
00740             field.getValues().insert(field.end(), id - field.size() + 1, 0 );
00741         field[id] = lastinv;
00742         (*it)->setGlObjectEventCounter(lastinv);
00743 
00744         endEditCP  (*it, GlObjectEventCounterFieldMask|
00745                          GlObjectLastRefreshFieldMask);
00746     }
00747 }

void osg::Window::refreshAllGLObjects ( void   )  [static, inherited]

Refresh all existing GL objects.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 754 of file OSGWindow.cpp.

References osg::Window::_glObjects, and osg::Window::refreshGLObject().

00755 {
00756     for (UInt32 i = 1; i < _glObjects.size(); ++i)
00757         refreshGLObject(i);
00758 }

void osg::Window::reinitializeGLObject ( UInt32  id  )  [static, inherited]

Mark the given object for reinitialisation. The next time it is validated the registered callback function will be called for a reinit action.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 766 of file OSGWindow.cpp.

References osg::Window::_allWindows, osg::beginEditCP(), osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::endEditCP(), osg::MField< FieldTypeT, fieldNameSpace >::getValues(), osg::WindowBase::GlObjectEventCounterFieldMask, osg::WindowBase::GlObjectLastReinitializeFieldMask, osg::MField< FieldTypeT, fieldNameSpace >::size(), and SWARNING.

Referenced by osg::TextureChunk::changed(), osg::SHLChunk::changed(), osg::ProgramChunk::changed(), and osg::Window::reinitializeAllGLObjects().

00767 {
00768     if ( id == 0 )
00769     {
00770         SWARNING << "Window::reinitializeGLObject: id is 0!" << std::endl;
00771         return;
00772     }
00773 
00774     std::vector<WindowPtr>::iterator it;
00775 
00776     for(it = _allWindows.begin(); it != _allWindows.end(); ++it)
00777     {
00778         beginEditCP(*it, GlObjectEventCounterFieldMask|
00779                          GlObjectLastReinitializeFieldMask);
00780 
00781         UInt32 lastinv = (*it)->getGlObjectEventCounter() + 1;
00782 
00783         MFUInt32 &field = (*it)->_mfGlObjectLastReinitialize;
00784         if(field.size() <= id)
00785             field.getValues().insert(field.end(), id - field.size() + 1, 0 );
00786         // is it already validated?
00787         if(field[id] == 0)
00788             continue;
00789         field[id] = lastinv;
00790         (*it)->setGlObjectEventCounter(lastinv);
00791 
00792         endEditCP  (*it, GlObjectEventCounterFieldMask|
00793                          GlObjectLastReinitializeFieldMask);
00794     }
00795 }

void osg::Window::reinitializeAllGLObjects ( void   )  [static, inherited]

Reinitialize all existing GL objects.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 802 of file OSGWindow.cpp.

References osg::Window::_glObjects, and osg::Window::reinitializeGLObject().

00803 {
00804     for (UInt32 i = 1; i < _glObjects.size(); ++i)
00805         reinitializeGLObject(i);
00806 }

void osg::Window::destroyGLObject ( UInt32  id,
UInt32  num = 1 
) [static, inherited]

Mark the given objects for destruction. The actual destruction will happen later.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 869 of file OSGWindow.cpp.

References osg::Window::_allWindows, osg::Window::_glObjects, and FWARNING.

Referenced by osg::Geometry::changed(), osg::TextureChunk::onDestroy(), osg::Surface::onDestroy(), osg::SHLChunk::onDestroy(), osg::Geometry::onDestroy(), and osg::ProgramChunk::~ProgramChunk().

00870 {
00871 #ifdef OSG_DEBUG
00872     if(id >= _glObjects.size() || _glObjects[id] == NULL)
00873     {
00874         FWARNING(("Window::destroyGLObject: object %d is NULL!\n", id));
00875         return;
00876     }
00877 #endif
00878 
00879     // Has this object ever been used?
00880     if(_glObjects[id] && _glObjects[id]->getRefCounter() == 0)
00881     {
00882         if(_glObjects[id])
00883             delete _glObjects[ id ];
00884         
00885         for ( UInt32 j = 0; j < num ; j++)
00886         {
00887             _glObjects[id+j] = NULL;
00888         }
00889 
00890         return;
00891     }
00892     
00893     std::vector<WindowPtr>::iterator it;
00894 
00895     for(it = _allWindows.begin(); it != _allWindows.end(); ++it)
00896     {
00897 #ifdef OSG_DEBUG
00898         if(id + num > (*it)->_mfGlObjectLastReinitialize.size())
00899         {
00900             FWARNING(("Window::destroyGLObject: id %d + num %d exceed"
00901                 "registered objects size %d!\n", id, num, 
00902                 (*it)->_mfGlObjectLastReinitialize.size()));
00903             return;
00904         }
00905 #endif
00906 
00907         // has the object been used in this context at all?
00908         if((*it)->getGlObjectLastReinitialize()[id] != 0) 
00909             (*it)->_glObjectDestroyList.push_back(DestroyEntry(id,num));
00910     }
00911 }

void osg::Window::unpackIdStatus ( UInt32  idstatus,
UInt32 osgId,
GLObjectStatusE status 
) [inline, static, inherited]

Unpack the id and the status from one UInt32 packed by packIdStatus

Definition at line 226 of file OSGWindow.inl.

References osg::Window::statusMask, and osg::Window::statusShift.

Referenced by osg::TextureChunk::handleGL(), osg::Surface::handleGL(), osg::SHLChunk::handleGL(), osg::ProgramChunk::handleGL(), osg::Geometry::handleGL(), osg::CubeTextureChunk::handleGL(), and osg::ProgramChunk::printCompileError().

00228 {
00229     osgId = idstatus >> statusShift;
00230     status = static_cast<GLObjectStatusE>(idstatus & statusMask);
00231 }

bool osg::Window::isResizePending ( void   )  [inline, inherited]

Definition at line 56 of file OSGWindow.inl.

References osg::WindowBase::_sfResizePending, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

Referenced by osg::Window::resizeGL().

00057 {
00058     return _sfResizePending.getValue();
00059 }

void osg::Window::resize ( int  width,
int  height 
) [virtual, inherited]

Resize notifier function.

As OpenSG does not do Window System event management it needs to be notified whenever the size of a Window changes.

Definition at line 1695 of file OSGWindow.cpp.

References osg::beginEditCP(), osg::endEditCP(), osg::WindowBase::HeightFieldMask, osg::WindowBase::ResizePendingFieldMask, osg::WindowBase::setHeight(), osg::WindowBase::setResizePending(), osg::WindowBase::setWidth(), and osg::WindowBase::WidthFieldMask.

void osg::Window::resizeGL ( void   )  [virtual, inherited]

Resize function.

This function needs to be called before a Window's Viewports are rendered, to ensure that eventual pending resizes are handled correctly.

Definition at line 1711 of file OSGWindow.cpp.

References osg::beginEditCP(), osg::endEditCP(), osg::WindowBase::getHeight(), osg::WindowBase::getWidth(), osg::Window::isResizePending(), osg::WindowBase::ResizePendingFieldMask, and osg::WindowBase::setResizePending().

Referenced by osg::Window::draw(), osg::FBOViewport::render(), and osg::RenderAction::start().

01712 {
01713     if ( isResizePending () )
01714     {
01715         glViewport( 0, 0, getWidth(), getHeight() );
01716         WindowPtr win(*this);
01717         beginEditCP(win, ResizePendingFieldMask);
01718         setResizePending( false );
01719         endEditCP  (win, ResizePendingFieldMask);
01720     }
01721 }

void osg::Window::setSize ( UInt16  width,
UInt16  height 
) [inline, inherited]

Set the width and height of the Window. Only use if you really know what you're doing. In most cases resize() is a better choice.

Definition at line 50 of file OSGWindow.inl.

References osg::WindowBase::setHeight(), and osg::WindowBase::setWidth().

Referenced by osg::SortFirstWindow::clientPreSync().

00051 {
00052     setHeight(height);
00053     setWidth(width);
00054 }

void osg::Window::draw ( DrawAction action = NULL  )  [virtual, inherited]

Draw the Window using the given DrawAction.

It takes care of all initialisation and cleanup functions and contains just 6 lines of code. If you know that the correct context is active or you want to delay swaps you can just copy and manipulate it.

Definition at line 1603 of file OSGWindow.cpp.

References osg::Window::activate(), osg::Window::drawAllViewports(), osg::Window::frameExit(), osg::Window::frameInit(), osg::Window::resizeGL(), and osg::Window::swap().

01604 {
01605     activate();
01606     frameInit();    // query recently registered GL extensions
01607     
01608     resizeGL();
01609 
01610     drawAllViewports(action);
01611 
01612     swap();
01613     frameExit();    // after frame cleanup: delete GL objects, if needed
01614 }

void osg::Window::drawAllViewports ( DrawAction action = NULL  )  [virtual, inherited]

Draw all the Viewports of the Window using the given DrawAction.

A simple convenience function that loops all Viewports and call their draw method.

Definition at line 1621 of file OSGWindow.cpp.

References osg::WindowBase::_mfPort, osg::MField< FieldTypeT, fieldNameSpace >::begin(), osg::MField< FieldTypeT, fieldNameSpace >::end(), osg::DrawActionBase::setWindow(), and SWARNING.

Referenced by osg::Window::draw().

01622 {
01623     MFViewportPtr::iterator       portIt  = _mfPort.begin();
01624     MFViewportPtr::const_iterator portEnd = _mfPort.end();
01625 
01626     if(action != NULL)
01627     {
01628         action->setWindow(this);
01629         
01630         while(portIt != portEnd)
01631         {
01632             (*portIt)->draw(action);
01633 
01634             ++portIt;
01635         }
01636     }
01637     else
01638     {
01639         SWARNING << "Window::drawAllViewports: no action!" << std::endl;
01640     }
01641 }

void osg::Window::setupGL ( void   )  [protected, virtual, inherited]

Initialize the OpenGL state OpenSG expects. This should be called once whenever a new Window is opened.

Don't call it directly, call the Window System-specific init() method instead.

Definition at line 1577 of file OSGWindow.cpp.

References osg::Window::frameInit().

Referenced by osg::XWindow::init(), osg::QTWindow::init(), and osg::PassiveWindow::init().

01578 {   
01579     glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
01580     glPixelStorei( GL_PACK_ALIGNMENT, 1 );
01581     
01582     glDepthFunc( GL_LEQUAL );
01583     glEnable( GL_DEPTH_TEST );
01584     
01585     glEnable( GL_NORMALIZE );
01586     
01587     // switch off default light
01588     GLfloat nul[4]={0,0,0,0};
01589     glLightfv(GL_LIGHT0, GL_DIFFUSE, nul);
01590     glLightfv(GL_LIGHT0, GL_SPECULAR, nul);
01591     
01592     frameInit();    // call it to setup extensions
01593 }

void osg::Window::initRegisterGLObject ( UInt32  id,
UInt32  num 
) [static, protected, inherited]

Initialize the GL object registration for the given objects in all Windows.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 814 of file OSGWindow.cpp.

References osg::Window::_allWindows, and SWARNING.

Referenced by osg::Window::registerGLObject().

00815 {
00816     if ( id == 0 )
00817     {
00818         SWARNING << "Window::initRegisterGLObject: id is 0!" << std::endl;
00819         return;
00820     }
00821 
00822     std::vector<WindowPtr>::iterator it;
00823 
00824     for(it = _allWindows.begin(); it != _allWindows.end(); ++it)
00825     {
00826         (*it)->doInitRegisterGLObject(id, num);
00827     }
00828 }

UInt32 osg::Window::packIdStatus ( UInt32  osgId,
GLObjectStatusE  status 
) [inline, static, protected, inherited]

Pack the id and the status into one UInt32. Used to pass the id and status to the actual implementation functions.

Dev:

This packing is not really necessary and just done because I didn't want to change all the prototypes and implementations everywhere. Do it for 1.3.

Definition at line 219 of file OSGWindow.inl.

References osg::Window::statusShift.

Referenced by osg::Window::frameExit(), and osg::Window::validateGLObject().

00220 {
00221     return (osgId << statusShift) | status;
00222 }

void osg::Window::doInitRegisterGLObject ( UInt32  id,
UInt32  num 
) [protected, inherited]

Initialize the GL object registration for the given objects in the given Window.

See OpenGL Objects & Extension Handling for a description of the OpenGL object concept.

Definition at line 836 of file OSGWindow.cpp.

References osg::Window::_lastValidate, osg::WindowBase::_mfGlObjectLastRefresh, osg::WindowBase::_mfGlObjectLastReinitialize, osg::beginEditCP(), osg::endEditCP(), osg::WindowBase::GlObjectLastRefreshFieldMask, osg::WindowBase::GlObjectLastReinitializeFieldMask, osg::MField< FieldTypeT, fieldNameSpace >::resize(), and osg::MField< FieldTypeT, fieldNameSpace >::size().

Referenced by osg::Window::operator=(), and osg::Window::Window().

00837 {
00838     WindowPtr win(this);
00839     
00840     beginEditCP(win, GlObjectLastReinitializeFieldMask|
00841                      GlObjectLastRefreshFieldMask);
00842 
00843     if(_mfGlObjectLastReinitialize.size() < id + num)
00844         _mfGlObjectLastReinitialize.resize(id + num);
00845         
00846     if(_mfGlObjectLastRefresh.size() < id + num)
00847         _mfGlObjectLastRefresh.resize(id + num);
00848         
00849     if(_lastValidate.size() < id + num)       
00850         _lastValidate.resize(id + num);
00851  
00852     for(UInt32 i = id; i < id + num; ++i)
00853     {
00854         _mfGlObjectLastReinitialize[i] = 0;
00855         _mfGlObjectLastRefresh     [i] = 0;
00856         _lastValidate[i] = 0;
00857    }
00858 
00859     endEditCP  (win, GlObjectLastReinitializeFieldMask|
00860                      GlObjectLastRefreshFieldMask);
00861 }

void osg::FieldContainer::onCreate ( const FieldContainer source = NULL  )  [inline, protected, inherited]

Definition at line 318 of file OSGFieldContainerImpl.inl.

Referenced by osg::ShaderParameterChunk::onCreate().

00319 {
00320 }

void osg::FieldContainer::onCreateAspect ( const FieldContainer aspect0,
const FieldContainer source = NULL 
) [inline, protected, inherited]

Definition at line 323 of file OSGFieldContainerImpl.inl.

00325 {
00326 }

SFUInt16 * osg::WindowBase::getSFWidth ( void   )  [inline, inherited]

Definition at line 75 of file OSGWindowBase.inl.

References osg::WindowBase::_sfWidth.

00076 {
00077     return &_sfWidth;
00078 }

SFUInt16 * osg::WindowBase::getSFHeight ( void   )  [inline, inherited]

Definition at line 82 of file OSGWindowBase.inl.

References osg::WindowBase::_sfHeight.

00083 {
00084     return &_sfHeight;
00085 }

MFViewportPtr * osg::WindowBase::getMFPort ( void   )  [inline, inherited]

Definition at line 89 of file OSGWindowBase.inl.

References osg::WindowBase::_mfPort.

00090 {
00091     return &_mfPort;
00092 }

SFBool * osg::WindowBase::getSFResizePending ( void   )  [inline, inherited]

Definition at line 96 of file OSGWindowBase.inl.

References osg::WindowBase::_sfResizePending.

00097 {
00098     return &_sfResizePending;
00099 }

UInt16 & osg::WindowBase::getWidth ( void   )  [inline, inherited]

const UInt16 & osg::WindowBase::getWidth ( void   )  const [inline, inherited]

Definition at line 132 of file OSGWindowBase.inl.

References osg::WindowBase::_sfWidth, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00133 {
00134     return _sfWidth.getValue();
00135 }

UInt16 & osg::WindowBase::getHeight ( void   )  [inline, inherited]

const UInt16 & osg::WindowBase::getHeight ( void   )  const [inline, inherited]

Definition at line 153 of file OSGWindowBase.inl.

References osg::WindowBase::_sfHeight, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00154 {
00155     return _sfHeight.getValue();
00156 }

bool & osg::WindowBase::getResizePending ( void   )  [inline, inherited]

Definition at line 167 of file OSGWindowBase.inl.

References osg::WindowBase::_sfResizePending, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00168 {
00169     return _sfResizePending.getValue();
00170 }

const bool & osg::WindowBase::getResizePending ( void   )  const [inline, inherited]

Definition at line 174 of file OSGWindowBase.inl.

References osg::WindowBase::_sfResizePending, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00175 {
00176     return _sfResizePending.getValue();
00177 }

ViewportPtr & osg::WindowBase::getPort ( const UInt32  index  )  [inline, inherited]

Definition at line 210 of file OSGWindowBase.inl.

References osg::WindowBase::_mfPort.

Referenced by osg::FBOViewport::render().

00211 {
00212     return _mfPort[index];
00213 }

MFViewportPtr & osg::WindowBase::getPort ( void   )  [inline, inherited]

const MFViewportPtr & osg::WindowBase::getPort ( void   )  const [inline, inherited]

Definition at line 224 of file OSGWindowBase.inl.

References osg::WindowBase::_mfPort.

00225 {
00226     return _mfPort;
00227 }

void osg::WindowBase::setWidth ( const UInt16 value  )  [inline, inherited]

void osg::WindowBase::setHeight ( const UInt16 value  )  [inline, inherited]

void osg::WindowBase::setResizePending ( const bool &  value  )  [inline, inherited]

SFUInt32 * osg::WindowBase::getSFGlObjectEventCounter ( void   )  [inline, protected, inherited]

Definition at line 103 of file OSGWindowBase.inl.

References osg::WindowBase::_sfGlObjectEventCounter.

00104 {
00105     return &_sfGlObjectEventCounter;
00106 }

MFUInt32 * osg::WindowBase::getMFGlObjectLastRefresh ( void   )  [inline, protected, inherited]

Definition at line 110 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastRefresh.

00111 {
00112     return &_mfGlObjectLastRefresh;
00113 }

MFUInt32 * osg::WindowBase::getMFGlObjectLastReinitialize ( void   )  [inline, protected, inherited]

Definition at line 117 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastReinitialize.

00118 {
00119     return &_mfGlObjectLastReinitialize;
00120 }

UInt32 & osg::WindowBase::getGlObjectEventCounter ( void   )  [inline, protected, inherited]

const UInt32 & osg::WindowBase::getGlObjectEventCounter ( void   )  const [inline, protected, inherited]

Definition at line 195 of file OSGWindowBase.inl.

References osg::WindowBase::_sfGlObjectEventCounter, and osg::SField< FieldTypeT, fieldNameSpace >::getValue().

00196 {
00197     return _sfGlObjectEventCounter.getValue();
00198 }

UInt32 & osg::WindowBase::getGlObjectLastRefresh ( UInt32  index  )  [inline, protected, inherited]

Definition at line 231 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastRefresh.

00232 {
00233     return _mfGlObjectLastRefresh[index];
00234 }

MFUInt32 & osg::WindowBase::getGlObjectLastRefresh ( void   )  [inline, protected, inherited]

Definition at line 238 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastRefresh.

00239 {
00240     return _mfGlObjectLastRefresh;
00241 }

const MFUInt32 & osg::WindowBase::getGlObjectLastRefresh ( void   )  const [inline, protected, inherited]

Definition at line 245 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastRefresh.

00246 {
00247     return _mfGlObjectLastRefresh;
00248 }

UInt32 & osg::WindowBase::getGlObjectLastReinitialize ( UInt32  index  )  [inline, protected, inherited]

Definition at line 252 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastReinitialize.

00253 {
00254     return _mfGlObjectLastReinitialize[index];
00255 }

MFUInt32 & osg::WindowBase::getGlObjectLastReinitialize ( void   )  [inline, protected, inherited]

Definition at line 259 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastReinitialize.

Referenced by osg::Window::frameExit(), and osg::Window::onDestroy().

00260 {
00261     return _mfGlObjectLastReinitialize;
00262 }

const MFUInt32 & osg::WindowBase::getGlObjectLastReinitialize ( void   )  const [inline, protected, inherited]

Definition at line 266 of file OSGWindowBase.inl.

References osg::WindowBase::_mfGlObjectLastReinitialize.

00267 {
00268     return _mfGlObjectLastReinitialize;
00269 }

void osg::WindowBase::setGlObjectEventCounter ( const UInt32 value  )  [inline, protected, inherited]

void AttachmentContainer::addAttachment ( const AttachmentPtr fieldContainerP,
UInt16  binding = 0 
) [inherited]

Definition at line 84 of file OSGAttachmentContainer.cpp.

References osg::addRefCP(), osg::beginEditCP(), osg::endEditCP(), osg::NullFC, and osg::subRefCP().

Referenced by osg::AttachmentContainer::AttachmentContainer(), osg::Node::onCreate(), and osg::Image::setAttachmentField().

00086 {
00087     UInt32 key;
00088 
00089     if(fieldContainerP == NullFC)
00090         return;
00091 
00092     key = (UInt32 (fieldContainerP->getGroupId()) << 16) | binding;
00093 
00094     addRefCP(fieldContainerP);
00095 
00096     beginEditCP(fieldContainerP, Attachment::ParentsFieldMask);
00097     {
00098         fieldContainerP->addParent(getPtr());
00099     }
00100     endEditCP  (fieldContainerP, Attachment::ParentsFieldMask);
00101 
00102     AttachmentMap::iterator fcI = _attachmentMap.getValue().find(key);
00103 
00104     if(fcI != _attachmentMap.getValue().end())
00105     {
00106         beginEditCP((*fcI).second, Attachment::ParentsFieldMask);
00107         {
00108             (*fcI).second->subParent(getPtr());
00109         }
00110         endEditCP  ((*fcI).second, Attachment::ParentsFieldMask);
00111 
00112         subRefCP((*fcI).second);
00113 
00114         (*fcI).second = fieldContainerP;
00115     }
00116     else
00117     {
00118         _attachmentMap.getValue()[key] = fieldContainerP;
00119     }
00120 }

void AttachmentContainer::subAttachment ( const AttachmentPtr fieldContainerP,
UInt16  binding = 0 
) [inherited]

Definition at line 122 of file OSGAttachmentContainer.cpp.

References osg::AttachmentContainer::_attachmentMap, osg::beginEditCP(), osg::endEditCP(), osg::AttachmentContainer::getPtr(), osg::SField< FieldTypeT, fieldNameSpace >::getValue(), osg::NullFC, osg::Attachment::ParentsFieldMask, and osg::subRefCP().

00124 {
00125     UInt32 key;
00126 
00127     AttachmentMap::iterator fcI;
00128 
00129     if(fieldContainerP == NullFC)
00130         return;
00131 
00132     key = (UInt32(fieldContainerP->getGroupId()) << 16) | binding;
00133 
00134     fcI = _attachmentMap.getValue().find(key);
00135 
00136     if(fcI != _attachmentMap.getValue().end())
00137     {
00138         beginEditCP(fieldContainerP, Attachment::ParentsFieldMask);
00139         {
00140             (*fcI).second->subParent(getPtr());
00141         }
00142         endEditCP  (fieldContainerP, Attachment::ParentsFieldMask);
00143 
00144         subRefCP((*fcI).second);
00145 
00146         _attachmentMap.getValue().erase(fcI);
00147     }
00148 }

AttachmentPtr AttachmentContainer::findAttachment ( UInt32  groupId,
UInt16  binding = 0 
) [inherited]

Definition at line 150 of file OSGAttachmentContainer.cpp.

References osg::AttachmentContainer::_attachmentMap, osg::SField< FieldTypeT, fieldNameSpace >::getValue(), and osg::NullFC.

Referenced by osg::Image::findAttachmentField(), and osg::Image::setAttachmentField().

00152 {
00153     UInt32 key = (UInt32(groupId) << 16) | binding;
00154 
00155     AttachmentMap::iterator fcI = _attachmentMap.getValue().find(key);
00156 
00157     if(fcI == _attachmentMap.getValue().end())
00158     {
00159         return NullFC;
00160     }
00161     else
00162     {
00163         return (*fcI).second;
00164     }
00165 }

AttachmentPtr osg::AttachmentContainer::findAttachment ( const FieldContainerType type,
UInt16  binding = 0 
) [inline, inherited]

Definition at line 57 of file OSGAttachmentContainerImpl.inl.

00060 {
00061     return findAttachment(type.getGroupId(), binding);
00062 }

SFAttachmentMap * AttachmentContainer::getSFAttachments ( void   )  [inherited]

Field Access

Definition at line 170 of file OSGAttachmentContainer.cpp.

References osg::AttachmentContainer::_attachmentMap.

00171 {
00172     return &_attachmentMap;
00173 }

AttachmentContainerPtr AttachmentContainer::getPtr ( void   )  [protected, inherited]

UInt16 osg::FieldContainer::getClassGroupId ( void   )  [inline, static, inherited]

Definition at line 71 of file OSGFieldContainerImpl.inl.

References osg::FieldContainer::_type, and osg::FieldContainerType::getGroupId().

00072 {
00073     return _type.getGroupId();
00074 }

UInt32 osg::FieldContainer::getTypeId ( void   )  const [inline, inherited]

Definition at line 77 of file OSGFieldContainerImpl.inl.

References osg::TypeBase::getId(), and osg::FieldContainer::getType().

Referenced by osg::TextureChunk::changeFrom(), and osg::CubeTextureChunk::changeFrom().

00078 {
00079     return getType().getId();
00080 }

UInt16 osg::FieldContainer::getGroupId ( void   )  const [inline, inherited]

const Char8 * osg::FieldContainer::getTypeName ( void   )  const [inline, inherited]

Definition at line 89 of file OSGFieldContainerImpl.inl.

References osg::TypeBase::getCName(), and osg::FieldContainer::getType().

00090 {
00091     return getType().getCName();
00092 }

Field * osg::FieldContainer::getField ( UInt32  fieldId  )  [inline, inherited]

Generic Field Access

Definition at line 95 of file OSGFieldContainerImpl.inl.

References osg::FieldDescription::getField(), osg::FieldContainerType::getFieldDescription(), and osg::FieldContainer::getType().

Referenced by osg::QFCItem::expand(), osg::VRMLShapeDesc::getFieldAndDesc(), osg::QFieldViewBase::getFieldPtr(), osg::QFieldEditorBase::getFieldPtr(), osg::getParentsField(), and osg::QFCItem::setup().

00096 {
00097     const FieldDescription *desc = getType().getFieldDescription(fieldId);
00098 
00099     return desc ? desc->getField(*this) : NULL;
00100 }

Field * osg::FieldContainer::getField ( const Char8 fieldName  )  [inline, inherited]

Generic Field Access

Definition at line 103 of file OSGFieldContainerImpl.inl.

References osg::FieldContainerType::findFieldDescription(), osg::FieldDescription::getField(), and osg::FieldContainer::getType().

00104 {
00105     const FieldDescription *desc =getType().findFieldDescription(fieldName);
00106 
00107     return desc ? desc->getField(*this) : NULL;
00108 }

template<class ObjectPtrT>
void osg::FieldContainer::newPtr ( ObjectPtrT &  result,
const typename ObjectPtrT::StoredObjectType *  prototypeP 
) [inline, static, protected, inherited]

Definition at line 138 of file OSGFieldContainerImpl.inl.

References osg::ChangeList::addCreated(), osg::PThreadBase::getAspect(), osg::PThreadBase::getCurrentChangeList(), osg::ThreadManager::getNumAspects(), osg::FieldContainerFactory::registerFieldContainer(), and osg::FieldContainerFactory::the().

Referenced by osg::XWindowBase::createEmpty(), osg::WIN32WindowBase::createEmpty(), osg::ViewportBase::createEmpty(), osg::VertexProgramChunkBase::createEmpty(), osg::TwoSidedLightingChunkBase::createEmpty(), osg::TransformChunkBase::createEmpty(), osg::TransformBase::createEmpty(), osg::TileCameraDecoratorBase::createEmpty(), osg::TextureTransformChunkBase::createEmpty(), osg::TextureGrabForegroundBase::createEmpty(), osg::TextureGrabBackgroundBase::createEmpty(), osg::TextureChunkBase::createEmpty(), osg::TextureBackgroundBase::createEmpty(), osg::TexGenChunkBase::createEmpty(), osg::SwitchMaterialBase::createEmpty(), osg::SwitchBase::createEmpty(), osg::SurfaceBase::createEmpty(), osg::StringAttributeMapBase::createEmpty(), osg::StereoBufferViewportBase::createEmpty(), osg::StencilChunkBase::createEmpty(), osg::StateSortingGroupBase::createEmpty(), osg::StateBase::createEmpty(), osg::SpotLightBase::createEmpty(), osg::SortFirstWindowBase::createEmpty(), osg::SolidBackgroundBase::createEmpty(), osg::SlicesBase::createEmpty(), osg::SkyBackgroundBase::createEmpty(), osg::SimpleTexturedMaterialBase::createEmpty(), osg::SimpleStatisticsForegroundBase::createEmpty(), osg::SimpleMaterialBase::createEmpty(), osg::SHLParameterChunkBase::createEmpty(), osg::SHLChunkBase::createEmpty(), osg::ShearedStereoCameraDecoratorBase::createEmpty(), osg::ShaderParameterVec4fBase::createEmpty(), osg::ShaderParameterVec3fBase::createEmpty(), osg::ShaderParameterVec2fBase::createEmpty(), osg::ShaderParameterStringBase::createEmpty(), osg::ShaderParameterRealBase::createEmpty(), osg::ShaderParameterMVec4fBase::createEmpty(), osg::ShaderParameterMVec3fBase::createEmpty(), osg::ShaderParameterMVec2fBase::createEmpty(), osg::ShaderParameterMRealBase::createEmpty(), osg::ShaderParameterMMatrixBase::createEmpty(), osg::ShaderParameterMIntBase::createEmpty(), osg::ShaderParameterMatrixBase::createEmpty(), osg::ShaderParameterIntBase::createEmpty(), osg::ShaderParameterBoolBase::createEmpty(), osg::ScreenGroupBase::createEmpty(), osg::SClipPlaneChunkBase::createEmpty(), osg::ResolutionDisplayFilterBase::createEmpty(), osg::RenderOptionsBase::createEmpty(), osg::RegisterCombinersChunkBase::createEmpty(), osg::QTWindowBase::createEmpty(), osg::ProxyGroupBase::createEmpty(), osg::ProjectionCameraDecoratorBase::createEmpty(), osg::PolygonForegroundBase::createEmpty(), osg::PolygonChunkBase::createEmpty(), osg::PolygonBackgroundBase::createEmpty(), osg::PointLightBase::createEmpty(), osg::PointChunkBase::createEmpty(), osg::PhongMaterialBase::createEmpty(), osg::PerspectiveCameraBase::createEmpty(), osg::PassiveWindowBase::createEmpty(), osg::PassiveViewportBase::createEmpty(), osg::PassiveBackgroundBase::createEmpty(), osg::ParticlesBase::createEmpty(), osg::OrthographicCameraBase::createEmpty(), osg::OffCenterPerspectiveCameraBase::createEmpty(), osg::MultiPassMaterialBase::createEmpty(), createEmpty(), osg::MatrixCameraDecoratorBase::createEmpty(), osg::MatrixCameraBase::createEmpty(), osg::MaterialPoolBase::createEmpty(), osg::MaterialGroupBase::createEmpty(), osg::MaterialChunkBase::createEmpty(), osg::LogicOpChunkBase::createEmpty(), osg::LineChunkBase::createEmpty(), osg::LightModelChunkBase::createEmpty(), osg::LightEnvBase::createEmpty(), osg::LightChunkBase::createEmpty(), osg::InverseTransformBase::createEmpty(), osg::InlineBase::createEmpty(), osg::ImageForegroundBase::createEmpty(), osg::ImageBase::createEmpty(), osg::ImageBackgroundBase::createEmpty(), osg::GroupBase::createEmpty(), osg::GraphicStatisticsForegroundBase::createEmpty(), osg::GradientBackgroundBase::createEmpty(), osg::GrabForegroundBase::createEmpty(), osg::GLUTWindowBase::createEmpty(), osg::GeometryBase::createEmpty(), osg::FresnelMaterialBase::createEmpty(), osg::FragmentProgramChunkBase::createEmpty(), osg::FileGrabForegroundBase::createEmpty(), osg::FCPtrAttributeMapBase::createEmpty(), osg::FBOViewportBase::createEmpty(), osg::FatBorderChunkBase::createEmpty(), osg::DVRVolumeTextureBase::createEmpty(), osg::DVRVolumeBase::createEmpty(), osg::DVRSimpleShaderBase::createEmpty(), osg::DVRSimpleLUTShaderBase::createEmpty(), osg::DVRMtexLUTShaderBase::createEmpty(), osg::DVRLookupTableBase::createEmpty(), osg::DVRIsoSurfaceBase::createEmpty(), osg::DVRIsoShaderBase::createEmpty(), osg::DVRGeometryBase::createEmpty(), osg::DVRClipObjectsBase::createEmpty(), osg::DVRClipGeometryBase::createEmpty(), osg::DVRAppearanceBase::createEmpty(), osg::DistortionDisplayFilterBase::createEmpty(), osg::DistanceLODBase::createEmpty(), osg::DisplayFilterForegroundBase::createEmpty(), osg::DisplayCalibrationBase::createEmpty(), osg::DirectionalLightBase::createEmpty(), osg::DepthClearBackgroundBase::createEmpty(), osg::DepthChunkBase::createEmpty(), osg::CubeTextureChunkBase::createEmpty(), osg::ComponentTransformBase::createEmpty(), osg::ColorMaskChunkBase::createEmpty(), osg::ColorDisplayFilterBase::createEmpty(), osg::ColorBufferViewportBase::createEmpty(), osg::ClusterWindowBase::createEmpty(), osg::ClipPlaneChunkBase::createEmpty(), osg::ClipPlaneBase::createEmpty(), osg::ChunkMaterialBase::createEmpty(), osg::BlendChunkBase::createEmpty(), osg::BillboardBase::createEmpty(), osg::XWindowBase::shallowCopy(), osg::WIN32WindowBase::shallowCopy(), osg::ViewportBase::shallowCopy(), osg::VertexProgramChunkBase::shallowCopy(), osg::TwoSidedLightingChunkBase::shallowCopy(), osg::TransformChunkBase::shallowCopy(), osg::TransformBase::shallowCopy(), osg::TileCameraDecoratorBase::shallowCopy(), osg::TextureTransformChunkBase::shallowCopy(), osg::TextureGrabForegroundBase::shallowCopy(), osg::TextureGrabBackgroundBase::shallowCopy(), osg::TextureChunkBase::shallowCopy(), osg::TextureBackgroundBase::shallowCopy(), osg::TexGenChunkBase::shallowCopy(), osg::SwitchMaterialBase::shallowCopy(), osg::SwitchBase::shallowCopy(), osg::SurfaceBase::shallowCopy(), osg::StringAttributeMapBase::shallowCopy(), osg::StereoBufferViewportBase::shallowCopy(), osg::StencilChunkBase::shallowCopy(), osg::StateSortingGroupBase::shallowCopy(), osg::StateBase::shallowCopy(), osg::SpotLightBase::shallowCopy(), osg::SortFirstWindowBase::shallowCopy(), osg::SolidBackgroundBase::shallowCopy(), osg::SlicesBase::shallowCopy(), osg::SkyBackgroundBase::shallowCopy(), osg::SimpleTexturedMaterialBase::shallowCopy(), osg::SimpleStatisticsForegroundBase::shallowCopy(), osg::SimpleMaterialBase::shallowCopy(), osg::SHLParameterChunkBase::shallowCopy(), osg::SHLChunkBase::shallowCopy(), osg::ShearedStereoCameraDecoratorBase::shallowCopy(), osg::ShaderParameterVec4fBase::shallowCopy(), osg::ShaderParameterVec3fBase::shallowCopy(), osg::ShaderParameterVec2fBase::shallowCopy(), osg::ShaderParameterStringBase::shallowCopy(), osg::ShaderParameterRealBase::shallowCopy(), osg::ShaderParameterMVec4fBase::shallowCopy(), osg::ShaderParameterMVec3fBase::shallowCopy(), osg::ShaderParameterMVec2fBase::shallowCopy(), osg::ShaderParameterMRealBase::shallowCopy(), osg::ShaderParameterMMatrixBase::shallowCopy(), osg::ShaderParameterMIntBase::shallowCopy(), osg::ShaderParameterMatrixBase::shallowCopy(), osg::ShaderParameterIntBase::shallowCopy(), osg::ShaderParameterBoolBase::shallowCopy(), osg::ScreenGroupBase::shallowCopy(), osg::SClipPlaneChunkBase::shallowCopy(), osg::ResolutionDisplayFilterBase::shallowCopy(), osg::RenderOptionsBase::shallowCopy(), osg::RegisterCombinersChunkBase::shallowCopy(), osg::QTWindowBase::shallowCopy(), osg::ProxyGroupBase::shallowCopy(), osg::ProjectionCameraDecoratorBase::shallowCopy(), osg::PolygonForegroundBase::shallowCopy(), osg::PolygonChunkBase::shallowCopy(), osg::PolygonBackgroundBase::shallowCopy(), osg::PointLightBase::shallowCopy(), osg::PointChunkBase::shallowCopy(), osg::PhongMaterialBase::shallowCopy(), osg::PerspectiveCameraBase::shallowCopy(), osg::PassiveWindowBase::shallowCopy(), osg::PassiveViewportBase::shallowCopy(), osg::PassiveBackgroundBase::shallowCopy(), osg::ParticlesBase::shallowCopy(), osg::OrthographicCameraBase::shallowCopy(), osg::OffCenterPerspectiveCameraBase::shallowCopy(), osg::MultiPassMaterialBase::shallowCopy(), shallowCopy(), osg::MatrixCameraDecoratorBase::shallowCopy(), osg::MatrixCameraBase::shallowCopy(), osg::MaterialPoolBase::shallowCopy(), osg::MaterialGroupBase::shallowCopy(), osg::MaterialChunkBase::shallowCopy(), osg::LogicOpChunkBase::shallowCopy(), osg::LineChunkBase::shallowCopy(), osg::LightModelChunkBase::shallowCopy(), osg::LightEnvBase::shallowCopy(), osg::LightChunkBase::shallowCopy(), osg::InverseTransformBase::shallowCopy(), osg::InlineBase::shallowCopy(), osg::ImageForegroundBase::shallowCopy(), osg::ImageBase::shallowCopy(), osg::ImageBackgroundBase::shallowCopy(), osg::GroupBase::shallowCopy(), osg::GraphicStatisticsForegroundBase::shallowCopy(), osg::GradientBackgroundBase::shallowCopy(), osg::GrabForegroundBase::shallowCopy(), osg::GLUTWindowBase::shallowCopy(), osg::GeometryBase::shallowCopy(), osg::FresnelMaterialBase::shallowCopy(), osg::FragmentProgramChunkBase::shallowCopy(), osg::FileGrabForegroundBase::shallowCopy(), osg::FCPtrAttributeMapBase::shallowCopy(), osg::FBOViewportBase::shallowCopy(), osg::FatBorderChunkBase::shallowCopy(), osg::DVRVolumeTextureBase::shallowCopy(), osg::DVRVolumeBase::shallowCopy(), osg::DVRSimpleShaderBase::shallowCopy(), osg::DVRSimpleLUTShaderBase::shallowCopy(), osg::DVRMtexLUTShaderBase::shallowCopy(), osg::DVRLookupTableBase::shallowCopy(), osg::DVRIsoSurfaceBase::shallowCopy(), osg::DVRIsoShaderBase::shallowCopy(), osg::DVRGeometryBase::shallowCopy(), osg::DVRClipObjectsBase::shallowCopy(), osg::DVRClipGeometryBase::shallowCopy(), osg::DVRAppearanceBase::shallowCopy(), osg::DistortionDisplayFilterBase::shallowCopy(), osg::DistanceLODBase::shallowCopy(), osg::DisplayFilterForegroundBase::shallowCopy(), osg::DisplayCalibrationBase::shallowCopy(), osg::DirectionalLightBase::shallowCopy(), osg::DepthClearBackgroundBase::shallowCopy(), osg::DepthChunkBase::shallowCopy(), osg::CubeTextureChunkBase::shallowCopy(), osg::ComponentTransformBase::shallowCopy(), osg::ColorMaskChunkBase::shallowCopy(), osg::ColorDisplayFilterBase::shallowCopy(), osg::ColorBufferViewportBase::shallowCopy(), osg::ClusterWindowBase::shallowCopy(), osg::ClipPlaneChunkBase::shallowCopy(), osg::ClipPlaneBase::shallowCopy(), osg::ChunkMaterialBase::shallowCopy(), osg::BlendChunkBase::shallowCopy(), and osg::BillboardBase::shallowCopy().

00141 {
00142     typedef typename ObjectPtrT::StoredObjectType ObjectType;
00143     
00144     UInt8 *pTmp;
00145     
00146     result._containerSize = sizeof(ObjectType);
00147     
00148     pTmp        = 
00149         static_cast<UInt8 *>(operator new(
00150             sizeof(Int32)      + // ReferenceCount
00151             sizeof(UInt32)     + // ContainerId
00152             sizeof(ObjectType) * ThreadManager::getNumAspects()));
00153     
00154     *(reinterpret_cast<Int32 *>(pTmp)) = 0;
00155     
00156     pTmp += sizeof(Int32);
00157     
00158     result._storeP = (pTmp + sizeof(UInt32));
00159 
00160 #ifdef OSG_DEBUG_FCPTR
00161     result._typedStoreP = reinterpret_cast<FieldContainer *>(result._storeP);
00162 #endif
00163 
00164     *(reinterpret_cast<UInt32 *>(pTmp)) = 
00165         FieldContainerFactory::the()->registerFieldContainer(result);
00166     
00167     Thread::getCurrentChangeList()->addCreated(
00168         *(reinterpret_cast<UInt32 *>(pTmp)));
00169     
00170     pTmp += sizeof(UInt32);
00171     
00172     ObjectType *aObject = reinterpret_cast<ObjectType *>(pTmp);
00173 
00174     for(UInt32 i = 0; i < ThreadManager::getNumAspects(); i++)
00175     {
00176         pTmp = 
00177             reinterpret_cast<UInt8 *>(new (pTmp) ObjectType(*prototypeP));
00178         
00179         pTmp += sizeof(ObjectType);
00180     }
00181     
00182     result->onCreate(prototypeP);
00183 
00184     for(UInt32 i = 0; i < ThreadManager::getNumAspects(); i++)
00185     {
00186         aObject[i].onCreateAspect(aObject, prototypeP);
00187     }
00188 
00189 #if defined(OSG_GV_BETA) && defined(OSG_DBG_MEM)
00190 
00191     fprintf(stderr, "GV_MEM_FC_DBG : (%u) cc (%p|%u)\n", 
00192             Thread::getAspect(),
00193             result._storeP,
00194 //            ObjectType::getClassType().getCName(),
00195             ObjectType::getClassType().getId());
00196 #endif
00197 
00198 #ifdef OSG_DEBUG_TYPED_FCPTR
00199     result.updateTypedStore();
00200 #endif
00201 }

template<class ObjectPtrT>
void osg::FieldContainer::newPtr ( ObjectPtrT &  result  )  [inline, static, protected, inherited]

Definition at line 204 of file OSGFieldContainerImpl.inl.

References osg::ChangeList::addCreated(), osg::PThreadBase::getAspect(), osg::PThreadBase::getCurrentChangeList(), osg::ThreadManager::getNumAspects(), osg::FieldContainerFactory::registerFieldContainer(), and osg::FieldContainerFactory::the().

00205 {
00206     typedef typename ObjectPtrT::StoredObjectType ObjectType;
00207     
00208     UInt8 *pTmp;
00209     
00210     result._containerSize = sizeof(ObjectType);
00211     
00212     pTmp        =             
00213         static_cast<UInt8 *>(operator new(
00214             sizeof(Int32)      + // ReferenceCount
00215             sizeof(UInt32)     + // ContainerId
00216             sizeof(ObjectType) * ThreadManager::getNumAspects()));
00217     
00218     *(reinterpret_cast<Int32 *>(pTmp)) = 0;
00219     
00220     pTmp  += sizeof(Int32);
00221     
00222     result._storeP = (pTmp + sizeof(UInt32));
00223     
00224 #ifdef OSG_DEBUG_FCPTR
00225     result._typedStoreP = reinterpret_cast<FieldContainer *>(result._storeP);
00226 #endif
00227 
00228     *(reinterpret_cast<UInt32 *>(pTmp)) = 
00229         FieldContainerFactory::the()->registerFieldContainer(result);
00230     
00231     Thread::getCurrentChangeList()->addCreated(
00232         *(reinterpret_cast<UInt32 *>(pTmp)));
00233     
00234     pTmp += sizeof(UInt32);
00235     
00236     ObjectType *aObject = reinterpret_cast<ObjectType *>(pTmp);
00237 
00238     for(UInt32 i = 0; i < ThreadManager::getNumAspects(); i++)
00239     {
00240         pTmp = reinterpret_cast<UInt8 *>(new (pTmp) ObjectType());
00241         
00242         pTmp += sizeof(ObjectType);
00243     }
00244     
00245     result->onCreate();
00246     
00247     for(UInt32 i = 0; i < ThreadManager::getNumAspects(); i++)
00248     {
00249         aObject[i].onCreateAspect(aObject);
00250     }
00251 
00252 #if defined(OSG_GV_BETA) && defined(OSG_DBG_MEM)
00253     fprintf(stderr, "GV_MEM_FC_DBG : (%u) c (%p|%u)\n", 
00254             Thread::getAspect(),
00255             result._storeP,
00256 //            ObjectType::getClassType().getCName(),
00257             ObjectType::getClassType().getId());
00258 #endif
00259     
00260 #ifdef OSG_DEBUG_TYPED_FCPTR
00261     result.updateTypedStore();
00262 #endif
00263 }

template<class FieldTypeT>
void osg::FieldContainer::beginEditX ( const BitVector whichField,
FieldTypeT &  field 
) [inline, protected, inherited]

Definition at line 285 of file OSGFieldContainerImpl.inl.

00286 {
00287 //    fieldR.beginEdit();
00288 }

template<class FieldTypeT>
void osg::FieldContainer::endEditX ( const BitVector whichField,
FieldTypeT &  field 
) [inline, protected, inherited]

Definition at line 291 of file OSGFieldContainerImpl.inl.

References osg::endEditCP().

00292 {
00293     FieldContainerPtr tmpPtr(this);
00294     endEditCP(tmpPtr, whichField);
00295 }


Friends And Related Function Documentation

friend class FieldContainer [friend]

Reimplemented from osg::ClusterWindow.

Reimplemented in osg::MultiDisplayWindow.

Definition at line 262 of file OSGMultiDisplayWindowBase.h.

friend class GLObject [friend, inherited]

Definition at line 294 of file OSGWindow.h.

Referenced by osg::Window::registerGLObject().


Member Data Documentation

Initial value:

 
    (TypeTraits<BitVector>::One << MultiDisplayWindowBase::HServersFieldId)

Definition at line 106 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), and getBinSize().

Initial value:

 
    (TypeTraits<BitVector>::One << MultiDisplayWindowBase::VServersFieldId)

Definition at line 107 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), and getBinSize().

Initial value:

Definition at line 108 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), and getBinSize().

Initial value:

 
    (TypeTraits<BitVector>::One << MultiDisplayWindowBase::XOverlapFieldId)

Definition at line 109 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), and getBinSize().

Initial value:

 
    (TypeTraits<BitVector>::One << MultiDisplayWindowBase::YOverlapFieldId)

Definition at line 110 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), and getBinSize().

Initial value:

 
    (Inherited::MTInfluenceMask) | 
    (static_cast<BitVector>(0x0) << Inherited::NextFieldId)

Reimplemented from osg::ClusterWindowBase.

Definition at line 113 of file OSGMultiDisplayWindowBase.h.

Number of horizontal servers

Definition at line 206 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), getBinSize(), getHServers(), getSFHServers(), and setHServers().

Number of vertical servers

Definition at line 207 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), getBinSize(), getSFVServers(), getVServers(), and setVServers().

If true, duplicate all viewports into the client window

Definition at line 208 of file OSGMultiDisplayWindowBase.h.

Referenced by copyFromBin(), copyToBin(), executeSyncImpl(), getBinSize(), getManageClientViewports(), getSFManageClientViewports(), and setManageClientViewports().

Reimplemented from osg::ClusterWindowBase.

Definition at line 265 of file OSGMultiDisplayWindowBase.h.

Referenced by getClassType(), getClassTypeId(), and getType().

bool osg::ClusterWindow::_firstFrame [protected, inherited]

Definition at line 185 of file OSGClusterWindow.h.

Referenced by osg::ClusterWindow::frameInit().

std::string osg::ClusterWindowBase::_mfServers [protected, inherited]

std::string osg::ClusterWindowBase::_sfConnectionType [protected, inherited]

std::string osg::ClusterWindowBase::_sfConnectionInterface [protected, inherited]

std::string osg::ClusterWindowBase::_sfConnectionDestination [protected, inherited]

std::string osg::ClusterWindowBase::_sfConnectionParams [protected, inherited]

std::string osg::ClusterWindowBase::_sfServiceAddress [protected, inherited]

std::string osg::ClusterWindowBase::_sfServiceInterface [protected, inherited]

std::string osg::ClusterWindowBase::_mfAutostart [protected, inherited]

bool osg::ClusterWindowBase::_sfDirty [protected, inherited]

const Real32 osg::Window::unknownConstant = -1e100 [static, inherited]

const osg::BitVector WindowBase::WidthFieldMask [static, inherited]

const osg::BitVector WindowBase::HeightFieldMask [static, inherited]

const osg::BitVector WindowBase::PortFieldMask [static, inherited]

UInt16 WindowBase::_sfWidth [protected, inherited]

UInt16 WindowBase::_sfHeight [protected, inherited]

ViewportPtr WindowBase::_mfPort [protected, inherited]

bool WindowBase::_sfResizePending [protected, inherited]

Counter for GL object events. Needed for multi-aspect updates. Is used in glObjectLastRefresh and glObjectLastReinitialize.

Definition at line 196 of file OSGWindowBase.h.

Referenced by osg::WindowBase::copyFromBin(), osg::WindowBase::copyToBin(), osg::WindowBase::executeSyncImpl(), osg::WindowBase::getBinSize(), osg::WindowBase::getGlObjectEventCounter(), osg::WindowBase::getSFGlObjectEventCounter(), and osg::WindowBase::setGlObjectEventCounter().

const BitVector osg::FieldContainer::NextFieldMask [static, inherited]

Initial value:

 
                    (TypeTraits<BitVector>::One << NextFieldId)

Definition at line 75 of file OSGFieldContainerImpl.h.

const bool osg::FieldContainer::isNodeCore = false [static, inherited]

Reimplemented in osg::NodeCore.

Definition at line 181 of file OSGFieldContainerImpl.h.

UInt32 osg::FieldContainer::_shares [protected, inherited]

Definition at line 199 of file OSGFieldContainerImpl.h.


The documentation for this class was generated from the following files:

Generated on Mon Mar 17 12:04:29 2008 for OpenSG by  doxygen 1.5.5