Added support for set/getUniform and set/getProgram into osg::StateSet.

This commit is contained in:
Robert Osfield 2005-03-11 20:29:21 +00:00
parent 3005f34cc4
commit a2e8bc6267
13 changed files with 1635 additions and 248 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
# Doxyfile 1.2.16 # Doxyfile 1.3.6
# This file describes the settings to be used by the documentation system # This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project # doxygen (www.doxygen.org) for a project
@ -11,13 +11,13 @@
# Values that contain spaces should be placed between quotes (" ") # Values that contain spaces should be placed between quotes (" ")
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# General configuration options # Project related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded # The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project. # by quotes) that should identify the project.
PROJECT_NAME = "OpenSceneGraph" PROJECT_NAME = OpenSceneGraph
# The PROJECT_NUMBER tag can be used to enter a project or revision number. # The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or # This could be handy for archiving the generated documentation or
@ -36,13 +36,158 @@ OUTPUT_DIRECTORY = $(OSGHOME)/doc/
# documentation generated by doxygen is written. Doxygen will use this # documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language. # information to generate all constant output in the proper language.
# The default language is English, other supported languages are: # The default language is English, other supported languages are:
# Brazilian, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean, # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
# Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Slovene, # (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese,
# Spanish, Swedish and Ukrainian. # Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
OUTPUT_LANGUAGE = English OUTPUT_LANGUAGE = English
# This tag can be used to specify the encoding used in the generated output.
# The encoding is not always determined by the language that is chosen,
# but also whether or not the output is meant for Windows or non-Windows users.
# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
# forces the Windows encoding (this is the default for the Windows binary),
# whereas setting the tag to NO uses a Unix-style encoding (the default for
# all platforms other than Windows).
USE_WINDOWS_ENCODING = NO
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
# the file and class documentation (similar to JavaDoc).
# Set to NO to disable this.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
# the brief description of a member or function before the detailed description.
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator
# that is used to form the text in various listings. Each string
# in this list, if found as the leading text of the brief description, will be
# stripped from the text and the result after processing the whole list, is used
# as the annotated text. Otherwise, the brief description is used as-is. If left
# blank, the following values are used ("$name" is automatically replaced with the
# name of the entity): "The $name class" "The $name widget" "The $name file"
# "is" "provides" "specifies" "contains" "represents" "a" "an" "the"
ABBREVIATE_BRIEF =
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# Doxygen will generate a detailed section even if there is only a brief
# description.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
# members of a class in the documentation of that class as if those members were
# ordinary class members. Constructors, destructors and assignment operators of
# the base classes will not be shown.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
FULL_PATH_NAMES = NO
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. It is allowed to use relative paths in the argument list.
# If left blank the directory from which doxygen is run is used as the
# path to strip.
STRIP_FROM_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
# (but less readable) file names. This can be useful is your file systems
# doesn't support long names like on DOS, Mac, or CD-ROM.
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
# will interpret the first line (until the first dot) of a JavaDoc-style
# comment as the brief description. If set to NO, the JavaDoc
# comments will behave just like the Qt-style comments (thus requiring an
# explicit @brief command for a brief description.
JAVADOC_AUTOBRIEF = YES
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
# treat a multi-line C++ special comment block (i.e. a block of //! or ///
# comments) as a brief description. This used to be the default behaviour.
# The new default is to treat a multi-line C++ comment block as a detailed
# description. Set this tag to YES if you prefer the old behaviour instead.
MULTILINE_CPP_IS_BRIEF = NO
# If the DETAILS_AT_TOP tag is set to YES then Doxygen
# will output the detailed description near the top, like JavaDoc.
# If set to NO, the detailed description appears after the member
# documentation.
DETAILS_AT_TOP = NO
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# re-implements.
INHERIT_DOCS = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
DISTRIBUTE_GROUP_DOC = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab.
# Doxygen uses this value to replace tabs by spaces in code fragments.
TAB_SIZE = 8
# This tag can be used to specify a number of aliases that acts
# as commands in the documentation. An alias has the form "name=value".
# For example adding "sideeffect=\par Side Effects:\n" will allow you to
# put the command \sideeffect (or @sideeffect) in the documentation, which
# will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
ALIASES =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C.
# For instance, some of the names that are used will be different. The list
# of all members will be omitted, etc.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
# only. Doxygen will then generate output that is more tailored for Java.
# For instance, namespaces will be presented as packages, qualified scopes
# will look different, etc.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
# the same type (for instance a group of public functions) to be put as a
# subgroup of that type (e.g. under the Public Functions section). Set it to
# NO to prevent subgrouping. Alternatively, this can be done per class using
# the \nosubgrouping command.
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available. # documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless # Private class members and static file members will be hidden unless
@ -76,50 +221,24 @@ HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. # undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these class will be included in the various # If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled. # overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = NO HIDE_UNDOC_CLASSES = NO
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
# include brief member descriptions after the members that are listed in # friend (class|struct|union) declarations.
# the file and class documentation (similar to JavaDoc). # If set to NO (the default) these declarations will be included in the
# Set to NO to disable this. # documentation.
BRIEF_MEMBER_DESC = YES HIDE_FRIEND_COMPOUNDS = NO
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
# the brief description of a member or function before the detailed description. # documentation blocks found inside the body of a function.
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # If set to NO (the default) these blocks will be appended to the
# brief descriptions will be completely suppressed. # function's detailed documentation block.
REPEAT_BRIEF = YES HIDE_IN_BODY_DOCS = NO
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# Doxygen will generate a detailed section even if there is only a brief
# description.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
# members of a class in the documentation of that class as if those members were
# ordinary class members. Constructors, destructors and assignment operators of
# the base classes will not be shown.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
FULL_PATH_NAMES = NO
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. It is allowed to use relative paths in the argument list.
STRIP_FROM_PATH =
# The INTERNAL_DOCS tag determines if documentation # The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set # that is typed after a \internal command is included. If the tag is set
@ -128,65 +247,26 @@ STRIP_FROM_PATH =
INTERNAL_DOCS = NO INTERNAL_DOCS = NO
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
# doxygen to hide any special comment blocks from generated source code
# fragments. Normal C and C++ comments will always remain visible.
STRIP_CODE_COMMENTS = YES
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
# file names in lower case letters. If set to YES upper case letters are also # file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ # allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows # in case and if your file system supports case sensitive file names. Windows
# users are adviced to set this option to NO. # users are advised to set this option to NO.
CASE_SENSE_NAMES = YES CASE_SENSE_NAMES = YES
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
# (but less readable) file names. This can be useful is your file systems
# doesn't support long names like on DOS, Mac, or CD-ROM.
SHORT_NAMES = NO
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the # will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden. # documentation. If set to YES the scope will be hidden.
HIDE_SCOPE_NAMES = NO HIDE_SCOPE_NAMES = NO
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.
VERBATIM_HEADERS = YES
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
# will put list of the files that are included by a file in the documentation # will put a list of the files that are included by a file in the documentation
# of that file. # of that file.
SHOW_INCLUDE_FILES = YES SHOW_INCLUDE_FILES = YES
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
# will interpret the first line (until the first dot) of a JavaDoc-style
# comment as the brief description. If set to NO, the JavaDoc
# comments will behave just like the Qt-style comments (thus requiring an
# explict @brief command for a brief description.
JAVADOC_AUTOBRIEF = YES
# If the DETAILS_AT_TOP tag is set to YES then Doxygen
# will output the detailed description near the top, like JavaDoc.
# If set to NO, the detailed description appears after the member
# documentation.
DETAILS_AT_TOP = NO
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# reimplements.
INHERIT_DOCS = YES
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members. # is inserted in the documentation for inline members.
@ -199,17 +279,22 @@ INLINE_INFO = YES
SORT_MEMBER_DOCS = YES SORT_MEMBER_DOCS = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
# tag is set to YES, then doxygen will reuse the documentation of the first # brief documentation of file, namespace and class members alphabetically
# member in the group (if any) for the other members of the group. By default # by member name. If set to NO (the default) the members will appear in
# all members of a group must be documented explicitly. # declaration order.
DISTRIBUTE_GROUP_DOC = NO SORT_BRIEF_DOCS = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab. # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
# Doxygen uses this value to replace tabs by spaces in code fragments. # sorted by fully-qualified names, including namespaces. If set to
# NO (the default), the class list will be sorted only by class name,
# not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the
# alphabetical list.
TAB_SIZE = 8 SORT_BY_SCOPE_NAME = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or # The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo # disable (NO) the todo list. This list is created by putting \todo
@ -229,14 +314,11 @@ GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES GENERATE_BUGLIST = YES
# This tag can be used to specify a number of aliases that acts # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
# as commands in the documentation. An alias has the form "name=value". # disable (NO) the deprecated list. This list is created by putting
# For example adding "sideeffect=\par Side Effects:\n" will allow you to # \deprecated commands in the documentation.
# put the command \sideeffect (or @sideeffect) in the documentation, which
# will result in a user defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
ALIASES = GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional # The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif. # documentation sections, marked by \if sectionname ... \endif.
@ -244,28 +326,14 @@ ALIASES =
ENABLED_SECTIONS = ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
# the initial value of a variable or define consist of for it to appear in # the initial value of a variable or define consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified # the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely. # here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and defines in the # The appearance of the initializer of individual variables and defines in the
# documentation can be controlled using \showinitializer or \hideinitializer # documentation can be controlled using \showinitializer or \hideinitializer
# command in the documentation regardless of this setting. # command in the documentation regardless of this setting.
MAX_INITIALIZER_LINES = MAX_INITIALIZER_LINES = 30
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C.
# For instance some of the names that are used will be different. The list
# of all members will be omitted, etc.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
# only. Doxygen will then generate output that is more tailored for Java.
# For instance namespaces will be presented as packages, qualified scopes
# will look different, etc.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated # Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the # at the bottom of the documentation of classes and structs. If set to YES the
@ -294,6 +362,13 @@ WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES WARN_IF_UNDOCUMENTED = YES
# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some
# parameters in a documented function, or documenting parameters that
# don't exist or using markup commands wrongly.
WARN_IF_DOC_ERROR = YES
# The WARN_FORMAT tag determines the format of the warning messages that # The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text # doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the # tags, which will be replaced by the file and line number from which the
@ -334,7 +409,7 @@ INPUT = $(OSGHOME)/include/osg \
# and *.h) to filter out the source-files in the directories. If left # and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested: # blank the following patterns are tested:
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
# *.h++ *.idl *.odl # *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
FILE_PATTERNS = *include* \ FILE_PATTERNS = *include* \
*.cpp *.cpp
@ -399,7 +474,7 @@ INPUT_FILTER =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source # INPUT_FILTER) will be used to filter the input files when producing source
# files to browse. # files to browse (i.e. when SOURCE_BROWSER is set to YES).
FILTER_SOURCE_FILES = NO FILTER_SOURCE_FILES = NO
@ -409,6 +484,8 @@ FILTER_SOURCE_FILES = NO
# If the SOURCE_BROWSER tag is set to YES then a list of source files will # If the SOURCE_BROWSER tag is set to YES then a list of source files will
# be generated. Documented entities will be cross-referenced with these sources. # be generated. Documented entities will be cross-referenced with these sources.
# Note: To get rid of all source code in the generated output, make sure also
# VERBATIM_HEADERS is set to NO.
SOURCE_BROWSER = NO SOURCE_BROWSER = NO
@ -417,6 +494,12 @@ SOURCE_BROWSER = NO
INLINE_SOURCES = NO INLINE_SOURCES = NO
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
# doxygen to hide any special comment blocks from generated source code
# fragments. Normal C and C++ comments will always remain visible.
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES (the default) # If the REFERENCED_BY_RELATION tag is set to YES (the default)
# then for each documented function all documented # then for each documented function all documented
# functions referencing it will be listed. # functions referencing it will be listed.
@ -429,6 +512,12 @@ REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES REFERENCES_RELATION = YES
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.
VERBATIM_HEADERS = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the alphabetical class index # configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@ -485,10 +574,12 @@ HTML_HEADER =
HTML_FOOTER = $(OSGHOME)/doc/Doxyfiles/custom_Footer.html HTML_FOOTER = $(OSGHOME)/doc/Doxyfiles/custom_Footer.html
# The HTML_STYLESHEET tag can be used to specify a user defined cascading # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
# style sheet that is used by each HTML page. It can be used to # style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen # fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet # will generate a default style sheet. Note that doxygen will try to copy
# the style sheet file to the HTML output directory, so don't put your own
# stylesheet in the HTML output directory as well, or it will be erased!
HTML_STYLESHEET = HTML_STYLESHEET =
@ -505,6 +596,20 @@ HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO GENERATE_HTMLHELP = NO
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
# can add a path in front of the file if the result should not be
# written to the html output directory.
CHM_FILE =
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
# be used to specify the location (absolute path including file name) of
# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
# the HTML help compiler on the generated index.hhp.
HHC_LOCATION =
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
# controls if a separate .chi index file is generated (YES) or that # controls if a separate .chi index file is generated (YES) or that
# it should be included in the master .chm file (NO). # it should be included in the master .chm file (NO).
@ -518,7 +623,7 @@ GENERATE_CHI = NO
BINARY_TOC = NO BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members # The TOC_EXPAND flag can be set to YES to add extra items for group members
# to the contents of the Html help documentation and to the tree view. # to the contents of the HTML help documentation and to the tree view.
TOC_EXPAND = NO TOC_EXPAND = NO
@ -531,15 +636,14 @@ DISABLE_INDEX = NO
# This tag can be used to set the number of enum values (range [1..20]) # This tag can be used to set the number of enum values (range [1..20])
# that doxygen will group on one line in the generated HTML documentation. # that doxygen will group on one line in the generated HTML documentation.
ENUM_VALUES_PER_LINE = ENUM_VALUES_PER_LINE = 4
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that # generated containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports # is generated for HTML Help). For this to work a browser that supports
# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
# or Internet explorer 4.0+). Note that for large projects the tree generation # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
# can take a very long time. In such cases it is better to disable this feature. # probably better off using the HTML help feature.
# Windows users are probably better off using the HTML help feature.
GENERATE_TREEVIEW = NO GENERATE_TREEVIEW = NO
@ -547,7 +651,7 @@ GENERATE_TREEVIEW = NO
# used to set the initial width (in pixels) of the frame in which the tree # used to set the initial width (in pixels) of the frame in which the tree
# is shown. # is shown.
TREEVIEW_WIDTH = TREEVIEW_WIDTH = 250
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the LaTeX output # configuration options related to the LaTeX output
@ -564,7 +668,8 @@ GENERATE_LATEX = NO
LATEX_OUTPUT = latex LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked. If left blank `latex' will be used as the default command name.
LATEX_CMD_NAME = latex LATEX_CMD_NAME = latex
@ -618,12 +723,18 @@ USE_PDFLATEX = NO
LATEX_BATCHMODE = NO LATEX_BATCHMODE = NO
# If LATEX_HIDE_INDICES is set to YES then doxygen will not
# include the index chapters (such as File Index, Compound Index, etc.)
# in the output.
LATEX_HIDE_INDICES = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the RTF output # configuration options related to the RTF output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
# The RTF output is optimised for Word 97 and may not look very pretty with # The RTF output is optimized for Word 97 and may not look very pretty with
# other RTF readers or editors. # other RTF readers or editors.
GENERATE_RTF = NO GENERATE_RTF = NO
@ -650,7 +761,7 @@ COMPACT_RTF = NO
RTF_HYPERLINKS = NO RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's # Load stylesheet definitions from file. Syntax is similar to doxygen's
# config file, i.e. a series of assigments. You only have to provide # config file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value. # replacements, missing definitions are set to their default value.
RTF_STYLESHEET_FILE = RTF_STYLESHEET_FILE =
@ -694,12 +805,35 @@ MAN_LINKS = NO
# If the GENERATE_XML tag is set to YES Doxygen will # If the GENERATE_XML tag is set to YES Doxygen will
# generate an XML file that captures the structure of # generate an XML file that captures the structure of
# the code including all documentation. Note that this # the code including all documentation.
# feature is still experimental and incomplete at the
# moment.
GENERATE_XML = NO GENERATE_XML = NO
# The XML_OUTPUT tag is used to specify where the XML pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `xml' will be used as the default path.
XML_OUTPUT = xml
# The XML_SCHEMA tag can be used to specify an XML schema,
# which can be used by a validating XML parser to check the
# syntax of the XML files.
XML_SCHEMA =
# The XML_DTD tag can be used to specify an XML DTD,
# which can be used by a validating XML parser to check the
# syntax of the XML files.
XML_DTD =
# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
# dump the program listings (including syntax highlighting
# and cross-referencing information) to the XML output. Note that
# enabling this will significantly increase the size of the XML output.
XML_PROGRAMLISTING = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output # configuration options for the AutoGen Definitions output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@ -712,6 +846,39 @@ GENERATE_XML = NO
GENERATE_AUTOGEN_DEF = NO GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
# If the GENERATE_PERLMOD tag is set to YES Doxygen will
# generate a Perl module file that captures the structure of
# the code including all documentation. Note that this
# feature is still experimental and incomplete at the
# moment.
GENERATE_PERLMOD = NO
# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
# the necessary Makefile rules, Perl scripts and LaTeX code to be able
# to generate PDF and DVI output from the Perl module output.
PERLMOD_LATEX = NO
# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
# nicely formatted so it can be parsed by a human reader. This is useful
# if you want to understand what is going on. On the other hand, if this
# tag is set to NO the size of the Perl module output will be much smaller
# and Perl will parse it just the same.
PERLMOD_PRETTY = YES
# The names of the make variables in the generated doxyrules.make file
# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
# This is useful so different doxyrules.make files included by the same
# Makefile don't overwrite each other's variables.
PERLMOD_MAKEVAR_PREFIX =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the preprocessor # Configuration options related to the preprocessor
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
@ -761,7 +928,7 @@ INCLUDE_FILE_PATTERNS =
PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS
# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded. # this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used. # The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition. # Use the PREDEFINED tag if you want to use a different macro definition.
@ -770,16 +937,30 @@ EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
# doxygen's preprocessor will remove all function-like macros that are alone # doxygen's preprocessor will remove all function-like macros that are alone
# on a line and do not end with a semicolon. Such function macros are typically # on a line, have an all uppercase name, and do not end with a semicolon. Such
# used for boiler-plate code, and will confuse the parser if not removed. # function macros are typically used for boiler-plate code, and will confuse the
# parser if not removed.
SKIP_FUNCTION_MACROS = YES SKIP_FUNCTION_MACROS = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration::addtions related to external references # Configuration::additions related to external references
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# The TAGFILES tag can be used to specify one or more tagfiles. # The TAGFILES option can be used to specify one or more tagfiles.
# Optionally an initial location of the external documentation
# can be added for each tagfile. The format of a tag file without
# this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where "loc1" and "loc2" can be relative or absolute paths or
# URLs. If a location is present for each tag, the installdox tool
# does not have to be run to correct the links.
# Note that each tag file must have a unique name
# (where the name does NOT include the path)
# If a tag file is not located in the directory in which doxygen
# is run, you must also specify the path to the tagfile here.
TAGFILES = TAGFILES =
@ -810,10 +991,10 @@ PERL_PATH = /usr/bin/perl
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
# super classes. Setting the tag to NO turns the diagrams off. Note that this # super classes. Setting the tag to NO turns the diagrams off. Note that this
# option is superceded by the HAVE_DOT option below. This is only a fallback. It is # option is superseded by the HAVE_DOT option below. This is only a fallback. It is
# recommended to install and use dot, since it yield more powerful graphs. # recommended to install and use dot, since it yields more powerful graphs.
CLASS_DIAGRAMS = YES CLASS_DIAGRAMS = YES
@ -844,6 +1025,12 @@ CLASS_GRAPH = YES
COLLABORATION_GRAPH = NO COLLABORATION_GRAPH = NO
# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
UML_LOOK = NO
# If set to YES, the inheritance and collaboration graphs will show the # If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances. # relations between templates and their instances.
@ -863,6 +1050,14 @@ INCLUDE_GRAPH = NO
INCLUDED_BY_GRAPH = NO INCLUDED_BY_GRAPH = NO
# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
# generate a call dependency graph for every global function or class method.
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command.
CALL_GRAPH = NO
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will graphical hierarchy of all classes instead of a textual one. # will graphical hierarchy of all classes instead of a textual one.
@ -901,6 +1096,17 @@ MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_HEIGHT = 1024
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
# graphs generated by dot. A depth value of 3 means that only nodes reachable
# from the root by following a path via at most 3 edges will be shown. Nodes that
# lay further from the root node will be omitted. Note that setting this option to
# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
# note that a graph may be further truncated if the graph's image dimensions are
# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
# If 0 is used for the depth value (the default), the graph is not depth-constrained.
MAX_DOT_GRAPH_DEPTH = 0
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and # generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs. # arrows in the dot generated graphs.
@ -908,51 +1114,16 @@ MAX_DOT_GRAPH_HEIGHT = 1024
GENERATE_LEGEND = YES GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
# remove the intermedate dot files that are used to generate # remove the intermediate dot files that are used to generate
# the various graphs. # the various graphs.
DOT_CLEANUP = YES DOT_CLEANUP = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration::addtions related to the search engine # Configuration::additions related to the search engine
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# The SEARCHENGINE tag specifies whether or not a search engine should be # The SEARCHENGINE tag specifies whether or not a search engine should be
# used. If set to NO the values of all tags below this one will be ignored. # used. If set to NO the values of all tags below this one will be ignored.
SEARCHENGINE = NO SEARCHENGINE = NO
# The CGI_NAME tag should be the name of the CGI script that
# starts the search engine (doxysearch) with the correct parameters.
# A script with this name will be generated by doxygen.
CGI_NAME = search.cgi
# The CGI_URL tag should be the absolute URL to the directory where the
# cgi binaries are located. See the documentation of your http daemon for
# details.
CGI_URL =
# The DOC_URL tag should be the absolute URL to the directory where the
# documentation is located. If left blank the absolute path to the
# documentation, with file:// prepended to it, will be used.
DOC_URL =
# The DOC_ABSPATH tag should be the absolute path to the directory where the
# documentation is located. If left blank the directory on the local machine
# will be used.
DOC_ABSPATH =
# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
# is installed.
BIN_ABSPATH = /usr/local/bin/
# The EXT_DOC_PATHS tag can be used to specify one or more paths to
# documentation generated for other projects. This allows doxysearch to search
# the documentation for these projects as well.
EXT_DOC_PATHS =

