Created a new GraphicsThread subclass from OperationThread which allows the GraphicsContext specific calls to be moved out of the base OperationThread class. Updated the rest of the OSG to respect these changes.
86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
/* -*-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 <osg/OperationThread>
|
|
|
|
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
|