Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

GraphicsEngine::RenderThread Class Reference

Inheritance diagram for GraphicsEngine::RenderThread:

Thread GraphicsEngine::WindowRenderer TypedReferenceCount TypedObject ReferenceCount List of all members.

Public Member Functions

 RenderThread (const string &name, GraphicsEngine *engine)
virtual void thread_main ()
 The main loop for a particular render thread.

const string & get_name () const
 Returns the name of the thread.

bool start (ThreadPriority priority, bool global, bool joinable)
 Starts the thread executing.

void join ()
 Blocks the calling process until the thread terminates.

virtual void output (ostream &out) const
virtual TypeHandle get_type () const
virtual TypeHandle force_init_type ()
int get_type_index () const
 Returns the internal index number associated with this object's TypeHandle, a unique number for each different type.

bool is_of_type (TypeHandle handle) const
 Returns true if the current object is or derives from the indicated type.

bool is_exact_type (TypeHandle handle) const
 Returns true if the current object is the indicated type exactly.

int get_ref_count () const
 Returns the current reference count.

int ref () const
 Explicitly increments the reference count.

int unref () const
 Explicitly decrements the reference count.

void test_ref_count_integrity () const
 Does some easy checks to make sure that the reference count isn't completely bogus.

void add_gsg (GraphicsStateGuardian *gsg)
 Adds a new GSG to the _gsg list, if it is not already there.

void add_window (Windows &wlist, GraphicsWindow *window)
 Adds a new window to the indicated list, which should be a member of the WindowRenderer.

void remove_window (GraphicsWindow *window)
 Immediately removes the indicated window from all lists.

void do_frame (GraphicsEngine *engine)
 Executes one stage of the pipeline for the current thread: calls cull on all windows that are on the cull list for this thread, draw on all the windows on the draw list, etc.

void do_flip (GraphicsEngine *engine)
 Flips the windows as appropriate for the current thread.

void do_release (GraphicsEngine *engine)
 Releases the rendering contexts for all windows on the _draw list.

void do_close (GraphicsEngine *engine)
 Closes all the windows on the _window list.

void do_pending (GraphicsEngine *engine)
 Actually closes any windows that were recently removed from the WindowRenderer.

bool any_done_gsgs () const
 Returns true if any of the GSG's on this thread's draw list are done (they have no outstanding pointers other than this one), or false if all of them are still good.


Static Public Member Functions

void prepare_for_exit ()
 Should be called by the main thread just before exiting the program, this blocks until any remaining thread cleanup has finished.

Threadget_current_thread ()
 Returns a pointer to the currently-executing Thread object, or NULL if the main thread (or some system thread other than one started from the Panda interface) is currently executing.

bool is_threading_supported ()
 Returns true if a real threading library is available that supports threads, or false if no threading library is available (and Thread::start() will always fail).

void sleep (double seconds)
 Suspends the current thread for at least the indicated amount of time.

TypeHandle get_class_type ()
void init_type ()

Public Attributes

GraphicsEngine_engine
Mutex _cv_mutex
ConditionVar _cv
ThreadState _thread_state
Windows _cull
Windows _cdraw
Windows _draw
Windows _window
Windows _pending_release
Windows _pending_close
GSGs _gsgs
Mutex _wl_lock

Constructor & Destructor Documentation

GraphicsEngine::RenderThread::RenderThread const string &  name,
GraphicsEngine engine
 

Definition at line 1375 of file graphicsEngine.cxx.


Member Function Documentation

void GraphicsEngine::WindowRenderer::add_gsg GraphicsStateGuardian gsg  )  [inherited]
 

Adds a new GSG to the _gsg list, if it is not already there.

Definition at line 1087 of file graphicsEngine.cxx.

References GraphicsWindow::release_gsg(), and win.

void GraphicsEngine::WindowRenderer::add_window Windows wlist,
GraphicsWindow window
[inherited]
 

Adds a new window to the indicated list, which should be a member of the WindowRenderer.

Definition at line 1103 of file graphicsEngine.cxx.

References NULL, and win.

bool GraphicsEngine::WindowRenderer::any_done_gsgs  )  const [inherited]
 

Returns true if any of the GSG's on this thread's draw list are done (they have no outstanding pointers other than this one), or false if all of them are still good.

Definition at line 1355 of file graphicsEngine.cxx.

void GraphicsEngine::WindowRenderer::do_close GraphicsEngine engine  )  [inherited]
 

Closes all the windows on the _window list.

