#############################################################################
#                                                                           #
#                     GenWrapper Configuration File                         #
#                                                                           #
#############################################################################


configure library "osgFX"
	dependency unix "-losgUtil -losgDB"
end

configure library "osgParticle"
	dependency unix "-losgUtil -losgDB"
end

configure library "osgGA"
	dependency unix "-losgUtil"
end

configure library "osgSim"
	dependency unix "-losgUtil -losgText -losgDB"
end

configure library "osgTerrain"
	dependency win32-debug      "gdal_iD.lib"
	dependency win32-release    "gdal_i.lib"
	dependency unix "-losgDB -losgUtil -losgFX"
end

configure library "osgText"
	dependency unix "-losgDB"
end

configure library "osgVolume"
	dependency unix "-losgUtil -losgDB -losgGA"
end

configure library "osgViewer"
	dependency unix "-losgUtil -losgDB -losgGA -losgText"
end

#############################################################################

ignore file "osgDB/fstream"

ignore file "osgUtil/PrintVisitor"
ignore file "osgUtil/OperationArrayFunctor"

ignore file "osgViewer/api/X11/GraphicsWindowX11"
ignore file "osgViewer/api/Win32/GraphicsWindowWin32"
ignore file "osgViewer/api/Cocoa/GraphicsWindowCocoa"

suppress reflector "osgUtil::AddRangeFunctor"
suppress reflector "osgUtil::MultiplyRangeFunctor"

suppress reflector "CPluginFunction"
suppress reflector "PluginFunctionProxy"

suppress reflector "osgWidget::UIObjectParent"


#############################################################################

suppress reflector "osgShadow::ProjectionShadowMap"

suppress reflector "osgShadow::DebugShadowMap::ViewData"
suppress reflector "osgShadow::DebugShadowMap::ViewData::PolytopeGeometry"
suppress reflector "osgShadow::ViewDependentShadowTechnique::ViewData"

suppress reflector "osgShadow::MinimalDrawBoundsShadowMap::META_ViewDependentShadowTechniqueData"
suppress reflector "osgShadow::DebugShadowMap::META_ViewDependentShadowTechniqueData"
suppress reflector "osgShadow::MinimalCullBoundsShadowMap::META_ViewDependentShadowTechniqueData"
suppress reflector "osgShadow::MinimalShadowMap::META_ViewDependentShadowTechniqueData"
suppress reflector "osgShadow::ProjectionShadowMap::META_ViewDependentShadowTechniqueData"
suppress reflector "osgShadow::StandardShadowMap::META_ViewDependentShadowTechniqueData"
suppress reflector "osgShadow::ViewDependentShadowTechnique::META_ViewDependentShadowTechniqueData"


suppress reflector "osgShadow::ViewDependentShadowTechnique::getViewDependentData"
suppress reflector "osgShadow::ViewDependentShadowTechnique::setViewDependentData"

#############################################################################

configure file /osg\/GraphicsContext/
	emit before "#include <osg/Camera>
	"
end

configure file /osgViewer\/ViewerBase/
	emit before "#include <osgViewer/View>
	"
end

configure file /osg\/BoundingBox/
	emit before "#include <osg/BoundingSphere>
	"
end

configure file /osg\/BoundingSphere/
        emit before "#include <osg/BoundingBox>
        "
end

configure file /osgDB\/ReaderWriter/
        emit before "#include <osgDB/Options>
        "
end

#############################################################################

# add <io_utils> header to Plane, Quat and Vec* files

configure file /osg\/(Plane|Quat|(Vec(2|3|4)(f|d|b|ub)))/
	emit before "#include <osg/io_utils>
	"
end

# add ReaderWriter and Comparator objects to Vec*, Quat and Plane classes

configure reflector /osg::(Plane|Quat|(Vec(2|3|4)(f|d|b|ub)))/
	readerwriter "osgIntrospection::StdReaderWriter<reflected_type>"
	comparator "osgIntrospection::PartialOrderComparator<reflected_type>"
end


# add StateGraph includes in RenderLeaf.cpp

configure file /osgUtil\/RenderLeaf/
	emit before "#include <osgUtil/StateGraph>
	"
end

#############################################################################

# Doxygen fails to detect that std::vector<T> is a base class for
# osg::Vector*, so we need to specify that manually

configure reflector "osgText::VectorUInt"
	add base "std::vector<unsigned int>"
end


#############################################################################

# Doxygen/genwrapper is not coping with the new MixinVector so disable associated wrappers

