intuitiv'3d API documentation Copyright ã1993 by Cub'x SystÜmes. All Rights Reserved.

CX3DShader 

Inherits From:	ObjectView : View  : Responder : Object

Declared In:	i3d/CX3DShader.h

Class Description

CX3DShader is the object representation of Renderman shaders inside intuitiv'3d. Shaders are written using the Shading Language and compiled using the shaders application.  A CX3DShader contains the name of the Renderman Shader it stands for and the parameters used when rendering. A shader instance is inspected by the Shader Panel of intuitiv'3d. CX3DShader is also an abstract super-class allowing you to provide some pre-rendering for shaders and special inspectors for one or more parameter of the shader.

Instance Variables

  char 	className [CLASS_NAME_SIZE];
  CXShaderType   	type;
  CXRenderType   	renderType;
  int            	argCount;
  CXArg          	*arg;
  BOOL 	canRender;
  float 	scale[3];
  float 	dispBound;

className 	The className of a shader is the name of the Renderman shader used when rendering.

 type 	The type of shader. (Surface , displacement, light, ... )

renderType	How the shader should be rendered. Today, this is important for light shaders since more than one Renderman function can be used.

argCount	Number of arguments for the shader.

arg	Argument array.

canRender	This boolean value is equal to YES if the rendering is possible and NO if an information is missing.

scale	The scale used just before rendering the shader.

dispBound	The displacement bound used just before rendering a shader. Only displacement shaders are using displacement bound.
Method Types

Initializing,  freeing and copying
	+ (ExportedVariable*) exportedVariable
	- init
	- initWithShaderClassName:
	- copy
	- initParametersFromShader: anObject
	- free

Rendering
	- preRender:
	- postRender:
	- render

Attributes
	- setOwner:
	- owner
	- setDisplacementBound:
	- displacementBound
	- setScaleX:Y:Z:
	- getScaleX:Y:Z:
	- setShaderRenderType:
	- setDefaultShaderRenderType
	- shaderRenderType
	- argCount
	- argArray
	
Information about the shader
	- renderTypeCompatible:
	- className
	- type

Inspector
	- inspectorClass

Archiving
	- read:
	- write:
	- awake

Miscellaneous
	- calcSum

Class Methods

exportedVariable
	+ (ExportedVariable*) exportedVariable
This method returns a description of instance variable that must be saved or loaded.
 
See also: ExportedVariable.rtf in the Functions folder. 

Instance Methods
argCount
	- (unsigned int) argCount
This methods returns the number of argument that the receiver is using.

See also: - argArray, the file CX3DShader.rtf in the TypesAndConstants folder.

argArray
	- (CXArg*) argArray
This method returns the arguments currently used by the receiver. You can discover the number of argument by using the - argCount method. 

See also: - argCount, the file CX3DShader.rtf in the TypesAndConstants folder.

awake
	- awake
This method is called just after unarchiving an object. If you want to initialize some unsaved instance variable, you have to overload this method. Always call [super awake] in your implementation. 

See also: - read , - write 

calcSum
	- (unsigned int) calcSum
This method is used by intuitiv'3d to discover if a scene has changed. The default implementation of this method calculates the sum of all instance variable. If your new subclass has some id instance variables, you should overload this method to count that instance variable contents.

copy
	- copy
Duplicates the receiver. Return the new instance. You should overload this method and duplicate your own instance variable.  Your implementation of - copy should call [super copy].

className
	- (const char*) className
