/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or * (at your option) any later version. The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details. */ #ifndef OSG_GRAPHICSTHREAD #define OSG_GRAPHICSTHREAD 1 #include namespace osg { class OSG_EXPORT GraphicsThread : public osg::OperationThread { public: GraphicsThread(); /** Run does the graphics thread run loop.*/ virtual void run(); }; /** SwapBufferOperation calls swap buffers on the GraphicsContext.*/ struct OSG_EXPORT SwapBuffersOperation : public Operation { SwapBuffersOperation(): Operation("SwapBuffers",true) {} virtual void operator () (Object* context); }; /** BarrierOperation allows one to syncronize multiple GraphicsThreads with each other.*/ struct OSG_EXPORT BarrierOperation : public Operation, public OpenThreads::Barrier { enum PreBlockOp { NO_OPERATION, GL_FLUSH, GL_FINISH }; BarrierOperation(int numThreads, PreBlockOp op=NO_OPERATION): Operation("Barrier", true), OpenThreads::Barrier(numThreads), _preBlockOp(op) {} virtual void release(); virtual void operator () (Object* context); PreBlockOp _preBlockOp; }; /** ReleaseContext_Block_MakeCurrentOperation releases the context for another thread to aquire, * then blocks waiting for context to be released, once the block is release the context is re-aqquired.*/ struct OSG_EXPORT ReleaseContext_Block_MakeCurrentOperation : public Operation, public RefBlock { ReleaseContext_Block_MakeCurrentOperation(): Operation("ReleaseContext_Block_MakeCurrent", false) {} virtual void release(); virtual void operator () (Object* context); }; struct OSG_EXPORT BlockAndFlushOperation : public Operation, public OpenThreads::Block { BlockAndFlushOperation(); virtual void release(); virtual void operator () (Object*); }; } #endif