18 #include <osgEarth/VirtualProgram>
20 #include <osgShadow/ShadowTechnique>
22 #include <osg/StateSet>
24 #include <osg/PolygonOffset>
25 #include <osg/FrameBufferObject>
26 #include <osg/Uniform>
27 #include <osg/LightSource>
28 #include <osg/RenderInfo>
32 #include <osg/MatrixTransform>
33 #include <osg/Program>
34 #include <osg/Texture2D>
35 #include <osg/Texture2DArray>
37 #include <osg/Geometry>
45 #include <tbb/mutex.h>
50 class DtShadowTweakables;
53 class DtShadowSettingsObject;
54 class TextureApplyAttribute;
55 class DtOsgShadowTechnique;
56 struct DtCurrentPassData;
57 struct DtPerChannelData;
58 class DtSkyObjectManager;
85 virtual const char*
className()
const {
return "DtOsgShadowTechnique"; }
91 virtual void postConstructionInit();
94 virtual void update(osg::NodeVisitor& nv);
97 virtual void cull(osgUtil::CullVisitor& cv);
100 virtual void cleanSceneGraph();
103 void setChannelShadowState(
DtOsgChannel* osgChannel,
bool enable);
114 static const std::string& shadowCameraPrefixString(
void);
117 const osg::StateSet * mapCameraToStateSet(
const osg::Camera* camera)
const;
122 virtual void resizeGLObjectBuffers(
unsigned int maxSize)
override;
125 virtual void releaseGLObjects(osg::State* = 0)
const override;
128 virtual void reInitialize(
unsigned int quality);
132 virtual void cleanupOldPerChannelData();
134 virtual bool configureShadowTraversalNodeMask(
bool traverseEntities,
bool traverseProps,
bool traverseTerrain);
136 virtual void slot_refresh_maps();
165 virtual void computeFrustumPoints(
const osg::Matrix& projectionMat,
bool reverseZ,
const osg::Matrix& inverseViewMat,
166 double nearPlane,
double farPlane, osg::Vec3d* outFrustumPoints);
169 virtual void chooseComputeShadowFunction(std::stringstream& sstr,
199 void triggerExternalModuleShaderRefresh();
205 osg::Program* getProgramFromFile(
const std::string& szVertexShader,
const std::string& szFragmentShader);
209 osg::Camera* xBlurCamera, osg::Camera* yBlurCamera, osg::Texture2DArray* texture, osg::StateSet* stateSet,
unsigned int textureUnit);
213 osg::Camera* xBlurCamera, osg::Camera* yBlurCamera,
unsigned int textureLayer, osg::Texture2DArray* texture2DArray,
214 osg::Texture2DArray* preFilterTexture2DArray1, osg::Texture2DArray* preFilterTexture2DArray2);
216 void setupReverseZBuffer(osg::Camera* depthCamera, osg::Camera* xBlurCamera, osg::Camera* yBlurCamera);
220 osg::Texture2D* createTexture2D(
int width,
int height,
GLenum internalFormat,
GLenum sourceFormat,
GLenum sourceType,
bool shadowComparisonMode,
221 osg::Texture2D::FilterMode minFilter = osg::Texture2D::NEAREST, osg::Texture2D::FilterMode magFilter = osg::Texture2D::NEAREST);
224 osg::Texture2DArray* createTexture2DArray(
int width,
int height,
int depth,
GLenum internalFormat,
GLenum sourceFormat,
GLenum sourceType,
225 bool shadowComparisonMode, osg::Texture2DArray::FilterMode minFilter = osg::Texture2DArray::NEAREST, osg::Texture2DArray::FilterMode magFilter = osg::Texture2DArray::NEAREST);
228 osg::Camera* createCamera(
int width,
int height, GLbitfield clearMask);
231 osg::Geode* createFullScreenQuad(
const osg::Vec2&
size,
const osg::Vec2& uvStart,
const osg::Vec2& uvStop);
234 osg::Camera* createHudCamera(
int width,
int height, GLbitfield clearMask,
const char * name = NULL);
237 double computeUniformSplit(
double nearDistance,
double farDistance,
unsigned int splitIndex,
unsigned int numSplits);
240 double computeLogarithmicSplit(
double nearDistance,
double farDistance,
unsigned int splitIndex,
unsigned int numSplits);
253 void getSplitCameraDistances(
const DtCurrentPassData & d,
int split_index,
double &splitCamNear,
double &splitCamFar);
259 void frustumBoundingBoxLightViewSpace(
const DtCurrentPassData & d,
int split_index,
const osg::Matrix & lightViewMatrix,
260 double nearPlane,
double farPlane, osg::Vec3d& minFrustum, osg::Vec3d& maxFrustum);
DT_DLL_EXAMPLESCENEROOTPLUGIN void init(DtDe &anIG)
static const std::string myShadowCameraPrefixString
Definition: DtOsgShadowTechnique.h:281
void setDirty(bool dirty)
Sets dirty for shadow technique's to true or false.
Definition: DtOsgShadowTechnique.h:256
void setGlobalLight(osg::LightSource *light)
Sets global light source.
Definition: DtOsgShadowTechnique.h:109
Definition: DtShadowSettingsObject.h:24
osg::ref_ptr< osg::Program > myVsmBlurTextureProgram
Definition: DtOsgShadowTechnique.h:283
Definition: DtOsgShadowTechnique.h:242
osg::ref_ptr< osg::Program > myVsmPassthroughArrayProgram
Definition: DtOsgShadowTechnique.h:286
osg::ref_ptr< osg::Program > myVsmPassthroughProgram
Definition: DtOsgShadowTechnique.h:287
osg::ref_ptr< osg::Program > myEsmBlurTexArrayProgram
Definition: DtOsgShadowTechnique.h:290
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
PerChannelDataMap myPerChannelDataMap
Definition: DtOsgShadowTechnique.h:272
boost::signalslib::connection myTerrainPatchAddedConnection
Definition: DtOsgShadowTechnique.h:306
voidpf void uLong size
Definition: ioapi.h:39
osg::ref_ptr< osg::Program > myVsmBlurTexArrayProgram
Definition: DtOsgShadowTechnique.h:284
static const int MAX_NUM_CASCADES
Definition: DtPerChannelData.h:47
Definition: DtSkyObjectManager.h:30
Contains the DtOsgTextureApplyAttribute class.
DtDe & myDe
Definition: DtOsgShadowTechnique.h:279
osg::ref_ptr< osg::Program > myEVsmBlurTextureProgram
Definition: DtOsgShadowTechnique.h:292
osg::Matrix myProjectionMatrix
Definition: DtOsgShadowTechnique.h:245
This class provides the OSG-specific implementation of a DtChannel.
Definition: DtOsgChannel.h:58
osg::ref_ptr< osg::Uniform > myReceiveShadowsUniform
Definition: DtOsgShadowTechnique.h:277
virtual const char * libraryName() const
Returns the namespace string.
Definition: DtOsgShadowTechnique.h:82
bool myMulticastIsSupported
Definition: DtOsgShadowTechnique.h:301
std::vector< osg::ref_ptr< DtPerChannelData > > PerChannelDataVector
Definition: DtOsgShadowTechnique.h:270
virtual osg::Object * cloneType() const
Creates a new object of Type DtOsgShadowTechnique.
Definition: DtOsgShadowTechnique.h:73
class DtShadowTweakables * myShadowUI
Definition: DtOsgShadowTechnique.h:119
Definition: DtCurrentPassData.h:29
Definition: DtPerChannelData.h:49
osg::ref_ptr< osg::Program > myEsmBlurTextureProgram
Definition: DtOsgShadowTechnique.h:289
osg::Matrix myViewMatrix
Definition: DtOsgShadowTechnique.h:244
Definition: DtShadowTweakables.h:21
std::vector< osg::ref_ptr< osg::Camera > > myDeferredDeleteCamera
Definition: DtOsgShadowTechnique.h:296
PerChannelDataVector myPerChannelDataDeleteList
Definition: DtOsgShadowTechnique.h:273
The DtOsgShadowTechnique class implements a robust shadow mapping system.
Definition: DtOsgShadowTechnique.h:62
DtSkyObjectManager & mySkyObjectManager
Definition: DtOsgShadowTechnique.h:304
osg::ref_ptr< osg::Program > myEVsmBlurTexArrayProgram
Definition: DtOsgShadowTechnique.h:293
unsigned int GLenum
Definition: DtGlTextureBufferObject.h:19
const osg::LightSource * getGlobalLight() const
Gets global light source.
Definition: DtOsgShadowTechnique.h:112
virtual bool isSameKindAs(const osg::Object *obj) const
Returns true if object is of the DtOsgShadowTechnique class. Otherwise, returns false.
Definition: DtOsgShadowTechnique.h:79
std::map< const osg::Camera *, osg::ref_ptr< DtPerChannelData > > PerChannelDataMap
Definition: DtOsgShadowTechnique.h:269
Contains DLL export macros.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
osg::Matrix myTextureViewProjectionMatrix
Definition: DtOsgShadowTechnique.h:246
bool myShadingRateIsSupported
Definition: DtOsgShadowTechnique.h:302
osg::ref_ptr< osg::LightSource > myGlobalLight
Definition: DtOsgShadowTechnique.h:275
osg::ref_ptr< osg::Uniform > myLightDirectionUniform
Definition: DtOsgShadowTechnique.h:276
tbb::mutex myDeferredCameraDeletionMutex
Definition: DtOsgShadowTechnique.h:299
boost::signalslib::connection myTerrainPatchDeletedConnection
Definition: DtOsgShadowTechnique.h:307
virtual osg::Object * clone(const osg::CopyOp ©op) const
Creates a new copy of DtOsgShadowTechnique object.
Definition: DtOsgShadowTechnique.h:76
virtual const char * className() const
Returns the class name string.
Definition: DtOsgShadowTechnique.h:85