Definition at line 1265 of file graphicsEngine.cxx.

void GraphicsEngine::WindowRenderer::do_flip GraphicsEngine engine  )  [inherited]
 

Flips the windows as appropriate for the current thread.

Definition at line 1230 of file graphicsEngine.cxx.

void GraphicsEngine::WindowRenderer::do_frame GraphicsEngine engine  )  [inherited]
 

Executes one stage of the pipeline for the current thread: calls cull on all windows that are on the cull list for this thread, draw on all the windows on the draw list, etc.

Definition at line 1192 of file graphicsEngine.cxx.

void GraphicsEngine::WindowRenderer::do_pending GraphicsEngine engine  )  [inherited]
 

Actually closes any windows that were recently removed from the WindowRenderer.

Definition at line 1305 of file graphicsEngine.cxx.

Referenced by GraphicsEngine::setup_scene().

void GraphicsEngine::WindowRenderer::do_release GraphicsEngine engine  )  [inherited]
 

Releases the rendering contexts for all windows on the _draw list.

Definition at line 1247 of file graphicsEngine.cxx.

virtual TypeHandle TypedReferenceCount::force_init_type void   )  [inline, virtual, inherited]
 

Implements TypedObject.

Reimplemented in CollisionEntry, CollisionHandler, CollisionHandlerEvent, CollisionHandlerFloor, CollisionHandlerPhysical, CollisionHandlerPusher, CollisionHandlerQueue, CRGraphicsStateGuardian, CRSavedFrameBuffer, ClientAnalogDevice, ClientBase, ClientButtonDevice, ClientDevice, ClientDialDevice, ClientTrackerDevice, GraphicsChannel, GraphicsLayer, GraphicsPipe, GraphicsStateGuardian, GraphicsWindow, HardwareChannel, SavedFrameBuffer, CylindricalLens, FisheyeLens, PSphereLens, DXGraphicsStateGuardian7, DXSavedFrameBuffer7, wdxGraphicsPipe7, wdxGraphicsWindow7, DXGraphicsStateGuardian8, DXSavedFrameBuffer8, wdxGraphicsPipe8, wdxGraphicsWindow8, EggAnimData, EggBin, EggBinMaker, EggComment, EggCoordinateSystem, EggCurve, EggData, EggExternalReference, EggFilenameNode, EggGroup, EggGroupNode, EggGroupUniquifier, EggMaterial, EggNamedObject, EggNameUniquifier, EggNode, EggNurbsCurve, EggNurbsSurface, EggObject, EggPoint, EggPolygon, EggPoolUniquifier, EggPrimitive, EggSAnimData, EggSurface, EggSwitchCondition, EggTable, EggTexture, EggVertex, EggVertexPool, EggXfmAnimData, EggXfmSAnim, Event, EventStoreValueBase, EventStoreValue< Type >, VirtualFile, VirtualFileComposite, VirtualFileSimple, WindowFramework, GLGraphicsStateGuardian, GLSavedFrameBuffer, glxGraphicsPipe, glxGraphicsStateGuardian, glxGraphicsWindow, Lens, MatrixLens, OrthographicLens, PerspectiveLens, GraphicsStateGuardianBase, Lerp, AutonomousLerp, LerpBlendType, EaseInBlendType, EaseOutBlendType, EaseInOutBlendType, NoBlendType, LerpFunctor, SimpleLerpFunctor< value >, SimpleQueryLerpFunctor< value >, MultiLerpFunctor, BoundingHexahedron, BoundingLine, BoundingSphere, BoundingVolume, FiniteBoundingVolume, GeometricBoundingVolume, OmniBoundingVolume, CullBin, CullBinBackToFront, CullBinFixed, CullBinFrontToBack, CullBinUnsorted, PosLerpFunctor, HprLerpFunctor, ScaleLerpFunctor, ColorLerpFunctor, PosHprLerpFunctor, HprScaleLerpFunctor, PosHprScaleLerpFunctor, ColorScaleLerpFunctor, EventStoreTransform, PGMouseWatcherBackground, PGMouseWatcherParameter, PGMouseWatcherRegion, AngularForce, AngularVectorForce, BaseForce, LinearCylinderVortexForce, LinearDistanceForce, LinearForce, LinearFrictionForce, LinearJitterForce, LinearNoiseForce, LinearRandomForce, LinearSinkForce, LinearSourceForce, LinearUserDefinedForce, LinearVectorForce, Physical, PhysicsObject, BamReaderParam, ButtonEventList, FactoryParam, WritableParam, RIBGraphicsWindow, RIBGraphicsStateGuardian, TextFont, MouseWatcherRegion, VrpnAnalogDevice, VrpnButtonDevice, VrpnClient, VrpnDialDevice, VrpnTrackerDevice, wcrGraphicsWindow, wglGraphicsPipe, wglGraphicsStateGuardian, wglGraphicsWindow, WinGraphicsPipe, WinGraphicsWindow, SimpleLerpFunctor< LPoint3f >, SimpleLerpFunctor< LVecBase3f >, and SimpleLerpFunctor< LVecBase4f >.

