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. 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. More...

Inheritance diagram for ShaderGenerator:
TypedReferenceCount TypedObject ReferenceCount MemoryBase MemoryBase

Public Member Functions

 __init__ (GraphicsStateGuardianBase gsg, GraphicsOutputBase host)
 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. More...
 
const ShaderAttrib synthesizeShader (const RenderState rs)
 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. More...
 
- Public Member Functions inherited from TypedObject
TypeHandle getType ()
 Derived classes should override this function to return get_class_type(). More...
 
int getTypeIndex ()
 Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. This is equivalent to get_type().get_index(). 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. User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically. More...
 
bool testRefCountIntegrity ()
 Does some easy checks to make sure that the reference count isn't completely bogus. Returns true if ok, false otherwise. More...
 
bool testRefCountNonzero ()
 Does some easy checks to make sure that the reference count isn't zero, or completely bogus. Returns true if ok, false otherwise. More...
 
bool unref ()
 Explicitly decrements the reference count. Note that the object will not be implicitly deleted by unref() simply because the reference count drops to zero. (Having a member function delete itself is problematic.) However, see the helper function unref_delete(). 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 ()
 

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__()

__init__ ( GraphicsStateGuardianBase  gsg,
GraphicsOutputBase  host 
)

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.

◆ getClassType()

static TypeHandle getClassType ( )
static

◆ synthesizeShader()

const ShaderAttrib synthesizeShader ( const RenderState  rs)

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, but not 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

Not yet supported:

  • dot3_rgb and dot3_rgba combine modes

Potential optimizations

  • omit attenuation calculations if attenuation off