ShaderGen Class Reference

#include <shaderGen.h>

List of all members.


Detailed Description

The ShaderGen class takes shader feature data (usually created by MatInstance) and creates a vertex/pixel shader pair in text files to be later compiled by a shader manager.

It accomplishes this task by creating a group of shader "components" and "features" that output bits of high level shader code. Shader components translate to structures in HLSL that indicate incoming vertex data, data that is output from the vertex shader to the pixel shader, and data such as constants and textures that are passed directly to the shader from the app.

Shader features are separable shader functions that can be turned on or off. Examples would be bumpmapping and specular highlights. See GFXMaterialFeatureData for the current list of features supported.

ShaderGen processes all of the features that are present for a desired shader, and then prints them out to the respective vertex or pixel shader file.

For more information on shader features and components see the ShaderFeature and ShaderComponent classes.


Public Types

typedef Delegate< void(ShaderGen *)> ShaderGenInitDelegate
 Parameter 1 is the ShaderGen instance to initialize.

Public Member Functions

virtual ~ShaderGen ()
void registerInitDelegate (GFXAdapterType adapterType, ShaderGenInitDelegate &initDelegate)
 Register an initialization delegate for adapterType.
void generateShader (const GFXMaterialFeatureData &featureData, char *vertFile, char *pixFile, F32 *pixVersion, GFXVertexFlags flags, U32 assignNum)
 vertFile and pixFile are filled in by this function.
GFXShadergetShader (GFXMaterialFeatureData &dat, GFXVertexFlags flags)
virtual void flushProceduralShaders ()
void setPrinter (ShaderGenPrinter *printer)
void setComponentFactory (ShaderGenComponentFactory *factory)
void setFileEnding (String ending)

Static Public Member Functions

static ShaderGenget ()
 Singleton get.

Private Types

typedef Map< U32, GFXShader * > ShaderMap
 Map of features -> shaders.

Private Member Functions

 ShaderGen ()
bool _handleGFXEvent (GFXDevice::GFXDeviceEventType event)
void initShaderGen ()
 Causes the init delegate to be called.
void _init ()
void _uninit ()
void _createComponents ()
 Creates all the various shader components that will be filled in when the shader features are processed.
void _printFeatureList (Stream &stream)
void _printFeatures (Stream &stream)
 print out the processed features to the file stream
void _printDependencies (Stream &stream)
void _processPixFeatures ()
void _printPixShader (Stream &stream)
void _processVertFeatures ()
void _printVertShader (Stream &stream)

Private Attributes

GFXMaterialFeatureData mFeatureData
GFXVertexFlags mVertFlags
Vector< ShaderComponent * > mComponents
AutoPtr< ShaderGenPrintermPrinter
AutoPtr< ShaderGenComponentFactorymComponentFactory
String mFileEnding
bool mInit
 Init.
ShaderGenInitDelegate mInitDelegates [GFXAdapterType_Count]
bool mRegisteredWithGFX
Torque::FS::FileSystemRef mMemFS
ShaderMap mProcShaders

Static Private Attributes

static ShaderGensmShaderGen


Member Typedef Documentation

Parameter 1 is the ShaderGen instance to initialize.

typedef Map<U32, GFXShader*> ShaderGen::ShaderMap [private]

Map of features -> shaders.


Constructor & Destructor Documentation

virtual ShaderGen::~ShaderGen (  )  [virtual]

ShaderGen::ShaderGen (  )  [private]


Member Function Documentation

static ShaderGen* ShaderGen::get (  )  [static]

Singleton get.

void ShaderGen::registerInitDelegate ( GFXAdapterType  adapterType,
ShaderGenInitDelegate initDelegate 
)

Register an initialization delegate for adapterType.

This should setPrinter/ComponentFactory/etc, and register shader features.

void ShaderGen::generateShader ( const GFXMaterialFeatureData featureData,
char *  vertFile,
char *  pixFile,
F32 pixVersion,
GFXVertexFlags  flags,
U32  assignNum 
)

vertFile and pixFile are filled in by this function.

They point to the vertex and pixel shader files. pixVersion is also filled in by this function.

Parameters:
assignNum used to assign a specific number as the filename

GFXShader* ShaderGen::getShader ( GFXMaterialFeatureData dat,
GFXVertexFlags  flags 
)

virtual void ShaderGen::flushProceduralShaders (  )  [virtual]

void ShaderGen::setPrinter ( ShaderGenPrinter printer  )  [inline]

void ShaderGen::setComponentFactory ( ShaderGenComponentFactory factory  )  [inline]

void ShaderGen::setFileEnding ( String  ending  )  [inline]

bool ShaderGen::_handleGFXEvent ( GFXDevice::GFXDeviceEventType  event  )  [private]

void ShaderGen::initShaderGen (  )  [private]

Causes the init delegate to be called.

void ShaderGen::_init (  )  [private]

void ShaderGen::_uninit (  )  [private]

void ShaderGen::_createComponents (  )  [private]

Creates all the various shader components that will be filled in when the shader features are processed.

void ShaderGen::_printFeatureList ( Stream stream  )  [private]

void ShaderGen::_printFeatures ( Stream stream  )  [private]

print out the processed features to the file stream

void ShaderGen::_printDependencies ( Stream stream  )  [private]

void ShaderGen::_processPixFeatures (  )  [private]

void ShaderGen::_printPixShader ( Stream stream  )  [private]

void ShaderGen::_processVertFeatures (  )  [private]

void ShaderGen::_printVertShader ( Stream stream  )  [private]


Member Data Documentation

ShaderGen* ShaderGen::smShaderGen [static, private]

Init.

ShaderGenInitDelegate ShaderGen::mInitDelegates[GFXAdapterType_Count] [private]