Base
object for representing shader data.
Synopsis
#include <AlShader.h>
class AlShader : public AlObject , public AlAnimatable
AlShader();
virtual ~AlShader();
virtual statusCode deleteObject();
virtual AlObject *copyWrapper() const;
statusCode create();
virtual AlObjectType type() const;
virtual const char* name() const;
virtual statusCode setName( const char * );
statusCode parameter( const AlShadingFields, double& ) const;
statusCode setParameter( const AlShadingFields, const double );
statusCode blindData( int, long& , const char*& );
statusCode setBlindData( int, long, const char* );
statusCode removeBlindData( int user_type );
const char* shadingModel() const;
statusCode setShadingModel( const char* );
AlTexture* firstTexture() const;
AlTexture* nextTexture( const AlTexture* ) const;
statusCode nextTextureD( AlTexture* ) const;
AlList* fields() const;
AlList* mappedFields() const;
statusCode addTexture( const char*, const char*, AlTexture** returnedTexture = NULL );
statusCode removeTexture( const char* );
statusCode applyIteratorToTextures( AlIterator*, int& );
AlShader* copyObject();
boolean isUsed();
AlShader* convertSolidToFileTexture( AlDagNode *, int ,boolean , const char * );
AlShader* convertEnvironmentToFileTexture( int , const char *, AlPixFile::Format, boolean );
Description
This class encapsulates
the basic functionality for checking and setting the name of a shader
as well as accessing the textures that a particular shader refers
to, and the animation on the shader. Shader objects are accessible
through both the AlUniverse class and the objects that reference
them (AlSurface and AlFace classes).
A shader object may reference
textures. The firstTexture() and nextTexture() methods are used
to access these textures.
firstTexture() returns
the first texture that the shader object references. nextTexture() moves
from a given referenced texture to the next texture in order, as
related to the shader object. (See the similar methods for the AlTexture/AlEnvironment classes.)
The animation on a shader
can be accessed through the firstChannel() and nextChannel() methods.
All the channels on the shader can be deleted by calling deleteAnimation().
The shader parameters
can be accessed through the parameter() and setParameter() methods.
Each shader has a specific set of parameters that are valid for
it that depend on its type. The full list of shader parameters can
be seen in the file AlShadingFields.h. For example, all parameters
specific to the Blinn shader have names of the form kFLD_SHADING_BLINN_*.
Parameters common to all shaders have the form kFLD_SHADING_COMMON_*.
All parameters are treated as doubles even though this may not
necessarily be what they are. This is done to make the interface
as simple and consistent as possible.
AlShader::AlShader()
Description
Constructs an AlShader wrapper object. Use
the create() method to initialize an AlShader.
AlShader::~AlShader()
Description
Deletes an AlShader wrapper object.
statusCode AlShader::create()
Description
Does
any initialization and allocation of data for an AlShader. Allocates
space for this AlShader and adds it to the global list of shaders
in AlUniverse. The shader is initialized as the Alias default
shader.
Return Codes
sSuccess - creation succeeded
sInsufficientMemory -
not enough memory available
statusCode AlShader::deleteObject()
Description
Deletes
the AlShader and the AlTextures hanging off of the shader. All objects
that were assigned this shader will be assigned the default shader.
Note that after this operation, any pointers to AlTextures that
had been part of this shader will no longer be valid.
Return Codes
sSuccess - shader was
deleted
sFailure - shader was
not deleted
sInvalidObject - the
shader was invalid
AlObject *AlShader::copyWrapper()
const
Description
Returns
an exact duplicate of this AlShader wrapper.
AlObjectType AlShader::type()
const
Description
Returns
the class identifier ’kShaderType’.
const char* AlShader::name()
const
Description
Returns
the name of the shader.
statusCode AlShader::setName(
const char *newName)
Description
Changes the name of the shader
to a new name. If the given name is not a unique one or contains
illegal characters, then a new unique name is generated based on
the given name and assigned to the shader. In this case, a status
code of sNameChangedToUniqueOne is returned. It is illegal for the
new name to be NULL. #, digits, upper case letters, lower case letters,
and _ are valid characters
Arguments
< newName - new name
of the object
Return Codes
sSuccess - name was changed
sInvalidArgument - ’newName’
was NULL
sInvalidObject - the
shader is invalid
sNameChangedToUniqueOne
- name was changed to be a unique version of the given name
sFailure - name was not
changed
statusCode AlShader::parameter(
const AlShadingFields field,double& result )const
Description
Finds
the value of a given shader field.
Arguments
< field - shader field
type
> result - returned
result of the field
Return Codes
sSuccess - field was
returned
sInvalidArgument - field
was not legal for this shader
sFailure - field could
not be returned
sInvalidObject - the
shader is invalid
statusCode AlShader::setParameter(
const AlShadingFields field,const double value )
Description
Changes
the value of the shader field. If the given field is not valid then
a status code of sInvalidArgument is returned.
Arguments
< field - shader field
type
< value - new value
that the shader field is to take
Return Codes
sSuccess - field was
changed
sInvalidArgument - field
was not legal for this shader
sFailure - field could
not be changed
sInvalidObject - the
shader is invalid
const char* AlShader::shadingModel()
const
Description
Returns
a string representing the shading model. The returned string will
be one of BLINN, PHONG, LAMBERT, or LIGHTSOURCE.
statusCode AlShader::setShadingModel(
const char* model )
Description
Tries to set the shading model of
the shader. The model must be one of LIGHTSOURCE, LAMBERT, BLINN,
or PHONG.
Return Codes
sSuccess - the shading
model was successfully set
sInvalidArgument - the
given string is not a shading model
sInvalidObject - the
shader is not valid
AlTexture* AlShader::firstTexture()
const
Description
Returns
the first texture that this shader object references. If there are
none then NULL is returned.
AlTexture* AlShader::nextTexture(
const AlTexture* last_texture ) const
Description
Returns the texture
after the given one in the shader’s texture list. Specifying NULL
as parameter will return the first texture.
Arguments
< last_texture - texture
from which to walk forward
statusCode AlShader::nextTextureD(
AlTexture* last_texture ) const
Description
Destructively points
the last_texture wrapper to the next texture after the given one
in the shader’s texture list.
Arguments
<> last_texture
- texture from which to walk forward
Return Codes
sSuccess - the wrapper
points to the next texture
sInvalidArgument - ’last_texture’
was invalid or NULL
sFailure - there is no
next texture
sInvalidObject - the
shader is invalid
AlList* AlShader::fields()
const
Description
Returns
an AlList of AlShadingFieldItems, each of which contains an AlShadingFields value
valid for this shader.
AlList* AlShader::mappedFields()
const
Description
Returns
an AlList of AlMappedFieldItems, each of which contains a character
string identifier identifying a field on this shader which may be
texture mapped. Note that these strings are identical to the SDL
identifiers and the complete list can be found in the SDL manual.
statusCode AlShader::removeTexture(
const char* fieldName )
Description
Removes a texture from a particular
field of the AlShader. The first argument is the name of the field
which will have the texture applied to it. Only those fields valid
for this shader should be provided; any others will cause this method
to fail. Valid fields are any returned by the fields() method.
Arguments
< fieldName - name
of the field which will have the texture removed from it
Return Codes
sSuccess - the texture
was added successfully
sFailure - no texture
was present
sCannotDelete - a texture
already existed on the field which could not be deleted
sInvalidArgument - the
argument was not valid for the shader
sInvalidObject - the
shader is invalid
statusCode AlShader::addTexture(
const char* fieldName, const char* textureName, AlTexture** returnCreatedTexture
)
Description
Adds a texture to a particular field of the AlShader.
The first argument is the name of the field which will have the
texture applied to it. Only those fields valid for this shader should
be provided; any others will cause this method to fail. Valid fields
are any returned by the fields() method. The second argument is
the name of the texture type to apply to the field. The complete
list of names is available in the SDL manual.
Note: most of these names
are also found on the widgets themselves (for example, ’sRock’ or
’Fractal’)
For example, to add shaders
to the ’color’ fields, one would use commands such as
shader->addTexture( "color", "sRock" ) shader->addTexture( "color", "Fractal" )
Arguments
< fieldName - name
of the field which will have the texture applied to it
< textureName - name
of the texture type to apply to the field
> returnCreatedTexture
- returns the created texture if not NULL
Return Codes
sSuccess - the texture
was added successfully
sFailure - the texture
was not added
sCannotDelete - a texture
already existed on the field which could not be deleted
sInvalidArgument - either
argument was not valid for the shader
sInvalidObject - the
shader is invalid
statusCode AlShader::applyIteratorToTextures(
AlIterator *iter, int &rc )
Description
Applies the given AlIterator
to all textures in the shader. The second argument will be set to
the return value of the last application of the iterator’s function.
See the AlIterator class for
more information.
Arguments
< iter - the iterator
to apply
> rc - the return
value of the last application of the iterator
Return Codes
sSuccess - the application
of the iterator terminated normally
sFailure - the application
of the iterator terminated abnormally
sInvalidObject - the
shader is invalid
sInvalidArgument - the
iterator was NULL
AlShader *AlShader::copyObject()
Description
Copies
this AlShader returning a pointer to the new copy or NULL if the
copy failed.
boolean AlShader::isUsed()
Description
Returns
TRUE if the shader is being used by another object. Return value
is FALSE otherwise.
statusCode AlShader::blindData(
int user_type, long& size, const char *& data )
Description
Obtains the size and
address of a block of data associated with the object. If there
is no data, then the size will be zero and the address of the data
is NULL.
User_types between 0
and 13099 are reserved. If you would like to reserve a block of "user_types"
please contact us.
Arguments
< user_type - user
type of the data desired
> size - number of
characters in the block of data
> data - address of
the block of data
Return Codes
sSuccess - blind data
retrieved
sFailure - blind data
not retrieved
sInvalidObject - the
polygon was invalid
statusCode AlShader::setBlindData(
int user_type, long size, const char * data )
Description
Associates
a block of data with the object. If a block of data is already associated
with this object and this user_type, the old block is replaced by
a reference to the new block. The old block of data is not deleted.
Arguments
< user_type - user
type of the blind data desired
< size - number of
characters in the block
< data - address of
the block of data
Return Codes
sSuccess - everything
is okay
sInsufficientMemory -
not enough memory to allocate a new block
sFailure - create has
not been called on this object yet
sInvalidObject - the
polygon is invalid
statusCode AlShader::removeBlindData(
int user_type )
Description
Removes the block of
data of the given type from the object.
Note that the user is
still responsible for the memory associated with this block of data.
Arguments
< user_type - user
type of the blind desired
Return Codes
sSuccess - everything
is okay
sFailure - no such blind
data existed
sInvalidObject - the
given object was not valid
AlShader* AlShader::convertSolidToFileTexture(
AlDagNode *dagNode, int resolution, boolean antiAlias, const char
* pixFilename )
Description
If the current shader
has a solid texture, this method copies this shader and converts
the solid texture to a file texture for the specified dag node object.
A pix file is created for the file texture using the resolution
and anti-aliasing parameters specified. On failure, this method
returns NULL.
Notes:
1. Valid resolutions
are 8 .. 1024
2. This method will fail
if either dagNode or pixFilename are NULL
3. dagNode should be
a valid API pointer
Arguments
< dagNode - dag node
that the solid texture is applied to
< resolution - size
of output pix map
< antiAlias - either
TRUE or FALSE
< pixFileName - where
to place the converted file
AlShader* AlShader::convertEnvironmentToFileTexture(int resolution,
const char * pixFilename, AlPixFile::Format pixFmt, boolean imageMap
)
Description
If the current shader
has an environment texture, this method copies this shader and converts
the environment texture to a file texture. A pix file is created
for the file texture using the resolution parameter specified. On
failure, this method returns NULL.
Arguments
< resolution - x &
y size of output pix map
< pixFileName - where
to place the converted file
< map -