root/OpenSceneGraph/trunk/include/osg/CopyOp @ 10671

Revision 10671, 3.1 kB (checked in by robert, 4 years ago)

From Cedric Pinson, "Here a patch to be able to clone stateattribute, in order to do that i
moved the StateAttribute::Callback structure to a file
StateAttributeCallback? with the same behavior as NodeCallback?.
"

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under 
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version.  The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_COPYOP
15#define OSG_COPYOP 1
16
17#include <osg/Export>
18
19namespace osg {
20
21class Referenced;
22class Object;
23class Image;
24class Texture;
25class StateSet;
26class StateAttribute;
27class StateAttributeCallback;
28class Uniform;
29class Node;
30class Drawable;
31class Array;
32class PrimitiveSet;
33class Shape;
34class NodeCallback;
35
36
37/** Copy Op(erator) used to control whether shallow or deep copy is used
38  * during copy construction and clone operation.*/
39class OSG_EXPORT CopyOp
40{
41
42    public:
43   
44        enum Options
45        {
46            SHALLOW_COPY                = 0,
47            DEEP_COPY_OBJECTS           = 1<<0,
48            DEEP_COPY_NODES             = 1<<1,
49            DEEP_COPY_DRAWABLES         = 1<<2,
50            DEEP_COPY_STATESETS         = 1<<3,
51            DEEP_COPY_STATEATTRIBUTES   = 1<<4,
52            DEEP_COPY_TEXTURES          = 1<<5,
53            DEEP_COPY_IMAGES            = 1<<6,
54            DEEP_COPY_ARRAYS            = 1<<7,
55            DEEP_COPY_PRIMITIVES        = 1<<8,
56            DEEP_COPY_SHAPES            = 1<<9,
57            DEEP_COPY_UNIFORMS          = 1<<10,
58            DEEP_COPY_CALLBACKS         = 1<<11,
59            DEEP_COPY_ALL               = 0x7FFFFFFF
60        };
61
62        typedef unsigned int CopyFlags;
63
64        inline CopyOp(CopyFlags flags=SHALLOW_COPY):_flags(flags) {}
65        virtual ~CopyOp() {}
66
67        virtual Referenced*     operator() (const Referenced* ref) const;
68        virtual Object*         operator() (const Object* obj) const;
69        virtual Node*           operator() (const Node* node) const;
70        virtual Drawable*       operator() (const Drawable* drawable) const;
71        virtual StateSet*       operator() (const StateSet* stateset) const;
72        virtual StateAttribute* operator() (const StateAttribute* attr) const;
73        virtual Texture*        operator() (const Texture* text) const;
74        virtual Image*          operator() (const Image* image) const;
75        virtual Array*          operator() (const Array* array) const;
76        virtual PrimitiveSet*   operator() (const PrimitiveSet* primitives) const;
77        virtual Shape*          operator() (const Shape* shape) const;
78        virtual Uniform*        operator() (const Uniform* shape) const;
79        virtual NodeCallback*   operator() (const NodeCallback* nodecallback) const;
80        virtual StateAttributeCallback* operator() (const StateAttributeCallback* stateattributecallback) const;
81
82    protected:
83   
84        CopyFlags _flags;
85};
86
87}
88
89#endif
Note: See TracBrowser for help on using the browser.