Definition at line 59 of file typedReferenceCount.h.

TypeHandle Thread::get_class_type void   )  [inline, static, inherited]
 

Reimplemented from TypedReferenceCount.

Definition at line 89 of file thread.h.

Thread * Thread::get_current_thread  )  [inline, static, inherited]
 

Returns a pointer to the currently-executing Thread object, or NULL if the main thread (or some system thread other than one started from the Panda interface) is currently executing.

Definition at line 191 of file thread.I.

const string & Thread::get_name  )  const [inline, inherited]
 

Returns the name of the thread.

Definition at line 83 of file thread.I.

References Thread::_impl, Thread::_started, INLINE, nassertr, and ThreadDummyImpl::start().

Referenced by ThreadWithData::ThreadWithData(), and Thread::~Thread().

int ReferenceCount::get_ref_count  )  const [inline, inherited]
 

Returns the current reference count.

Definition at line 183 of file referenceCount.I.

Referenced by RenderState::determine_bin_index(), RenderEffects::determine_show_bounds(), FontPool::ns_garbage_collect(), TexturePool::ns_garbage_collect(), MaterialPool::ns_get_material(), and TexturePool::ns_release_texture().

virtual TypeHandle TypedReferenceCount::get_type void   )  const [inline, virtual, inherited]
 

Implements TypedObject.

Reimplemented in CollisionEntry, CollisionHandler, CollisionHandlerEvent, CollisionHandlerFloor, CollisionHandlerPhysical, CollisionHandlerPusher, CollisionHandlerQueue, CRGraphicsStateGuardian, CRSavedFrameBuffer, ClientAnalogDevice, ClientBase, ClientButtonDevice, ClientDevice, ClientDialDevice, ClientTrackerDevice, GraphicsChannel, GraphicsLayer, GraphicsPipe, GraphicsStateGuardian, GraphicsWindow, HardwareChannel, SavedFrameBuffer, CylindricalLens, FisheyeLens, PSphereLens, DXGraphicsStateGuardian7, DXSavedFrameBuffer7, wdxGraphicsPipe7, wdxGraphicsWindow7, DXGraphicsStateGuardian8, DXSavedFrameBuffer8, wdxGraphicsPipe8, wdxGraphicsWindow8, EggAnimData, EggBin, EggBinMaker, EggComment, EggCoordinateSystem, EggCurve, EggData, EggExternalReference, EggFilenameNode, EggGroup, EggGroupNode, EggGroupUniquifier, EggMaterial, EggNamedObject, EggNameUniquifier, EggNode, EggNurbsCurve, EggNurbsSurface, EggObject, EggPoint, EggPolygon, EggPoolUniquifier, EggPrimitive, EggSAnimData, EggSurface, EggSwitchCondition, EggSwitchConditionDistance, EggTable, EggTexture, EggVertex, EggVertexPool, EggXfmAnimData, EggXfmSAnim, Event, EventStoreValueBase, EventStoreValue< Type >, VirtualFile, VirtualFileComposite, VirtualFileSimple, WindowFramework, GLGraphicsStateGuardian, GLSavedFrameBuffer, glxGraphicsPipe, glxGraphicsStateGuardian, glxGraphicsWindow, Lens, MatrixLens, OrthographicLens, PerspectiveLens, GraphicsStateGuardianBase, Lerp, AutonomousLerp, LerpBlendType, EaseInBlendType, EaseOutBlendType, EaseInOutBlendType, NoBlendType, LerpFunctor, SimpleLerpFunctor< value >, SimpleQueryLerpFunctor< value >, MultiLerpFunctor, BoundingHexahedron, BoundingLine, BoundingSphere, BoundingVolume, FiniteBoundingVolume, GeometricBoundingVolume, OmniBoundingVolume, CullBin, CullBinBackToFront, CullBinFixed, CullBinFrontToBack, CullBinUnsorted, PosLerpFunctor, HprLerpFunctor, ScaleLerpFunctor, ColorLerpFunctor, PosHprLerpFunctor, HprScaleLerpFunctor, PosHprScaleLerpFunctor, ColorScaleLerpFunctor, EventStoreTransform, PGMouseWatcherBackground, PGMouseWatcherParameter, PGMouseWatcherRegion, AngularForce, AngularVectorForce, BaseForce, LinearCylinderVortexForce, LinearDistanceForce, LinearForce, LinearFrictionForce, LinearJitterForce, LinearNoiseForce, LinearRandomForce, LinearSinkForce, LinearSourceForce, LinearUserDefinedForce, LinearVectorForce, Physical, PhysicsObject, BamReaderParam, ButtonEventList, FactoryParam, WritableParam, RIBGraphicsWindow, RIBGraphicsStateGuardian, TextFont, MouseWatcherRegion, VrpnAnalogDevice, VrpnButtonDevice, VrpnClient, VrpnDialDevice, VrpnTrackerDevice, wcrGraphicsWindow, wglGraphicsPipe, wglGraphicsStateGuardian, wglGraphicsWindow, WinGraphicsPipe, WinGraphicsWindow, SimpleLerpFunctor< LPoint3f >, SimpleLerpFunctor< LVecBase3f >, and SimpleLerpFunctor< LVecBase4f >.