suppress reflector /osg::TemplateIndexArray< GLbyte.*/
suppress reflector /osg::TemplateIndexArray< GLubyte.*/
suppress reflector /osg::TemplateIndexArray< GLshort.*/
suppress reflector /osg::TemplateIndexArray< GLushort.*/
suppress reflector /osg::TemplateIndexArray< GLint.*/
suppress reflector /osg::TemplateIndexArray< GLuint.*/
suppress reflector /osg::TemplateArray< GLfloat.*/
suppress reflector /osg::TemplateArray< GLdouble.*/
suppress reflector /osg::TemplateArray< osg::Vec2\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec3\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec4\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec2d\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec3d\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec4d\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec2b\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec3b\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec4b\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec2s\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec3s\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec4s\s*\,.*/
suppress reflector /osg::TemplateArray< osg::Vec4ub\s*\,.*/


suppress reflector "osg::DrawArrayLengths"
suppress reflector "osg::DrawElementsUByte"
suppress reflector "osg::DrawElementsUShort"
suppress reflector "osg::DrawElementsUInt"

suppress reflector "osg::VectorGLsizei"
suppress reflector "osg::VectorGLubyte"
suppress reflector "osg::VectorGLushort"
suppress reflector "osg::VectorGLuint"

suppress reflector "osg::MixinVector< GLsizei >"
suppress reflector "osg::MixinVector< GLubyte >"
suppress reflector "osg::MixinVector< GLushort >"
suppress reflector "osg::MixinVector< GLuint >"

suppress reflector "OpenThreads::Atomic"
suppress reflector "OpenThreads::AtomicPtr"

suppress reflector "osg::BoundingBoxImpl< osg::Vec3f >"
suppress reflector "osg::BoundingBoxImpl< osg::Vec3d >"

suppress reflector "osg::BoundingSphereImpl< osg::Vec3f >"
suppress reflector "osg::BoundingSphereImpl< osg::Vec3d >"

suppress reflector "osgAnimation::TemplateTarget< osg::Quat >"
suppress reflector "osgAnimation::TemplateTarget< osg::Vec3 >"
suppress reflector "osgAnimation::TemplateTarget< osg::Vec4 >"
suppress reflector "osgAnimation::TemplateTarget< osg::Vec2 >"
suppress reflector "osgAnimation::TemplateTarget< float >"
suppress reflector "osgAnimation::TemplateTarget< double >"

suppress reflector "osgAnimation::TemplateLinearInterpolator< double, double >"
suppress reflector "osgAnimation::TemplateLinearInterpolator< float, float >"
suppress reflector "osgAnimation::TemplateLinearInterpolator< osg::Vec2, osg::Vec2 >"
suppress reflector "osgAnimation::TemplateLinearInterpolator< osg::Vec3, osg::Vec3 >"
suppress reflector "osgAnimation::TemplateLinearInterpolator< osg::Vec3, osgAnimation::Vec3Packed >"
suppress reflector "osgAnimation::TemplateLinearInterpolator< osg::Vec4, osg::Vec4 >"
suppress reflector "osgAnimation::TemplateSphericalLinearInterpolator< osg::Quat, osg::Quat >"

suppress reflector "osgAnimation::TemplateStepInterpolator< double, double >"
suppress reflector "osgAnimation::TemplateStepInterpolator< float, float >"
suppress reflector "osgAnimation::TemplateStepInterpolator< osg::Vec2, osg::Vec2 >"
suppress reflector "osgAnimation::TemplateStepInterpolator< osg::Vec3, osg::Vec3 >"
suppress reflector "osgAnimation::TemplateStepInterpolator< osg::Vec3, osgAnimation::Vec3Packed >"
suppress reflector "osgAnimation::TemplateStepInterpolator< osg::Vec4, osg::Vec4 >"
suppress reflector "osgAnimation::TemplateStepInterpolator< osg::Quat, osg::Quat >"

suppress reflector "osgAnimation::TemplateCubicBezierInterpolator< float, osgAnimation::FloatCubicBezier >"
suppress reflector "osgAnimation::TemplateCubicBezierInterpolator< double, osgAnimation::DoubleCubicBezier >"
suppress reflector "osgAnimation::TemplateCubicBezierInterpolator< osg::Vec2, osgAnimation::Vec2CubicBezier >"
suppress reflector "osgAnimation::TemplateCubicBezierInterpolator< osg::Vec3, osgAnimation::Vec3CubicBezier >"
suppress reflector "osgAnimation::TemplateCubicBezierInterpolator< osg::Vec4, osgAnimation::Vec4CubicBezier >"

suppress reflector "osgAnimation::TemplateKeyframe< float >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< float >"
    
suppress reflector "osgAnimation::TemplateKeyframe< double >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< double >"