View File

@ -18,8 +18,11 @@
#include <osg/ShadowVolumeOccluder> #include <osg/ShadowVolumeOccluder>
#include <osg/Referenced> #include <osg/Referenced>
namespace osg { namespace osg {
#define COMPILE_WITH_SHADOW_OCCLUSION_CULLING
/** A CullingSet class which contains a frustum and a list of occluders. */ /** A CullingSet class which contains a frustum and a list of occluders. */
class SG_EXPORT CullingSet : public Referenced class SG_EXPORT CullingSet : public Referenced
{ {
@ -222,7 +225,7 @@ class SG_EXPORT CullingSet : public Referenced
{ {
if (((bs.center()*_pixelSizeVector)*_smallFeatureCullingPixelSize)>bs.radius()) return true; if (((bs.center()*_pixelSizeVector)*_smallFeatureCullingPixelSize)>bs.radius()) return true;
} }
#ifdef COMPILE_WITH_SHADOW_OCCLUSION_CULLING
if (_mask&SHADOW_OCCLUSION_CULLING) if (_mask&SHADOW_OCCLUSION_CULLING)
{ {
// is it in one of the shadow occluder volumes. // is it in one of the shadow occluder volumes.
@ -236,7 +239,7 @@ class SG_EXPORT CullingSet : public Referenced
} }
} }
} }
#endif
return false; return false;
} }
@ -244,6 +247,7 @@ class SG_EXPORT CullingSet : public Referenced
{ {
_frustum.pushCurrentMask(); _frustum.pushCurrentMask();
#ifdef COMPILE_WITH_SHADOW_OCCLUSION_CULLING
if (!_occluderList.empty()) if (!_occluderList.empty())
{ {
for(OccluderList::iterator itr=_occluderList.begin(); for(OccluderList::iterator itr=_occluderList.begin();
@ -253,12 +257,14 @@ class SG_EXPORT CullingSet : public Referenced
itr->pushCurrentMask(); itr->pushCurrentMask();
} }
} }
#endif
} }
inline void popCurrentMask() inline void popCurrentMask()
{ {
_frustum.popCurrentMask(); _frustum.popCurrentMask();
#ifdef COMPILE_WITH_SHADOW_OCCLUSION_CULLING
if (!_occluderList.empty()) if (!_occluderList.empty())
{ {
for(OccluderList::iterator itr=_occluderList.begin(); for(OccluderList::iterator itr=_occluderList.begin();
@ -268,6 +274,7 @@ class SG_EXPORT CullingSet : public Referenced
itr->popCurrentMask(); itr->popCurrentMask();
} }
} }
#endif
} }
void disableAndPushOccludersCurrentMask(NodePath& nodePath); void disableAndPushOccludersCurrentMask(NodePath& nodePath);