Definition at line 56 of file typedReferenceCount.h.

Referenced by Thread::~Thread().

int TypedObject::get_type_index  )  const [inline, inherited]
 

Returns the internal index number associated with this object's TypeHandle, a unique number for each different type.

This is equivalent to get_type().get_index().

Definition at line 71 of file typedObject.I.

References TypeHandle::get_name(), TypedObject::get_type(), and INLINE.

void Thread::init_type void   )  [inline, static, inherited]
 

Reimplemented from TypedReferenceCount.

Definition at line 92 of file thread.h.

bool TypedObject::is_exact_type TypeHandle  handle  )  const [inline, inherited]
 

Returns true if the current object is the indicated type exactly.

Definition at line 101 of file typedObject.I.

Referenced by PT(), and CollisionNode::xform().

bool TypedObject::is_of_type TypeHandle  handle  )  const [inline, inherited]
 

Returns true if the current object is or derives from the indicated type.

Definition at line 86 of file typedObject.I.

Referenced by EggMaterialCollection::collapse_equivalent_materials(), EggTextureCollection::collapse_equivalent_textures(), DeferredNodeProperty::compose(), AnimBundleMaker::create_s_channel(), CharacterMaker::create_slider(), ProjectionScreen::cull_callback(), DataNode::define_output(), EggNode::determine_draw_order(), CharacterMaker::egg_to_index(), EggGroupUniquifier::EggGroupUniquifier(), EggPoolUniquifier::EggPoolUniquifier(), EggGroupNode::find_textures(), StaticTextFont::get_glyph(), EggMaterialCollection::insert_materials(), EggTextureCollection::insert_textures(), CharacterJoint::make_copy(), PT(), EggGroupNode::r_flatten_transforms(), EggGroupNode::r_transform_vertices(), EggGroupNode::recompute_polygon_normals(), CollisionLevelState::reserve(), PandaFramework::reset_frame_rate(), PandaFramework::set_texture(), EggGroupNode::steal_children(), and DataGraphTraverser::traverse().

bool Thread::is_threading_supported  )  [inline, static, inherited]
 

Returns true if a real threading library is available that supports threads, or false if no threading library is available (and Thread::start() will always fail).

Definition at line 210 of file thread.I.

void Thread::join  )  [inline, inherited]
 

Blocks the calling process until the thread terminates.

If the thread has already terminated, this returns immediately.

Definition at line 155 of file thread.I.

References INLINE, and ThreadDummyImpl::sleep().

void Thread::output ostream &  out  )  const [virtual, inherited]
 

Definition at line 45 of file thread.cxx.

void Thread::prepare_for_exit  )  [inline, static, inherited]
 

Should be called by the main thread just before exiting the program, this blocks until any remaining thread cleanup has finished.

Definition at line 172 of file thread.I.

int ReferenceCount::ref  )  const [inline, inherited]
 

Explicitly increments the reference count.

User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically.

This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it.

The return value is the new reference count.

Definition at line 225 of file referenceCount.I.