This method returns the class (the Renderman shader's name) used by the receiver.

See also: - initWithShaderClassName:

displacementBound
	- (float) displacementBound
This method returns the value of the displacementBound instance variable.

See also: - setDisplacementBound 

free
	- free
Free the memory used by the receiver.  You should overload this method in order to free the memory used by your own instance variables.

getScaleX:Y:Z
	- getScaleX:(float*) x Y:(float*) y Z:(float*) z
This function fill the x,y and z pointer with the value of the receiver's scale instance variable.  

init
	- init
Initializes and returns the receiver, a new CX3Shader instance. The subclass should overload the - init method to initialize its new instance variables. Subclass's version of - init should began with a [super init] call. 

See also: - initWithShaderClassName: 

initParametersFromShader: 
	- initParametersFromShader: anObject
This method initialize the receiver's argument array with the values used by anObject. anObject and the receiver should use the same Renderman shader (className instance variables should be the same).

initWithShaderClassName:
	- initWithShaderClassName:(const char*)  aName
This method call the - init method and then initializes the receiver with all information needed to use the shader aName. The shader is useable after this call. Shader's parameters are initialized with there default values.
Returns the receiver. 

See also: - init , - className

inspectorClass
	- inspectorClass
This method should return the inspector used by the receiver. You must overload this method if you want to write a better inspector for your new shader. The default implementation returns [CX3DGenericShaderInspector class].

owner
	- owner
This method returns the owner of the receiver.

See also: - setOwner 

postRender
	- postRender: aDisplayer
This method is called by the rendering pipeline to allow the receiver to free any memory allocated by the preRender: method or to erase any file created by the preRender: method. The default implementation of postRender: does nothing.

See also: The file Concepts/Rendering.rtf , - preRender, - render

preRender
	- preRender: aDisplayer
This method is called by the rendering pipeline to allow the receiver to perform its pre-rendering operations. The default implementation of - preRender does nothing. aDisplayer is the Displayer instance that manage the rendering.

See also:The file Concepts/Rendering.rtf, - postRender: , - render

read
	- read:(NXTypedStream*) stream
This method is used by the archiving system. The default implementation of this method call the evReadVariableForObject() function. You have to overload this method only if your instance variables cannot be managed by the exported variable features. 

See also: ExportedVariable.rtf in the Functions folder., - write, - awake 

render
	- render
The render method is called by the rendering pipeline to ask the receiver to set in the Renderman graphic context the shader className with parameters in the arg instance variable. The default version of this method is able to render any shader. You have to overload this method if you want to use some pre-rendering. 

See also: - preRender: , -postRender

renderTypeCompatible:
	- (BOOL) renderTypeCompatible:(CXRenderType) renderType
This method allows you to discover if a render type is useable by the receiver. This method is used by the shader itself and you don't have to use this method directly.

setDefaultShaderRenderType
	- setDefaultShaderRenderType
This method sets the  default Renderman function that can be used according to the receiver's type to render the shader. The renderType instance variable defines which Renderman function will be used in order to render the shader.  The following table shows how this initialization is performed.

	Type	Function
	CXSTSurface 	CXRTSurface
	CXSTLight	CXRTAeraLight	CXSTDisplacement	CXRTDisplacement
	CXSTVolume	CXRTVolume
	Other type	CXRTUndefined	

See also: - setRenderType:, - shaderRenderType , the file CX3DShader.rtf in the TypesAndConstants folder.

setDisplacementBound:
	- setDisplacementBound:(float) aValue
This method affects the contents of the displacementBound instance variable. This value is given when rendering to the function RiAttribute with the "bound" parameter. This is useful for displacement mapping.

See also: - displacementBound, RiAttribute

setOwner:
	- setOwner: anObject
This method sets the shader owner. The shader is applied onto its owner.A nil owner means no owner.

See also: - owner 

setScaleX:Y:Z:	- setScaleX:(float) x Y: (float) y Z: (float) z
This method affects the contents of the scale instance variable. The scale instance variable is applied to the graphic context just before rendering the shader.

See also: - getScaleX:Y:Z 

setShaderRenderType:
	- setShaderRenderType:(CXRenderType) renderType
This methods sets the value of the renderType instance variable. The renderType instance variable defines which Renderman function will be used in order to render the shader. Returns the receiver.

See also: - setDefaultShaderRenderType, - shaderRenderType,the file CX3DShader.rtf in the TypesAndConstants folder.

shaderRenderType
	- (CXRenderType) shaderRenderType
This method returns the receiver's shader render type.

See also: - setDefaultShaderRenderType, - setShaderRenderType,the file CX3DShader.rtf in the TypesAndConstants folder. 

type
	- (CXShaderType) type
This method returns the type of the receiver. The type of a CX3DShader is defined by the type of its class. This variable is affected only during the call - initWithShaderClassName:.

See also: the file CX3DShader.rtf in the TypesAndConstants folder. 

write
	- write:(NXTypedStream*) stream
This method is used by the archiving system. The default implementation of this method calls the evWriteVariableForObject() function. You have to overload this method only if your instance variables cannot be managed by the exported variable features. 

See also: ExportedVariable.rtf in the Functions folder., - read, - awake