Panda3D
Public Member Functions | Static Public Member Functions | List of all members
ShaderGenerator Class Reference

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

Inheritance diagram for ShaderGenerator:
TypedReferenceCount TypedObject ReferenceCount

Public Member Functions

 __init__ (const GraphicsStateGuardianBase gsg)
 Create a ShaderGenerator. More...
 
 __init__ (const ShaderGenerator)
 
 clearGeneratedShaders ()
 Removes all previously generated shaders, requiring all shaders to be regenerated. More...
 
 rehashGeneratedShaders ()
 Rehashes all the states with generated shaders, removing the ones that are no longer fresh. More...
 
const ShaderAttrib synthesizeShader (const RenderState rs, const GeomVertexAnimationSpec anim)
 This is the routine that implements the next-gen fixed function pipeline by synthesizing a shader. More...
 
- Public Member Functions inherited from TypedObject
TypeHandle getType ()
 
int getTypeIndex ()
 Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. More...
 
bool isExactType (TypeHandle handle)
 Returns true if the current object is the indicated type exactly. More...
 
bool isOfType (TypeHandle handle)
 Returns true if the current object is or derives from the indicated type. More...
 
- Public Member Functions inherited from ReferenceCount
int getRefCount ()
 Returns the current reference count. More...
 
 ref ()
 Explicitly increments the reference count. More...
 
bool testRefCountIntegrity ()
 Does some easy checks to make sure that the reference count isn't completely bogus. More...
 
bool testRefCountNonzero ()
 Does some easy checks to make sure that the reference count isn't zero, or completely bogus. More...
 
bool unref ()
 Explicitly decrements the reference count. More...
 

Static Public Member Functions

static TypeHandle getClassType ()
 
- Static Public Member Functions inherited from TypedReferenceCount
static TypeHandle getClassType ()
 
- Static Public Member Functions inherited from TypedObject
static TypeHandle getClassType ()
 
- Static Public Member Functions inherited from ReferenceCount
static TypeHandle getClassType ()
 

Additional Inherited Members

- Public Attributes inherited from TypedObject
TypeHandle type
 Returns the TypeHandle representing this object's type. More...
 
- Public Attributes inherited from ReferenceCount
int ref_count
 The current reference count. More...
 

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!

Member Function Documentation

◆ __init__() [1/2]

__init__ ( const GraphicsStateGuardianBase  gsg)

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.

◆ __init__() [2/2]

__init__ ( const  ShaderGenerator)

◆ clearGeneratedShaders()

clearGeneratedShaders ( )

Removes all previously generated shaders, requiring all shaders to be regenerated.

Does not clear cache of compiled shaders.

Since
1.10.0

◆ getClassType()

static TypeHandle getClassType ( )
static

◆ rehashGeneratedShaders()

rehashGeneratedShaders ( )

Rehashes all the states with generated shaders, removing the ones that are no longer fresh.

Call this if certain state has changed in such a way as to require a rerun of the shader generator. This should be rare because in most cases, the shader generator will automatically regenerate shaders as necessary.

Since
1.10.0

◆ synthesizeShader()

const ShaderAttrib synthesizeShader ( const RenderState  rs,
const GeomVertexAnimationSpec  anim 
)

This is the routine that implements the next-gen fixed function pipeline by synthesizing a shader.

It also takes care of setting up any buffers needed to produce the requested effects.

Currently supports:

  • flat colors
  • vertex colors
  • lighting
  • normal maps, even multiple
  • gloss maps, but not multiple
  • glow maps, but not multiple
  • materials, but not updates to materials
  • 2D textures
  • all texture stage modes, including combine modes
  • color scale attrib
  • light ramps (for cartoon shading)
  • shadow mapping
  • most texgen modes
  • texmatrix
  • 1D/2D/3D textures, cube textures, 2D tex arrays
  • linear/exp/exp2 fog
  • animation

Potential optimizations

  • omit attenuation calculations if attenuation off