You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.0 KiB
99 lines
3.0 KiB
/* -*-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. |
|
*/ |
|
//osgParticle - Copyright (C) 2002 Marco Jez |
|
|
|
#ifndef OSGPARTICLE_MODULARPROGRAM |
|
#define OSGPARTICLE_MODULARPROGRAM 1 |
|
|
|
#include <osgParticle/Export> |
|
#include <osgParticle/Program> |
|
#include <osgParticle/Operator> |
|
|
|
#include <osg/CopyOp> |
|
#include <osg/Object> |
|
#include <osg/Node> |
|
#include <osg/NodeVisitor> |
|
|
|
namespace osgParticle |
|
{ |
|
|
|
/** A program class for performing operations on particles using a sequence of <I>operators</I>. |
|
To use a <CODE>ModularProgram</CODE> you have to create some <CODE>Operator</CODE> objects and |
|
add them to the program. |
|
All operators will be applied to each particle in the same order they've been added to the program. |
|
*/ |
|
class OSGPARTICLE_EXPORT ModularProgram: public Program { |
|
public: |
|
ModularProgram(); |
|
ModularProgram(const ModularProgram& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY); |
|
|
|
META_Node(osgParticle,ModularProgram); |
|
|
|
/// Get the number of operators. |
|
inline int numOperators() const; |
|
|
|
/// Add an operator to the list. |
|
inline void addOperator(Operator* o); |
|
|
|
/// Get a pointer to an operator in the list. |
|
inline Operator* getOperator(int i); |
|
|
|
/// Get a const pointer to an operator in the list. |
|
inline const Operator* getOperator(int i) const; |
|
|
|
/// Remove an operator from the list. |
|
inline void removeOperator(int i); |
|
|
|
protected: |
|
virtual ~ModularProgram() {} |
|
ModularProgram& operator=(const ModularProgram&) { return *this; } |
|
|
|
void execute(double dt); |
|
|
|
private: |
|
typedef std::vector<osg::ref_ptr<Operator> > Operator_vector; |
|
|
|
Operator_vector _operators; |
|
}; |
|
|
|
// INLINE FUNCTIONS |
|
|
|
inline int ModularProgram::numOperators() const |
|
{ |
|
return static_cast<int>(_operators.size()); |
|
} |
|
|
|
inline void ModularProgram::addOperator(Operator* o) |
|
{ |
|
_operators.push_back(o); |
|
} |
|
|
|
inline Operator* ModularProgram::getOperator(int i) |
|
{ |
|
return _operators[i].get(); |
|
} |
|
|
|
inline const Operator* ModularProgram::getOperator(int i) const |
|
{ |
|
return _operators[i].get(); |
|
} |
|
|
|
inline void ModularProgram::removeOperator(int i) |
|
{ |
|
_operators.erase(_operators.begin()+i); |
|
} |
|
|
|
|
|
} |
|
|
|
#endif
|
|
|