View File

@ -24,8 +24,6 @@
#ifndef OSG_PROGRAM #ifndef OSG_PROGRAM
#define OSG_PROGRAM 1 #define OSG_PROGRAM 1
#include <osg/State>
#include <osg/StateAttribute>
#include <osg/buffered_value> #include <osg/buffered_value>
#include <osg/ref_ptr> #include <osg/ref_ptr>
#include <osg/Vec2> #include <osg/Vec2>
@ -41,6 +39,8 @@
namespace osg { namespace osg {
class State;
class SG_EXPORT GL2Extensions : public osg::Referenced class SG_EXPORT GL2Extensions : public osg::Referenced
{ {
public: public:
@ -312,7 +312,7 @@ typedef std::vector< ShaderPtr > ShaderList;
* configuration. * configuration.
*/ */
class SG_EXPORT Program : public osg::StateAttribute class SG_EXPORT Program : public osg::Object
{ {
public: public:
Program(); Program();
@ -320,10 +320,10 @@ class SG_EXPORT Program : public osg::StateAttribute
/** Copy constructor using CopyOp to manage deep vs shallow copy.*/ /** Copy constructor using CopyOp to manage deep vs shallow copy.*/
Program(const Program& rhs, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); Program(const Program& rhs, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
META_StateAttribute(osg, Program, PROGRAM); META_Object(osg, Program);
/** return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs.*/ /** return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs.*/
virtual int compare(const osg::StateAttribute& sa) const; virtual int compare(const osg::Program& sa) const;
/** If enabled, activate our program in the GL pipeline, /** If enabled, activate our program in the GL pipeline,
* performing any rebuild operations that might be pending. */ * performing any rebuild operations that might be pending. */

View File

@ -38,7 +38,7 @@ namespace osg {
* configuration. * configuration.
*/ */
class SG_EXPORT Shader : public osg::Referenced class SG_EXPORT Shader : public osg::Object
{ {
public: public:

View File

@ -176,10 +176,6 @@ class SG_EXPORT StateAttribute : public Object
REGISTER_COMBINERS, REGISTER_COMBINERS,
// osgNVParse // osgNVParse
PROGRAM_PARSER, PROGRAM_PARSER,
/// core GLSL
PROGRAM,
UNIFORM,
}; };
/** Simple pairing between an attribute type and the member within that attribute type group.*/ /** Simple pairing between an attribute type and the member within that attribute type group.*/

View File

@ -18,6 +18,10 @@
#include <osg/StateAttribute> #include <osg/StateAttribute>
#include <osg/ref_ptr> #include <osg/ref_ptr>
#include <osg/Uniform>
#include <osg/Program>
#include <map> #include <map>
#include <vector> #include <vector>
#include <string> #include <string>
@ -252,6 +256,56 @@ class SG_EXPORT StateSet : public Object
void setAssociatedTextureModes(unsigned int unit,const StateAttribute* attribute, StateAttribute::GLModeValue value); void setAssociatedTextureModes(unsigned int unit,const StateAttribute* attribute, StateAttribute::GLModeValue value);
/** Simple pairing between an attribute and its override flag.*/
typedef std::pair<ref_ptr<Uniform>,StateAttribute::OverrideValue> RefUniformPair;
/** a container to map <StateAttribyte::Types,Member> to their respective RefAttributePair.*/
typedef std::map<std::string,RefUniformPair> UniformList;
/** Set this StateSet to contain specified uniform and override flag.*/
void setUniform(Uniform* uniform, StateAttribute::OverrideValue value=StateAttribute::OFF);
/** remove uniform of specified name from StateSet.*/
void removeUniform(const std::string& name);
/** remove attribute from StateSet.*/
void removeUniform(Uniform* attribute);
/** Get Uniform for specified name.
* Returns NULL if no matching uniform is contained within StateSet.*/
Uniform* getUniform(const std::string& name);
/** Get const Uniform for specified name.
* Returns NULL if no matching uniform is contained within StateSet.*/
const Uniform* getUniform(const std::string& name) const;
/** Get specified RefUniformPair for specified type.
* Returns NULL if no type is contained within StateSet.*/
const RefUniformPair* getUniformPair(const std::string& name) const;
/** set the list of all Uniforms contained in this StateSet.*/
inline void setUniformList(UniformList& al) { _uniformList=al; }
/** return the list of all Uniforms contained in this StateSet.*/
inline UniformList& getUniformList() { return _uniformList; }
/** return the const list of all Uniforms contained in this const StateSet.*/
inline const UniformList& getUniformList() const { return _uniformList; }
void setProgram(Program* program) { _program = program; }
Program* getProgram() { return _program.get(); }
const Program* getProgram() const { return _program.get(); }
enum RenderingHint enum RenderingHint
{ {
DEFAULT_BIN = 0, DEFAULT_BIN = 0,
@ -330,6 +384,9 @@ class SG_EXPORT StateSet : public Object
TextureModeList _textureModeList; TextureModeList _textureModeList;
TextureAttributeList _textureAttributeList; TextureAttributeList _textureAttributeList;
UniformList _uniformList;
osg::ref_ptr<osg::Program> _program;
inline ModeList& getOrCreateTextureModeList(unsigned int unit) inline ModeList& getOrCreateTextureModeList(unsigned int unit)
{ {
if (unit>=_textureModeList.size()) _textureModeList.resize(unit+1); if (unit>=_textureModeList.size()) _textureModeList.resize(unit+1);

View File

@ -29,7 +29,7 @@
#include <osg/Vec3> #include <osg/Vec3>
#include <osg/Vec4> #include <osg/Vec4>
#include <osg/Matrix> #include <osg/Matrix>
#include <osg/StateAttribute> #include <osg/GL>
#include <string> #include <string>
@ -127,9 +127,9 @@ typedef char GLchar;
namespace osg { namespace osg {
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
/** Uniform is an osg::StateAttribute to encapsulate glUniform values */ /** Uniform encapsulates glUniform values */
class SG_EXPORT Uniform : public StateAttribute class SG_EXPORT Uniform : public Object
{ {
public: public:
class Value class Value
@ -163,6 +163,7 @@ class SG_EXPORT Uniform : public StateAttribute
Value( const char* name, Type type ); Value( const char* name, Type type );
Value( const Value& rhs ); Value( const Value& rhs );
/** Get the name of glUniform. */ /** Get the name of glUniform. */
const std::string& getName() const { return _name; } const std::string& getName() const { return _name; }
@ -249,19 +250,21 @@ class SG_EXPORT Uniform : public StateAttribute
/** Copy constructor using CopyOp to manage deep vs shallow copy. */ /** Copy constructor using CopyOp to manage deep vs shallow copy. */
Uniform(const Uniform& gu,const CopyOp& copyop=CopyOp::SHALLOW_COPY); Uniform(const Uniform& gu,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
META_StateAttribute(osg, Uniform, UNIFORM); META_Object(osg, Uniform);
/** return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs. */ /** return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs. */
virtual int compare(const StateAttribute& sa) const virtual int compare(const Uniform& rhs) const
{ {
// check if the types are equal and then create the rhs variable
// used by the COMPARE_StateAttribute_Parameter macros below.
COMPARE_StateAttribute_Types(Uniform,sa)
return _value.compare( rhs._value ); return _value.compare( rhs._value );
} }
virtual void apply( State& state ) const; bool operator < (const Uniform& rhs) const
{
if (_value.getName()<rhs._value.getName()) return true;
return false;
}
const std::string& getName() const { return _value.getName(); }
/** assignment */ /** assignment */
bool set( float f ); bool set( float f );

View File

@ -1912,7 +1912,7 @@ Program::Program()
Program::Program(const Program& rhs, const osg::CopyOp& copyop): Program::Program(const Program& rhs, const osg::CopyOp& copyop):
osg::StateAttribute(rhs, copyop) osg::Object(rhs, copyop)
{ {
osg::notify(osg::FATAL) << "how got here?" << std::endl; osg::notify(osg::FATAL) << "how got here?" << std::endl;
} }
@ -1932,7 +1932,7 @@ Program::~Program()
} }
} }
int Program::compare(const osg::StateAttribute& sa) const int Program::compare(const osg::Program& sa) const
{ {
// check the types are equal and then create the rhs variable // check the types are equal and then create the rhs variable
// used by the COMPARE_StateAttribute_Paramter macro's below. // used by the COMPARE_StateAttribute_Paramter macro's below.

View File

@ -55,8 +55,8 @@ Shader::Shader(Type type, const char* sourceText) :
setShaderSource( sourceText ); setShaderSource( sourceText );
} }
Shader::Shader(const Shader& rhs, const osg::CopyOp& /*copyop*/): Shader::Shader(const Shader& rhs, const osg::CopyOp& copyop):
Referenced( rhs ), Object( rhs, copyop ),
_type(rhs._type) _type(rhs._type)
{ {
/*TODO*/ /*TODO*/

View File

@ -281,6 +281,37 @@ int StateSet::compare(const StateSet& rhs,bool compareAttributeContents) const
} }
else if (rhs_mode_itr == rhs._modeList.end()) return 1; else if (rhs_mode_itr == rhs._modeList.end()) return 1;
// check uniforms.
UniformList::const_iterator lhs_uniform_itr = _uniformList.begin();
UniformList::const_iterator rhs_uniform_itr = rhs._uniformList.begin();
while (lhs_uniform_itr!=_uniformList.end() && rhs_uniform_itr!=rhs._uniformList.end())
{
if (lhs_uniform_itr->first<rhs_uniform_itr->first) return -1;
else if (rhs_uniform_itr->first<lhs_uniform_itr->first) return 1;
if (lhs_uniform_itr->second<rhs_uniform_itr->second) return -1;
else if (rhs_uniform_itr->second<lhs_uniform_itr->second) return 1;
++lhs_uniform_itr;
++rhs_uniform_itr;
}
if (lhs_uniform_itr==_uniformList.end())
{
if (rhs_uniform_itr!=rhs._uniformList.end()) return -1;
}
else if (rhs_uniform_itr == rhs._uniformList.end()) return 1;
if (_program.valid())
{
if (rhs._program.valid())
{
int result = _program->compare(*rhs._program);
if (result!=0) return result;
}
else return 1;
}
else if (rhs._program.valid()) return -1;
return 0; return 0;
} }
@ -631,6 +662,58 @@ const StateSet::RefAttributePair* StateSet::getAttributePair(StateAttribute::Typ
return getAttributePair(_attributeList,type,member); return getAttributePair(_attributeList,type,member);
} }
void StateSet::setUniform(Uniform* uniform, StateAttribute::OverrideValue value)
{
if (uniform)
{
RefUniformPair& up = _uniformList[uniform->getName()];
up.first = uniform;
up.second = value;
}
}
void StateSet::removeUniform(const std::string& name)
{
UniformList::iterator itr = _uniformList.find(name);
if (itr!=_uniformList.end())
{
_uniformList.erase(itr);
}
}
void StateSet::removeUniform(Uniform* uniform)
{
if (!uniform) return;
UniformList::iterator itr = _uniformList.find(uniform->getName());
if (itr!=_uniformList.end())
{
if (itr->second.first != uniform) return;
_uniformList.erase(itr);
}
}
Uniform* StateSet::getUniform(const std::string& name)
{
UniformList::iterator itr = _uniformList.find(name);
if (itr!=_uniformList.end()) return itr->second.first.get();
else return 0;
}
const Uniform* StateSet::getUniform(const std::string& name) const
{
UniformList::const_iterator itr = _uniformList.find(name);
if (itr!=_uniformList.end()) return itr->second.first.get();
else return 0;
}
const StateSet::RefUniformPair* StateSet::getUniformPair(const std::string& name) const
{
UniformList::const_iterator itr = _uniformList.find(name);
if (itr!=_uniformList.end()) return &(itr->second);
else return 0;
}
void StateSet::setTextureMode(unsigned int unit,StateAttribute::GLMode mode, StateAttribute::GLModeValue value) void StateSet::setTextureMode(unsigned int unit,StateAttribute::GLMode mode, StateAttribute::GLModeValue value)
{ {
if (s_textureGLModeSet.isTextureMode(mode)) if (s_textureGLModeSet.isTextureMode(mode))

View File

@ -424,32 +424,12 @@ Uniform::Uniform( const char* name, int i ) :
Uniform::Uniform( const Uniform& gu, const CopyOp& copyop ) : Uniform::Uniform( const Uniform& gu, const CopyOp& copyop ) :
StateAttribute(gu,copyop), Object(gu,copyop),
_value( gu._value ) _value( gu._value )
{ {
} }
void Uniform::apply( State& /*state*/ ) const
{
// The definition of apply() for Uniforms is unique among
// osg::StateAttributes...
// If a Program is not active, then cannot apply the uniform value,
// but must wait for a Program to do that itself later when it
// does become active.
// If a Program is active, then the Uniform may be applied
// immediately.
// something like...
//
// Program* program = state->getActiveProgram();
// if( program )
// {
// program->applyUniform( this );
// }
}
bool Uniform::set( float f ) bool Uniform::set( float f )
{ {
if( ! isCompatibleType( Value::FLOAT ) ) return false; if( ! isCompatibleType( Value::FLOAT ) ) return false;

View File

@ -60,6 +60,5 @@ BEGIN_ENUM_REFLECTOR(osg::StateAttribute::Type)
EnumLabel(osg::StateAttribute::TEXTURE_SHADER); EnumLabel(osg::StateAttribute::TEXTURE_SHADER);
EnumLabel(osg::StateAttribute::VERTEX_PROGRAM); EnumLabel(osg::StateAttribute::VERTEX_PROGRAM);
EnumLabel(osg::StateAttribute::REGISTER_COMBINERS); EnumLabel(osg::StateAttribute::REGISTER_COMBINERS);
EnumLabel(osg::StateAttribute::PROGRAM);
EnumLabel(osg::StateAttribute::PROGRAM_PARSER); EnumLabel(osg::StateAttribute::PROGRAM_PARSER);
END_REFLECTOR END_REFLECTOR