suppress reflector "osgAnimation::TemplateKeyframe< osg::Vec2 >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osg::Vec2 >"

suppress reflector "osgAnimation::TemplateKeyframe< osg::Vec3 >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osg::Vec3 >"

suppress reflector "osgAnimation::TemplateKeyframe< osg::Vec4 >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osg::Vec4 >"

suppress reflector "osgAnimation::TemplateKeyframe< osg::Quat >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osg::Quat >"

suppress reflector "osgAnimation::TemplateKeyframe< osgAnimation::Vec3Packed >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osgAnimation::Vec3Packed >"

suppress reflector "osgAnimation::TemplateKeyframe< osgAnimation::FloatCubicBezier >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osgAnimation::FloatCubicBezier >"
    
suppress reflector "osgAnimation::TemplateKeyframe< osgAnimation::DoubleCubicBezier >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osgAnimation::DoubleCubicBezier >"
    
suppress reflector "osgAnimation::TemplateKeyframe< osgAnimation::Vec2CubicBezier >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osgAnimation::Vec2CubicBezier >"
    
suppress reflector "osgAnimation::TemplateKeyframe< osgAnimation::Vec3CubicBezier >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osgAnimation::Vec3CubicBezier >"
    
suppress reflector "osgAnimation::TemplateKeyframe< osgAnimation::Vec4CubicBezier >"
suppress reflector "osgAnimation::TemplateKeyframeContainer< osgAnimation::Vec4CubicBezier >"

suppress reflector "osgAnimation::TemplateCubicBezier< float >"
suppress reflector "osgAnimation::TemplateCubicBezier< double >"
suppress reflector "osgAnimation::TemplateCubicBezier< osg::Vec2 >"
suppress reflector "osgAnimation::TemplateCubicBezier< osg::Vec3 >"
suppress reflector "osgAnimation::TemplateCubicBezier< osg::Vec4 >"


suppress reflector "osgAnimation::std::vector< osg::ref_ptr< osgAnimation::Channel >  >"

suppress reflector "osgAnimation::TemplateChannel< osgAnimation::DoubleStepSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::FloatStepSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec2StepSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec3StepSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec4StepSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::QuatStepSampler >"

suppress reflector "osgAnimation::TemplateChannel< osgAnimation::DoubleLinearSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::FloatLinearSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec2LinearSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec3LinearSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec4LinearSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::QuatSphericalLinearSampler >"

suppress reflector "osgAnimation::TemplateChannel< osgAnimation::FloatCubicBezierSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::DoubleCubicBezierSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec2CubicBezierSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec3CubicBezierSampler >"
suppress reflector "osgAnimation::TemplateChannel< osgAnimation::Vec4CubicBezierSampler >"

suppress reflector "osgAnimation::AnimationUpdateCallback"

#############################################################################

# StateSet and related types need some advanced tweaking

configure reflector "std::map< osg::StateAttribute::GLMode, osg::StateAttribute::GLModeValue >"
	replace with "STD_MAP_REFLECTOR_WITH_TYPES(std::map< osg::StateAttribute::GLMode COMMA  osg::StateAttribute::GLModeValue >, osg::StateAttribute::GLMode, osg::StateAttribute::Values)"
end

configure reflector "osg::StateSet"

	# remove indexed property "Mode" because its index would not belong to a
	# finite set of values
		
	configure property "Mode"
		replace with ""
	end	
	
end

configure reflector "osg::Geometry"

	# define the count method for some Property
 
		
	configure property "TexCoordData"
		count_method "__unsigned_int__getNumTexCoordArrays"
	end

	configure property "TexCoordIndices"
		count_method "__unsigned_int__getNumTexCoordArrays"
	end

	configure property "VertexAttribBinding"
		count_method "__unsigned_int__getNumVertexAttribArrays"
	end

	configure property "VertexAttribData"
		count_method "__unsigned_int__getNumVertexAttribArrays"
	end

	configure property "VertexAttribIndices"
		count_method "__unsigned_int__getNumVertexAttribArrays"
	end

	configure property "VertexAttribNormalize"
		count_method "__unsigned_int__getNumVertexAttribArrays"
	end
	
end

#############################################################################

# Doxygen fails to detect that /osg::Texture(1D|2D|3D|Rectangle)/ and
# osgText::Font::GlyphTexture are not-abstract class, so we need
# to specify that manually

configure reflector /osg::Texture(1D|2D|3D|Rectangle)/
    object-type
end

configure reflector "osgText::Font::GlyphTexture"
    object-type
end

#############################################################################

# must suppress reflector for osgDB::Output because some of its methods
# are not supported by osgIntrospection (they return non-const references)