Referenced by ClientDevice::ClientDevice(), EggGroupNode::find_textures(), EggGroupNode::r_apply_texmats(), EggGroupNode::r_flatten_transforms(), and EggGroupNode::reverse_vertex_ordering().

void GraphicsEngine::WindowRenderer::remove_window GraphicsWindow window  )  [inherited]
 

Immediately removes the indicated window from all lists.

If the window is currently open and is already on the _window list, moves it to the _pending_close list for later closure.

Definition at line 1123 of file graphicsEngine.cxx.

References GraphicsEngine::WindowRenderer::_gsgs.

Referenced by GraphicsEngine::setup_scene().

void Thread::sleep double  seconds  )  [inline, static, inherited]
 

Suspends the current thread for at least the indicated amount of time.

It might be suspended for longer.

Definition at line 227 of file thread.I.

bool Thread::start ThreadPriority  priority,
bool  global,
bool  joinable
[inline, inherited]
 

Starts the thread executing.

It is only valid to call this once.

The thread will begin executing its thread_main() function, and will terminate when thread_main() returns.

priority is intended as a hint to the relative importance of this thread, and global should be set true if the thread will perform a lot of blocking I/O, or false otherwise (see the NSPR documentation on global vs. local threads for more on this). Both of these parameters may be ignored by the thread implementation.

joinable should be set true if you intend to call join() to wait for the thread to terminate, or false if you don't care and you will never call join().

The return value is true if the thread is successfully started, false otherwise.

Definition at line 136 of file thread.I.

References INLINE, and ThreadDummyImpl::is_threading_supported().

void ReferenceCount::test_ref_count_integrity  )  const [inline, inherited]
 

Does some easy checks to make sure that the reference count isn't completely bogus.

Definition at line 328 of file referenceCount.I.

References INLINE.

Referenced by EggNode::determine_bin(), and ReferenceCount::~ReferenceCount().

void GraphicsEngine::RenderThread::thread_main  )  [virtual]
 

The main loop for a particular render thread.

The thread will process whatever cull or draw windows it has assigned to it.

Implements Thread.

Definition at line 1396 of file graphicsEngine.cxx.

int ReferenceCount::unref  )  const [inline, inherited]
 

Explicitly decrements the reference count.

Note that the object will not be implicitly deleted by unref() simply because the reference count drops to zero. (Having a member function delete itself is problematic; plus, we don't have a virtual destructor anyway.) However, see the helper function unref_delete().

User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically.

This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it.

The return value is the new reference count.

Definition at line 293 of file referenceCount.I.

References INLINE.

Referenced by RenderState::determine_bin_index(), and RenderEffects::determine_show_bounds().


Member Data Documentation

Windows GraphicsEngine::WindowRenderer::_cdraw [inherited]
 

Definition at line 150 of file graphicsEngine.h.

Windows GraphicsEngine::WindowRenderer::_cull [inherited]
 

Definition at line 149 of file graphicsEngine.h.

ConditionVar GraphicsEngine::RenderThread::_cv
 

Definition at line 174 of file graphicsEngine.h.

Mutex GraphicsEngine::RenderThread::_cv_mutex
 

Definition at line 173 of file graphicsEngine.h.

Referenced by GraphicsEngine::cull_and_draw_together().

Windows GraphicsEngine::WindowRenderer::_draw [inherited]
 

Definition at line 151 of file graphicsEngine.h.

GraphicsEngine* GraphicsEngine::RenderThread::_engine
 

Definition at line 172 of file graphicsEngine.h.

GSGs GraphicsEngine::WindowRenderer::_gsgs [inherited]
 

Definition at line 155 of file graphicsEngine.h.

Referenced by GraphicsEngine::WindowRenderer::remove_window().

Windows GraphicsEngine::WindowRenderer::_pending_close [inherited]
 

Definition at line 154 of file graphicsEngine.h.

Windows GraphicsEngine::WindowRenderer::_pending_release [inherited]
 

Definition at line 153 of file graphicsEngine.h.

ThreadState GraphicsEngine::RenderThread::_thread_state
 

Definition at line 175 of file graphicsEngine.h.

Windows GraphicsEngine::WindowRenderer::_window [inherited]
 

Definition at line 152 of file graphicsEngine.h.

Mutex GraphicsEngine::WindowRenderer::_wl_lock [inherited]
 

Definition at line 156 of file graphicsEngine.h.


The documentation for this class was generated from the following files:
Generated on Fri May 2 00:51:21 2003 for Panda by doxygen1.3