openscenegraph
ShadowTexture
Go to the documentation of this file.
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 OSGSHADOW_SHADOWETEXTURE
15#define OSGSHADOW_SHADOWETEXTURE 1
16
17#include <osg/Camera>
18#include <osg/Material>
19
20#include <osgShadow/ShadowTechnique>
21
22namespace osgShadow {
23
24/** ShadowedTexture provides an implementation of shadow textures.*/
25class OSGSHADOW_EXPORT ShadowTexture : public ShadowTechnique
26{
27 public :
28 ShadowTexture();
29
30 ShadowTexture(const ShadowTexture& es, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
31
32 META_Object(osgShadow, ShadowTexture);
33
34 /** Set the texture unit that the shadow texture will be applied on.*/
35 void setTextureUnit(unsigned int unit);
36
37 /** Get the texture unit that the shadow texture will be applied on.*/
38 unsigned int getTextureUnit() const { return _textureUnit; }
39
40
41 /** initialize the ShadowedScene and local cached data structures.*/
42 virtual void init();
43
44 /** run the update traversal of the ShadowedScene and update any loca chached data structures.*/
45 virtual void update(osg::NodeVisitor& nv);
46
47 /** run the cull traversal of the ShadowedScene and set up the rendering for this ShadowTechnique.*/
48 virtual void cull(osgUtil::CullVisitor& cv);
49
50 /** Clean scene graph from any shadow technique specific nodes, state and drawables.*/
51 virtual void cleanSceneGraph();
52
53
54 /** Resize any per context GLObject buffers to specified size. */
55 virtual void resizeGLObjectBuffers(unsigned int maxSize);
56
57 /** If State is non-zero, this function releases any associated OpenGL objects for
58 * the specified graphics context. Otherwise, releases OpenGL objects
59 * for all graphics contexts. */
60 virtual void releaseGLObjects(osg::State* = 0) const;
61
62 protected :
63
64 virtual ~ShadowTexture() {}
65
66 osg::ref_ptr<osg::Camera> _camera;
67 osg::ref_ptr<osg::TexGen> _texgen;
68 osg::ref_ptr<osg::Texture2D> _texture;
69 osg::ref_ptr<osg::StateSet> _stateset;
70 osg::ref_ptr<osg::Material> _material;
71 unsigned int _textureUnit;
72};
73
74}
75
76#endif