Panda3D
Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes
ShaderGenerator Class Reference

The ShaderGenerator is a device that effectively replaces the classic fixed function pipeline with a 'next-gen' fixed function pipeline. More...

#include "shaderGenerator.h"

Inheritance diagram for ShaderGenerator:
TypedObject MemoryBase

List of all members.

Public Member Functions

 ShaderGenerator (PT(GraphicsStateGuardianBase) gsg, PT(GraphicsOutputBase) host)
 Create a ShaderGenerator.
virtual ~ShaderGenerator ()
 Destroy a ShaderGenerator.
virtual CPT (RenderAttrib) synthesize_shader(const RenderState *rs)
virtual TypeHandle force_init_type ()
virtual TypeHandle get_type () const

Static Public Member Functions

static TypeHandle get_class_type ()
static void init_type ()
 This function is declared non-inline to work around a compiler bug in g++ 2.96.

Protected Member Functions

char * alloc_freg ()
 Allocate a freg.
char * alloc_vreg ()
 Allocate a vreg.
void analyze_renderstate (const RenderState *rs)
 Analyzes the RenderState prior to shader generation.
void clear_analysis ()
 Called after analyze_renderstate to discard all the results of the analysis.
 CPT (RenderAttrib) create_shader_attrib(const string &txt)
 CPT (RenderState) _state
 PT (Texture) update_shadow_buffer(NodePath light_np)
 PT (GraphicsStateGuardianBase) _gsg
 PT (GraphicsOutputBase) _host
void reset_register_allocator ()
 Clears the register allocator.

Static Protected Member Functions

static const string combine_mode_as_string (CPT(TextureStage) stage, TextureStage::CombineMode c_mode, bool alpha, short texindex)
 This 'synthesizes' a combine mode into a string.
static const string combine_source_as_string (CPT(TextureStage) stage, short num, bool alpha, bool single_value, short texindex)
 This 'synthesizes' a combine source into a string.
static const string texture_type_as_string (Texture::TextureType ttype)
 Returns 1D, 2D, 3D or CUBE, depending on the given texture type.

Protected Attributes

pvector< AmbientLight * > _alights
pvector< NodePath_alights_np
bool _auto_gloss_on
bool _auto_glow_on
bool _auto_normal_on
bool _auto_ramp_on
bool _auto_shadow_on
bool _calc_primary_alpha
bool _disable_alpha_write
pvector< DirectionalLight * > _dlights
pvector< NodePath_dlights_np
int _fcregs_used
bool _flat_colors
bool _fog
int _ftregs_used
pmap< WCPT(RenderState), CPT(ShaderAttrib)> _generated_shaders
bool _have_alpha_blend
bool _have_alpha_test
bool _have_ambient
bool _have_diffuse
bool _have_emission
bool _have_specular
bool _lighting
bool _map_height_in_alpha
int _map_index_gloss
int _map_index_glow
int _map_index_height
int _map_index_normal
Material_material
bool _need_eye_normal
bool _need_eye_position
bool _need_material_props
bool _need_world_normal
bool _need_world_position
int _num_clip_planes
int _num_textures
bool _out_aux_any
bool _out_aux_glow
bool _out_aux_normal
bool _out_primary_glow
pvector< PointLight * > _plights
pvector< NodePath_plights_np
bool _separate_ambient_diffuse
bool _shadows
pvector< Spotlight * > _slights
pvector< NodePath_slights_np
bool _subsume_alpha_test
bool _use_shadow_filter
int _vcregs_used
bool _vertex_colors
int _vtregs_used

Detailed Description

The ShaderGenerator is a device that effectively replaces the classic fixed function pipeline with a 'next-gen' fixed function pipeline.

The next-gen fixed function pipeline supports features like normal mapping, gloss mapping, cartoon lighting, and so forth. It works by automatically generating a shader from a given RenderState.

Currently, there is one ShaderGenerator object per GraphicsStateGuardian. It is our intent that in time, people will write classes that derive from ShaderGenerator but which yield slightly different results.

The ShaderGenerator owes its existence to the 'Bamboo Team' at Carnegie Mellon's Entertainment Technology Center. This is a group of students who, as a semester project, decided that next-gen graphics should be accessible to everyone, even if they don't know shader programming. The group consisted of:

Aaron Lo, Programmer Heegun Lee, Programmer Erin Fernandez, Artist/Tester Joe Grubb, Artist/Tester Ivan Ortega, Technical Artist/Tester

Thanks to them!

Definition at line 67 of file shaderGenerator.h.


Constructor & Destructor Documentation

Create a ShaderGenerator.

This has no state, except possibly to cache certain results. The parameter that must be passed is the GSG to which the shader generator belongs.

Definition at line 54 of file shaderGenerator.cxx.

Destroy a ShaderGenerator.

Definition at line 64 of file shaderGenerator.cxx.


Member Function Documentation

char * ShaderGenerator::alloc_freg ( ) [inline, protected]

Allocate a freg.

Definition at line 134 of file shaderGenerator.cxx.

char * ShaderGenerator::alloc_vreg ( ) [inline, protected]

Allocate a vreg.

Definition at line 88 of file shaderGenerator.cxx.

void ShaderGenerator::analyze_renderstate ( const RenderState rs) [protected]
void ShaderGenerator::clear_analysis ( ) [protected]

Called after analyze_renderstate to discard all the results of the analysis.

This is generally done after shader generation is complete.

Definition at line 464 of file shaderGenerator.cxx.

Referenced by analyze_renderstate().

const string ShaderGenerator::combine_mode_as_string ( CPT(TextureStage stage,
TextureStage::CombineMode  c_mode,
bool  alpha,
short  texindex 
) [static, protected]

This 'synthesizes' a combine mode into a string.

Definition at line 1471 of file shaderGenerator.cxx.

References combine_source_as_string().

const string ShaderGenerator::combine_source_as_string ( CPT(TextureStage stage,
short  num,
bool  alpha,
bool  single_value,
short  texindex 
) [static, protected]
static void ShaderGenerator::init_type ( ) [inline, static]

This function is declared non-inline to work around a compiler bug in g++ 2.96.

Making it inline seems to cause problems in the optimizer.

Reimplemented from TypedObject.

Definition at line 163 of file shaderGenerator.h.

References TypedObject::init_type().

Clears the register allocator.

Initially, the pool of available registers is empty. You have to add some if you want there to be any.

Definition at line 75 of file shaderGenerator.cxx.

const string ShaderGenerator::texture_type_as_string ( Texture::TextureType  ttype) [static, protected]

Returns 1D, 2D, 3D or CUBE, depending on the given texture type.

Definition at line 1607 of file shaderGenerator.cxx.


The documentation for this class was generated from the following files:
 All Classes Functions Variables Enumerations