suppress reflector "osgDB::Output"

#############################################################################

# some types are incorrectly detected as value type or object type. Here we
# specify the type kind explicitly

configure reflector "OpenThreads::Mutex"
	object-type
end

configure reflector "OpenThreads::Condition"
	object-type
end

configure reflector "OpenThreads::Block"
	object-type
end

configure reflector "OpenThreads::BlockCount"
	object-type
end

configure reflector "OpenThreads::Barrier"
	object-type
end

configure reflector "OpenThreads::ReentrantMutex"
	object-type
end

configure reflector "OpenThreads::ReadWriteMutex"
	object-type
end

configure reflector "osg::DeleteHandler"
	object-type
end

configure reflector "osg::GraphicsContext"
	abstract-object-type
end

#############################################################################

# Suppress scoped lock template

suppress reflector "OpenThreads::ScopedLock< OpenThreads::Mutex >"

#############################################################################

# Suppress nested nested class method

configure reflector "osgShadow::OccluderGeometry"
       configure method /.*_Edge_.*/
               replace with ""
       end
end

#############################################################################

# Doxygen doesn't parse ReadFunc and WriteFunc correctly...

configure reflector "osgDB::DotOsgWrapper::ReadFunc"
	replace with "TYPE_NAME_ALIAS(bool (*)(osg::Object&,osgDB::Input&), osgDB::DotOsgWrapper::ReadFunc)
	"
end

configure reflector "osgDB::DotOsgWrapper::WriteFunc"
	replace with "TYPE_NAME_ALIAS(bool (*)(const osg::Object&,osgDB::Output&), osgDB::DotOsgWrapper::WriteFunc)
	"
end

#############################################################################

# temporary workaround for problems related to ambiguous name resolution

suppress reflector "osg::ref_ptr< const osg::StateAttribute >"
suppress reflector "osg::ref_ptr< const osgFX::Effect >"

#############################################################################

# Doxygen incorrectly parses function typedefs as methods

suppress reflector "osg::VertexProgram::Extensions"
suppress reflector "osg::StencilTwoSided::Extensions"
suppress reflector "osg::Texture3D::Extensions"
suppress reflector "osg::GL2Extensions"
suppress reflector "osg::GLBufferObject::Extensions"
suppress reflector "osg::FBOExtensions"
suppress reflector "osg::BlendColor::Extensions"
suppress reflector "osg::BlendEquation::Extensions"
suppress reflector "osg::BlendFunc::Extensions"
suppress reflector "osg::FragmentProgram::Extensions"
suppress reflector "osg::Multisample::Extensions"
suppress reflector "osg::Point::Extensions"
suppress reflector "osg::ClampColor::Extensions"
suppress reflector "osg::Texture::Extensions"
suppress reflector "osg::Texture2DArray::Extensions"
suppress reflector "osgSim::ShapeAttribute"
suppress reflector "osg::Drawable::Extensions"

configure reflector "osg::State"
	configure method "__typedef__void__APIENTRY_P1"
		replace with ""
	end
end

configure reflector "osgWidget::Window::Getter"
    replace with ""
end

configure reflector "osgWidget::MouseHandler::MouseAction"
    replace with ""
end

configure reflector "osgWidget::MouseHandler::MouseEvent"
    replace with ""
end



#############################################################################

# avoid functions that use protected types, since those are not handled
# currently

configure reflector "osgSim::OverlayNode"
	configure method /.*getOverlayData.*/
		replace with ""
	end
end

configure reflector "osg::Shader"
	configure method /.*_PerContextShader_.*/
		replace with ""
	end
end

configure reflector "osg::State"
	configure method /.*_(ModeStack|AttributeStack|ModeMap|AttributeMap|UniformMap)_.*/
		replace with ""
	end
end

configure reflector "osgUtil::Optimizer::TextureAtlasBuilder"
	configure method /.*_Source_.*/
		replace with ""
	end
end

configure reflector "osgUtil::Tessellator"
	configure method /.*_VertexPtrToIndexMap_.*/
		replace with ""
	end
end

configure reflector "osgDB::Registry"
	configure method /.*_(DynamicLibraryList_iterator|DotOsgWrapperMap)_.*/
		replace with ""
	end
end

configure reflector "osgText::FadeText"
	configure method /.*_ViewBlendColou?rMap_.*/
		replace with ""
	end
end

configure reflector "osgParticle::PrecipitationEffect"
	configure method /.*_PrecipitationDrawableSet_.*/
		replace with ""
	end
end

configure reflector "osgManipulator::MotionCommand"
	configure method /.*_SelectionList_.*/
		replace with ""
	end
end
